
脆弱なDCOMアプリケーションを列挙するためのPowerShellスクリプト
DCOMradeは、横方向の移動、コード実行、データ流出などに悪用される可能性のあるDCOMアプリケーションを列挙するPowerShellスクリプトです。このスクリプトはPowerShell 2.0で動作するように作られていますが、それ以降のすべてのバージョンでも動作します。現在、以下のWindowsオペレーティングシステム(x86およびx64の両方)をサポートしています。
現在、私はHackDefenseでインターンシップを行っており、既存のDCOM横方向移動技術の調査と、これらの(および新しい可能性のある技術)列挙を自動化する方法を模索しています。この研究から、このスクリプトと、以下にリンクされた関連する研究論文が生まれました。
このスクリプトは、Matt Nelson(@enigma0x3)の研究、特にペネトレーションテスターやレッドチームに役立つDCOMアプリケーションを見つける方法について詳しく書かれた第2ラウンドのブログ記事に基づいて作成されました。
まず、対象システムとのリモート接続が確立され、この接続はスクリプト全体でさまざまな操作に使用されます。対象システム上でPowerShellコマンドが実行され、すべてのDCOMアプリケーションとそのAppIDが取得されます。AppIDはWindowsレジストリをループ処理し、エントリにLaunchPermissionサブキーが設定されていないAppIDをチェックするために使用されます。これらのAppIDは保存され、関連するCLSIDを取得するために使用されます。
スクリプトはOSごとに特定のブラックリストを使用します。これが、対象オペレーティングシステムに異なるオプションがある理由です。ブラックリストは、アクティブ化できないDCOMアプリケーションによってスクリプトが停止する可能性のあるCLSIDエントリをスキップし、対象システムへの負荷を軽減し、スクリプトの完了時間を短縮します。
CLSIDを使用して、関連するDCOMアプリケーションをアクティブ化できます。'Shortcut' CLSIDは、それに関連するMemberTypesの数をカウントするために使用され、デフォルトのMemberTypes数を確認します。この数値は、この数値とは異なるCLSIDをチェックするために使用されます。スクリプトは、Microsoft Windowsオペレーティングシステム間で共有されているCLSIDであることから、'Shortcut'のCLSID()を使用してこれを行います。の数が異なるCLSIDは、(悪用)可能なまたはを持つ可能性があり、配列に追加されます。
HKEY_CLASSES_ROOT\CLSID\{00021401-0000-0000-C000-000000000046}MemberTypesMethodProperty配列内のCLSIDは、MemberTypes内の文字列に基づいてチェックされ、(悪用)可能な方法を示す可能性があります。この文字列のリストはVulnerableSubsetファイルにあります。このリストは、すべての脆弱なDCOMアプリケーションを完全に見つけるためのものではありませんが、このリストがプロセスの動的な部分であることで、スクリプトのユーザーは目的に役立つ可能性のあるDCOMアプリケーションの機能を示す特定の文字列を検索できるようになります。
スクリプトの結果はHTMLレポートとして出力され、予防策としてシステムの監査に使用できるはずです。攻撃側としては、執筆時点でマスターブランチへの追加が承認待ちのEmpireモジュールを作成しました。自分でEmpireに追加したい場合は、こちらにあるモジュールを追加することで可能です。
アイデア、スクリプト、および可能な検出方法の完全な技術的説明については、関連する研究論文をお読みください。
このスクリプトは、Empireモジュールとして使用しない場合、スクリプトの動作と対象マシンへの接続方法が異なるため、いくつかの制限があります。
Publicに設定されている場合、対象システムでWindowsリモート管理サービスを使用できるようにするために、次のコマンドを実行する必要があります: Enable-PSRemoting -SkipNetworkProfilecheck -ForceMicrosoft Windowsドメイン内の場合:
.\DCOMrade.ps1 -ComputerName [コンピュータ名 / IP] -User [ローカル管理者] -OS [オペレーティングシステム] -Domain [ドメイン名]
Microsoft Windowsドメイン外の場合:
.\DCOMrade.ps1 -ComputerName [コンピュータ名 / IP] -User [ローカル管理者] -OS [オペレーティングシステム]

このスクリプトは、Eva Tanaskoska氏が行ったDCOM横方向移動ワークショップに触発されました。このワークショップがなければ、これを自動的に列挙しようというアイデア全体は決して生まれなかったでしょう。
Matt Nelson氏(@enigma0x3)の研究のおかげで、自動化の形式を考案するのに十分な情報を見つけることができました。
横方向移動に利用可能なDCOM技術のほとんどをまとめ、その仕組みについて詳しく説明しているPhilip Tsukerman氏の記事にも感謝します。