
Un script PowerShell qui automatise l'évaluation de la sécurité des environnements Microsoft 365.

Faire progresser l'état de la sécurité de Microsoft 365 en créant un script PowerShell qui automatise l'évaluation de la sécurité des environnements Microsoft 365.
Soteria Inspect est né du projet 365Inspect et est la solution SaaS de Soteria pour aider à évaluer la sécurité d'un locataire Microsoft 365 avec plus de 200 points d'inspection sur l'ensemble de la suite de services Microsoft 365.
Soteria Inspect pour Microsoft 365 permet aux clients de suivre les modifications apportées aux objets affectés par chaque constatation au fil du temps ainsi que les efforts de correction, et inclut désormais la multi-location pour les MSP et les organisations parentes afin de garder un œil sur leurs locataires enfants.
Soteria Inspect pour Microsoft 365 est disponible directement via Soteria ou via la Place de marché Azure
Voir toutes nos offres Soteria Inspect pour Microsoft 365

L'édition communautaire de 365Inspect nécessite les modules PowerShell d'administration pour Exchange, Microsoft Graph, Microsoft Teams et le module d'administration SharePoint.
365Inspect est désormais compatible avec PowerShell Core (6+) et nécessite un système d'exploitation Microsoft Windows en raison des dépendances de modules requises.
Le script PowerShell 365Inspect.ps1 validera les modules installés et la version minimale des modules nécessaires au fonctionnement des Inspecteurs.
Si vous n'avez pas ces modules installés, vous serez invité à les installer, et avec votre approbation, le script tentera l'installation. Sinon, vous devriez pouvoir les installer avec les commandes suivantes dans une invite PowerShell administrative, ou en suivant les instructions aux références ci-dessous :
Install-Module -Name ExchangeOnlineManagement -AllowClobber -Force
Install-Module -Name PnP.PowerShell -AllowClobber -Force
Install-Module -Name Microsoft.Graph -AllowClobber -Force
Install-Module -Name MicrosoftTeams -AllowClobber -Force
Installer Exchange Online PowerShell
Installer le module SharePoint PnP PowerShell
Installer le SDK Microsoft Graph
Une fois les éléments ci-dessus installés, téléchargez le dossier du code source de 365Inspect depuis Github en utilisant votre navigateur ou en utilisant git clone.
À compter du 9 septembre 2024, PnP.PowerShell exige que les administrateurs de locataire enregistrent leur propre application pour une utilisation avec le service SharePoint/PnP. Voir la documentation PnP.PowerShell suivante pour les étapes requises. Enregistrer une application Entra ID pour utilisation avec PnP PowerShell Déterminer les autorisations Authentification
REMARQUE : Si vous utilisez PowerShell 5.1, PnP PowerShell n'est plus compatible et tous les inspecteurs SharePoint seront exclus lors de l'exécution.
Il existe une commande qui peut être exécutée pour automatiser cette étape.```powershell Register-PnPEntraIDAppForInteractiveLogin -ApplicationName "PnP Rocks" -Tenant [yourtenant].onmicrosoft.com -Interactive
__Souvenez-vous du nom ou de l'ID d'application/client de l'application créée. Cela est désormais nécessaire pour l'authentification et l'AppID vous sera demandé !__
# Compatibilité des modules
Actuellement, les versions 2.23.0 des modules Microsoft.Graph et Microsoft.Graph.Beta sont incompatibles avec ExchangeOnlineManagement version 3.5.1.
Les versions suivantes sont compatibles :
- Microsoft.Graph version 2.21.1
- Microsoft.Graph.Beta version 2.21.1
- ExchangeOnlineManagement version 3.5.0
Les commandes suivantes peuvent être utilisées pour installer des versions compatibles :```powershell
Install-Module -Name Microsoft.Graph -Scope CurrentUser -RequiredVersion 2.21.1 -AllowClobber -Force
Install-Module -Name Microsoft.Graph.Beta -Scope CurrentUser -RequiredVersion 2.21.1 -AllowClobber -Force
Install-Module -Name ExchangeOnlineManagement -Scope CurrentUser -RequiredVersion 3.5.0 -AllowClobber -Force
Comme vous allez exécuter 365Inspect avec des privilèges administratifs, vous devriez le placer dans un emplacement logique et vous assurer que le contenu du dossier est lisible et modifiable uniquement par l'utilisateur administrateur. Ceci est particulièrement important si vous prévoyez d'installer 365Inspect dans un emplacement où il sera exécuté fréquemment ou utilisé dans le cadre d'un processus automatisé. REMARQUE : 365Inspect n'a pas besoin d'être exécuté dans une fenêtre PowerShell administrative pour fonctionner.
Pour exécuter 365Inspect, ouvrez une console PowerShell et naviguez jusqu'au dossier dans lequel vous avez téléchargé 365Inspect :
cd 365Inspect
Vous interagirez avec 365Inspect en exécutant le script principal, 365Inspect.ps1, depuis l'invite de commandes PowerShell.
Tout ce dont 365Inspect a besoin pour inspecter votre tenant M365 est un accès via un compte M365 disposant des autorisations appropriées, donc la plupart des paramètres de ligne de commande concernent l'organisation évaluée et la méthode d'authentification.
L'exécution de 365Inspect ressemble à ceci :
.\365Inspect.ps1 -OutPath <valeur> -UserPrincipalName [email protected] -Auth <MFA|DEVICE|ALREADY_AUTHED|APP> -pnpPowerShellApplicationId <Votre ID d'application/client PnP PowerShell>
Par exemple, pour vous connecter en saisissant vos identifiants dans un navigateur avec prise en charge MFA :
.\365Inspect.ps1 -OutPath ..\365_report -UserPrincipalName [email protected] -Auth MFA
Pour vous connecter à un déploiement cloud gouvernemental ou autre cloud national (Chine, Allemagne, etc.), le paramètre -Environment doit être spécifié comme suit :
.\365Inspect.ps1 -OutPath ..\365_report -UserPrincipalName [email protected] -Auth MFA -Environment USGovGCCHigh
Les arguments valides pour -Environment sont :
L'authentification d'application peut être réalisée en exécutant le script avec les paramètres suivants :
.\365Inspect.ps1 -OutPath ..\365_report -UserPrincipalName [email protected] -Auth APP
Pour vous connecter à un déploiement cloud gouvernemental ou autre cloud national (Chine, Allemagne, etc.), le paramètre -Environment doit être spécifié comme suit :
Pendant que 365Inspect s'exécute, il affichera régulièrement des mises à jour de statut indiquant quelle tâche d'inspection est en cours.
365Inspect peut prendre un certain temps à s'exécuter. Ce temps est proportionnel à la taille et à la complexité de l'environnement testé. Par exemple, certaines tâches d'inspection impliquent l'analyse de la configuration des comptes de tous les utilisateurs. Cela peut se produire quasi-instantanément pour une organisation de 50 utilisateurs, ou prendre des minutes entières (!) pour une organisation de 10000.
365Inspect crée le répertoire spécifié dans le paramètre out_path. Ce répertoire est le résultat de l'ensemble de l'inspection 365Inspect. Il contient quatre éléments notables :
En raison de la nature de certains des éléments renvoyés, le rapport csv est délimité par le caractère accent circonflexe (^). Il est recommandé d'ouvrir le rapport CSV dans un éditeur de texte plutôt que dans Excel, car Excel utilise par défaut une virgule (,) comme délimiteur et affichera le rapport de manière incorrecte. Une fois ouvert dans un éditeur de texte, les données peuvent être collées dans Excel.
Prise en charge de l'authentification par dispositif
Prise en charge des déploiements cloud nationaux
365Inspect prend désormais en charge l'authentification d'application
Le format du rapport HTML de 365Inspect a changé



