Japan

関連リンク

関連リンク

関連リンク

関連リンク

サイト内の現在位置

Microsoft 365 SharePoint Onlineのフォレンジック

NECセキュリティブログ

2025年2月14日

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

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

目次

SharePoint Onlineの機能

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

サイトの作成

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

サイトの様子

ドキュメントの共同編集

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

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

リストでの情報管理

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

リストの様子

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

シナリオ

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

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

調査に活用するログ

今回の調査では、EntraIDサインインログnew window[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というフィールドで記録されるログが種類ごとに分類されており、公式ドキュメントnew window[3]でRecordTypeを確認すると様々なアプリケーションのログが記録されることが分かります。

RecordType(一部抜粋)

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

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

ログの保持期間

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

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

ログの収集手順

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

1. PowerShellを起動して、こちらnew window[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」が保存されていることを確認

痕跡

収集したEntraIDサインインログとUnified Audit Logを解析していきます。今回監査対象となっているSato TaroのMicrosoft組織アカウントは「高度な監査」を有効化しているアカウントになりますnew window[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」のレコードに注目するといった具合です。

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

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

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

アクティビティ RecordType Operation その他フィールド
サイト「test-site」のホームページにアクセス 4 PageViewd ObjectId: https://<snip>.sharepoint.com/sites/test-site/SitePages/CollabHome.aspx
サイト内検索を「Secret」というキーワードで実施 記録されず※
サイト「test-site」に外部ユーザーを追加 8 Add Member to group. ObjectId:<外部ユーザーのメールアドレス>#EXT#@<snip>.onmicrosoft.com
ModifiedProperties.NewValue:test-site
(ModifiedProperties.Name=Group.DisplayName)
2 Send Item.Subject: Taro Sato added you to the test-site group
  • 検索イベントについてOperation「SearchQueryInitiatedSharePoint」を記録させることができれば、検索キーワード込みで検索のログを確認することができます。デフォルトでは無効であったため記録されませんでしたが、以下のコマンドを実行すると記録されましたnew window[12]。また今回はもともと有効にしていましたが、「高度な監査」も有効化する必要があります。

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

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

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

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

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

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

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

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

アクティビティ RecordType Operation その他フィールド
ClientListを参照 36 ListViewed ListName: ClientList
ListUrl: /sites/test-site/Lists/ClientList
ClientListのレコードにアクセス 36 ListItemViewed ListName: ClientList
ListUrl: /sites/test-site/Lists/ClientList
ListItemUniqueId: <リストItemのユニークID(GUID形式)>
ClientListをcsvファイルにエクスポート 記録されず※
ClientListを外部ユーザーに共有 2 Send Item.Subject: Taro Sato shared "ClientList" with you
  • Listをエクスポートした際のログは今回の検証では記録されませんでした。ドキュメントでリストに対する操作一覧を確認してもエクスポートの記載はないnew window[13](2025/2/3時点)ため、今回はスキップします。

まとめ

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

参考文献

執筆者プロフィール

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

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

執筆者の他の記事を読む

Escキーで閉じる 閉じる