Compact
true
担当領域:セキュリティ技術センター リスクハンティングチーム
NECがお客様に納品したシステムに対するインシデント対応、Web診断などの業務に従事。RISS、CISSP Associate、CEHを保持。

NECサイバーセキュリティ戦略統括部セキュリティ技術センターの加来です。

Microsoft 365はMicrosoft社が提供しているクラウドサービスで、メールや予定表の機能を持つExchange Online、ドキュメントの共有やポータルサイトの作成が可能なSharePoint Online等のビジネスシーンで活用できるアプリケーションが多数存在します。本ブログでは、Microsoft組織アカウントが侵害された際に、SharePoint Onlineにて想定される不審なアクティビティを検証環境で実施して、その際に記録された痕跡を共有します。

SharePoint Onlineの機能

SharePoint Online[1]には、組織内での情報共有・共同作業を実施するために必要な機能が備わっています。その中でもサイトの作成・ドキュメントの共同編集・リストでの情報管理をここでは簡単に説明します。

サイトの作成

SharePoint Onlineではサイトという単位のワークスペースが使用されています。利用者はまずサイトを作成して、そのサイト上にメンバーを追加、ドキュメントの配置、リストの作成などを実施していきます。

サイトの様子
サイトの様子
100

ドキュメントの共同編集

サイトのメンバー間でドキュメントを共同編集することができます。OneDriveでもファイルを管理することはできますが、OneDriveは基本的に個人で使うことを想定しているため、SharePointの方が共有の設定が煩雑にならずに済みます。

共同編集用にアップロードされたドキュメントの様子
共同編集用にアップロードされたドキュメントの様子
100

リストでの情報管理

リストという機能でも情報を管理することができます。リストは簡易的なデータベースのようなイメージで、Microsoft 365の他のアプリケーションと親和性が高いという特徴があります。

リストの様子
リストの様子
100

本ブログでは、このサイト・ドキュメント・リストに対する操作の痕跡を確認していきます。

シナリオ

2025年1月22日に攻撃者が架空の従業員Sato TaroのMicrosoft組織アカウントを侵害した後に以下の表の操作を実施したと仮定して、その際に記録された痕跡を確認します。Sato Taroはサイト「test-site」の所有者権限を保有しています。

時刻(UTC)
1
1
操作の種類
1
1
アクティビティ
1
1
10:21
1
1
サインイン
1
1
攻撃者がSato Taroとしてログイン
1
1
10:22
1
1
サイトに対する操作
3
1
サイト「test-site」にアクセス
1
1
10:23
1
1
1
1
サイト内検索を「Secret」というキーワードで実施
1
1
10:26
1
1
1
1
サイト「test-site」に外部ユーザーを追加
1
1
10:27
1
1
ドキュメントに対する操作
10
1
Secret.docxを参照
1
1
10:28
1
1
1
1
Secret.docxをダウンロード
1
1
10:30
1
1
1
1
Secret.docxを外部ユーザーに共有
1
1
10:31
1
1
1
1
Confidetial.docxをアップロード
1
1
10:32
1
1
1
1
Confidetial.docxを編集
1
1
10:33
1
1
1
1
Confidetial.docxをPrivateInfo.docxに名前変更
1
1
10:35
1
1
1
1
PrivateInfo.docxをtest_copyフォルダにコピー
1
1
10:37
1
1
1
1
PrivateInfo.docxをtest_moveフォルダに移動
1
1
10:38
1
1
1
1
PrivateInfo.docxを削除(ごみ箱にいれる)
1
1
10:39
1
1
1
1
PrivateInfo.docxをごみ箱からも削除
1
1
10:41
1
1
リストに対する操作
4
1
ClientListを参照
1
1
10:42
1
1
1
1
ClientListのレコードにアクセス
1
1
10:43
1
1
1
1
ClientListをcsvファイルにエクスポート
1
1
10:44
1
1
1
1
ClientListを外部ユーザーに共有
1
1

調査に活用するログ

今回の調査では、EntraIDサインインログ[2]とUnified Audit Log(統合監査ログ)を活用します。

EntraIDサインインログ

Microsoft365のサービスを使用する際にはMicrosoft組織アカウントが必要になります。組織アカウントはMicrosoft EntraIDというサービスで管理されており、EntraIDでの認証に関連する痕跡はEntraIDサインインログに記録されます。

Unified Audit Log

