Microsoft 365 フォレンジック調査のメモ。
Unified Audit Log (UAL)
Entra ID、Exchange、SharePoint、OneDrive、Teams関連のアクティビティが記録される。ログの調査方法についてはこちらを参照。
以下はUALの主要なフィールド。
- Workload: ログを生成したアプリケーション名を表す。 例)SharePoint
- Record Type: Operation (後述)の論理グループを数字で表す。 例)6 (SharePointFileOperation)
- Operation: 具体的な操作内容を表す。例)FileAccessed
UALには以下の3つの方法でアクセスできる。
- Microsoft Purview Compliance Portal: Webポータル。UALをさっと確認したい場合に向いている。ログをCSVとしてエクスポートした場合、肝心のデータはJSON形式で
AuditDataというひとつのカラムに全てぶち込まれているので、Microsoft ExcelやLibreOffice Calcを使った調査には向いていない。 - Search-UnifiedAuditLog: PowerShellのコマンドレット。最大で5000レコードまで取得可能。
-resultsizeを指定しないと100レコードまでしか取得されない。コマンドの例はこちらを参照。 - Microsoft 365 Management API: API。大規模なUALの収集に向いている。(APIで定期的にUALを収集してSIEMへとインポートする)
Exchange
注意すべきExchange関連のオペレーション
- MailItemsAccessed: メールが閲覧もしくはアクセスされたことを示す。
- New-InboxRule: 新しい受信ルールが作成されたことを示す。攻撃者は本来のユーザーに攻撃活動を悟られないように、特定のメールを削除したり、別フォルダへ移動するような受信ルールを作成することが多々ある。
- Set-InboxRule: 既存の受信ルールが編集されたことを示す。
- UpdateInboxRules: 受信ルールの作成、編集、または削除を示す。
MoveToDeletedItems vs SoftDelete vs HardDelete
- MoveToDeletedItems: メールがDeleted Itemsフォルダに移動したことを示す。
- SoftDelete: メールが完全に削除された、もしくはDeleted Itemsフォルダから削除されたことを示す。SoftDeleteされたメールはRecoverable Itemsフォルダに移動する。
- HardDelete: メールがRecoverable Itemsフォルダから削除されたことを示す。
Bind vs Sync
- Bind: OWA、 IMAP、 POP3などの新しいバージョンのOutlookクライアントがメールにアクセスした場合に記録されるレコードで、アクセスしたメールのメッセージIDが記録される。メッセージIDを調べることで、どのメールがアクセスされたか確認できる。Record Typeは50。
- Sync: 古いバージョンのOutlookクライアントとMicrosoft Exchangeのフォルダが同期した際に記録されるレコード。Bindと異なりメッセージIDは記録されないので、どのメールがアクセスされたかを確認することはできない。どのフォルダが同期されたかは確認できる。Record Typeは2。
Message Trace vs Content Search
Exchange (メール) 関連のイベントを突っ込んで調査したい場合は、Message TraceやContent Searchを活用する。
- Message Trace: Exchange Admin Center -> Message Traceより、メールの送信者、受信者、メッセージIDに基づいた検索が可能。例えば、
evil@mail.comから送信されたメールを抽出するなど。メールの配送状態(受信されたか、破棄されたか、隔離されたかなど)のサマリーを確認できる。 - Content Search: Microsoft Purview Compliance Portal -> Content Searchより、メールのヘッダーのみならず、メール本文のキーワード検索が可能。また、メールのプレビューを参照したり、メールそのものをダウンロードすることも出来る。
SharePoint
注意すべきSharePoint関連のオペレーション
- FileAccessed: ファイルがアクセスされたことを示す。
- FileAccessedExtended: 特定のユーザーが長時間に渡って継続的にファイルにアクセスしたことを示す。
- FileModified: ファイルが編集されたことを示す。
- FileModifiedExtended: 特定のユーザーが長時間に渡って継続的にファイルを編集したことを示す。
- FileDownloaded: ファイルがダウンロードされたことを示す。攻撃者は攻撃活動の一環として、重要なファイルを自身のデバイスにダウンロードすることがある。
- FileUploaded: ファイルがアップロードされたことを示す。攻撃者は攻撃活動の一環として、ファイルをアップロードすることがある (フィッシングに使うファイルなど)。
- PageViewed: ページが閲覧されたことを示す。
- PageViewedExtended: 特定のユーザーが長時間に渡って継続的にページを閲覧したことを示す。
- FilePreviewed: SharePointやOneDrive上でファイルがプレビューされたことを示す。ユーザーが画像ギャラリーを閲覧した場合、大量のFilePreviewedオペレーションが記録される。
- SearchQueryPerformed: SharePointやOneDrive上で検索が行われたことを示す。攻撃者は目的のファイルを探すために検索を行うことがある。
- AnonymousLinkCreated: リソースへの匿名リンク (anonymous link)が作成されたことを示す。このリンクを使えば、誰でも認証無しでリンク先のリソースにアクセスできる。
- SecureLinkCreated: 特定のユーザーやグループのみがアクセスできるリンクが作成されたことを示す。アクセス権を持つユーザーやグループを確認するには、AddedToGroupオペレーションを参照する。
Entra ID
Entra IDとはMicrosoftのIdentity and Access Management (IAM) ソリューションである。Microsoft 365だけでなく、Microsoft Azureの認証も担う。Entra IDのログはUALとAzureポータルの両方に記録される。フォレンジック調査において特に重要なのはSign-in LogとAudit Logの2種類。
Sign-in Log
サインインに関するログが記録される。Sign-in Logはさらに以下の5種類に分けられる。
- Interactive Sign-in Log: ユーザーによるサインインが記録される。
- Non-interactive Sign-in Log: クライアントアプリケーションやOSによるサインインが記録される。
- Service Principal Sign-in Log: 非ユーザーアカウントによるサインインが記録される。 (主にGraph APIによるサインイン)
- Managed Identity Sign-in Log: Azureによってシークレットが管理されているリソースによるサインインが記録される。
- ADFS Sign-in Log: Active Directory Federation Services (ADFS) によるサインインが記録される。
Audit Log
テナントレベルで実行されたタスク (アプリケーション、ユーザー、Service Principalの作成・変更など) が記録される。以下はオペレーションの一例。
- Add service principal
- Consent to application
- Remove delegated permission grant
- Update device
Microsoft Graph API
Microsoft GraphとはMicrosoft 365やAzureとやり取りするためのRESTfulなAPIである。https://graph.microsoft.comにリクエストを送信してやり取りを行う。
- GET: リソースを取得する。(
GET /users) - POST: リソースを新規作成する。(
POST /users) - PATCH: 既存のリソースを変更する。変更する箇所の情報のみを指定すればオーケー。(
PATCH /users/<id|userPrincipalName>) - PUT: 既存のリソースを変更する。変更する箇所にかかわらず、すべての情報を指定しなければならない。(
PUT /users/<id|userPrincipalName>) - DELETE: リソースを削除する。(
DELETE /users/<id|userPrincipalName>)
Microsoft Graph APIを利用するには、以下の手順を踏む必要がある。
- Entra IDにてアプリケーションを登録する。
- アプリケーションのパーミッションを設定する。
- Administratorから許可をもらう。
- アクセストークンを要求する。
- Graph APIを実行する。
APIの実行履歴はMicrosoft Graph Activity Logに記録される。ただしAPIによってもたらされた変更結果は記録されない。 (Audit LogやSubscription Logなど、ほかのログを併せて参照する必要がある)
以下はフォレンジック調査で注視すべきMicrosoft Graph Activity Logのフィールド。
- AppId: APIを実行したアプリケーションのGUID。
- ServicePrincipalId: APIを実行したservice principalのGUID。
- IPAddress: APIを実行したIPアドレス。大抵の場合はMicrosoftのIPアドレスが記録されるが、カスタムアプリケーションからAPIが実行された場合、Microsoft以外のIPアドレスが記録されることがある。
- RequestUri: APIのリクエスト先。
- RequestMethod: リクエストの種類。 (GET, POST ,PUT, PATCH, DELETE)
- RequestStatusCode: リクエストに対する応答コード。 (リクエスト成功なら200)
- Roles/Scopes: APIの実行に使用されたトークンのロールとスコープ。
Microsoft Graph Activity LogにはAPIを実行したアプリケーションの名前は記録されないことに注意。
アプリケーションの名前を特定したい場合は、アプリケーションのGUIDを取っ掛かりにしてAudit LogやUALを調べる。