🧠 Le phishing moderne qui te fait l’affaire tout seul

Tu pensais que le phishing passait par des formulaires moisis et des fautes d’orthographe ? RĂ©veille-toi. Le device code phishing est l’arnaque qui te fait cliquer sur « Autoriser » pendant que l’attaquant rĂ©colte un jeton valable. Pas de mot de passe. Pas de craquage. Juste toi, qui crois bien faire.

Pendant ce temps, les attaquants piochent aussi dans un vivier plus discret mais tout aussi meurtrier : les tokens d’API/OAuth — ces clĂ©s qu’on laisse vivre Ă©ternellement dans des scripts, pipelines ou comptes abandonnĂ©s. Si tu veux comprendre pourquoi ça sent pas bon, lis ce dossier sur les tokens et les fuites SaaS. secuslice – blog cybersĂ©curitĂ©


🎭 Le scĂ©nario en clair — Ă©lĂ©gant, propre, efficace

  1. L’attaquant t’envoie un message ou t’ouvre une page qui te demande un code à quatre/six chiffres.
  2. Tu copies-colles le code depuis le mail/Teams/Slack vers une page qui ressemble Ă  celle de ton IdP.
  3. Le flux OAuth Ă©change ce code contre un token. L’attaquant l’obtient, et toi tu repars boire ton cafĂ©.

RĂ©sultat : accĂšs lĂ©gitime Ă  tes mails, fichiers, API. L’authentification est respectĂ©e dans les logs. Tu n’as rien Ă  te reprocher. C’est tragique. Et magnifique pour l’attaquant.


🏱 Pourquoi ça marche si bien en entreprise

  • Parce que l’utilisateur est programmĂ© Ă  obĂ©ir aux workflows.
  • Parce que beaucoup d’organisations n’ont pas inventorier ni verrouillĂ© les flows OAuth (device flow inclus).
  • Parce que les tokens / refresh tokens ne dĂ©clenchent pas de MFA ni d’alarme standard.
  • Parce que l’automatisation (CI/CD) et les devs fatiguĂ©s distribuent des tokens comme des Post-it.

Si ton instance SaaS ressemble à un grand open-bar, félicitations : tu es attractif pour les voleurs de jetons.


🆚 Azure vs Google : nuances, pas miracles

Microsoft et Google ont des comportements diffĂ©rents sur l’expĂ©rience consentement et la visibilitĂ© des logs. Azure, flexible, peut aussi ĂȘtre permissif si tu laisses les paramĂštres par dĂ©faut; Google impose un peu plus de friction sur les scopes et les apps tierces. Cela dit, aucune des deux plateformes n’est immunisĂ©e : la dĂ©fense repose sur configurationet gouvernance, pas seulement sur le fournisseur.


đŸ›Ąïž La checklist SecuSlice (actionnable tout de suite)

  • DĂ©sactiver le device code flow si personne ne s’en sert rĂ©ellement.
  • Whitelist des applications OAuth approuvĂ©es : pas d’inscription libre d’apps.
  • Consent policies : exiger l’approbation admin pour les scopes sensibles.
  • TTL courts pour les tokens et rotation automatique (scripts/cron/CI).
  • Inventaire centralisé des tokens/clients et attribution claire d’un propriĂ©taire.
  • SIEM : ingĂ©rer les logs API/OAuth et alerter sur consentements suivis d’accĂšs API.
  • Secrets management : Vault, Secrets Manager — pas de tokens en clair dans les repos.
  • Sensibilisation : phrase simple et rĂ©pĂ©tĂ©e : « on ne colle pas de code sur un site non officiel. »

🔍 DĂ©tection : quoi surveiller dans le SIEM

  • Consentement OAuth pour un client_id inconnu suivi immĂ©diatement d’un accĂšs Graph/IMAP/API.
  • RefreshToken actif pour un compte inactif ou un ex-collaborateur.
  • Connexions API depuis des IPs anonymisantes ou pays non habituels.
  • Apparition d’un nouveau client_id qui demande des scopes larges.

Alerter vite, rĂ©voquer les tokens, bloquer l’app, et lancer l’investigation.


đŸ©ș Playbook d’urgence (3 gestes qui sauvent la baraque)

  1. Révoquer immédiatement les refresh tokens et sessions du compte compromis.
  2. DĂ©sactiver l’application OAuth suspecte (admin console).
  3. Auditer logs d’accĂšs, API utilisĂ©s, et rechercher propagation via CI/CD.
    Puis huiler la roue de la gouvernance pour que ça n’arrive plus (ou moins souvent).

đŸ‘„ Message court Ă  diffuser (prĂȘt Ă  copier/coller)

Objet : Alerte — nouvelle forme de phishing (code à coller)
Corps : Ne collez JAMAIS de code reçu par message sur une page non officielle. En cas de doute, contactez [email protected]. Si vous avez collĂ© un code, signalez-le immĂ©diatement.

