🔴 FBI — 21 MAI 2026
Comprendre la menace

🎣 PhaaS

Vendu par abonnement sur Telegram. Un attaquant peu qualifié peut lancer une campagne complète en quelques minutes avec des leurres générés par IA.

🔑 Zéro mot de passe volé

Kali365 ne vole ni le mot de passe ni le code MFA. Il capture un token OAuth en abusant du Device Code Flow — un flux d'authentification Microsoft 100% légitime.

♾️ Accès persistant

Grâce au refresh token, l'accès est maintenu à Outlook, Teams et OneDrive. Sa durée dépend des politiques de token lifetime du tenant (90 jours par défaut, configurable).

🤖 IA & automatisation

Leurres par IA, templates automatisés, dashboards de suivi victimes en temps réel. Kali365 abaisse considérablement la barrière d'entrée pour les attaquants non techniques.

🎯 Scope géographique

Campagnes documentées en Amérique du Nord et Europe — centaines d'attaques en avril 2026 seul (Arctic Wolf). Toute organisation M365 est exposée, quelle que soit sa taille.

Chaîne d'attaque
▸ Email généré par IA — grammaticalement parfait, logo authentique
▸ L'URL de destination est 100% légitime : microsoft.com
▸ Les filtres anti-phishing ne détectent aucune URL suspecte
▸ POST /oauth2/v2.0/devicecode → retourne device_code + user_code
▸ Polling continu sur /oauth2/v2.0/token jusqu'à validation
▸ Identique techniquement à un appareil IoT légitime (Smart TV, imprimante)
▸ Page microsoft.com/devicelogin : HTTPS valide, domaine Microsoft officiel
▸ Le MFA est complété par la victime... pour le compte de l'attaquant
▸ Aucune alerte visuelle — tout semble parfaitement normal
▸ access_token (~1h) : accès direct aux API Microsoft Graph
▸ refresh_token : renouvellement silencieux — durée selon token lifetime policies
▸ Aucun mot de passe transmis → pas de trace de credential theft classique
▸ ⚠ Si CAE n'est pas activé, la révocation peut prendre jusqu'à 1h à propager
▸ Inbox rules : masquer alertes sécurité, rediriger vers dossiers cachés
▸ Enregistrement appareil Entra → FIDO2 malveillant pour persistance matérielle
▸ Export massif via /v1.0/me/messages + /drive batch requests
▸ BEC : usurpation interne pour virements ou phishing de collaborateurs
Simulation — Analyser un email Kali365
Simulation — Device Code Flow côté attaquant vs victime

🔴 ATTAQUANT

Lance POST /devicecode avec scopes Mail.Read Mail.ReadWrite Files.ReadWrite Calendars.ReadWrite
Reçoit user_code=ABCD-7291 et démarre le polling sur /token
Envoie l'email de phishing contenant le code à la victime
Polling retourne authorization_pending — attend la validation victime
🎯 Polling retourne access_token + refresh_token — compromission réussie !

👤 VICTIME

Reçoit l'email — le design semble professionnel et légitime
Va sur microsoft.com/devicelogin (vraie page Microsoft ✓)
Entre le code ABCD-7291 et ses identifiants M365
Valide le MFA (Authenticator push) — tout semble normal ✓
Voit un message de succès. Son compte est compromis.
Quiz — Testez vos connaissances
0 / 6 ⏱ 20s
Score final
Mesures de protection recommandées

Bloquer le Device Code Flow

Créer une stratégie CAP qui bloque le grant type device_code pour tous les utilisateurs. Auditer les usages légitimes avant déploiement (IoT, imprimantes, TV…).

PRIORITÉ CRITIQUE

Accès conditionnel Entra ID

Politiques basées sur conformité appareil, localisation, risque utilisateur. Activer l'évaluation continue (CAE) pour révoquer les tokens en temps réel sans attendre l'expiration.

PRIORITÉ CRITIQUE

Authentication Strength FIDO2

Exiger FIDO2/Passkey ou certificat. Ces méthodes lient cryptographiquement l'auth à l'origine du site — Kali365 ne peut pas les abuser même si la victime est trompée.

HAUTE

Bloquer le transfert d'auth

Politique "Block authentication transfer" — empêche de transférer une session authentifiée d'un PC vers un appareil mobile.

