Le portail Purview (Audit → Rechercher) vous permet de rechercher dans le journal d’audit unifié et d’exporter les résultats en CSV. L’événement complet se trouve dans une colonne, AuditData, sous forme de blob JSON. Pour obtenir du JSON propre, un événement par ligne, utilisez Exchange Online PowerShell et Search-UnifiedAuditLog. Le script est ci-dessous. La rétention d’audit standard est de 180 jours ; l’audit (Premium) conserve une année par défaut.
Le journal d’audit unifié couvre Exchange, SharePoint, OneDrive, Teams et l’activité administrative en un seul endroit. Dans un compromis de courriel professionnel, c’est là que les règles de boîte de réception, les redirections et les téléchargements massifs apparaissent. Prime Core a 79 règles de détection pour les données d’audit Microsoft 365, mappées à 33 techniques MITRE ATT&CK. Parmi elles : les règles de transfert qui siphonnent le courrier (T1114.003), les permissions supplémentaires sur la boîte aux lettres (T1098.002) et les données extraites de SharePoint (T1213.002).
Avant de commencer
L’audit est-il activé ? C’est le cas par défaut pour la plupart des locataires, mais vérifiez :
Connect-ExchangeOnline
Get-AdminAuditLogConfig | Format-List UnifiedAuditLogIngestionEnabled
True est ce que vous voulez. Si c’est False, rien n’a été enregistré, et l’activer ne remplira pas rétroactivement.
Rôles. Vous avez besoin du rôle Journaux d’audit ou Journaux d’audit en lecture seule. Vous avez également besoin du module ExchangeOnlineManagement (Install-Module ExchangeOnlineManagement).
Latence. Les événements n’apparaissent pas instantanément. La plupart apparaissent dans une heure ou deux, certains prennent plus de temps. Si vous suivez quelque chose de ce matin, il se peut qu’il ne soit pas encore consultable.
Exporter avec PowerShell
Search-UnifiedAuditLog renvoie au maximum 5 000 enregistrements par appel. Avec un ID de session et ReturnLargeSet, vous pouvez parcourir jusqu’à 50 000 par recherche. Cette boucle le fait et écrit AuditData de chaque enregistrement, déjà JSON, sous forme d’une ligne :
$session = [guid]::NewGuid().ToString()
$out = "ual_2026-10-19.jsonl"
do {
$batch = Search-UnifiedAuditLog -StartDate "2026-10-19 00:00" -EndDate "2026-10-20 00:00" `
-SessionId $session -SessionCommand ReturnLargeSet -ResultSize 5000
$batch | ForEach-Object { $_.AuditData } | Add-Content $out
} while ($batch.Count -eq 5000)
Le journal stocke les heures en UTC. Gardez cela à l’esprit lors de la définition de la fenêtre.
Ce qu’il faut rechercher
| Opération | Pourquoi c’est important |
|---|---|
| New-InboxRule, Set-InboxRule, UpdateInboxRules | Règles qui redirigent, déplacent ou suppriment le courrier ; vérifiez les paramètres dans AuditData |
| Set-Mailbox avec ForwardingSmtpAddress | Redirection au niveau de la boîte aux lettres vers une adresse externe |
| Add-MailboxPermission, Add-RecipientPermission | Quelqu’un obtenant accès à une autre boîte aux lettres |
| MailItemsAccessed | Quels messages ont été réellement lus ; clé pour délimiter une violation |
| Téléchargement de fichiers, synchronisation complète de fichiers téléchargés | Téléchargement en masse à partir de SharePoint ou OneDrive |
| Consentement à une application | Une application malveillante a obtenu l’accès au courrier ou aux fichiers |
La séquence classique de BEC : une connexion depuis un nouvel emplacement, puis en quelques minutes, une règle de boîte de réception qui déplace les réponses de l’équipe financière dans un dossier obscur.
Téléchargez, assainissez et révisez dans LogTotal
- Télécharger. Ouvrir logtotal.com et déposez le fichier .jsonl.
- Assainir.
- Réviser.
Quand cela tourne mal
| Symptôme | Cause probable | Fix |
|---|---|---|
| Search-UnifiedAuditLog n’est pas reconnu | Non connecté à Exchange Online PowerShell | Connectez-vous à ExchangeOnline d’abord |
| Aucun résultat | Audit désactivé, événements trop récents, ou hors rétention | Vérifiez l’ingestion ; attendez ; vérifiez votre niveau d’audit |
| Exactement 5 000 résultats | Limite par appel atteinte sans session | Utilisez la boucle de session ci-dessus |
| Bloqué à 50 000 | Limite de session | Divisez la fenêtre en morceaux plus petits |
| Accès refusé | Rôle d’audit manquant | Demandez pour Journaux d’audit en lecture seule |
FAQ
N’est-ce pas la même chose que les journaux de connexion Entra ?
Ils se chevauchent : le UAL a des événements UserLoggedIn. Mais pour les détails d’authentification (MFA, accès conditionnel, risque), les journaux de connexion Entra sont beaucoup plus riches. Exportez-les tous les deux.
Et qu’en est-il de l’API d’activité de gestion ?
C’est la voie pour une collecte continue dans un SIEM. Pour une enquête ponctuelle, PowerShell est plus simple.