Japan
サイト内の現在位置
デバイスコードフィッシング
NECセキュリティブログ2025年7月4日
NECサイバーセキュリティ技術統括部セキュリティ技術センターの桐下です。
今回のブログでは、Microsoft Entra ID/Microsoft 365を対象にデバイスコードフィッシングという攻撃手法について紹介します。デバイスコードフィッシングは、多要素認証をバイパスすることが可能な強力な攻撃です。デモを交えながら攻撃手法を紹介します。
注意事項
本ブログで紹介する内容を悪用しないでください。
攻撃に対する脅威を知ることでセキュリティ対策の強化に繋げていただくことが目的です。
目次
デバイスコードフロー
デバイスコードフィッシングはデバイスコードフローを悪用したフィッシングです。
デバイスコードフローは、スマートテレビ、会議用デバイス、デジタルサイネージなどの入力に制限があるデバイスにログインする際に利用される認証認可方法です。例えば、スマートテレビから動画配信サービスにログインする場合に、スマートテレビに文字列が表示され、その文字列を動画配信サービスにログイン済みのスマートフォンに入力するとスマートテレビの認可が完了し、スマートテレビで動画配信サービスが利用可能になるというものです。

Microsoft Entra IDの場合、デバイスコードフローを行う際に、下記の画面が使用されます。

Microsoft Entra IDでは、デバイスコードは発行後から15分間有効です。15分経過後にコードを入力しても、無効となり利用することができません。

Microsoft Entra IDにおけるデバイスコードフローの詳細は、Microsoft社のMicrosoft Learnをご確認ください [1]。
デバイスコードフィッシングとは

Microsoft社は2024年8月からデバイスコードフィッシングが活性化していると2025年2月に公表しています [5]。
デバイスコードフィッシングのデモ
Microsoft Entra IDにおけるデバイスコードフィッシングのデモを実施します。メールでのデバイスコードフィッシングに加え、侵害後に高権限のアカウントを狙ったTeamsでのデバイスコードフィッシングについて紹介します。
攻撃者側からの視点1
攻撃者は、デバイスコードフィッシングに利用するデバイスコードを生成します。今回は、GraphSpyという攻撃ツールを利用します [6]。
今回はGraphSpyのデフォルト設定でデバイスコードフィッシングを行います。Resourceをhttps://graph.microsoft.comに、Client IDをMicrosoft Office(d3590ed6-52b3-4102-aeff-aad2292ab01c)に設定したまま、デバイスコードを作成します。

選択したResource、Client IDを対象にしたデバイスコードフィッシング用のデバイスコードが生成されます。

デバイスコードフィッシング用のコードとデバイスコードフローの検証用URLを含んだメールを被害者に送信します。
被害者側からの視点1
被害者に攻撃者からメールが届きます。

正規のMicrosoftのURLが使用されるため被害者が不審感を持たず、かつ攻撃者のデバイスコード作成後15分以内にアクセスすると仮定します。
被害者がフィッシングメール内に記載されたURLにアクセスします。

被害者は、メールに記載されたコード(NPKGDJY5P)を入力します。

被害者が認証済みの自身のアカウントを選択します。この画面では、攻撃者がClient IDに設定したMicrosoft Officeが表示されます。また、攻撃者のログオン元として、GraphSpyを実行したマシンに紐づくIPアドレスから判断した国名も表示されます。

被害者が「続行」を選択します。

デバイスコードフィッシングが成功し、下記の画面が表示されます。

正規のMicrosoftのURLにアクセスし、被害者が不審に思わず処理を進めることで、攻撃者にアクセストークン、リフレッシュトークンが提供されます。FIDO2等の強力なMFAやパスワードレス認証が設定されていても、被害者自身がログインし処理を進めることになるため、デバイスコードフィッシングは成功します。
攻撃者側からの視点2
デバイスコードフィッシングの被害に合った場合、攻撃者のGraphSpy上に下記画面が表示されます。生成したデバイスコードのStatusがSUCCESSであることが確認できます。

攻撃者は、Resourceがhttps://graph.microsoft.com、Client IDがMicrosoft Office(d3590ed6-52b3-4102-aeff-aad2292ab01c)に紐づくアクセストークン及びリフレッシュトークンを入手しました。
攻撃者は入手したアクセストークンを使用しGraphSpy上で被害者が受信したメールの閲覧、被害者アカウントとしてメールの送信が可能です。下記はGraphSpyのOutlook用画面です。

GraphSpyのTeams用画面へのアクセスを試行します。
GraphSpy上のTeams用画面では、https://graph.microsoft.comに紐づくアクセストークンを利用するとエラーが発生します。
入手済みのリフレッシュトークンを活用し、Teamsで利用されるリソースであるhttps://api.spaces.skype.comに紐づくアクセストークンを入手します

