
Microsoft 365 環境のセキュリティ評価を自動化する PowerShell スクリプト。

Microsoft 365 環境のセキュリティ評価を自動化する PowerShell スクリプトを作成することで、Microsoft 365 セキュリティの状態を向上させます。
Soteria Inspect は365Inspectプロジェクトから生まれ、Microsoft 365サービスの全スイートにわたる200以上の検査ポイントでMicrosoft 365テナントのセキュリティ評価を支援するSoteriaのSaaSソリューションです。
Soteria Inspect for Microsoft 365を使用すると、顧客は各検出結果の影響を受けるオブジェクトの経時的な変更や修復作業を追跡でき、さらにMSPや親組織が子テナントの状況を把握できるマルチテナンシー機能を含むようになりました。
Soteria Inspect for Microsoft 365 は、Soteria から直接、または Azure Marketplace から入手できます。
Soteria Inspect for Microsoft 365 の全オファー をご覧ください。

365Inspect Community Edition では、Exchange管理、Microsoft Graph、Microsoft Teams、SharePoint管理モジュールの管理用PowerShellモジュールが必要です。
365Inspect は PowerShell Core (6+) に対応しており、必要なモジュールの依存関係により Microsoft Windows オペレーティングシステムが必要です。
365Inspect.ps1 PowerShellスクリプトは、インストールされているモジュールと、インスペクターが機能するために必要なモジュールの最小バージョンを検証します。
これらのモジュールがインストールされていない場合は、インストールを促すプロンプトが表示され、承認を得るとスクリプトがインストールを試みます。それ以外の場合は、管理者用PowerShellプロンプトで以下のコマンドを使用してインストールするか、以下の参考資料の指示に従ってインストールできます。
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
Exchange Online PowerShell をインストールする
SharePoint PnP PowerShell モジュールをインストールする
上記がインストールされたら、ブラウザまたは git clone を使用して、Githubから365Inspectソースコードフォルダをダウンロードします。
2024年9月9日以降、PnP.PowerShell ではテナント管理者が SharePoint/PnP サービスを使用するために独自のアプリケーションを登録する必要があります。 必要な手順については、以下の PnP.PowerShell ドキュメントを参照してください。 PnP PowerShell で使用する Entra ID アプリケーションの登録 アクセス許可の決定 認証
注: PowerShell 5.1 を使用している場合、PnP PowerShell は互換性がなくなり、実行時にすべての SharePoint インスペクターが除外されます。
この手順を自動化するために実行できるコマンドがあります。この手順を自動化する。```powershell Register-PnPEntraIDAppForInteractiveLogin -ApplicationName "PnP Rocks" -Tenant [yourtenant].onmicrosoft.com -Interactive
作成したアプリケーションの名前またはアプリケーション/クライアントIDを忘れずにメモしてください。これは認証に必要となり、AppIDの入力を求められます!
# モジュール互換性
現在、Microsoft.GraphおよびMicrosoft.Graph.Betaモジュールのバージョン2.23.0は、ExchangeOnlineManagementバージョン3.5.1と互換性がありません。
以下のバージョンは互換性があります:
- Microsoft.Graph バージョン 2.21.1
- Microsoft.Graph.Beta バージョン 2.21.1
- ExchangeOnlineManagement バージョン 3.5.0
以下のコマンドを使用して互換性のあるバージョンをインストールできます:```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
365Inspect を管理者権限で実行するため、論理的な場所に配置し、フォルダの内容が管理ユーザーのみが読み取り・書き込み可能であることを確認してください。これは、365Inspect を頻繁に実行する場所や、自動化プロセスの一部として使用する予定がある場合に特に重要です。注: 365Inspect は、管理者用 PowerShell ウィンドウで実行する必要はありません。
365Inspect を実行するには、PowerShell コンソールを開き、365Inspect をダウンロードしたフォルダに移動します:
cd 365Inspect
PowerShell コマンドプロンプトでメインスクリプトファイル 365Inspect.ps1 を実行することで、365Inspect を操作します。
365Inspect が M365 テナントを検査するために必要なのは、適切な権限を持つ M365 アカウントによるアクセスだけです。そのため、ほとんどのコマンドラインパラメータは、評価対象の組織と認証方法に関連しています。
365Inspect の実行は次のようになります:
.\365Inspect.ps1 -OutPath <値> -UserPrincipalName [email protected] -Auth <MFA|DEVICE|ALREADY_AUTHED|APP> -pnpPowerShellApplicationId <ご利用の Pnp PowerShell アプリケーション/クライアント ID>
たとえば、MFA 対応のブラウザで資格情報を入力してログインする場合:
.\365Inspect.ps1 -OutPath ..\365_report -UserPrincipalName [email protected] -Auth MFA
政府またはその他の各国クラウド(中国、ドイツなど)にログインする場合は、-Environment パラメータを次のように指定します:
.\365Inspect.ps1 -OutPath ..\365_report -UserPrincipalName [email protected] -Auth MFA -Environment USGovGCCHigh
-Environment の有効な引数は次のとおりです:
アプリケーション認証は、次のパラメータでスクリプトを実行することで実現できます:
.\365Inspect.ps1 -OutPath ..\365_report -UserPrincipalName [email protected] -Auth APP
政府またはその他の各国クラウド(中国、ドイツなど)にログインする場合は、-Environment パラメータを次のように指定します:
.\365Inspect.ps1 -OutPath ..\365_report -UserPrincipalName [email protected] -Auth APP -Environment USGovGCCHigh
365Inspect の実行中、実行中の検査タスクを示すステータス更新が次々と出力されます。
365Inspect の実行には時間がかかる場合があります。この時間は、テスト対象環境の規模と複雑さに比例します。たとえば、一部の検査タスクでは、すべてのユーザーのアカウント設定をスキャンします。50 ユーザーの組織ではほぼ瞬時に完了する場合もありますが、10000 ユーザーの組織では丸々数分かかることもあります。
365Inspect は、out_path パラメータで指定されたディレクトリを作成します。このディレクトリは、365Inspect 検査全体の結果です。次の 4 つの注目すべき項目が含まれています:
返される項目の性質上、CSV レポートはキャレット (^) 文字で区切られています。 CSV レポートは Excel ではなくテキストエディタで開くことをお勧めします。Excel はデフォルトでコンマ (,) を区切り文字として使用し、レポートが正しく表示されないためです。 テキストエディタで開いた後、データを Excel に貼り付けることができます。
デバイス認証のサポート
各国クラウド展開 のサポート
365Inspect がアプリケーション認証をサポートするようになりました
365Inspect の HTML レポート形式が変更されました