Simple, clair, pas culpabilisant. C’est ce qu’il faut.


🎯 Conclusion : OAuth n’est pas une baguette magique

OAuth et les tokens sont indispensables. Ils sont aussi dangereux quand on les laisse vivre sans garde-fou. Le device code phishing expose la faiblesse humaine; les tokens exposĂ©s rĂ©vĂšlent la faiblesse organisationnelle. Les deux ensemble, c’est la recette pour une compromission silencieuse.


🎯 Le bonus

Deux rĂšgles prĂȘtes Ă  coller, KQL (Microsoft Sentinel) et ELK (Elastic DSL), pour dĂ©tecter un cas typique de device code phishing : un consentement OAuth inhabituel suivi d’activitĂ© API.

Objectif : spotter

  • un nouvel client_id OAuth (non approuvĂ©),
  • accord de consentement,
  • puis accĂšs Graph / IMAP / Gmail API similaire,
  • dans les minutes/heures qui suivent.

Ces rĂšgles sont un socle. Tu pourras les durcir ensuite selon ton contexte.


🟩 KQL — Microsoft Sentinel

DĂ©tection d’app OAuth inconnue + obtention token + activitĂ© Graph dans la foulĂ©e

let timeframe = 1h;
let trustedApps = dynamic([
    "00000003-0000-0000-c000-000000000000",  // Microsoft Graph
    "00000002-0000-0000-c000-000000000000"   // Office 365 Exchange Online
]);
let SuspiciousConsent = AuditLogs
| where TimeGenerated > ago(timeframe)
| where ActivityDisplayName in ("Consent to application", "Add OAuth2PermissionGrant")
| extend AppId = tostring(parse_json(InitiatedBy).app.appId)
| where AppId !in (trustedApps)
| project TimeGenerated, UserId=tostring(TargetResources[0].id), AppId, AppName=TargetResources[0].displayName;

let OAuthTokenIssued = AADSignInLogs
| where TimeGenerated > ago(timeframe)
| where TokenIssuerType == "AzureAD"
| project TimeGenerated, UserPrincipalName, AppId, IPAddress, ClientAppUsed;

let GraphCalls = AADSignInLogs
| where TimeGenerated > ago(timeframe)
| where ResourceDisplayName contains "Microsoft Graph"
| project TimeGenerated, UserPrincipalName, IPAddress;

SuspiciousConsent
| join kind=inner OAuthTokenIssued on AppId
| join kind=inner GraphCalls on UserPrincipalName
| where GraphCalls.TimeGenerated > SuspiciousConsent.TimeGenerated
| sort by SuspiciousConsent.TimeGenerated desc

✅ Ce que ça alerte

  • App OAuth non approuvĂ©e
  • Consentement utilisateur
  • Token Ă©mis
  • Appel API Graph derriĂšre

Le combo gagnant pour du device code phishing.


🟧 ELK — Elastic Query DSL (Elasticsearch)

MĂȘme logique : consentement + appel API Graph / Gmail API

{
  "query": {
    "bool": {
      "must": [
        {
          "range": {
            "@timestamp": { "gte": "now-1h" }
          }
        },
        {
          "terms": {
            "event.action": [
              "oauth2-authorization-grant",
              "oauth2-consent"
            ]
          }
        },
        {
          "bool": {
            "must_not": {
              "terms": {
                "oauth.client.id": [
                  "00000003-0000-0000-c000-000000000000",
                  "00000002-0000-0000-c000-000000000000"
                ]
              }
            }
          }
        }
      ]
    }
  }
}

Ajoute ensuite une detection rule ELK pour chainer avec des Ă©vĂ©nements qui matchent :

resource.name: "Microsoft Graph" OR
resource.name: "gmail.googleapis.com"

Ou si tu veux pousser le vice :
oauth.client.id qui apparaĂźt pour la premiĂšre fois dans les 30 derniers jours dans ton index → bruit minime.


đŸ§Ș Option bonus — test rapide pour voir si ça remonte

Simule un consentement OAuth Ă  la main.
Dans many orgs, les logs OAuth sont silencieux. Tu verras tout de suite si ton pipeline est sec.


🎯 Conseil d’archi dĂ©fensif malin

Ne fais pas que dĂ©tecter. Lister les apps OAuth autorisĂ©es dans un index Elastic et faire une join check.

Ça donne une rùgle plus robuste :

  • App non listĂ©e
  • Consent
  • Token
  • API call

C’est littĂ©ralement l’IDS de l’identitĂ©.


👊 Conclusion

Tu as maintenant :

  • Une rĂšgle KQL solide
  • La version ELK Ă©quivalente
  • Le workflow de dĂ©tection pensĂ© “attaque moderne”
🧠 Le phishing moderne qui te fait l’affaire tout seul
Partager cet article : Twitter LinkedIn WhatsApp

đŸ–‹ïž PubliĂ© sur SecuSlice.com

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Retour en haut