サイト内の現在位置

デバイスコードフィッシング

NECセキュリティブログ

2025年7月4日

NECサイバーセキュリティ技術統括部セキュリティ技術センターの桐下です。

今回のブログでは、Microsoft Entra ID/Microsoft 365を対象にデバイスコードフィッシングという攻撃手法について紹介します。デバイスコードフィッシングは、多要素認証をバイパスすることが可能な強力な攻撃です。デモを交えながら攻撃手法を紹介します。

注意事項

本ブログで紹介する内容を悪用しないでください。
攻撃に対する脅威を知ることでセキュリティ対策の強化に繋げていただくことが目的です。

目次

デバイスコードフロー

デバイスコードフィッシングはデバイスコードフローを悪用したフィッシングです。
デバイスコードフローは、スマートテレビ、会議用デバイス、デジタルサイネージなどの入力に制限があるデバイスにログインする際に利用される認証認可方法です。例えば、スマートテレビから動画配信サービスにログインする場合に、スマートテレビに文字列が表示され、その文字列を動画配信サービスにログイン済みのスマートフォンに入力するとスマートテレビの認可が完了し、スマートテレビで動画配信サービスが利用可能になるというものです。

図 1 デバイスコードフローイメージ

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

図 2 デバイスコードフロー画面

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

図 3 無効なコードを入力した際の画面

Microsoft Entra IDにおけるデバイスコードフローの詳細は、Microsoft社のMicrosoft Learnをご確認ください new window[1]

デバイスコードフィッシングとは

デバイスコードフィッシングは、正規の認証認可方法であるデバイスコードフローを悪用したフィッシング攻撃です。攻撃者は、デバイスコードフィッシングにより、被害者にMFAやパスワードレス認証 new window[2]が設定されていても、アクセストークン new window[3]、リフレッシュトークン new window[4]を入手し、被害者の環境にアクセスすることができます。

デバイスコードフィッシングの一連の流れのイメージは下記図の通りです。

図 4 デバイスコードフィッシングのイメージ

Microsoft社は2024年8月からデバイスコードフィッシングが活性化していると2025年2月に公表しています new window[5]

デバイスコードフィッシングのデモ

Microsoft Entra IDにおけるデバイスコードフィッシングのデモを実施します。メールでのデバイスコードフィッシングに加え、侵害後に高権限のアカウントを狙ったTeamsでのデバイスコードフィッシングについて紹介します。

攻撃者側からの視点1

攻撃者は、デバイスコードフィッシングに利用するデバイスコードを生成します。今回は、GraphSpyという攻撃ツールを利用します new window[6]

今回はGraphSpyのデフォルト設定でデバイスコードフィッシングを行います。Resourceをhttps://graph.microsoft.comに、Client IDをMicrosoft Office(d3590ed6-52b3-4102-aeff-aad2292ab01c)に設定したまま、デバイスコードを作成します。

図 5 デバイスコード生成画面1

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

図 6 デバイスコード生成画面2

デバイスコードフィッシング用のコードとデバイスコードフローの検証用URLを含んだメールを被害者に送信します。

被害者側からの視点1

被害者に攻撃者からメールが届きます。

図 7 デバイスコードフィッシングのメール画面

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

被害者がフィッシングメール内に記載されたURLにアクセスします。

図 8 デバイスコードフローの画面1

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

図 9 デバイスコードフローの画面2

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

図 10 デバイスコードフローの画面3

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

図 11 デバイスコードフローの画面4

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

図 12 デバイスコードフローの画面5

正規のMicrosoftのURLにアクセスし、被害者が不審に思わず処理を進めることで、攻撃者にアクセストークン、リフレッシュトークンが提供されます。FIDO2等の強力なMFAやパスワードレス認証が設定されていても、被害者自身がログインし処理を進めることになるため、デバイスコードフィッシングは成功します。

攻撃者側からの視点2

デバイスコードフィッシングの被害に合った場合、攻撃者のGraphSpy上に下記画面が表示されます。生成したデバイスコードのStatusがSUCCESSであることが確認できます。

図 13 デバイスコードフィッシング成功画面

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

図 14 被害者の受信したメール

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

図 15 https://api.spaces.skype.comに紐づくアクセストークン入手

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

図 16 被害者のTeamsメッセージ

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

GraphSpyにて被害者のGraph APIのアクセストークンを入手します。

図 17 Graph APIのアクセストークンの入手

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

図 18 Microsoft Graph PowerShellによるGlobal Administratorの特定

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

図 19 Client IDがMicrosoft Teamsであるデバイスコード生成

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