新たに入手したアクセストークンを使用することで、GraphSpy上で被害者アカウントのTeamsのメッセージを閲覧、送信することができます。

被害者が属するテナントにおいて高権限のアカウントを特定します。さらに被害を拡大させるために、高権限のアカウントに対して、 Teamsを使用したデバイスコードフィッシングを仕掛けます。
GraphSpyにて被害者のGraph APIのアクセストークンを入手します。

Microsoft Graph PowerShell [7]を使用し、Microsoft Entra IDの管理者であるGlobal Administratorのロールを持つアカウントを特定します。
このテナントではGlobal Administratorは1名だけであることが分かります。

Teamsを使用して、Global Administratorのロールを持つアカウントに対してデバイスコードフィッシングを仕掛けるためにデバイスコードを生成します。
Teamsの会議を装ったデバイスコードフィッシングをするため、Client IDをMicrosoft Teams(1fec8e78-bce4-4aaf-ab1b-5451cc387264)に、Resourceをhttps://api.spaces.skype.comに変更します。

侵害済みのアカウントとして、GraphSpyのTeams用画面にアクセスし、Global Administratorロールを持つアカウントに対してデバイスコードフィッシングを試行します。

被害者側からの視点2
攻撃者によって侵害済みのアカウントから、Global Administratorロールを持つアカウントに対してTeamsのメッセージが届きます。

Global Administratorロールを持つアカウントがリンクをクリックします。

Global Administratorロールを持つアカウントがTeamsのメッセージに記載されたコードを入力します。

攻撃者がデバイスコードフィッシングのクライアントIDにMicrosoft Teams(1fec8e78-bce4-4aaf-ab1b-5451cc387264)を指定したため、Microsoft OfficeでなくMicrosoft TeamsとGlobal Administratorロールを持つアカウントの画面に表示されます。
Global Administratorロールを持つアカウントは、認証済みの自身のアカウントを選択します。

「続行」を選択します。

デバイスコードフィッシングが成功しました。

正規のMicrosoftのURLにアクセスし、Global Administratorロールを持つアカウントが不審に思わず処理を進めることで、攻撃者にアクセストークン、リフレッシュトークンが提供されました。
攻撃者側からの視点3
Global Administratorロールを持つアカウントが一連の処理を完了させると、新たに発行したデバイスコードのStatusがSuccessになります。

攻撃者は、Global Administratorロールを持つアカウントのリフレッシュトークンを取得しました。

攻撃者が入手したアクセストークン、リフレッシュトークンに紐づくClient IDであるMicrosoft Teams(1fec8e78-bce4-4aaf-ab1b-5451cc387264)は、FOCI(Family of Client IDs)と呼ばれる特殊なClient IDです。FOCIに紐づくリフレッシュトークンは、FRT(Family Refresh Tokens)と呼ばれ、FOCIに属する他のClient ID間で流用することができます [8]。
FRTを悪用して、Microsoft Teams(1fec8e78-bce4-4aaf-ab1b-5451cc387264)でないClient IDに紐づくアクセストークンを入手します。
FRTからResourceをhttps://graph.microsoft.comに、Client IDをMicrosoft Office(d3590ed6-52b3-4102-aeff-aad2292ab01c)に設定し、アクセストークンを取得します。

Microsoft Teams(1fec8e78-bce4-4aaf-ab1b-5451cc387264)に紐づくリフレッシュトークンからMicrosoft Office(d3590ed6-52b3-4102-aeff-aad2292ab01c)に紐づくアクセストークンを入手することができました。

取得したアクセストークンを悪用します。Global Administratorロールを持つアカウントとしてMicrosoft Graph PowerShellを利用します。

具体的な手順は割愛させていただきますが、Global Administratorの権限を使用し、高権限での永続化を試行します。例えばユーザー作成、及び作成したユーザーをGlobal Administratorロールに追加することで、攻撃者は侵害を永続化することが可能です。
被害者のMFA、パスワードレス認証をバイパスし、かつ流用可能なFRTを入手できるデバイスコードフィッシングは非常に強力な攻撃です。
動的デバイスコードフィッシングとは
前述のデバイスコードフィッシングは、Microsoft Entra IDでは攻撃者がデバイスコードを取得した後の15分間しか有効でない攻撃です。その制限を回避するための攻撃が、動的デバイスコードフィッシングです。
動的デバイスコードフィッシングは、被害者が攻撃者の管理するWebサイトに接続したタイミングで動的にデバイスコードを生成し、生成したデバイスコードをWebサイト上に表示することでMicrosoft Entra IDのデバイスコードフィッシングの15分間という制約を無くしたものです。ただし、被害者が正規のMicrosoft Entra ID/Microsoft 365のURLでなく攻撃者の管理するWebサイトへアクセスする必要があります。

