プロジェクト

全般

プロフィール

Microsoft Graph PowerShellを利用した全ユーザーセッション失効手順

概要

MS365認証情報窃取インシデント対応に伴い、全ユーザーの認証セッションおよびリフレッシュトークンを失効させるため、Microsoft Graph PowerShellを利用した。

本Wikiでは、実際に作業を実施した際に発生したトラブルと、その解決方法もあわせて記録する。


実施目的

攻撃者が保持している可能性のある以下を無効化する。

  • Outlookセッション
  • Teamsセッション
  • OneDriveセッション
  • SharePointセッション
  • Microsoft365認証トークン
  • Refresh Token

これにより、認証済みセッションやCookieが流出していた場合でも再認証を強制できる。


実施結果

実施コマンド

Get-MgUser -All |
ForEach-Object {
    Revoke-MgUserSignInSession -UserId $_.Id
}

実行結果

Value
-----
True
True
True
True
・・・

Value = True で処理成功。


事前準備

AzureADモジュールは利用不可

従来利用していた下記コマンドは実行できなかった。

Get-AzureADUser
Revoke-AzureADUserAllRefreshToken

エラー

Access blocked to AAD Graph API for this application
Authentication_Unauthorized

原因

MicrosoftがAAD Graph APIを廃止方向としており、テナント側でブロックされている。

そのためMicrosoft Graph PowerShellへの移行が必要。


Microsoft Graph PowerShell導入時のトラブル

発生したエラー

Install-Module Microsoft.Graph.Authentication

実行時

パス
'C:\Users\akamachi\OneDrive - AiTパートナー株式会社\Document\WindowsPowerShell\Modules\Microsoft.Graph.Authentication\2.39.0'
の一部が見つかりませんでした

が発生。


原因

PSModulePathがOneDriveリダイレクトされたDocuments配下を参照していた。

確認コマンド

$env:PSModulePath -split ";" 

結果

C:\Users\akamachi\OneDrive - AiTパートナー株式会社\Document\WindowsPowerShell\Modules
C:\Program Files\WindowsPowerShell\Modules
C:\WINDOWS\system32\WindowsPowerShell\v1.0\Modules

OneDrive側のモジュール配置に問題があり、Graphモジュールが正常インストールできなかった。


対応方法

PowerShellモジュールパス修正

一時的に変更

$env:PSModulePath =
"C:\Users\akamachi\Documents\WindowsPowerShell\Modules;" +
"C:\Program Files\WindowsPowerShell\Modules;" +
"C:\Windows\System32\WindowsPowerShell\v1.0\Modules" 

確認

$env:PSModulePath -split ";" 

Graphモジュールインストール

管理者権限PowerShell

Install-Module Microsoft.Graph.Authentication `
    -Scope AllUsers `
    -Force `
    -AllowClobber

確認

Get-Module Microsoft.Graph* -ListAvailable

正常例

Microsoft.Graph.Authentication
Microsoft.Graph.Users
Microsoft.Graph.Identity.SignIns

Microsoft Graph接続

接続

Connect-MgGraph `
    -Scopes User.Read.All,User.RevokeSessions.All

接続確認

Get-MgContext

全ユーザーセッション失効

実施コマンド

Get-MgUser -All |
ForEach-Object {
    Revoke-MgUserSignInSession -UserId $_.Id
}

結果判定

True

が表示されれば成功。


ユーザー影響

以下は再認証要求が発生する。

  • Outlook
  • Teams
  • OneDrive
  • Officeアプリ
  • スマートフォン版Outlook
  • スマートフォン版Teams

以下は影響なし。

  • メールデータ
  • OneDriveデータ
  • Teamsデータ
  • SharePointデータ
  • Entra Join
  • PCプロファイル

今回のインシデント対応で得られた知見

MFAだけでは不十分

7/22のインシデント後

  • MFA導入
  • セキュリティ既定値群有効化

を実施したが、8/19に再度侵害が発生した。

そのため

  • 既存セッション
  • Refresh Token
  • 認証Cookie

が悪用された可能性を考慮し、

「全セッション失効」

を初動対応へ組み込むべきである。


今後の標準対応

インシデント発生時は以下を実施する。

  1. パスワード変更
  2. MFA再登録
  3. 全セッション失効
  4. 不審メールルール削除
  5. OAuthアプリ確認
  6. 全ユーザー横断調査
  7. サインインログ監視(1か月)

今後の改善予定

有償対応として以下を提案予定。

  • 条件付きアクセス
  • Authenticator認証限定
  • パスキー導入
  • レガシー認証無効化
  • 監視体制強化
  • 社員向けフィッシング教育
    ``