図 20 Teamsによるデバイスコードフィッシングの試行

被害者側からの視点2

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

図 21 Global Administratorロールを持つアカウントのTeams画面

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

図 22 Global Administratorロールを持つアカウントのデバイスコードフローの画面1

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

図 23 Global Administratorロールを持つアカウントのデバイスコードフローの画面2

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

図 24 Global Administratorロールを持つアカウントのデバイスコードフローの画面3

「続行」を選択します。

図 25 Global Administratorロールを持つアカウントのデバイスコードフローの画面4

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

図 26 Global Administratorロールを持つアカウントのデバイスコードフローの画面5

正規のMicrosoftのURLにアクセスし、Global Administratorロールを持つアカウントが不審に思わず処理を進めることで、攻撃者にアクセストークン、リフレッシュトークンが提供されました。

攻撃者側からの視点3

Global Administratorロールを持つアカウントが一連の処理を完了させると、新たに発行したデバイスコードのStatusがSuccessになります。

図 27 デバイスコードフィッシング成功画面

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

図 28 リフレッシュトークン画面

攻撃者が入手したアクセストークン、リフレッシュトークンに紐づくClient IDであるMicrosoft Teams(1fec8e78-bce4-4aaf-ab1b-5451cc387264)は、FOCI(Family of Client IDs)と呼ばれる特殊なClient IDです。FOCIに紐づくリフレッシュトークンは、FRT(Family Refresh Tokens)と呼ばれ、FOCIに属する他のClient ID間で流用することができます new window[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)に設定し、アクセストークンを取得します。

図 29 FRTを活用したアクセストークンの入手

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

図 30 FRTを活用したアクセストークンの入手成功

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

図 31 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サイトへアクセスする必要があります。

図 32 動的デバイスコードフィッシングイメージ

Volexity社は2025年2月に公開した記事で、攻撃者による動的デバイスコードフィッシングの悪用について言及しています new window[9]

デバイスコードフィッシングへの対策

Microsoft Entra IDにおけるデバイスコードフィッシングへの対策を記載します。

デバイスコードフィッシングの防御策として、条件付きアクセスを使用したデバイスコードフローのブロックが有効です。

条件付きアクセス編集画面において、「条件>認証フロー>デバイスコードフロー」を選択することでデバイスコードフローをブロックできます。正規運用に影響が発生する可能性もあるため、デバイスコードフローの使用状況を調査し、運用上デバイスコードフローが必要なアカウントは、ブロックの対象外に設定することを推奨します。

図 33 デバイスコードフローをブロックする条件付きアクセスの設定

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

図 34 デバイスコードフローのブロック

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

図 35 デバイスコードフローによる認証を示すサインインログ

また、Microsoft社が、デバイスコードフィッシングの検知に活用可能な検知式をブログ記事に記載しているため、ご参考にしてください new window[5]

デバイスコードフィッシングの事後対策として、侵害されたユーザーのセッション取り消しが有効です。

図 36 デバイスコードフィッシングにより侵害されたアカウントのセッション取り消し

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

図 37 セッション取り消し後のリフレッシュトークンの利用

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

図 38 セッション取り消し直前に発行したアクセストークンの利用

FIDO2を含むMFA、パスワードレス認証はデバイスコードフィッシングに対して有効な防御手段ではありません。ただし、MFAやパスワードレス認証は、通常のフィッシングや認証試行に対して有効な防御手段であるため必ず設定してください。

ユーザー教育も含め、多層的に対策していくことを推奨します。

まとめ

今回はMicrosoft Entra IDのデバイスコードフィッシングについて紹介しました。デバイスコードフィッシングは、MFA、パスワードレス認証を突破する強力な攻撃です。今回はデバイスコードフィッシング後にMicrosoft Entra ID内の権限を昇格させるデモを紹介しましたが、ビジネスメール詐欺に攻撃を連鎖させることも可能です。このブログを通じて攻撃に対する脅威をご確認いただき、少しでもセキュリティ対策の強化に繋げていただくことができれば幸いです。

参考文献

執筆者プロフィール

桐下 拓也(きりした たくや)
担当領域:リスクハンティング

大規模国際イベントのサイバーセキュリティ対応業務を経て、現在はインシデント対応、ペネトレーションテスト、NEC CSIRTなどの業務に従事。
3×SANSメダル、5×Splunk Boss of the SOCトロフィー、4×Taniumメダルを保持。CISSP、GCFA、GEIR、OSDA、OSCP、OSWP、CRTP、CARTP、CAWASPを保持。

執筆者の他の記事を読む

アクセスランキング