HAUTE

Surveillance Sign-in Logs

Alerter sur grant_type=device_code depuis IP inconnue. Surveiller les règles inbox créées automatiquement et les enregistrements d'appareils post-connexion.

MOYENNE

Sensibilisation

Former les utilisateurs : aucun service légitime n'envoie un code devicelogin par email. Ce scénario est toujours une attaque, sans exception.

MOYENNE

Break-glass accounts

Exclure les comptes d'accès d'urgence des politiques de blocage Device Code Flow pour éviter tout verrouillage du tenant en cas de panne CAP.

OPÉRATIONNEL

Contrôle enregistrement appareils

Restreindre qui peut enregistrer des appareils dans Entra ID. Auditer régulièrement pour détecter une persistance post-compromission.

OPÉRATIONNEL
Checklist de remédiation post-compromission

🔴 Actions immédiates (J0)

🟠 Analyse & containment (J1–J3)

Détection — Requêtes KQL Sentinel / Defender XDR

Copiez ces requêtes dans Microsoft Sentinel → Logs ou Defender XDR → Advanced Hunting.

// ① Connexions Device Code Flow depuis IP non approuvées
SigninLogs | where AuthenticationProtocol == "deviceCode" | where NetworkLocationDetails !contains "trustedNamedLocation" | where ResultType == "0" // Succès uniquement | project TimeGenerated, UserPrincipalName, IPAddress, Location, AppDisplayName, RiskLevelDuringSignIn | order by TimeGenerated desc
// ② Règles inbox suspectes créées après une connexion Device Code
OfficeActivity | where Operation == "New-InboxRule" | where Parameters has_any ("DeleteMessage", "MoveToFolder", "MarkAsRead") | extend RuleName = tostring(parse_json(Parameters)["Name"]) | where isempty(RuleName) or RuleName in ("_", " ", "") | project TimeGenerated, UserId, ClientIP, RuleName, Parameters
// ③ Export massif de mails via Graph API (exfiltration)
CloudAppEvents | where ActionType == "MailItemsAccessed" | extend ItemCount = toint(RawEventData.ItemCount) | summarize TotalItems = sum(ItemCount) by AccountId, bin(Timestamp, 5m) | where TotalItems > 500 | order by TotalItems desc
// ④ Enregistrement d'appareil suspect post-connexion Device Code
AuditLogs | where OperationName == "Register device" | join kind=inner ( SigninLogs | where AuthenticationProtocol == "deviceCode" | where ResultType == "0" | project UserPrincipalName, SigninTime = TimeGenerated ) on $left.InitiatedBy.user.userPrincipalName == $right.UserPrincipalName | where TimeGenerated between (SigninTime .. SigninTime + 1h) | project TimeGenerated, UserPrincipalName, DeviceName = TargetResources[0].displayName
Simulateur — Politique d'accès conditionnel
Configurez le scénario puis cliquez sur Évaluer…
IOC & Logs de compromission
2026-04-18T09:12:44Z | 185.220.101.47 | Sign-in | grant_type=device_code | UserAgent=python-requests/2.31 | Result=Success
2026-04-18T09:12:51Z | 185.220.101.47 | MailboxRule.Create | RuleName="_" | Action=MoveToFolder=RSS Feeds
2026-04-18T09:13:05Z | 185.220.101.47 | DeviceRegistration | Device=KALI-DEV-4491 | Status=Registered
2026-04-18T09:15:22Z | 185.220.101.47 | FileAccess | Path=/Documents/Finance_Q1.xlsx | 200 OK
2026-04-18T09:18:03Z | 185.220.101.47 | MailItemsAccessed | Count=3200 | Source=GraphAPI batch
Type IOCValeur / PatternSource
grant_typeurn:ietf:params:oauth:grant-type:device_codeEntra Sign-in Logs
User-Agentpython-requests/*, Go-http-client/*Entra Sign-in Logs
Distribution PhaaSTelegram — canaux @kali365_*FBI / Arctic Wolf
Règle inboxNom vide "" ou "_", déplacement RSS/DeletedExchange Audit
Enregistrement appareilAppareil non géré enregistré dans les minutes suivant le sign-inEntra Device Logs
Export Graph APIRequêtes batch /v1.0/me/messages > 500 items/minDefender for Cloud Apps