Volexity社は2025年2月に公開した記事で、攻撃者による動的デバイスコードフィッシングの悪用について言及しています [9]。
デバイスコードフィッシングへの対策
Microsoft Entra IDにおけるデバイスコードフィッシングへの対策を記載します。
デバイスコードフィッシングの防御策として、条件付きアクセスを使用したデバイスコードフローのブロックが有効です。
条件付きアクセス編集画面において、「条件>認証フロー>デバイスコードフロー」を選択することでデバイスコードフローをブロックできます。正規運用に影響が発生する可能性もあるため、デバイスコードフローの使用状況を調査し、運用上デバイスコードフローが必要なアカウントは、ブロックの対象外に設定することを推奨します。

上記の条件付きアクセス設定後にデバイスコードフィッシングを仕掛けると、ターゲットとなったユーザーのコード入力、及びユーザー認証後に下記の画面が表示され、デバイスコードフローがブロックされます。

また、デバイスコードフィッシングの可能性のあるログインを検知することができます。例えば、サインインログの場合、認証プロトコルが「デバイス コード」となるサインインが対象です。

また、Microsoft社が、デバイスコードフィッシングの検知に活用可能な検知式をブログ記事に記載しているため、ご参考にしてください [5]。
デバイスコードフィッシングの事後対策として、侵害されたユーザーのセッション取り消しが有効です。

セッション取り消し直後にGraphSpyにてリフレッシュトークンを利用したアクセストークンの取得ができなくなることを確認しました。

ただし、セッション取り消し直前に取得したアクセストークンは、有効時間内であれば継続して利用可能であったため注意が必要です。

FIDO2を含むMFA、パスワードレス認証はデバイスコードフィッシングに対して有効な防御手段ではありません。ただし、MFAやパスワードレス認証は、通常のフィッシングや認証試行に対して有効な防御手段であるため必ず設定してください。
ユーザー教育も含め、多層的に対策していくことを推奨します。
まとめ
今回はMicrosoft Entra IDのデバイスコードフィッシングについて紹介しました。デバイスコードフィッシングは、MFA、パスワードレス認証を突破する強力な攻撃です。今回はデバイスコードフィッシング後にMicrosoft Entra ID内の権限を昇格させるデモを紹介しましたが、ビジネスメール詐欺に攻撃を連鎖させることも可能です。このブログを通じて攻撃に対する脅威をご確認いただき、少しでもセキュリティ対策の強化に繋げていただくことができれば幸いです。
参考文献
- [1]Microsoft ID プラットフォームと OAuth 2.0 デバイス承認付与フロー
https://learn.microsoft.com/ja-jp/entra/identity-platform/v2-oauth2-device-code
- [2]Microsoft Entra ID のパスワードレス認証オプション
https://learn.microsoft.com/ja-jp/entra/identity/authentication/concept-authentication-passwordless
- [3]Microsoft ID プラットフォームのアクセス トークン
https://learn.microsoft.com/ja-jp/entra/identity-platform/access-tokens
- [4]Microsoft ID プラットフォームで更新トークンを使用する
https://learn.microsoft.com/ja-jp/entra/identity-platform/refresh-tokens
- [5]Storm-2372 conducts device code phishing campaign
https://www.microsoft.com/en-us/security/blog/2025/02/13/storm-2372-conducts-device-code-phishing-campaign/
- [6]RedByte1337/GraphSpy
https://github.com/RedByte1337/GraphSpy
- [7]Microsoft.Graph
https://www.powershellgallery.com/packages/Microsoft.Graph
- [8]secureworks/family-of-client-ids-research
https://github.com/secureworks/family-of-client-ids-research
- [9]Multiple Russian Threat Actors Targeting Microsoft Device Code Authentication
https://www.volexity.com/blog/2025/02/13/multiple-russian-threat-actors-targeting-microsoft-device-code-authentication/
執筆者プロフィール
桐下 拓也(きりした たくや)
担当領域:リスクハンティング
大規模国際イベントのサイバーセキュリティ対応業務を経て、現在はインシデント対応、ペネトレーションテスト、NEC CSIRTなどの業務に従事。
3×SANSメダル、5×Splunk Boss of the SOCトロフィー、4×Taniumメダルを保持。CISSP、GCFA、GEIR、OSDA、OSCP、OSWP、CRTP、CARTP、CAWASPを保持。

執筆者の他の記事を読む
アクセスランキング