Device code phishing werkt doordat het slachtoffer inlogt op een echte Microsoft-pagina. Er is dus geen nep-loginpagina om te herkennen en geen look-alike domein om te blokkeren. De praktische verdediging is de flow uitschakelen voor iedereen die hem niet nodig heeft. Microsoft adviseert zelf om zo dicht mogelijk bij een algehele blokkade van de device code flow te komen, en met één Conditional Access-policy lukt dat.
Waarvoor de device code flow bedoeld is
De flow bestaat voor apparaten zonder browser of waarop typen onhandig is. RFC 8628 noemt smart-tv's, mediaspelers, digitale fotolijsten en printers. Het apparaat toont zelf geen inlogpagina. Het vraagt de gebruiker om op een ander apparaat, zoals een telefoon, een URL te openen en een korte code in te voeren.
De client stuurt zijn client identifier naar de authorization server en krijgt een device_code, een user_code, een verification_uri en een expires_in-waarde terug. Terwijl de gebruiker op het tweede apparaat inlogt, pollt de client het token endpoint met de device_code, totdat er een access token komt, een foutmelding of de instructie om te blijven wachten.
In het Microsoft identity platform heten de endpoints /devicecode en /token. Volgens de Microsoft-documentatie heeft de gebruiker standaard 15 minuten om in te loggen. Er wordt een refresh token uitgegeven als de gevraagde scope offline_access bevatte.
Waarom het als phishing werkt
De partij die de code aanvraagt is de client. De partij die inlogt is degene die de code in handen heeft. Het protocol eist niet dat dit dezelfde persoon is, en RFC 8628 noemt "Remote Phishing" als security-overweging (sectie 5.4).
Een aanvaller kan dus optreden als het apparaat. Hij vraagt een code aan met een client_id (en een scope, die het endpoint van Microsoft verplicht stelt) en stuurt de user_code met een verzonnen aanleiding naar het doelwit. Het doelwit opent de echte verificatiepagina, logt in en voert de code in. De client van de aanvaller, die al die tijd pollt, ontvangt de tokens.
Het wachtwoord komt nooit op een pagina van de aanvaller. Daarom hebben controles die draaien om domeinen en URL's, zoals onze linkchecker, hier niets om te markeren.
De aanvaller blijft wel afhankelijk van het slachtoffer. Het doelwit moet inloggen en de code invoeren voordat expires_in verstrijkt (standaard 15 minuten), anders mislukt de poll met expired_token. Gebruikers met een persoonlijk account moeten bovendien opnieuw inloggen en toestemming geven voor de gevraagde rechten.
Er is één bruikbaar aanknopingspunt voor awareness-training. Microsoft ondersteunt verification_uri_complete niet, het optionele veld dat de code in de URL meegeeft. "Iemand stuurde mij een code om in te voeren op een Microsoft-inlogpagina" is het patroon om te leren herkennen.
Device code-aanmeldingen detecteren
Microsoft raadt een policy aan die het bestaande gebruik van de flow auditeert, en report-only-modus geeft u precies dat. Maak de hieronder beschreven policy aan in Report-only en bekijk de policy impact-resultaten om te zien wie en wat geblokkeerd zou zijn.
Filter voor doorlopende threat hunting de Entra-aanmeldlogs op device code-aanmeldingen en groepeer ze per gebruiker en applicatie. Dit is advies uit de praktijk; de hier aangehaalde Microsoft-pagina's beschrijven dit niet. Een aanmelding van een gebruiker die geen apparaat of tool heeft dat de flow gebruikt, of van een applicatie die niemand kan benoemen, verdient een gesprek. Vraag de gebruiker welk bericht hij of zij heeft ontvangen.
De flow blokkeren met Conditional Access
Het klikpad staat in de Conditional Access-richtlijnen van Microsoft. Log in als minimaal Conditional Access Administrator, ga naar Entra ID > Conditional Access > Policies en maak een nieuwe policy aan. Neem alle gebruikers en All resources op. Zet onder Conditions > Authentication Flows de optie Configure op Yes en selecteer Device code flow. Kies onder Grant de optie Block access en zet Enable policy op Report-only. Zet de policy op On nadat u de resultaten hebt beoordeeld.
Dezelfde pagina behandelt ook het blokkeren van authentication transfer, waarmee gebruikers een aanmelding van een pc naar een mobiel apparaat kunnen verplaatsen. Daarvoor geldt dezelfde Authentication Flows-voorwaarde, dus neem er in dezelfde sessie een besluit over.
Microsoft adviseert de flow alleen toe te staan in goed gedocumenteerde en beveiligde use cases, zoals legacy-tooling die niet kan worden bijgewerkt.
Bouw voor wat moet blijven werken een aparte uitsluitingsgroep met een naam die aangeeft waarvoor hij dient. Leg voor elk lid een eigenaar en een reden vast en audit de lijst regelmatig, zoals Microsoft adviseert. Houd ook uw emergency access-accounts (break-glass) uitgesloten, om een lockout te voorkomen als de policy verkeerd is geconfigureerd.
Daarnaast merkt Microsoft op dat aanroepen door service principals niet worden geblokkeerd door policies die op gebruikers zijn gericht, en het adviseert om service accounts in scripts of code te vervangen door managed identities.
Als een code-phish al geslaagd is
Ga ervan uit dat de aanvaller tokens heeft en niet alleen een wachtwoord. Met een refresh token kunnen nieuwe access tokens worden opgehaald. Trek daarom eerst de sessies van de gebruiker in en reset daarna het wachtwoord. Dit is advies uit de praktijk en komt niet uit de bovenstaande bronnen.
Controleer vervolgens de enterprise applications en consent grants die aan het account gekoppeld zijn en verwijder wat u niet herkent. Kijk in de mailbox of er regels staan die de gebruiker niet zelf heeft gemaakt, vooral doorstuur- of verwijderregels.
Verbreed de zoektocht tot voorbij één gebruiker door het device code-filter hierboven op andere accounts los te laten en te zoeken naar dezelfde applicatie. Als meer dan één account getroffen kan zijn, volg dan een goed incident response-proces. Ons incident response-team kan dat samen met u uitvoeren, en onze blog bevat artikelen over incident response en phishing voor de trainingskant.
Waar u kunt beginnen
- Maak een lijst van elk apparaat, script en elke tool die met een code zou kunnen inloggen: printers, tv's, IoT-apparaten, command-line tools. Vraag elke eigenaar of dit bij hen het geval is.
- Maak de Conditional Access-policy aan met Device code flow geselecteerd, alle gebruikers binnen scope en break-glass-accounts uitgesloten, in Report-only-modus. Besluit tegelijkertijd over de authentication transfer-voorwaarde.
- Bekijk de report-only-resultaten en de device code-aanmeldingen in de logs. Repareer of beëindig elk legitiem gebruik en plaats wat overblijft in een benoemde uitsluitingsgroep met een eigenaar.
- Zet de policy op On en plan een audit van de uitsluitingsgroep in uw agenda.
- Leg de responsstappen vast (sessies intrekken, enterprise applications en consent grants controleren, mailboxregels nalopen). Vertel medewerkers dat een code die ze niet zelf hebben aangevraagd, vanaf een apparaat dat ze niet in handen hebben, een phishingpoging is.
