プロジェクト

全般

プロフィール

MGGRAPH » 履歴 » バージョン 1

蒲池 晃, 2026/08/24 11:34

1 1 蒲池 晃
h1. Microsoft Graph PowerShellを利用した全ユーザーセッション失効手順
2 1 蒲池 晃
3 1 蒲池 晃
h2. 概要
4 1 蒲池 晃
5 1 蒲池 晃
MS365認証情報窃取インシデント対応に伴い、全ユーザーの認証セッションおよびリフレッシュトークンを失効させるため、Microsoft Graph PowerShellを利用した。
6 1 蒲池 晃
7 1 蒲池 晃
本Wikiでは、実際に作業を実施した際に発生したトラブルと、その解決方法もあわせて記録する。
8 1 蒲池 晃
9 1 蒲池 晃
---
10 1 蒲池 晃
11 1 蒲池 晃
h2. 実施目的
12 1 蒲池 晃
13 1 蒲池 晃
攻撃者が保持している可能性のある以下を無効化する。
14 1 蒲池 晃
15 1 蒲池 晃
* Outlookセッション
16 1 蒲池 晃
* Teamsセッション
17 1 蒲池 晃
* OneDriveセッション
18 1 蒲池 晃
* SharePointセッション
19 1 蒲池 晃
* Microsoft365認証トークン
20 1 蒲池 晃
* Refresh Token
21 1 蒲池 晃
22 1 蒲池 晃
これにより、認証済みセッションやCookieが流出していた場合でも再認証を強制できる。
23 1 蒲池 晃
24 1 蒲池 晃
---
25 1 蒲池 晃
26 1 蒲池 晃
h2. 実施結果
27 1 蒲池 晃
28 1 蒲池 晃
実施コマンド
29 1 蒲池 晃
30 1 蒲池 晃
<pre>
31 1 蒲池 晃
Get-MgUser -All |
32 1 蒲池 晃
ForEach-Object {
33 1 蒲池 晃
    Revoke-MgUserSignInSession -UserId $_.Id
34 1 蒲池 晃
}
35 1 蒲池 晃
</pre>
36 1 蒲池 晃
37 1 蒲池 晃
実行結果
38 1 蒲池 晃
39 1 蒲池 晃
<pre>
40 1 蒲池 晃
Value
41 1 蒲池 晃
-----
42 1 蒲池 晃
True
43 1 蒲池 晃
True
44 1 蒲池 晃
True
45 1 蒲池 晃
True
46 1 蒲池 晃
・・・
47 1 蒲池 晃
</pre>
48 1 蒲池 晃
49 1 蒲池 晃
Value = True で処理成功。
50 1 蒲池 晃
51 1 蒲池 晃
---
52 1 蒲池 晃
53 1 蒲池 晃
h2. 事前準備
54 1 蒲池 晃
55 1 蒲池 晃
h3. AzureADモジュールは利用不可
56 1 蒲池 晃
57 1 蒲池 晃
従来利用していた下記コマンドは実行できなかった。
58 1 蒲池 晃
59 1 蒲池 晃
<pre>
60 1 蒲池 晃
Get-AzureADUser
61 1 蒲池 晃
Revoke-AzureADUserAllRefreshToken
62 1 蒲池 晃
</pre>
63 1 蒲池 晃
64 1 蒲池 晃
エラー
65 1 蒲池 晃
66 1 蒲池 晃
<pre>
67 1 蒲池 晃
Access blocked to AAD Graph API for this application
68 1 蒲池 晃
Authentication_Unauthorized
69 1 蒲池 晃
</pre>
70 1 蒲池 晃
71 1 蒲池 晃
原因
72 1 蒲池 晃
73 1 蒲池 晃
MicrosoftがAAD Graph APIを廃止方向としており、テナント側でブロックされている。
74 1 蒲池 晃
75 1 蒲池 晃
そのためMicrosoft Graph PowerShellへの移行が必要。
76 1 蒲池 晃
77 1 蒲池 晃
---
78 1 蒲池 晃
79 1 蒲池 晃
h2. Microsoft Graph PowerShell導入時のトラブル
80 1 蒲池 晃
81 1 蒲池 晃
h3. 発生したエラー
82 1 蒲池 晃
83 1 蒲池 晃
<pre>
84 1 蒲池 晃
Install-Module Microsoft.Graph.Authentication
85 1 蒲池 晃
</pre>
86 1 蒲池 晃
87 1 蒲池 晃
実行時
88 1 蒲池 晃
89 1 蒲池 晃
<pre>
90 1 蒲池 晃
パス
91 1 蒲池 晃
'C:\Users\akamachi\OneDrive - AiTパートナー株式会社\Document\WindowsPowerShell\Modules\Microsoft.Graph.Authentication\2.39.0'
92 1 蒲池 晃
の一部が見つかりませんでした
93 1 蒲池 晃
</pre>
94 1 蒲池 晃
95 1 蒲池 晃
が発生。
96 1 蒲池 晃
97 1 蒲池 晃
---
98 1 蒲池 晃
99 1 蒲池 晃
h3. 原因
100 1 蒲池 晃
101 1 蒲池 晃
PSModulePathがOneDriveリダイレクトされたDocuments配下を参照していた。
102 1 蒲池 晃
103 1 蒲池 晃
確認コマンド
104 1 蒲池 晃
105 1 蒲池 晃
<pre>
106 1 蒲池 晃
$env:PSModulePath -split ";"
107 1 蒲池 晃
</pre>
108 1 蒲池 晃
109 1 蒲池 晃
結果
110 1 蒲池 晃
111 1 蒲池 晃
<pre>
112 1 蒲池 晃
C:\Users\akamachi\OneDrive - AiTパートナー株式会社\Document\WindowsPowerShell\Modules
113 1 蒲池 晃
C:\Program Files\WindowsPowerShell\Modules
114 1 蒲池 晃
C:\WINDOWS\system32\WindowsPowerShell\v1.0\Modules
115 1 蒲池 晃
</pre>
116 1 蒲池 晃
117 1 蒲池 晃
OneDrive側のモジュール配置に問題があり、Graphモジュールが正常インストールできなかった。
118 1 蒲池 晃
119 1 蒲池 晃
---
120 1 蒲池 晃
121 1 蒲池 晃
h2. 対応方法
122 1 蒲池 晃
123 1 蒲池 晃
h3. PowerShellモジュールパス修正
124 1 蒲池 晃
125 1 蒲池 晃
一時的に変更
126 1 蒲池 晃
127 1 蒲池 晃
<pre>
128 1 蒲池 晃
$env:PSModulePath =
129 1 蒲池 晃
"C:\Users\akamachi\Documents\WindowsPowerShell\Modules;" +
130 1 蒲池 晃
"C:\Program Files\WindowsPowerShell\Modules;" +
131 1 蒲池 晃
"C:\Windows\System32\WindowsPowerShell\v1.0\Modules"
132 1 蒲池 晃
</pre>
133 1 蒲池 晃
134 1 蒲池 晃
確認
135 1 蒲池 晃
136 1 蒲池 晃
<pre>
137 1 蒲池 晃
$env:PSModulePath -split ";"
138 1 蒲池 晃
</pre>
139 1 蒲池 晃
140 1 蒲池 晃
---
141 1 蒲池 晃
142 1 蒲池 晃
h3. Graphモジュールインストール
143 1 蒲池 晃
144 1 蒲池 晃
管理者権限PowerShell
145 1 蒲池 晃
146 1 蒲池 晃
<pre>
147 1 蒲池 晃
Install-Module Microsoft.Graph.Authentication `
148 1 蒲池 晃
    -Scope AllUsers `
