動的データ交換(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

ホワイトペーパー「すべての組織が狙われている」