365Inspect ne peut pas fonctionner correctement à moins que le compte M365 avec lequel vous vous authentifiez ne dispose des privilèges appropriés. 365Inspect nécessite, au minimum, les éléments suivants :
Nous réalisons que ce sont des rôles extrêmement permissifs, malheureusement en raison de l'utilisation de Microsoft Graph, nous sommes limités par Microsoft dans l'utilisation de privilèges moindres. Les rôles d'administrateur d'application et d'administrateur de cloud application (utilisés pour accorder des autorisations déléguées et d'application) sont limités dans l'octroi d'autorisations pour les modules PowerShell Microsoft Graph ou Azure AD. Documentation Microsoft - Administrateur d'application
Si vous exécutez 365Inspect en utilisant le paramètre d'authentification d'application, des rôles supplémentaires doivent être accordés pour permettre à l'application d'effectuer toutes les tâches exécutées. Voir Exigences pour l'authentification d'application
Avant que 365Inspect puisse être utilisé, tous les autres composants requis doivent être en place.
Pour une utilisation la plus efficace du temps, il est recommandé d'effectuer les fonctions requises dans l'ordre suivant :
Voir les références suivantes :
365Inspect est conçu pour être facile à étendre, dans l'espoir que cela permette aux individus et aux organisations d'utiliser leurs propres modules 365Inspect en interne, ou de publier ces modules pour la communauté M365.
Tous les modules d'inspection de 365Inspect sont stockés dans le dossier .\inspectors.
Il est simple de créer un module d'inspection. Les inspecteurs ont deux fichiers :
Des modèles sont inclus dans le dossier Templates. Ajoutez simplement votre code et vos valeurs aux emplacements respectifs. Les noms des fichiers PowerShell et JSON doivent être identiques pour que 365Inspect reconnaisse que les deux appartiennent ensemble. Il existe de nombreux exemples dans la suite de modules intégrée de 365Inspect, mais nous allons également en mettre un exemple ici.
# If some of the parsed M365 objects were found to have the security flaw this module is inspecting for,
# return a list of strings representing those objects. This is what will end up as the "Affected Objects"
# field in the report.
If ($safe_attachment_bypass_rules.Count -ne 0) {
return $safe_attachment_bypass_rules
}
# If none of the parsed M365 objects were found to have the security flaw this module is inspecting for,
# returning $null indicates to 365Inspect that there were no findings for this module.
return $null
}
return Inspect-BypassingSafeAttachments
</details>
<details>
<summary>Exemple de fichier .json, BypassingSafeAttachments.json:</summary>```json
{
"FindingName": "Do Not Bypass the Safe Attachments Filter",
"Description": "In Exchange, it is possible to create mail transport rules that bypass the Safe Attachments detection capability. The rules listed above bypass the Safe Attachments capability. Consider reviewing these rules, as bypassing the Safe Attachments capability even for a subset of senders could be considered insecure depending on the context or may be an indicator of compromise.",
"Remediation": "Navigate to the Mail Flow → Rules screen in the Exchange Admin Center. Look for the offending rules and begin the process of assessing who created them and whether they are necessary to the continued function of the organization. If they are not, remove the rules.",
"DefaultValue": "None",
"ExpectedValue": "None",
"Impact": "Critical",
"AffectedObjects": "",
"Service": "Exchange", // Valid values are Exchange, SharePoint, Teams, Intune, AzureAD, SecurityandCompliance, Tenant //
"PowerShell": "", // Any PowerShell remediation command examples should be placed here //
"References": [
{
"Url": "https://docs.microsoft.com/en-us/exchange/security-and-compliance/mail-flow-rules/manage-mail-flow-rules",
"Text": "Manage Mail Flow Rules in Exchange Online"
},
{
"Url": "https://www.undocumented-features.com/2018/05/10/atp-safe-attachments-safe-links-and-anti-phishing-policies-or-all-the-policies-you-can-shake-a-stick-at/#Bypass_Safe_Attachments_Processing",
"Text": "Undocumented Features: Safe Attachments, Safe Links, and Anti-Phishing Policies"
}
]
}
Une fois que vous déposez ces deux fichiers dans le dossier .\inspectors, ils sont considérés comme faisant partie de l'inventaire des modules de 365Inspect et s'exécuteront la prochaine fois que vous lancerez 365Inspect.
Vous venez de créer le module Inspecteur BypassingSafeAttachments. C'est tout !
365Inspect générera une erreur assez bruyante et moche si quelque chose dans votre module ne fonctionne pas ou ne suit pas les conventions de 365Inspect, alors surveillez la sortie de la ligne de commande.
Nous encourageons la participation et les contributions de la communauté ! Veuillez consulter nos Directives de contribution
365Inspect est un harnais de script qui exécute d'autres modules de script inspecteur stockés dans le dossier .\inspectors. Comme pour tout autre script que vous pourriez exécuter avec des privilèges élevés, vous devez respecter certaines pratiques d'hygiène de sécurité :
Soteria propose une large gamme de solutions de sécurité et de conseil, notamment la réponse aux incidents, la détection et réponse gérées, les évaluations de sécurité, les tests d'intrusion, et plus encore. Contactez-nous pour tous vos besoins !
.\365Inspect.ps1 -OutPath ..\365_report -UserPrincipalName [email protected] -Auth APP -Environment USGovGCCHigh
Les arguments valides pour -Environment sont :
REMARQUE : Il existe des prérequis pour exécuter 365Inspect avec une authentification d'application. Allez à Exigences pour l'authentification d'application
365Inspect prend désormais en charge la sortie du rapport aux formats HTML (valeur par défaut), CSV et XML.
Par exemple, les rapports CSV peuvent être générés en appelant le paramètre -ReportType :
.\365Inspect.ps1 -OutPath ..\365_report -UserPrincipalName [email protected] -Auth MFA -ReportType CSV
365Inspect peut être exécuté avec seulement des modules d'inspection spécifiés, ou inversement, en excluant des modules spécifiés.
Par exemple, pour vous connecter en saisissant vos identifiants dans un navigateur avec prise en charge MFA :
.\365Inspect.ps1 -OutPath ..\365_report -UserPrincipalName [email protected] -Auth MFA -SelectedInspectors inspecteur1, inspecteur2
ou
.\365Inspect.ps1 -OutPath ..\365_report -Auth MFA -ExcludedInspectors inspecteur1, inspecteur2, inspecteur3
Pour décomposer les paramètres plus en détail :
OutPath est le chemin vers un dossier où le rapport généré par 365Inspect sera placé.
Auth est un sélecteur qui doit être l'une des valeurs littérales "MFA" ou "ALREADY_AUTHED".
SelectedInspectors est le nom ou les noms du ou des inspecteurs que vous souhaitez exécuter avec 365Inspect. Si plusieurs inspecteurs sont sélectionnés, ils doivent être séparés par des virgules. Seuls les inspecteurs nommés seront exécutés.
ExcludedInspectors est le nom ou les noms du ou des inspecteurs que vous souhaitez empêcher de s'exécuter avec 365Inspect. Si plusieurs inspecteurs sont sélectionnés, ils doivent être séparés par des virgules. Tous les modules autres que ceux inclus seront exécutés.
UserPrincipalName - UserPrincipalName de l'évaluateur, ceci est inclus pour réduire le nombre de fois où vous devez saisir vos identifiants dans les modules pris en charge.
ReportType - Format de sortie du rapport généré. Les valeurs actuellement prises en charge sont HTML (par défaut), CSV et XML.
Environment - Spécifie l'instance cloud Azure à laquelle se connecter pour les tenants Microsoft 365 non standard/consommateurs.
Lorsque vous exécutez 365Inspect avec -Auth MFA, il peut produire plusieurs invites de connexion graphiques auxquelles vous devez vous connecter séquentiellement. C'est un comportement normal car Exchange, SharePoint, etc. ont des modules d'administration séparés et chacun nécessite une session de connexion différente. Si vous vous connectez simplement le nombre de fois demandé, 365Inspect devrait commencer à s'exécuter. C'est l'inverse du plaisir et nous cherchons une solution de contournement, mais inutile de dire que nous pensons que les résultats valent la minute passée à regarder les codes MFA.