149 1 蒲池 晃
    -Force `
150 1 蒲池 晃
    -AllowClobber
151 1 蒲池 晃
</pre>
152 1 蒲池 晃
153 1 蒲池 晃
確認
154 1 蒲池 晃
155 1 蒲池 晃
<pre>
156 1 蒲池 晃
Get-Module Microsoft.Graph* -ListAvailable
157 1 蒲池 晃
</pre>
158 1 蒲池 晃
159 1 蒲池 晃
正常例
160 1 蒲池 晃
161 1 蒲池 晃
<pre>
162 1 蒲池 晃
Microsoft.Graph.Authentication
163 1 蒲池 晃
Microsoft.Graph.Users
164 1 蒲池 晃
Microsoft.Graph.Identity.SignIns
165 1 蒲池 晃
</pre>
166 1 蒲池 晃
167 1 蒲池 晃
---
168 1 蒲池 晃
169 1 蒲池 晃
h2. Microsoft Graph接続
170 1 蒲池 晃
171 1 蒲池 晃
接続
172 1 蒲池 晃
173 1 蒲池 晃
<pre>
174 1 蒲池 晃
Connect-MgGraph `
175 1 蒲池 晃
    -Scopes User.Read.All,User.RevokeSessions.All
176 1 蒲池 晃
</pre>
177 1 蒲池 晃
178 1 蒲池 晃
接続確認
179 1 蒲池 晃
180 1 蒲池 晃
<pre>
181 1 蒲池 晃
Get-MgContext
182 1 蒲池 晃
</pre>
183 1 蒲池 晃
184 1 蒲池 晃
---
185 1 蒲池 晃
186 1 蒲池 晃
h2. 全ユーザーセッション失効
187 1 蒲池 晃
188 1 蒲池 晃
実施コマンド
189 1 蒲池 晃
190 1 蒲池 晃
<pre>
191 1 蒲池 晃
Get-MgUser -All |
192 1 蒲池 晃
ForEach-Object {
193 1 蒲池 晃
    Revoke-MgUserSignInSession -UserId $_.Id
194 1 蒲池 晃
}
195 1 蒲池 晃
</pre>
196 1 蒲池 晃
197 1 蒲池 晃
結果判定
198 1 蒲池 晃
199 1 蒲池 晃
<pre>
200 1 蒲池 晃
True
201 1 蒲池 晃
</pre>
202 1 蒲池 晃
203 1 蒲池 晃
が表示されれば成功。
204 1 蒲池 晃
205 1 蒲池 晃
---
206 1 蒲池 晃
207 1 蒲池 晃
h2. ユーザー影響
208 1 蒲池 晃
209 1 蒲池 晃
以下は再認証要求が発生する。
210 1 蒲池 晃
211 1 蒲池 晃
* Outlook
212 1 蒲池 晃
* Teams
213 1 蒲池 晃
* OneDrive
214 1 蒲池 晃
* Officeアプリ
215 1 蒲池 晃
* スマートフォン版Outlook
216 1 蒲池 晃
* スマートフォン版Teams
217 1 蒲池 晃
218 1 蒲池 晃
以下は影響なし。
219 1 蒲池 晃
220 1 蒲池 晃
* メールデータ
221 1 蒲池 晃
* OneDriveデータ
222 1 蒲池 晃
* Teamsデータ
223 1 蒲池 晃
* SharePointデータ
224 1 蒲池 晃
* Entra Join
225 1 蒲池 晃
* PCプロファイル
226 1 蒲池 晃
227 1 蒲池 晃
---
228 1 蒲池 晃
229 1 蒲池 晃
h2. 今回のインシデント対応で得られた知見
230 1 蒲池 晃
231 1 蒲池 晃
h3. MFAだけでは不十分
232 1 蒲池 晃
233 1 蒲池 晃
7/22のインシデント後
234 1 蒲池 晃
235 1 蒲池 晃
* MFA導入
236 1 蒲池 晃
* セキュリティ既定値群有効化
237 1 蒲池 晃
238 1 蒲池 晃
を実施したが、8/19に再度侵害が発生した。
239 1 蒲池 晃
240 1 蒲池 晃
そのため
241 1 蒲池 晃
242 1 蒲池 晃
* 既存セッション
243 1 蒲池 晃
* Refresh Token
244 1 蒲池 晃
* 認証Cookie
245 1 蒲池 晃
246 1 蒲池 晃
が悪用された可能性を考慮し、
247 1 蒲池 晃
248 1 蒲池 晃
「全セッション失効」
249 1 蒲池 晃
250 1 蒲池 晃
を初動対応へ組み込むべきである。
251 1 蒲池 晃
252 1 蒲池 晃
---
253 1 蒲池 晃
254 1 蒲池 晃
h3. 今後の標準対応
255 1 蒲池 晃
256 1 蒲池 晃
インシデント発生時は以下を実施する。
257 1 蒲池 晃
258 1 蒲池 晃
# パスワード変更
259 1 蒲池 晃
# MFA再登録
260 1 蒲池 晃
# 全セッション失効
261 1 蒲池 晃
# 不審メールルール削除
262 1 蒲池 晃
# OAuthアプリ確認
263 1 蒲池 晃
# 全ユーザー横断調査
264 1 蒲池 晃
# サインインログ監視(1か月)
265 1 蒲池 晃
266 1 蒲池 晃
---
267 1 蒲池 晃
268 1 蒲池 晃
h2. 今後の改善予定
269 1 蒲池 晃
270 1 蒲池 晃
有償対応として以下を提案予定。
271 1 蒲池 晃
272 1 蒲池 晃
* 条件付きアクセス
273 1 蒲池 晃
* Authenticator認証限定
274 1 蒲池 晃
* パスキー導入
275 1 蒲池 晃
* レガシー認証無効化
276 1 蒲池 晃
* 監視体制強化
277 1 蒲池 晃
* 社員向けフィッシング教育
278 1 蒲池 晃
``