
Module PowerShell en lecture seule pour détecter UNC2452 et autres artefacts d'acteurs de menace dans Azure AD, auditer les domaines fédérés, les principaux de service, les applications et les autorisations de boîte aux lettres pour les indicateurs de compromission.
Ce dépôt contient un module PowerShell permettant de détecter des artefacts pouvant être des indicateurs de l'activité d'UNC2452 et d'autres acteurs de menace. Certains indicateurs sont des indicateurs de compromission de « haute fidélité », tandis que d'autres artefacts sont qualifiés d'« à double usage ». Les artefacts à double usage peuvent être liés à l'activité d'un acteur de menace, mais aussi à des fonctionnalités légitimes. Une analyse et une vérification seront nécessaires pour ces derniers. Pour une description détaillée des techniques utilisées par UNC2452, consultez notre blog.
Cet outil est en lecture seule. Il n'apporte aucune modification à l'environnement Microsoft 365.
En résumé, ce module va :
Il ne va pas :
Avec les retours de la communauté, l'outil pourrait devenir plus exhaustif dans la détection des IOC. Veuillez ouvrir un issue, soumettre une PR ou contacter les auteurs si vous avez des problèmes, des idées ou des commentaires.
Ce module utilise MS Online PowerShell pour rechercher et auditer les domaines fédérés dans Azure AD. Tous les domaines fédérés seront sauvegardés dans le fichier federated domains.csv.
any.sts comme URI d'émetteur. Cela indique l'utilisation de l'outil Backdoor Azure AD. Envisagez de mener une enquête médico-légale pour déterminer comment les modifications ont été apportées et identifier toute autre preuve de compromission.!! Evidence of AAD backdoor found. Consider performing a detailed forensic investigation Domain name: foobar.com Domain federation name: Federation issuer URI: http://any.sts/16B45E3B
:bangbang: Le script a identifié un domaine qui a été fédéré avec un URI d'émetteur qui est un indicateur d'un [Azure AD Backdoor](https://github.com/Gerenios/AADInternals/blob/master/FederatedIdentityTools.ps1). Le backdoor définit par défaut l'URI d'émetteur sur hxxp://any.sts. Envisagez de mener une enquête médico-légale pour déterminer comment les modifications ont été apportées et identifier toute autre preuve de compromission.```
!! A token signing certificate has a validity period of more than 365 days.
This may be evidence of a signing certificate not generated by AD FS.
Domain name: foobar.com
Federation issuer uri: http://sts.foobar.com
Signing cert not valid before: 1/1/2020 00:00:00
Signing cert not valid after: 12/31/2025 23:59:59
⚠️ Le script a identifié un domaine fédéré avec un certificat de signature de jeton valide pour une durée supérieure aux 365 jours standard. Consultez vos administrateurs pour savoir si le certificat de signature de jeton est géré manuellement et si la période de validité indiquée est attendue. Envisagez de mener une enquête médico-légale si ce n'est pas le cas.
Ce module utilise Azure AD PowerShell pour rechercher et auditer les principaux de service dans Azure AD.
!! Identified first-party (Microsoft published) Service Principals with added credentials. Only in rare cases should a first-party Service Principal have an added credential. Verify that the added credential has a legitimate use case and consider further investigation if not
Object ID : xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx App ID : xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx Display Name : Office 365 Exchange Online Key Credentials :
CustomKeyIdentifier : EndDate : 12/9/2017 2:10:29 AM KeyId : xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx StartDate : 12/9/2015 1:40:30 AM Type : AsymmetricX509Cert Usage : Verify Value :
:warning: Le script a identifié un principal de service de première partie (Microsoft) avec des identifiants ajoutés. Les principaux de service de première partie ne doivent *pas* avoir d'identifiants ajoutés, sauf dans de rares cas. Les environnements qui sont ou étaient auparavant en mode hybride peuvent avoir des identifiants ajoutés aux principaux de service Exchange Online, Skype for Business et AAD Password Protection Proxy. Cela peut également être un artefact de l'activité UNC2452 dans votre environnement. Consultez vos administrateurs et recherchez dans les journaux d'audit pour vérifier que l'identifiant est légitime. Vous pouvez également utiliser l'onglet « Connexions du principal de service » dans le panneau Connexions Azure AD pour rechercher des authentifications à votre locataire utilisant ce principal de service.```
!! Identified Service Principals with high-risk API permissions and added credentials.
Verify that the added credential has a legitimate use case and consider further investigation if not
Object ID : xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
App ID : xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
Display Name : TestingApp
Key Credentials :
CustomKeyIdentifier :
EndDate : 1/7/2025 12:00:00 AM
KeyId : xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
StartDate : 1/7/2021 12:00:00 AM
Type : Symmetric
Usage : Verify
Value :
Password Credentials :
Risky Permissions : Domain.ReadWrite.All
⚠️ Le script a identifié un principal de service avec des autorisations API à haut risque et a ajouté des informations d’identification. Cela peut être attendu, car certaines applications tierces ou développées sur mesure nécessitent l’ajout d’informations d’identification pour fonctionner. Cela peut également être un artefact de l’activité UNC2452 dans votre environnement. Consultez vos administrateurs et recherchez dans les journaux d’audit pour vérifier que l’information d’identification est légitime. Vous pouvez également utiliser l’onglet « Connexions du principal de service » dans le panneau Connexions Azure AD pour rechercher les authentifications dans votre locataire utilisant ce principal de service.
Ce module utilise Azure AD PowerShell pour rechercher et auditer les applications dans Azure AD.
!! High-privileged Application with credentials found. Validate that the application needs these permissions. Validate that the credentials added to the application are associated with a legitimate use case.
ObjectID: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx AppID: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx DisplayName: Acme Test App KeyCredentials: PasswordCredentials:
CustomKeyIdentifier : EndDate : 12/22/2021 4:01:52 PM KeyId : xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx StartDate : 12/22/2020 4:01:52 PM Value :
CustomKeyIdentifier : EndDate : 12/21/2021 6:32:54 PM KeyId : xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx StartDate : 12/21/2020 6:33:16 PM Value :
Risky Permissions: Mail.Read (Read mail in all mailboxes) Directory.Read.All (Read all data in the organization directory)
:warning : Le script a identifié une application avec des autorisations API à haut risque et a ajouté des identifiants. Cela peut être normal, car certaines applications tierces ou personnalisées nécessitent l'ajout d'identifiants pour fonctionner. Cela peut également être une trace de l'activité d'UNC2452 dans votre environnement. Consultez vos administrateurs et recherchez dans les journaux d'audit pour vérifier que l'identifiant est légitime.
### Programme Fournisseur de solutions cloud (Invoke-MandiantGetCSPInformation)
Ce module vérifie si le locataire est géré par un CSP (Fournisseur de solutions cloud), ou partenaire, et si l'administration déléguée est activée. L'administration déléguée permet au CSP d'accéder au locataire client avec les mêmes privilèges qu'un administrateur général. Bien que le programme CSP impose des contrôles de sécurité stricts sur le locataire du partenaire, un acteur malveillant qui compromet le CSP pourrait accéder aux environnements clients. Les organisations doivent vérifier si leur partenaire a besoin des privilèges d'administration déléguée et les supprimer si ce n'est pas le cas. Si le partenaire doit conserver l'accès d'administration déléguée, envisagez de mettre en œuvre des stratégies d'accès conditionnel pour restreindre son accès.
Les organisations peuvent vérifier et gérer les relations partenaires en accédant au [Centre d'administration](https://admin.microsoft.com) et en naviguant vers `Paramètres` -> `Relations partenaires` dans la barre de menu de gauche.
### Autorisations des dossiers de boîte aux lettres (Get-MandiantMailboxFolderPermissions)
Ce module audite toutes les boîtes aux lettres du locataire pour détecter la présence d'autorisations suspectes sur les dossiers. Plus précisément, ce module examinera les dossiers « Top of Information Store » et « Boîte de réception » de chaque boîte aux lettres et vérifiera les autorisations attribuées aux utilisateurs « Par défaut » et « Anonyme ». Toute valeur autre que « Aucun » entraînera le signalement de la boîte aux lettres pour analyse. En général, les utilisateurs Par défaut et Anonyme ne devraient pas avoir d'autorisations sur les boîtes de réception des utilisateurs, car cela permettrait à tout utilisateur de lire leur contenu. Certaines organisations peuvent trouver des boîtes aux lettres partagées avec cette autorisation, mais ce n'est pas une pratique recommandée.
### Emprunt d'identité d'application (Get-MandiantApplicationImpersonationHolders)
Ce module affiche la liste des utilisateurs et des groupes qui détiennent le rôle ApplicationImpersonation. Tout utilisateur ou membre d'un groupe figurant dans la sortie de cette commande peut utiliser l'emprunt d'identité pour « agir en tant que » et accéder à la boîte aux lettres de tout autre utilisateur du locataire. Les organisations doivent auditer la sortie de cette commande pour s'assurer que seuls les utilisateurs et groupes attendus sont inclus et, dans la mesure du possible, restreindre davantage l'étendue.
### Audit Purview (anciennement Advanced Auditing) (Invoke-MandiantCheckAuditing)
Ce module énumérera tous les utilisateurs sous licence du locataire qui sont autorisés pour Purview Audit Mail Items Accessed. Il générera un rapport CSV documentant si la fonctionnalité a été activée sur une boîte aux lettres éligible. Les organisations doivent filtrer les boîtes aux lettres éligibles pour Mail Items Accessed mais dont la fonctionnalité est désactivée et vérifier que cela est intentionnel.
### Journal d'audit unifié (Get-MandiantUnc2452AuditLogs)
Ce module est un script d'assistance pour rechercher le journal d'audit unifié. La recherche dans le journal d'audit unifié comporte de nombreuses mises en garde techniques qui peuvent être facilement négligées. Ce module peut aider à simplifier le processus de recherche en mettant en œuvre les bonnes pratiques pour naviguer dans ces mises en garde et gérer certaines erreurs courantes.
Par défaut, le module recherche les entrées de journal qui peuvent enregistrer les techniques UNC2452. Les enregistrements du journal peuvent également capturer une activité d'administrateur légitime et devront être vérifiés.
* **Mettre à jour l'application** - Enregistre les actions entreprises pour mettre à jour les inscriptions d'applications.
* **Définir l'authentification de domaine** - Enregistre les modifications apportées aux paramètres d'authentification d'un domaine, y compris la création d'objets de domaine de fédération. Ces événements devraient être rares dans un environnement et peuvent indiquer qu'un acteur malveillant configure une porte dérobée Azure AD.
* **Définir les paramètres de fédération** - Enregistre les modifications apportées à l'objet de domaine de fédération pour un domaine. Ces événements devraient être rares dans un environnement et peuvent indiquer qu'un acteur malveillant se prépare à exécuter une attaque Golden SAML.
* **Mettre à jour les certificats et secrets d'application** - Enregistre lorsqu'un secret ou un certificat est ajouté à une inscription d'application.
* **Connexions à la boîte aux lettres via PowerShell** - Enregistre les opérations de connexion à la boîte aux lettres où l'application cliente était PowerShell.
* **Mettre à jour le principal de service** - Enregistre les mises à jour apportées à un principal de service existant.
* **Ajouter des informations d'identification au principal de service** - Enregistre lorsqu'un secret ou un certificat est ajouté à un principal de service.
* **Ajouter une attribution de rôle d'application** - Enregistre lorsqu'un rôle d'application (autorisation d'application) est ajouté.
* **Attribution de rôle d'application pour l'utilisateur** - Enregistre lorsqu'un rôle d'application est attribué à un utilisateur.
* **Authentification PowerShell** - Enregistre lorsqu'un utilisateur s'authentifie auprès d'Azure AD à l'aide d'un client PowerShell.
* **Nouvelles attributions de rôles de gestion** - Enregistre la création de nouvelles attributions de rôles de gestion. Cela peut être utile pour identifier de nouvelles attributions ApplicationImpersonation.
## Utilisation
### Modules requis
Le module PowerShell nécessite l'installation de trois modules PowerShell Microsoft 365.
* AzureAD
* MSOnline
* ExchangeOnlineManagement
* Microsoft.Graph
Pour installer les modules :
1. Ouvrez une fenêtre PowerShell en tant qu'administrateur local (clic droit puis sélectionnez Exécuter en tant qu'administrateur)
2. Exécutez la commande `Install-Module <NOM DU MODULE ICI>` et suivez les invites
### Autorisations utilisateur requises
Le module PowerShell doit être exécuté avec un compte Microsoft 365 disposant de privilèges spécifiques.
* Rôle `Administrateur général` ou `Lecteur général` dans le portail Azure AD
* `Journaux d'audit en lecture seule` dans le Centre d'administration Exchange
* Étendues `User.Read.All` et `Directory.Read.All`. Les titulaires du rôle `Lecteur général` devraient pouvoir utiliser ces étendues automatiquement.
Pour accorder à un compte les `Journaux d'audit en lecture seule` dans le Centre d'administration Exchange :
1. Accédez à https://outlook.office365.com/ecp et connectez-vous en tant qu'administrateur général ou administrateur Exchange (l'URL exacte peut différer si vous êtes dans un cloud alternatif)
2. Cliquez sur `rôles d'administration` dans le tableau de bord, ou développez l'onglet `rôles` à gauche et cliquez sur `rôles d'administration` si vous êtes dans la nouvelle interface utilisateur
3. Créez un nouveau rôle d'administration en cliquant sur le signe `+` ou en cliquant sur `ajouter un groupe de rôles`
4. Donnez un nom à votre rôle et une étendue d'écriture par défaut
5. Ajoutez l'autorisation `Journaux d'audit en lecture seule` au rôle
6. Ajoutez l'utilisateur au rôle
**Remarque** : l'application de ce rôle peut prendre jusqu'à une heure
### Exécution de l'outil
1. Téléchargez cet outil au format ZIP et décompressez-le, ou clonez le dépôt sur votre système
2. Ouvrez une fenêtre PowerShell
3. Changez de répertoire vers l'emplacement de ce module `cd C:\chemin\vers\le\module`
4. Importez ce module `Import-Module .\MandiantAzureADInvestigator.psd1` vous devriez recevoir cette sortie```
Mandiant Azure AD Investigator
Focusing on UNC2452 Investigations
PS C:\Users\admin\Desktop\mandiant>
Connect-MandiantAzureEnvironment -UserPrincipalName <votre nom d'utilisateur ici>. Vous devriez recevoir une invite de connexion et un affichage dans la fenêtre PowerShell indiquant que les connexions ont été établies. Remarque : Si vous rencontrez des problèmes, vous devrez peut-être modifier votre stratégie d'exécution en exécutant Set-ExecutionPolicy -ExecutionPolicy RemoteSigned. Cette opération peut nécessiter des privilèges d'administrateur.```The module allows access to all existing remote PowerShell (V1) cmdlets in addition to the 9 new, faster, and more reliable cmdlets.
|--------------------------------------------------------------------------| | Old Cmdlets | New/Reliable/Faster Cmdlets | |--------------------------------------------------------------------------| | Get-CASMailbox | Get-EXOCASMailbox | | Get-Mailbox | Get-EXOMailbox | | Get-MailboxFolderPermission | Get-EXOMailboxFolderPermission | | Get-MailboxFolderStatistics | Get-EXOMailboxFolderStatistics | | Get-MailboxPermission | Get-EXOMailboxPermission | | Get-MailboxStatistics | Get-EXOMailboxStatistics | | Get-MobileDeviceStatistics | Get-EXOMobileDeviceStatistics | | Get-Recipient | Get-EXORecipient | | Get-RecipientPermission | Get-EXORecipientPermission | |--------------------------------------------------------------------------|
To get additional information, run: Get-Help Connect-ExchangeOnline or check https://aka.ms/exops-docs
Account Environment TenantId TenantDomain
[email protected] AzureCloud xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx test.onm...
5. Exécutez toutes les vérifications `Invoke-MandiantAllChecks -OutputPath <path\to\output\files>`. Vous pouvez également exécuter des vérifications individuelles à l'aide de l'applet de commande spécifique.
6. Consultez la sortie à l'écran et les fichiers CSV générés.
## Lectures complémentaires
Pour plus d'informations de Mandiant concernant UNC2452, veuillez consulter :
* [Un attaquant très furtif exploite la chaîne d'approvisionnement de SolarWinds pour compromettre plusieurs victimes mondiales avec la porte dérobée SUNBURST](https://www.mandiant.com/resources/evasive-attacker-leverages-solarwinds-supply-chain-compromises-with-sunburst-backdoor)
* [Stratégies de remédiation et de durcissement pour Microsoft 365 afin de se défendre contre UNC2452](https://www.mandiant.com/resources/remediation-and-hardening-strategies-for-microsoft-365-to-defend-against-unc2452)
La riposte à UNC2452 a nécessité un effort considérable de la part de l'industrie de la sécurité et ces blogs citent abondamment d'autres contributions qui seront utiles aux utilisateurs de cet outil. Nous vous recommandons de lire le matériel lié à partir de ces articles pour mieux comprendre l'activité dans votre environnement. Comme toujours, l'équipe Mandiant est disponible pour répondre à des questions complémentaires ou pour vous assister davantage dans une enquête [en nous contactant ici.](https://www.mandiant.com/report-incident)