マネージド&セキュリティサービス部 セキュリティサービス部門 インシデントレスポンスチームの濱崎と戸祭です。 今回は、Microsoft社がMicrosoft 365 (Office 365) 内で提供するビジネスメールサービス「Microsoft Exchange Online」の監査ログについて、不正アクセスの観点でお話します。
本記事は前後編に分かれており、前編ではログの概要と取得について説明します。
後編ではログを記録しておくための設定について説明します。
はじめに
Microsoft Exchange Onlineへの不正アクセスが発生した場合、いつ発生したか、どのアカウントが被害にあったか、どのようなデータが閲覧・持ち出されたか、どのような攻撃の踏み台にされたか、などを明らかにする必要があります。
ところが、Microsoft Exchange OnlineはAzureAD等いくつかのコンポーネントが連携しあって提供されており、調査に必要なログもまとまって管理されていません。また、Microsoft公式ドキュメントでも、どこにどのようなログが保存されているかインシデントレスポンスの観点で体系的にまとめられたものがありません。加えて、GUIでのログ閲覧機能では一部の情報が欠落するなどの問題があることが知られています。
いざというときにこのような調査ができるよう、事前に把握・準備しておくべき次の内容について簡単にまとめて紹介します。
- 不正アクセス調査に備えて取得すべきログの種類 (前編)
- ログの取得方法(前編)
- ログの設定方法(後編)
なお、本記事の内容は、2021年9月執筆時点での公開情報とNTT Com IRチームで検証用に取得したライセンスでの検証結果に基づきます。商用ライセンスのグレードや契約形態によって、一部異なる事実が含まれる可能性があります。また、Microsoft社は不定期に仕様を変更しています。今後も仕様が変わる可能性がある点、ご了承ください。
目次
Microsoft Exchange Onlineとは
Microsoft Exchange Onlineは、Microsoft社が提供するメールホスティングサービスであり、同社が古くから提供しているMicrosoft Exchange Server機能をクラウド上で提供するものです。構築や運用の難易度が高いExchange Serverの管理から解放されること、また事業の継続性の確保(BCP) や柔軟な働き方を支援するインフラに適していることから、多くの企業に導入されています。
一方で、攻撃者目線に立つと、世界中のどこからでもアクセス可能なメールサーバの存在は、メールデータの窃取が従来に比べて行いやすくなることを意味します。実際、ニュースや報道においてMicrosoft 365への不正アクセス事例が数多く報告されており、NTT Comにおいても相談数が増えているのが現状です。また、以前にNTT Comの旧技術ブログで紹介したように、ラテラルフィッシング攻撃も問題となっています。これらの攻撃の有無を確認するためにログが重要な情報源となります1。
不正アクセス調査時に有用なログ
Microsoft Exchange OnlineはMicrosoft 365の一部として提供されています。また、Microsoft 365はAzureADをID管理として利用しているなど、いくつかのコンポーネントが連携しています。それぞれのコンポーネントがログを取得しており、ログの粒度や内容も異なることが、インシデントレスポンスにおけるログ調査を複雑にします2。
上図のように、Azure ADやExchange Online等の各種サービスのログ情報の一部が、左のUnified Audit Logに収集されます。 しかしUnified Audit Logのみを見ればよいわけではありません。完全に同じログが収集されるわけではないためです。
以降では、それぞれのコンポーネントにおけるログサービスの名称や機能のうち特に不正アクセス調査に有用なログを紹介します。
Microsoft 365のUnified Audit Log (統合監査ログ)
- Microsoft 365が提供する各アプリケーション(Exchange Online, Sharepoint等)の監査ログを統合管理したもの
- 各アプリのそれぞれのログのうち、一部がUnified Audit Logに転送される
- AzureADのサインインログやExchange Onlineの転送ルールの作成等が含まれるため、調査に有用
- 主に次の3つの方法で閲覧、ダウンロード可能*1
- Microsoft 365 コンプライアンスセンター > ソリューション > 監査
- Exchange Online Powershellを利用したダウンロード 3
- APIでのダウンロード
Azure Active Direcotryのサインインログ4
- ユーザのサインインに関する記録を提供
- サインインに関する、日時、ユーザ名、送信元IPアドレス、サインインに使用したアプリケーション名、ブラウザ名等が記録されている
- 意図しないサインインかどうかの判定に利用可能
- 次の3つの方法で閲覧、ダウンロード可能
Exchange Onlineの監査ログ
- 主にMailbox Audit Log(メールボックス監査ログ)と Admin Audit Log(管理者監査ログ)に記録
- 各メールボックスに対するログインやメールアイテムの削除、受信ルールの追加/削除/変更などのログを提供
- メール閲覧、検索のログを提供(「高度な監査」が使用できるライセンスでのみ利用可能)
- SessionIdを使いログインと操作のログを紐づけ7、攻撃者によるメール閲覧履歴や転送ルールの作成や削除されたスパムメール送信履歴の調査などに利用可能
- 主に次の3つの方法で閲覧、ダウンロード可能
Exchange OnlineのMessage Trace ログ (メッセージ追跡ログ)
- メールの送受信ログを提供
- 攻撃者によるメール転送やスパム攻撃の踏み台有無の調査に利用可能
- 主に次の3つの方法で閲覧、ダウンロード可能
ログ取得
推奨するログ取得方法や、実際の手順をコマンドレベルで説明します。
インシデント発生時の初動対応としてのログ保全や、平時に期限切れで消えてしまうログの定期的な保全などにお役立てください。
ただしログを記録しておくための設定をしておかないと、一部取得できないログがあります。設定方法については後編で説明するため、そちらも併せて参照することを推奨します。
Powershell vs 管理センター(ブラウザ)vs API
ログを取得する手段としていくつかの方法が提供されていますが、NTT ComではPowershellコマンドレットでの取得を推奨しています。
Web の管理センター経由のログダウンロードでは一部のログの欠損が確認されています。その旨通知は出ずログの欠損に気付くことができないため、信頼できるログ取得の観点からは不向きと言えます。
一方でPowershellの場合、ログが欠損せず信頼性の点で優れています。さらにログ取得操作の自動化が容易で、そのため簡易的な操作で多くのログを扱えるログ取得ツールが有志により提供されています。以上の点でPowershellの使用を推奨します。
なお、APIも同様に信頼性と自動化の利点を持ち、ツールやシステムに組み込む際には有用です。しかし単に情報取得に使うには使用方法が複雑であるため、Powershell のほうが使いやすいと考えます。
注意点として、Powershellでたくさんのリクエストを送ると一定時間ロックされる可能性があるため、適切にリクエストレートを制限する必要があります。
ログ取得実施手順の概要
すべてのログをダウンロードすることが望ましいと言えますが、ログのダウンロード数上限やログサイズの観点から、ユーザ数の多い環境では一部のログのみダウンロードすることが現実解と言えます。
ここでは、NTT Comにおける調査に最低限必要なログをダウンロードする方法を紹介します。
なお、大規模テナントの場合、これらの方法でもダウンロード数上限に達し十分なログが取れない場合があります。大規模テナントをご利用されている場合は、SIEMの使用を推奨します。
ログの取得は次の流れで行います。
- 攻撃に関与したユーザを特定するため、サインインログを中心とした全ユーザに関するログ取得
- 1の解析により判明した攻撃に関与したユーザの詳細ログ取得
これらのログを取得するため、NTT Comでは次の2つのツールを利用します。これらの使い方について詳細に説明します。
事前準備
各種ツールの日本語対応
HAWKやOffice 365 Extractorは現時点では日本語に完全対応はしていないためCSVに日本語が出力できません。これを回避するため Powershell console 上で次のコマンドを実行してから各種ツールを実行してください。
function Export-Csv(){ $input | Microsoft.PowerShell.Utility\Export-Csv @args -Encoding UTF8 }
なお、一度 Poweshell console を閉じると、上記設定は無効化されます。Powershell console 起動の都度実行してください。
ExchangeOnlineManagement module のインストール
Install-Module -Name ExchangeOnlineManagement
1. 全ユーザに関するログの取得
HAWKでのログ取得
次の通りにPowershellでコマンドを打ち、HAWKでログ取得します。
# HAWKのインストール > Install-Module -Name HAWK # HAWKを使う準備 > Import-Module HAWK # テナントの全ユーザについてログ取得 > Start-HawkTenantInvestigation
実行途中で指定したフォルダに、結果のファイルが出力されます。
Office 365 Extractorでのログ取得
Office 365 Extractorをダウンロードした後、スクリプトを実行します。
> .\Office365_Extractor.ps1
特定の種類のログを取得するため、3を入力します。
Following actions are supported by this script: 1 Show available log sources and amount of logging 2 Extract all audit logging 3 Extract group audit logging 4 Extract specific audit logging (advanced mode) 5 ReadMe 6 Quit Select an action: 3
取得したいログ種別としてAzureを選択するため、2を入力します。
1: Extract all Exchange logging 2: Extract all Azure logging 3: Extract all Sharepoint logging 4: Extract all Skype logging 5: Back to menu Select an action: 2
取得対象とするユーザとして全ユーザを指定するため、1を入力します。
Would you like to extract log events for [1]All users or [2]Specific users >: 1 Extracting the Unified Audit Log for all users...
取得期間を入力します。Enterキーだけを押すと本日から90日間前までが設定されます。
Please enter start date (format: yyyy-MM-dd) or ENTER for maximum 90 days: Please enter end date (format: yyyy-MM-dd) or ENTER for today:
取得間隔を分単位で入力します。
ログ取得に利用しているExchangeOnlinePowershellが一度に5,000件までしか取得できないため、細かく分割して取得することでその制限を回避するための設定です。
短くしすぎると、取得間隔を短くしてのリトライが発生して効率が落ちます。
ログが少ない環境では14400分(10日間)など長くすると早く終わります。
Recommended interval: 60 Lower the time interval for environments with a high log volume Please enter a time interval or ENTER for 60: 14400
この後、認証が求められますが、多要素認証を設定している場合は、最初に出る認証画面はキャンセルを押してください。次に別な認証画面が出るので、そちらでログインしてください。ログ取得が実行され、結果はファイルとしてカレントフォルダに出力されます。
2. 攻撃に関与した疑いのあるユーザのログ取得
全ユーザに関するログの分析により判明した(もしくはすでに明らかになっている)攻撃に関与した疑いのある特定ユーザごとに、より詳細なログを取得します。
可能であれば全ユーザに対して詳細なログを取得することが望ましいですが、ユーザ数が多い場合は現実的でないため、攻撃者の関与が疑われるメールアカウントに限定して取得しています。
HAWKでのログ取得
> Start-HawkUserInvestigation <ユーザのメールアドレス>
Office 365 Extractorでのログ取得
スクリプトを実行します。
> .\Office365_Extractor.ps1
全種別のログを取得するため、2を入力します。
Following actions are supported by this script: 1 Show available log sources and amount of logging 2 Extract all audit logging 3 Extract group audit logging 4 Extract specific audit logging (advanced mode) 5 ReadMe 6 Quit Select an action: 2
取得対象として特定ユーザを指定するため、2を入力します。
Would you like to extract log events for [1]All users or [2]Specific users >:2
ログを取得したいユーザのメールアドレスをカンマ区切りで入力します。
Provide accounts that you wish to acquire, use comma separated values for multiple accounts, example (user1@example.com,user2@example.com) >: user1@example.com, user2@example.com
これ以降の手順はテナントの全ユーザのログ取得時と同様です。
MessageTraceログの取得
最後に、攻撃者の関与が疑われる特定ユーザに関して、MessageTraceからメールの送受信ログを取得します。
本手順により最大で過去90日、50,000件のログが取得可能です。(過去10日以内の最大1,000件のデータで十分でしたら Get-MessageTrace
コマンドレットを使用する方がより簡単です。)
まずExchange Online Powershellに接続します。管理者権限のあるアカウントを使用してください。
> Import-Module ExchangeOnlineManagement > Connect-ExchangeOnline -UserPrincipalName <User Principal Name, メールアドレス等>
ログ生成クエリを発行します。
(例では -SenderAddress
で送信アドレスを指定しています。 -RecipientAddress
を使えば受信アドレスを指定できます。)
> Start-HistoricalSearch -ReportTitle "test" -StartDate 2019/12/1 -EndDate 2020/1/20 -ReportType MessageTrace -SenderAddress adminuser1@example.com JobId SubmitDate ReportTitle Status Rows ErrorCode ErrorDescription ----- ---------- ----------- ------ ---- --------- ---------------- 7308a7ca-2a05-46cf-XXXX-XXXXXXXXXXXX 2020/01/15 6:24:53 test NotStarted 0
タスクの進行状況を確認します。 StatusがNotStartedになっているためまだ開始されていません。
> Get-HistoricalSearch JobId SubmitDate ReportTitle Status Rows ErrorCode ErrorDescription ----- ---------- ----------- ------ ---- --------- ---------------- 7308a7ca-2a05-46cf-XXXX-XXXXXXXXXXXX 2020/01/15 6:24:53 test NotStarted 0
タスクの進行状況を確認します。 StatusがInProgressになっているため実行中です。
> Get-HistoricalSearch JobId SubmitDate ReportTitle Status Rows ErrorCode ErrorDescription ----- ---------- ----------- ------ ---- --------- ---------------- 7308a7ca-2a05-46cf-XXXX-XXXXXXXXXXXX 2020/01/15 6:24:53 test InProgress 0
タスクの進行状況を確認します。 StatusがDoneになっているため実行完了しています。
> Get-HistoricalSearch JobId SubmitDate ReportTitle Status Rows ErrorCode ErrorDescription ----- ---------- ----------- ------ ---- --------- ---------------- 7308a7ca-2a05-46cf-XXXX-XXXXXXXXXXXX 2020/01/15 6:24:53 test Done 2
JobIdを指定し詳細情報を確認します。下記のFileUrlに記載のURLに、ブラウザでアクセスしログをダウンロードできます。
> Get-HistoricalSearch -JobId 7308a7ca-2a05-46cf-XXXX-XXXXXXXXXXXX | Format-List (...略...) FileUrl : https://admin.protection.outlook.com/ExtendedReport/Download?Type=OnDemandReport&RequestID=7308a7ca-2a05-46cf-XXXX-XXXXXXXXXXXX ReportStatusDescription : Complete – Ready for download ReportType : MessageTrace (...略...)
まとめ
本記事では Microsoft Exchange Online 関係のログの概要と、ログ取得方法を説明しました。
どのようなログが取れるかを知っておくことは、いざというとき有効活用するために必要不可欠です。
その一助となるべく公開された本記事をご活用いただけると幸いです。
冒頭で述べたとおり、後編ではログを記録しておくための設定について説明します。よろしければそちらもご覧ください。
-
https://developer.ntt.com/ja/blog/b097ce00-8942-43c6-bad4-842087f8dc6b↩
-
https://blogs.technet.microsoft.com/junichia/2015/10/28/office-365-azure-adintuneazure-rms/↩
-
https://docs.microsoft.com/ja-jp/powershell/module/exchange/search-unifiedauditlog?view=exchange-ps↩
-
https://docs.microsoft.com/ja-jp/azure/active-directory/reports-monitoring/concept-sign-ins↩
-
https://docs.microsoft.com/ja-jp/azure/active-directory/reports-monitoring/reference-powershell-reporting↩
-
https://techcommunity.microsoft.com/t5/security-compliance-and-identity/contextualizing-attacker-activity-within-sessions-in-exchange/ba-p/308710↩
-
https://docs.microsoft.com/ja-jp/powershell/module/exchange/search-mailboxauditlog?view=exchange-ps↩
-
https://docs.microsoft.com/ja-jp/powershell/module/exchange/search-adminauditlog?view=exchange-ps↩
-
https://docs.microsoft.com/ja-jp/powershell/module/exchange/get-messagetrace?view=exchange-ps↩
-
https://docs.microsoft.com/ja-jp/previous-versions/office/developer/o365-enterprise-developers/jj984335(v=office.15)↩
*1:他にも複数のダウンロード方法が提供されています。詳しくはMicrosoft社にお問い合わせください。