Unified Audit Logは、Microsoft365の各アプリケーションに対して行われた操作を統合的に確認することができるログです。SharePoint Onlineの他にExchange OnlineやOneDrive for Business等のアプリケーションのログも確認できます。RecordTypeというフィールドで記録されるログが種類ごとに分類されており、公式ドキュメント[3]でRecordTypeを確認すると様々なアプリケーションのログが記録されることが分かります。

RecordType(一部抜粋)
RecordType(一部抜粋)
100

またOperationというフィールドに操作の内容が記録されているため、Operationフィールドを確認するとどんな操作を実行したか特定することができます。公式ドキュメント[4]にOperationの一覧がまとめられています。

SharePoint OnlineおよびOneDrive for Business内のファイルに対するOperation(一部抜粋)
SharePoint OnlineおよびOneDrive for Business内のファイルに対するOperation(一部抜粋)
100

ログの保持期間

各ログの保持期間は以下の表の通り、契約しているライセンスによって異なります。

ログ
1
1
ライセンス
1
1
保持期間
1
1
EntraIDサインインログ[5]
2
1
EntraID Free
1
1
7日間
1
1
1
1
EntraID P1 & P2
1
1
30日間
1
1
Unified Audit Log[6]
2
1
Audit(Standard)
1
1
180日間
1
1
1
1
Audit(Premium)
1
1
最大10年間
1
1

ログの収集手順

今回ログ収集にはMicrosoft-Extractor-Suite[7]を使います。ドキュメント[8]も整備されており、おすすめのログ収集ツールです。
手順を以下に示します。

1. PowerShellを起動して、こちら[9]の手順に従い必要なモジュールをインストール

2.以下のコマンドレットでサインイン

Connect-M365
Connect-Azure

3. 以下のコマンドレッドで対象期間のEntraIDサインインログを収集

Get-EntraSignInLogs -startDate 2025-01-23 -endDate 2025-01-24 -OutputDir .\Output

4. 以下のコマンドレッドで対象期間のUnified Audit Logを収集

Get-UAL -StartDate 1/23/2025 -EndDate 1/24/2025 -Output JSON -OutputDir .\Output

5. OutputフォルダにEntraIDサインインログ「SignInLogs-20250123-20250124.json」、Unified Audit Log「UAL-2025012300000000-20250123150000.json」が保存されていることを確認

100

痕跡

収集したEntraIDサインインログとUnified Audit Logを解析していきます。今回監査対象となっているSato TaroのMicrosoft組織アカウントは「高度な監査」を有効化しているアカウントになります[10]。

サインインの痕跡

EntraIDサインインログ、Unified Audit Logの両方にサインインの痕跡は記録されています。Unified Audit Logでは認証以外の痕跡も記録されていたため、RecordTypeを「15(AzureActiveDirectoryStsLogon)」、Operationを「UserLoggedIn」にすると今回のシナリオのサインインの痕跡を発見することができました。不審なサインインのイベントを発見した際は、以下の表のようなフィールドの値を控えておくことが大切です。これらの値を使ってログをフィルタリングすることで、後の調査を効率的に進めることができます。例えば、Unified Audit LogのUserIdフィールドはSato Taroのメールアドレス「staro@<snip>.onmicrosoft.com」であったため、以降のUnified Audit Logの解析ではUserIdが「staro@<snip>.onmicrosoft.com」のレコードに注目するといった具合です。

ログの種類
1
1
フィールド名
1
1
説明
1
1
EntraIDサインインログ
3
1
UserPrincipalName
1
1
ユーザー名(メールアドレス形式)
1
1
1
1
UserId
1
1
ユーザーId(GUID形式)
1
1
1
1
IpAddress
1
1
送信元IPアドレス
1
1
Unified Audit Log
5
1
UserId
1
1
ユーザー名(メールアドレス形式)
1
1
1
1
UserKey
1
1
ユーザーId(GUID形式)
1
1
1
1
ClientIP
1
1
送信元IPアドレス
1
1
1
1
ExtendedProperties.UserAgent
1
1
操作を実行したアプリケーションの情報
1
1
1
1
DeviceProperties.Value(DeviceProperties.Name=SessionId)
1
1
セッションId(GUID形式)
1
1

サイトに対する操作の痕跡