認証に使用する M365 アカウントに適切な権限がないと、365Inspect は正しく実行できません。365Inspect には最低限、次の権限が必要です:
これらのロールは非常に寛容であることは認識していますが、残念ながら Microsoft Graph の使用により、Microsoft によってより低い権限を使用することが制限されています。アプリケーション管理者とクラウドアプリケーション管理者のロール(委任およびアプリケーションのアクセス許可を付与するために使用)は、Microsoft Graph または Azure AD PowerShell モジュールのアクセス許可を付与することが制限されています。Microsoft Docs - アプリケーション管理者
アプリケーション認証パラメータを使用して 365Inspect を実行する場合、アプリケーションがすべての実行タスクを実行できるように、追加のロールを付与する必要があります。アプリケーション認証の要件 を参照してください。
365Inspect を利用する前に、他のすべての必須コンポーネントが整っている必要があります。
時間を最も効率的に使用するには、次の順序で必要な機能を実行することをお勧めします:
以下のリファレンスを参照してください:
365Inspect は拡張が容易になるように設計されており、個人や組織が内部で独自の 365Inspect モジュールを利用したり、M365 コミュニティ向けにそれらのモジュールを公開したりできるようにすることを目的としています。
365Inspect のすべてのインスペクターモジュールは、.\inspectors フォルダに保存されています。
インスペクターモジュールの作成は簡単です。インスペクターには 2 つのファイルがあります:
テンプレートは Templates フォルダに含まれています。それぞれの場所にコードと値を追加するだけです。 PowerShell ファイルと JSON ファイルの名前は同一である必要があり、そうすることで 365Inspect は 2 つが関連していることを認識します。365Inspect の組み込みモジュールスイートには多数の例がありますが、ここにも例を記載します。
# 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>サンプル .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"
}
]
}
これらの2つのファイルを .\inspectors フォルダに配置すると、それらは365Inspectのモジュールインベントリの一部とみなされ、次回365Inspectを実行したときに実行されます。
これでBypassingSafeAttachments Inspectorモジュールを作成しました。以上です!
365Inspectは、モジュール内の何かが動作しないか、365Inspectの規則に従っていない場合、かなり大きくて醜いエラーをスローします。そのため、コマンドライン出力を監視してください。
コミュニティの参加と貢献を歓迎します! 私たちの貢献ガイドラインをご確認ください。
365Inspectは、.\inspectorsフォルダに保存されている他のインスペクタースクリプトモジュールを実行するスクリプトハーネスです。昇格された特権で実行する可能性のある他のスクリプトと同様に、特定のセキュリティ衛生慣行を遵守する必要があります。
Soteriaは、インシデント対応、管理された検出と対応、セキュリティ評価、ペネトレーションテストなどを含む幅広いセキュリティおよびアドバイザリーソリューションを提供しています。あらゆるニーズにお応えしますので、お問い合わせください!
-Environment の有効な引数は次のとおりです:
注: アプリケーション認証を使用して 365Inspect を実行するには、前提条件があります。アプリケーション認証の要件 に進んでください。
365Inspect は、HTML(デフォルト値)、CSV、XML 形式へのレポート出力をサポートするようになりました。
たとえば、-ReportType パラメータを呼び出すことで CSV レポートを生成できます:
.\365Inspect.ps1 -OutPath ..\365_report -UserPrincipalName [email protected] -Auth MFA -ReportType CSV
365Inspect は、指定されたインスペクターモジュールのみを実行するか、逆に指定されたモジュールを除外して実行できます。
たとえば、MFA 対応のブラウザで資格情報を入力してログインする場合:
.\365Inspect.ps1 -OutPath ..\365_report -UserPrincipalName [email protected] -Auth MFA -SelectedInspectors inspector1, inspector2
または
.\365Inspect.ps1 -OutPath ..\365_report -Auth MFA -ExcludedInspectors inspector1, inspector2, inspector3
パラメータの詳細な説明:
OutPath は、365Inspect によって生成されたレポートが配置されるフォルダへのパスです。
Auth は、"MFA" または "ALREADY_AUTHED" のリテラル値のいずれかであるセレクタです。
SelectedInspectors は、365Inspect で実行するインスペクターの名前です。複数のインスペクターを選択する場合は、コンマで区切る必要があります。名前が指定されたインスペクターのみが実行されます。
ExcludedInspectors は、365Inspect で実行を禁止するインスペクターの名前です。複数のインスペクターを選択する場合は、コンマで区切る必要があります。除外されたモジュール以外のすべてのモジュールが実行されます。
UserPrincipalName - 評価者のユーザープリンシパル名。サポートされているモジュールで資格情報を入力する回数を減らすために含まれています。
ReportType - 生成されるレポートの出力形式。現在サポートされている値は、HTML(デフォルト)、CSV、XML です。
Environment - 標準外/コンシューマー向け Microsoft 365 テナントに接続するための Azure Cloud インスタンスを指定します。
365Inspect を -Auth MFA で実行すると、複数のグラフィカルなログインプロンプトが表示され、順番にログインする必要がある場合があります。これは正常な動作です。Exchange、SharePoint などには個別の管理モジュールがあり、それぞれ異なるログインセッションが必要だからです。要求された回数だけログインすれば、365Inspect は実行を開始します。これはあまり楽しいことではなく、回避策を模索していますが、結果は MFA コードを確認する 1 分間の価値があると考えています。