Binary Pulsar

技術寄りなセキュリティの話題について書きます

DDE機能を悪用したMicrosoft Officeによる遠隔コード実行の手法とその対策

概要

近年のサイバー攻撃において、組織のネットワークに侵入する手法として代表的な手法の一つは、Microsoft Officeによる悪意のあるプログラムの実行であるといえるでしょう。Microsoft Officeによる悪意のあるプログラムの実行と言えば、マクロ機能を悪用した手法を思い浮かべる読者が多いかもしれません。添付ファイルを開いても「マクロを有効にしなければ大丈夫」という認識の人も少なくないでしょう。しかし近年では、マクロ機能を用いなくても悪意のあるプログラムを実行させることができる手法がいくつか存在します。本記事では、マクロ機能を使わずに悪意のあるプログラムを実行させる手法の一つである、Dynamic Data Exchange (DDE)機能を悪用した手法を取り上げます。

Dynamic Data Exchangeとは

DDEは動的なデータ交換を実現するプロトコルです。Microsoft Office製品では、DDEプロトコルを用いることにより、あるMicrosoft Officeファイルから別のMicrosoft Officeファイルのデータを、動的に取り込むことを可能とする機能が備わっています。DDE機能を活用することにより、複数のMicrosoft Officeファイルを連携させることが可能となります。大きなネットワーク上では特に、複数のMicrosoft Officeファイルを管理する上ではDDE機能は有用ですが、2017年10月にSensePost社の研究者により「DDE機能を悪用して任意のコードを実行させる手法」が公開されました。

sensepost.com

本記事ではその手法の概要と対策について取り扱います。

Microsoft Excelの場合

それではDDEによるプログラム実行の手順を解説します。Microsoft WordやMicrosoft PowerPointでも可能ですが、本記事ではMicrosoft Excelを取り上げます。Microsoft Excelを悪用した手法では、以下の性質を悪用します。

  • セルの値が等号(=)、加算記号(+)、減算記号(-)で始まる場合は、セルの値は数式として解釈
  • セルの値がアットマーク(@)で始まる場合は、内部関数を探索して数式の引数として解釈

DDE機能が有効な環境下では、以下の式をセルに挿入することにより、DDEによるデータの更新の際に式に埋め込まれたコマンドが実行されてしまいます。

<コマンド>|'<コマンドライン引数>'!<セル名>

例えば以下の値をMicrosoft Excelの適当なセルに値として設定します。

=cmd|'/k calc.exe'!A1

値を入力し終えると、以下のようにポップアップが起動します。

f:id:binary-pulsar:20181011192604p:plain

ここで「No (いいえ)」を選択すると何も起きませんが、「Yes (はい)」を選択するとcalc.exeが起動します。

f:id:binary-pulsar:20181011192651p:plain

このファイルを保存すれば、手法の検証用ファイルの作成は完了です。このファイルを開くと、以下のように自動アップデートを有効化するかどうかを確認するメッセージが表示されるため、「Enable Content (コンテンツの有効化)」をクリックします。

f:id:binary-pulsar:20181011192721p:plain

すると以下のようにアップデートの許可を求めるポップアップが起動します。

f:id:binary-pulsar:20181011192744p:plain

「Update (更新する)」を選択すると、さらにプログラムの実行の許可を求めるポップアップが表示されます。

f:id:binary-pulsar:20181011192800p:plain

ここで「Yes (はい)」を選択すると、DDE機能により以下のようにcalc.exeが起動します。

f:id:binary-pulsar:20181011192816p:plain

プログラム実行許可のポップアップの表示を偽装

次にポップアップの表示を偽装する手法を紹介します。前節の手法では、最後の「プログラムの実行許可を求めるポップアップ」にて「CMD.EXEの実行を許可するか?」という内容のメッセージが表示されます。攻撃者の観点で言えば、CMD.EXEとそのまま表示される状態では、攻撃対象から気付かれてしまうことが懸念事項となります。そこで、先ほどの値の代わりに、例えば以下の値をセルに設定します。

=MSEXCEL|'\..\..\..\..\..\Windows\System32\cmd.exe /k calc.exe'!A1

すると「プログラムの実行許可を求めるポップアップ」は、以下の図のように、「CMD.EXE」が「MSEXCEL.EXE」に変わっていることがわかります。

f:id:binary-pulsar:20181011192836p:plain

攻撃者はこうしてポップアップのメッセージを変更することにより、攻撃対象の警戒心を和らげます。その他にも、以下のようにrundll32.exeを用いたペイロードを埋め込む手法が考えられます。

=rundll32|'URL.dll,OpenURL calc.exe'!A

rundll32.exeは、DLLから関数を取り出して実行する機能を持つ、Windows OS標準の実行ファイルです。攻撃者が制御を得ることに成功したWindows OSのホストで、アンチウイルスソフトを回避するために利用されることがある実行ファイルでもあります。このように、cmd.exeを用いらずとも任意のコマンドを実行可能できる手法が存在することも、攻撃への対策として認知しておくとよいでしょう。

対策

ポップアップが表示された際に内容をよく確認し不用意な選択しないことが望ましいですが、組織に所属する全職員にそのような習慣を徹底させることは難しいでしょう。可能であればMicrosoft OfficeのDDE機能を無効化することにより、根本的な対策を講じることが良いでしょう。Microsoft OfficeのDDE機能を無効化する手順は、Microsoft社により以下のWebサイトにて公開されています。

マイクロソフト セキュリティ アドバイザリ 4053440

DDE機能の無効化機能は、本手法の公開に伴い2017年12月にアップデートプログラムとして公開されました。よって、DDE機能の無効化による対策を講じる場合は、以下のアップデートを適用する必要があります。

https://portal.msrc.microsoft.com/ja-jp/security-guidance/advisory/ADV170021

まとめ

今回の記事では、DDE機能を悪用してマクロ機能を使うことなく任意のコードを実行する手法を取り上げました。今回はMicrosoft Excelの場合を取り上げましたが、Microsoft WordやMicrosoft PowerPointでも同様の手法が可能です。対策として、ポップアップの内容をよく読み不用意な選択肢を選ばないように習慣づけることが考えられますが、組織のネットワークを守ろうという場合は全職員にそのような習慣をつけることは難しいと考えられるため、完全な対策とはいえません。可能であればDDE機能の無効化により根本的に対策することが望ましいでしょう。