以降はUnified Audit Logのみ確認していきます。シナリオで記載したアクティビティに対応するRecordType、Operation、その他操作に関連するフィールドの値を表形式で記載します。各フィールドの定義は公式ドキュメント[11]をご確認ください。確認したレコードのRecordTypeは2(ExchangeItem)、4(SharePoint)、8(AzureActiveDirectory)でした。

アクティビティ
1
1
RecordType
1
1
Operation
1
1
その他フィールド
1
1
サイト「test-site」のホームページにアクセス
1
1
4
1
1
PageViewd
1
1
ObjectId: https://<snip>.sharepoint.com/sites/test-site/SitePages/CollabHome.aspx
1
1
サイト内検索を「Secret」というキーワードで実施
1
1
記録されず※
1
3
1
1
1
1
サイト「test-site」に外部ユーザーを追加
2
1
8
1
1
Add Member to group.
1
1
ObjectId:<外部ユーザーのメールアドレス>#EXT#@<snip>.onmicrosoft.com
ModifiedProperties.NewValue:test-site
(ModifiedProperties.Name=Group.DisplayName)
1
1
1
1
2
1
1
Send
1
1
Item.Subject: Taro Sato added you to the test-site group
1
1

※ 検索イベントについてOperation「SearchQueryInitiatedSharePoint」を記録させることができれば、検索キーワード込みで検索のログを確認することができます。デフォルトでは無効であったため記録されませんでしたが、以下のコマンドを実行すると記録されました
[12]。また今回はもともと有効にしていましたが、「高度な監査」も有効化する必要があります。

Set-Mailbox <ユーザー名> -AuditOwner @{Add="SearchQueryInitiated"}

上記操作を実施した後、以下の表のような記録を確認しました。

アクティビティ
1
1
RecordType
1
1
Operation
1
1
その他フィールド
1
1
サイト内検索を「Secret」というキーワードで実施
1
1
102(SharePointSearch)
1
1
SearchQueryInitiatedSharePoint
1
1
QueryText: Secret
1
1

ドキュメントに対する操作の痕跡

ドキュメントに対する操作の痕跡をまとめたものを以下の表に示します。確認したレコードのRecordTypeは2(ExchangeItem)、6(SharePointFileOperation)、14(SharePointSharingOperation)でした。

アクティビティ
1
1
RecordType
1
1
Operation
1
1
その他フィールド
1
1
Secret.docxを参照
1
1
6
1
1
FileAccessed
1
1
SourceRelativeUrl: Shared Documents
SourceFileName: Secret.docx
1
1
Secret.docxをダウンロード
1
1
6
1
1
FileDownloaded
1
1
SourceRelativeUrl: Shared Documents
SourceFileName: Secret.docx
1
1
Secret.docxを外部ユーザーに共有
2
1
14
1
1
SharingSet
1
1
SourceRelativeUrl: Shared Documents/Secret.docx
SourceFileName: Secret.docx
TargetUserOrGroupName: <外部ユーザーのメールアドレス>#ext#@<snip>.onmicrosoft.com
1
1
1
1
2
1
1
Send
1
1
Item.Subject: Taro Sato shared \"Secret\" with you
1
1
Confidetial.docxをアップロード
1
1
6
1
1
FileUploaded
1
1
SourceRelativeUrl: Shared Documents
SourceFileName: Confidential.docx
1
1
Confidetial.docxを編集
1
1
6
1
1
FileModified
1
1
SourceRelativeUrl: Shared Documents
SourceFileName: Confidential.docx
1
1
Confidetial.docxをPrivateInfo.docxに名前変更
1
1
6
1
1
FileRenamed
1
1
SourceRelativeUrl: Shared Documents
SourceFileName: Confidential.docx
DestinationRelativeUrl: Shared Documents
DestinationFileName: PrivateInfo.docx
1
1
PrivateInfo.docxをtest_copyフォルダにコピー
1
1
6
1
1
FileCopied
1
1
SourceRelativeUrl: Shared Documents
SourceFileName: PrivateInfo.docx
DestinationRelativeUrl: Shared Documents/test_copy
DestinationFileName: PrivateInfo.docx
1
1
PrivateInfo.docxをtest_movフォルダに移動
1
1
6
1
1
FileMoved
1
1
SourceRelativeUrl: Shared Documents
SourceFileName: PrivateInfo.docx
DestinationRelativeUrl: Shared Documents/test_move
DestinationFileName: PrivateInfo.docx
1
1
PrivateInfo.docxを削除(ごみ箱にいれる)
1
1
6
1
1
FileRecycled
1
1
SourceRelativeUrl: Shared Documents/test_move
SourcefileName: PrivateInfo.docx
1
1
PrivateInfo.docxをごみ箱からも削除
1
1
6
1
1
FileDeletedFirstStageRecycleBin
1
1
SourceRelativeUrl: sites/test-site/Shared Documents/test_move
SourceFileName: PrivateInfo.docx
1
1

