- 2018/09/19
- サイバー攻撃
DCOMを通じてExcelのDDEをラテラルムーブメントに悪用する手口について
Post by : PHILIP TSUKERMAN
動的データ交換(DDE)は、レガシーのプロセス間通信メカニズムの1つで、1987年初めからいくつかのWindowsアプリケーションに搭載されるようになりました。
DDEを使用すると、あるアプリケーションが別のアプリケーションのアイテム(例:Microsoft Excelのスプレッドシートのセルなど)の利用をリクエストできます。また、このアイテムに変更があった場合は、その旨の通知を受け取ることもできます。
Officeのドキュメントでマクロレスのコードを実行する手法に関する議論では、ここ最近、DDEのメカニズムが扱われるようになっています。この手法では、ExcelなどのMS Officeアプリケーションに、別のアプリケーションからDDE経由でデータを受け取るために必要な「=cmd|’ /C calc’!A0」などの式を評価させます。
これにより、攻撃者は任意のコマンドラインをDDEサーバーに指定して実行できるようになり、任意のコードの実行が可能になります。
この機能は、DDEInitiateと呼ばれるメソッドを使用してバックグラウンドで実行されます。DDEInitiateは、COMを通じて公開されています。
そして、以上の事実を勘案すると、SpecterOpsのMatt Nelson氏が(こちらやこちらの記事)で説明しているように、DCOMを通じてこのメソッドを呼び出す手法を使えば、DCOMによりOfficeアプリケーションのDDE機能をリモートできるのではないかと考えました。
Excel.Applicationオブジェクトが公開している手法に少し目を通しただけでも、その可能性がありそうでしたが、
DDEInitiateによるこの手法は確かに存在しており、MSDNのドキュメントにも記述がありました。
「cmd”」は「App」パラメーターとして使用できる一方、「Topic」パラメーターはコマンドライン変数として選択できます。
この手法ではQuirkが必要です。Quirkは「App」パラメーターを8文字に制限します(PowerShellを直接呼び出すことはありません)。一方、「Topic」の場合は、扱える文字がはるかに多く、1,024文字になります。これは、CreateProcess関数の制限によります。
さらに、この手法では「exe」をAppパラメーターに付加します。これにより、「cmd.exe」は、「cmd.exe.exe」を実行しようとしますが、これが失敗するのは明らかです。
それでは実際にこの手法を試してみましょう。
はじめは、想定したとおりのことはできませんでした。「Yes」をクリックすると、電卓を実行するポップアップが開きます。
しかし、攻撃対象のマシンのユーザーにこのような非常に疑わしい処理を要求するようでは、ラテラルムーブメントを行う手法としては全く使用できません。Excelを起動していない状態だとしたらなおさらです。DCOMオブジェクトを再度確認して手を入れる必要があります。
「DisplayAlerts」プロパティには大きな効果が期待できそうでした。そして、実際に良好な結果が得られました。
このプロパティは、DDEInitiateが提示したアラートを制御しているようです。
しかし、MS Wordなど、いくつかのほかのOfficeアプリケーションでも、DCOMによるDDEInitiateの手法を試してみましたが、Excelのように機能させることはできませんでした。
これらの処理はすべて単一のマシン上で行われ、
を
に置き換えれば、この手法をリモートで行うことができます。必要なことは、コマンドラインを目的のPowerShellダウンロードクレードルに置き換えることだけです。これで、新たなラテラルムーブメントのテクニックが利用できてしまいます。
ホワイトペーパー「すべての組織が狙われている」
企業、組織がどんなにセキュリティを強固にしてもハッカーが悪用できる脆弱性は必ず存在します。侵入されることが避けられないことを受け入れ、新たな対策を立てる必要があります。本書で、なぜ避けられないのか、どのように対処するのかをご覧ください。
https://www.cybereason.co.jp/product-documents/input/?post_id=606