
PXEThiefは、Microsoft Endpoint Configuration Managerのオペレーティングシステム展開機能からパスワードを抽出できるツールのセットです。
PXEThief は、DEF CON 30 の講演 Pulling Passwords out of Configuration Manager (https://forum.defcon.org/node/241925) で議論された攻撃パスを、Microsoft Endpoint Configuration Manager (ConfigMgr、依然として一般的に SCCM として知られる) の Operating System Deployment 機能に対して実装するツール群です。このツールは、構成された Network Access Accounts (https://docs.microsoft.com/en-us/mem/configmgr/core/plan-design/hierarchy/accounts#network-access-account) や、"All Unknown Computers" コレクション向けに構成された ConfigMgr Collection Variables 内に保存された Task Sequence Accounts または資格情報から、資格情報を収集することを可能にします。これらの Active Directory アカウントは一般的に過剰な権限が設定されており、少なくとも私の個人的な経験では、ドメイン内のどこかで管理アクセスへの権限昇格を許容します。
おそらく、このツールを使用して実行できる最も深刻な攻撃は、パスワードなし、または脆弱なパスワードで、PXE による展開が "All unknown computers" に対してサポートされている配布ポイントが存在する場合です。前述の OSD に露出した ConfigMgr アカウントの過剰な権限設定により、ターゲット環境へのネットワークアクセスのみで完全な Active Directory 攻撃チェーンを実行できる可能性があります。
python pxethief.py -h
pxethief.py 1 - DHCP PXE ブート要求を使用して暗号化メディアファイルを自動的に特定・ダウンロードします。さらに、'settings.ini' で auto_exploit_blank_password が 1 に設定されている場合、ブランクメディアパスワードの悪用を試みます。
pxethief.py 2 <DP サーバーの IP アドレス> - IP アドレスで指定された特定の MECM 配布ポイントサーバーに対して PXE ブートを強制します。
pxethief.py 3 <variables-file-name> <パスワード推測> - 保存されたメディア変数ファイル(PXE、ブータブルメディア、または事前ステージングメディアから取得)を復号化し、MECM DP から機密データを取得しようとします。
pxethief.py 4 <variables-file-name> <policy-file-path> <パスワード> - 保存されたメディア変数ファイルと、スタンドアロン TS メディアから取得した Policy XML ファイルを復号化しようとします。
pxethief.py 5 <variables-file-name> - 指定されたメディア変数ファイルに対応するハッシュを出力し、Hashcat でクラックするために使用します。
pxethief.py 6 <identityguid> <identitycert-file-name> - DP 上のレジストリキーから取得した値を使用してタスクシーケンスを取得します。
pxethief.py 7 <Reserved1-value> - SCCM DP レジストリキー (reg query HKLM\software\microsoft\sms\dp /v Reserved1) から保存された PXE パスワードを復号化します。
pxethief.py 8 - PXEThief ディレクトリに新しいデフォルトの 'settings.ini' ファイルを書き込みます。
pxethief.py 10 - Scapy インターフェーステーブルを出力し、'settings.ini' で使用するインターフェースインデックスを特定します。
pxethief.py -h - PXEThief のヘルプテキストを出力します。
pxethief.py 5 <variables-file-name> を使用して、メディア変数ファイルの「ハッシュ」を生成し、https://github.com/MWR-CyberSec/configmgr-cryptderivekey-hashcat-module で公開されている Hashcat モジュールを使用したパスワード推測攻撃に利用します。
PXEThief メインフォルダーに含まれるファイルで、より静的な設定オプションを設定します。以下の通りです。
[SCAPY SETTINGS]
automatic_interface_selection_mode = 1
manual_interface_selection_by_id =
[HTTP CONNECTION SETTINGS]
use_proxy = 0
use_tls = 0
[GENERAL SETTINGS]
sccm_base_url =
auto_exploit_blank_password = 1
automatic_interface_selection_mode は、利便性のために Scapy が使用する最適なインターフェースを自動的に決定しようとします。これは主に 2 つの手法を使用します。1 に設定すると、マシンのデフォルトゲートウェイに到達できるインターフェースを出力インターフェースとして使用しようとします。2 に設定すると、自動構成 IP やローカルホスト IP ではない IP アドレスを持つ最初のインターフェースを探します。一部のシナリオでは適切なインターフェースの選択に失敗するため、'manual_interface_selection_by_id' で特定のインターフェースを強制することもできます。manual_interface_selection_by_id は、Scapy に使用させたいインターフェースの整数インデックスを指定できます。このファイルで使用する ID は、pxethief.py 10 を実行して取得する必要があります。sccm_base_url は、ツールが通信する管理ポイントを上書きする場合に便利です。これは、DNS が解決しない場合(メディア変数ファイルから読み取った値が使用できない)、または複数の管理ポイントを特定して特定の管理ポイントにトラフィックを送信したい場合に役立ちます。ベース URL の形式で指定する必要があります。例:mp.configmgr.com や http://mp.configmgr.com/stuff ではなく、http://mp.configmgr.com のように指定します。auto_exploit_blank_password は、pxethief 1 の動作を変更し、パスワードで保護されていない PXE 配布ポイントを自動的に悪用しようとします。これを 1 に設定すると自動悪用が有効になり、0 に設定すると、メディア変数ファイルをダウンロードするために使用する tftp クライアント文字列が出力されます。ほとんどの場合、これを 1 に設定することをお勧めします。なぜなら、パスワードで保護されていない PXE は、配布ポイントに PXE ブートを要求したときに受信する DHCP 応答で送信されるバイナリキーを使用するからです。このリリースでは実装されていません。
pip install -r requirements.txt)。pxethief.py 1 または pxethief.py 2 を使用してメディア変数ファイルを特定・生成する場合、ツールが使用するインターフェースが正しいものに設定されていることを確認してください。正しくない場合は、pxethief.py 10 から適切なインデックス ID を特定し、'settings.ini' で手動で設定します。pxethief.py の 35 行目で有効にでき、プロキシアドレスは 693 行目で設定できます。コードベースの次のアップデートでこの機能を 'settings.ini' で設定可能にする予定です。pywin32 を使用して Windows の組み込み暗号化関数を利用しています。これは Linux では利用できません。なぜなら、Windows 暗号化 API が Linux では使用できないからです :P ただし、pxethief.py の Scapy コードは Linux でも完全に機能しますが、Linux で実行するには(少なくとも)win32crypt のインクルードをパッチアウトする必要があります。このツールではエラーハンドリングに問題が発生する可能性があることを想定してください。ConfigMgr のすべてには微妙なニュアンスがあり、ツールのリリースに備えてエラーハンドリングを大幅に改善しましたが、これは決して完全なものではありません。失敗するエッジケースがある場合は、詳細な Issue を作成するか、修正してプルリクエストを提出してください :) 合理的な改善が可能かどうか、これらをレビューします。コードを読み、講演を視聴し、本番環境で実行する場合は何が起こっているのかを理解してください。ライセンス条項、すなわちツールの使用は自己責任であることを念頭に置いてください。
Identifying and retrieving credentials from SCCM/MECM Task Sequences - この記事では、有効な OSD 証明書を取得した後、ConfigMgr ポリシーがどのように発見、ダウンロード、復号化されるかの全フローを説明しています。また、この記事の最初の 2 つの参考文献を強調しておきます。これらは現在進行中の非常に興味深い攻撃的 SCCM 研究を示しています。
DEF CON 30 スライド - 講演スライドへのリンク
Copyright (C) 2022 Christopher Panayi, MWR CyberSec