リストに対する操作の痕跡

リストに対する操作の痕跡をまとめたものを以下の表に示します。確認したレコードのRecordTypeは2(ExchangeItem)、36(SharePointListOperation)でした。

アクティビティ
1
1
RecordType
1
1
Operation
1
1
その他フィールド
1
1
ClientListを参照
1
1
36
1
1
ListViewed
1
1
ListName: ClientList
ListUrl: /sites/test-site/Lists/ClientList
1
1
ClientListのレコードにアクセス
1
1
36
1
1
ListItemViewed
1
1
ListName: ClientList
ListUrl: /sites/test-site/Lists/ClientList
ListItemUniqueId: <リストItemのユニークID(GUID形式)>
1
1
ClientListをcsvファイルにエクスポート
1
1
記録されず※
1
3
1
1
1
1
ClientListを外部ユーザーに共有
1
1
2
1
1
Send
1
1
Item.Subject: Taro Sato shared "ClientList" with you
1
1

※ Listをエクスポートした際のログは今回の検証では記録されませんでした。ドキュメントでリストに対する操作一覧を確認してもエクスポートの記載はない
[13](2025/2/3時点)ため、今回はスキップします。

まとめ

最後まで読んでいただきありがとうございました。今回検証してみて分かりましたが、Unified Audit Logはドキュメントが充実しているため、一度ログの形式に慣れてしまえばドキュメントを確認しつつ幅広い攻撃に対応できると筆者は考えます。皆様が調査をされる際の一助になれば幸いです。

参考文献

[1] SharePoint公式サイト
https://www.microsoft.com/ja-jp/microsoft-365/sharepoint/collaboration/

[2] Microsoft Entra サインイン ログとは
https://learn.microsoft.com/ja-jp/entra/identity/monitoring-health/concept-sign-ins

[3] Office 365 管理アクティビティAPIのスキーマ(AuditLogRecordType)
https://learn.microsoft.com/ja-jp/office/office-365-management-api/office-365-management-activity-api-schema#auditlogrecordtype

[4] 監査ログアクティビティ
https://learn.microsoft.com/ja-jp/purview/audit-log-activities

[5] Microsoft Entraのデータ保持(アクティビティレポート)
https://learn.microsoft.com/ja-jp/entra/identity/monitoring-health/reference-reports-data-retention#activity-reports

[6] Microsoft Purviewの監査ソリューションについて説明します
https://learn.microsoft.com/ja-jp/purview/audit-solutions-overview

[7] Microsoft-Extractor-Suite(Github)
https://github.com/invictus-ir/Microsoft-Extractor-Suite

[8] Microsoft Extractor Suiteドキュメント
https://microsoft-365-extractor-suite.readthedocs.io/en/latest/index.html

[9] Microsoft Extractor Suiteドキュメント(モジュールのインストール)
https://microsoft-365-extractor-suite.readthedocs.io/en/latest/installation/Installation.html#installation

[10] 監査ソリューションの概要(手順 4: ユーザーの監査 (Premium) を設定する)
https://learn.microsoft.com/ja-jp/purview/audit-get-started#step-4-set-up-audit-premium-for-users

[11] 監査ログの詳細なアクティビティ プロパティ
https://learn.microsoft.com/ja-jp/purview/audit-log-detailed-properties

[12] 監査ソリューションの概要(手順 3: SearchQueryInitiated イベントを有効にする)
https://learn.microsoft.com/ja-jp/purview/audit-get-started#step-3-enable-searchqueryinitiated-events

[13] 監査ログアクティビティ(SharePoint リスト アクティビティ)
https://learn.microsoft.com/ja-jp/purview/audit-log-activities#sharepoint-list-activities

執筆者プロフィール

執筆者
original
50

加来 大輔(かく だいすけ)
セキュリティ技術センター リスクハンティングチーム

NECがお客様に納品したシステムに対するインシデント対応、Web診断などの業務に従事。
RISS、CISSP Associate、CEHを保持。