ロシアの軍事関連展示会を装ったデコイから、新たなBISKVITマルウェアを発見

数日前、FortiGuard Labsのチームが、ロシア語話者向けに作られたCVE-2017-0199につけいる、悪意のあるPPSXファイルを発見しました。ファイル名は「Выставка」となっており、訳すると「Exhibition」となります。さらに調べていくと、PPSXファイルはロシアで毎年開催されている Army 2018 International Military and Technical Forumという展示会を標的としているようでした。これは軍事兵器や特殊装備を扱う最大規模の展示会の1つであり、ロシアだけでなく、世界で開催されている同様の展示会のなかでも、特筆すべきイベントです。この展示会は2018年8月21日から26日まで開催される予定だったため、今回の悪意のある文書の発見は非常にタイムリーなものでした。

Figure 01. Decoy file

図1. デコイ(おとり)ファイル

このマルウェアのもう1つ興味深い要素が、以下の一文です。

Figure 02. Invitation in Russian

図2. ロシア語の招待状

簡単に訳すと、次のようになります。:

「<偵察と迅速なアクションを組み合わせた軍隊>向けの現代かつ未来の軍事兵器、特殊装備のサンプルを揃えた非公開の展示会です」

このイベントは誰でも参加できるものですが、去年の主催者は非公開の「デモンストレーション」を含む特別展示会を設置していました。これは厳選された招待客向けのものであり、大型航空機やミサイルなど、機密扱いの装備の展示が行われる場所です。そう考えると、この悪意のある文書は、こうした非公開のイベントに招待されたい人、あるいはすでに招待されている人たちを標的としたものだと考えられます。今年の展示会はすでに、海外から66の代表団が参加を表明しています。では、PPSXファイルがどのように未パッチのシステムの侵害を行う可能性があるのか、見ていきましょう。


分析

まず、CVE-2017-0199 につけいり、おとりファイルを開く悪意のあるPPSXファイルを見ていきましょう。CVE-2017-0199はHTA(HTMLアプリケーション)脆弱性であり、ユーザーが、エクスプロイトが埋め込まれた文書を開くと、悪意のるアクターがPowerShellコマンドを含むスクリプトをダウンロードして実行できるようにするものです。この脆弱性を悪用するAPTに出くわしたのは、今回が初めてではありません。実は、これまでの攻撃では国連機関や各国外務省、国際政府とやり取りのある人や組織が標的とされてきました。

Figure 03. Overview of attack

図3. 攻撃の概要

PPSXファイルが開かれると、ppt/slides/_rels/slides1.xml.relsのスクリプトがトリガーされます。その後、このエクスプロイトは図4に示すように、リモートサーバーから別のコードをダウンロードし、PowerPoint Showアニメーション機能を使ってそれを実行します。

Figure 04. PPSX file exploiting CVE-2017-0199

図4. CVE-2017-0199につけいるPPSXファイル

下の図は、XMLファイルに埋め込まれたPowerShellエクスプロイトの実行が成功し、%Temp%に実行可能なペイロードをダウンロードした後、リモートサーバーから送られたコードです。

Figure 05. defender XML

図5. DefenderのXML

実行されると、Defender.exeが以下のファイルをドロップします。

Figure 06. TMPEC4E directory

図6. TMPEC4Eディレクトリ

  • SynTPEnh - BISKVITマルウェアパッケージが入ったディレクトリ
  • Csrtd.db - autorunインストールのため、DevicePairing.exeが使用する暗号化された構成ファイル

    Figure 07. Decrypted configuration

    図7. 復号した構成ファイル
  • DevicePairing.exe - コード内では「AutorunRegistrator」としても特定され、SynTPEnhディレクトリを%appdata%にコピーして、それをautorunレジストリエントリーに追加する機能を持つ
  • DevicePairing.exe.config - ランタイム構成ファイル
  • Kernel32.dll - BISKVITマルウェアの共通ライブラリ
  • Newtonsoft.Json.dll - .NET向けの一般的なJSONシリアライザー

BISKVIT

BISKVITトロージャンは、C#で書かれたマルチコンポーネントのマルウェアです。このマルウェアは、コードで使われている名前空間に「biscuit」という単語が含まれていることから、私たちはこれをBISKVITと呼ぶことにしました。残念ながら、今回のものとは関係のないBISCUITというマルウェアが既に存在するため、biscuitのロシア語であるBISKVITを代わりに使用することにしました。

Figure 08. Biscuit modules

図8. Biscuitモジュール

BISKVITはモジュール型であることから、機能のすべてを完全に把握することは困難です。なぜなら、コンポーネントはすでにダウンロードされており、すでに攻撃者の側へとロードされてしまっているからです。この記事の執筆時にダウンロードできたのは、1つのコンポーネントのみでした。これまでに入手できたコンポーネントのコードを見てみると、このマルウェアは以下のことが可能ですが、これだけに限りません。

  • ファイルやコンポーネントをダウンロード
  • ダウンロードしたファイルやローカルファイルを隠れて/こっそり実行
  • 動的な構成ファイルのダウンロード
  • 自身のアップデート
  • 自身の削除

BISKVITマルウェアは上で述べたように、%temp%フォルダから%appdata%\ SynTPEnhにコピーされます。以下は%appdata%\SynTPEnhフォルダのコンテンツです。

  • SynTPEnh.exe - BISKVITマルウェアのメインファイル
  • Csrtd.db - 暗号化された構成ファイル
  • SynTPEnh.exe.config - ランタイム構成ファイル
  • Kernel32.dll - BISKVITマルウェアの共通ライブラリ
  • Newtonsoft.Json.dll - .NET向けの一般的なJSONシリアライザー

BISKVITのメインファイルはユーザーの疑いを避けるため、正規のSynaptics Pointing Device Driverファイルを装います。

Figure 09. Information disguised as Synaptics

図9. Synapticsを装った情報

実行されると、基本構成が初期化されます。そこには以下の情報が含まれます。

Figure 10. Base configuration

図10. 基本構成

その後、csrtd.dbという名前の構成ファイルをロードし、復号します。この構成ファイルは、以下のキーを使ってAESで暗号化されています。

Figure 11. Default AES and IV key

図11. デフォルトのAESとIVキー

復号されると、この構成ファイルにはC&Cサーバー、マルウェアがC&Cサーバーからのジョブのチェックに使用する時間間隔、APIキー、RSAキー情報が含まれています。RSA暗号化手法に対するコード参照は見当たりませんでしたので、この記事の執筆時にまだ入手していない他のコンポーネントが使用しているものと思われます。

Figure 12. Decrypted configuration

図12. 復号された構成ファイル


C&Cとの通信

このマルウェアは、JSON形式を使ってREST APIを介してC&Cサーバーと通信を行います。まず、APIキーを送信してアクセストークンを入手します。構成ファイルに指定されていなければ、このAPIキーは感染したマシンのCPU、ディスクドライブ、MACアドレス情報から生成されます。このAPIキーは、マシンの特定にも使用される独自のIDとなります。

Figure 13. Unique Id composition

図13. 独自IDの構成内容

このAPIキーは、API /api/auth/tokenに対するHTTP POSTリクエストを介してC&Cサーバーに送信されます。

Figure 14. POST ApiKey

図14. POST ApiKey

サーバーは、セッション全体で使われることになるアクセストークン情報を返します。

Figure 15. Access token

図15. アクセストークン

そしてこのマルウェアは、Jobs APIを介して攻撃者からコマンドを受け取り、それを実行します。API /api/job にHTTP GETリクエストを送信し、構成ファイルで設定された間隔の通りに、特定の時間が過ぎたところでジョブを入手します。

Figure 16. GET api/job

図16. GET api/job

レスポンスは、idresultUritasksexecutionOptions という4つのメインキーが入ったジョブになります。

Figure 17. Job

図17. ジョブ

  • id - ジョブID
  • resultUri - マルウェアがジョブの結果をHTTP POSTする場所
  • executionOptions - 特定の時間間隔でパッケージを実行すべきか、そして起動時にスタートすべきかをマルウェアに伝える
  • tasks - このキーには、攻撃者が感染マシン上でダウンロードし、実行したいパッケージ(コンポーネント/その他ファイル)に関する情報が含まれる

キーtasksexecuteModeが、マルウェアにパッケージの実行方法を伝えます。

Figure 18. Execute modes

図18. 実行のモード

モードが0の場合、パッケージはコンポーネント/ライブラリとして扱われ、 parameters キーで指定されるパラメータで実行されます。

モードが1の場合、パッケージはファイルとして扱われ、ShellExecuteEx()かCreateProcess() Windows APIを使い、WindowStyleをHiddenに、CreateNoWindowをTrueに設定して実行されます。

Figure 19. ExecuteHide

図19. ExecuteHide

モードが2になっている場合には、パッケージはファイルとして扱われ、CreateProcessAsUser() Windows APIを使用して実行されます。

Figure 20. StartAsUser

図20. StartAsUser

このマルウェアのもう1つ興味深い機能が、 534faf1cb8c04dc881a3fbd69d4bc762というフォルダにローカルでジョブを保存するという点です。

Figure 21. Jobs Directory

図21. Jobsディレクトリ

ジョブは構成ファイルのものと同じAES暗号を使って暗号化されており、ジョブIDを使い、拡張子.db で名前が付けられています。つまり、現在のプロセスが妨害されたり、終了されたりした場合でも、マルウェアの次の実行でジョブを実行し続けることができるということです。ジョブを完了すると、このマルウェアはローカルで保存したジョブを削除します。

分析の際、このマルウェアはexecuteMode が0に設定されたパッケージをダウンロードするジョブを受け取りました。つまり、このパッケージは、 /api/package/5b61b91da99a25000198dfccからダウンロードできるコンポーネント/ライブラリだということです。

Figure 22. Job with packageId and executeMode

図22. packageIdとexecuteModeが入ったジョブ

ジョブで指定されたdownloadUriのパッケージは、PKヘッダーのついたzipファイルになりました。

Figure 23. Get Package

図23.パッケージの受け取り

パッケージは、フォルダ083c57797944468895820bf711e3624fに保存されます。

Figure 24. Packages Directory

図24. Packagesディレクトリ

どのコンポーネントがダウンロードされたかを確認してみると、FileExecutorというコンポーネントであることがわかりました。これは parameters キーで指定されるファイルを単純に実行するものです。

Figure 25. Job and Task's parameters

図25. ジョブとタスクのパラメータ

このFileExecutor コンポーネントは、1に設定された executeMode と同じ機能を有しています。これはWindowStyleがHiddenに設定され、CreateNoWindowがTrueに設定された状態でShellExecuteEx()かCreateProcess()を使ってファイルを実行するものです。上のジョブでは、Waittime キーに指定されている通り、タイムアウトが30秒に設定されている状態で、マルウェアに FileExecutorcomponentを使って「systeminfo」を実行するよう伝えます。

コマンドsysteminfo は、コンピュータとそのオペレーティングシステムに関する詳細な構成情報を表示します。そこにはオペレーティングシステムの構成、セキュリティ情報、製品ID、ハードウェアのプロパティ(RAM、ディスクスペース、ネットワークカードなど)などが含まれます。

Figure 26. Systeminfo data POST to CC

図26. CCへのSysteminfoデータのPOST

C&Cが実行中のジョブの状況を把握するため、以下に示す値を含むキーStateも含まれています。私たちの分析中に送信されたデータには、2と同等のStateが含まれていました。つまり、完了したということです。

Figure 27. Job States

図27. ジョブの状態

systeminfo のジョブの後は、攻撃者がジョブを送信したマシンが、分析用のマシンであることに気づいたようで、C&Cはジョブの送信を停止しました。つまり、この攻撃を行っている者は、標的ではないコンピュータを感染させないように、そしてアラートを避けるように、非常に慎重だということです。

標的型攻撃に使用されるC&Cサーバーが、被害者のコンピュータの基本情報を回収した後に突如、反応しなくなるのは新しいことではありませんが、ここで使われているC&Cは完全に通信を遮断したわけではありません。ただ、ジョブの送信をストップしただけです。そのため、リサーチャーやアナリストは今後もC&Cの監視を続けていくことができます。


低いAV検知率

マルウェアファイルは圧縮も難読化もされていないのに、ファイルを検知できたのはフォーティネットなどの少数のAVベンダーのみでした。


結論

注目度の高い標的を狙うために、おとりとして現在進行中や今後のイベントを使用するという方法は、攻撃者たちの間でますます一般的に用いられるようになっています。

今回の調査結果から、悪意のあるデコイファイルがタイミングよく配信されたこと、そして一度も使われたことがないマルウェアが使用されたことを考えると、計画性の高い攻撃であると思われます。こうした2つの方法により、標的を侵害できる可能性が非常に高くなります。


ソリューション

フォーティネットでは、BISKVITマルウェアの全コンポーネントをW32/BiskvitLoader.A!tr、MSIL/BiskvitAutoRun.A!tr、MSIL/BiskvitLib.A!tr、MSIL/Biskvit.A!tr、MSOffice/Exploit.CVE20178570!trとして検知しています。

このマルウェアに関連する悪意のあるURLは、FortiGuard Webフィルタリングサービスでブロックされています。

ユーザーの皆さんは、CVE-2017-0199に対してMicrosoftからリリースされているパッチを必ず適用するようにしてください。

エクスプロイト文書のコンテンツをロシア語から英語に翻訳してくれたEvgeny Ananinに感謝します。


IOC

be7459722bd25c5b4d57af0769cc708ebf3910648debc52be3929406609997cf
a87daccbb260c5c68aaac3fcd6528f9ba16d4f284f94bc1b6307bbb3c6a2e379
b4a1f0603f49db9eea6bc98de24b6fc0034f3b374a00a815b5c906041028ddf3
934542905f018ecb495027906af13cc96e3f55e11751799f39ef4a3dceff562b
23a286d14de1f51c5073caf0fd40a7636c287f578f32ae5e05ed331741fde572

CC

hxxp://bigboss.x24hr.com
hxxp://secured-links.org/


最新の脅威レポートは、こちらからダウンロードいただけます。

FortiGuard Labsでは、脅威インテリジェンス情報(英文)を毎週お届けしていますので、ぜひご購読ください。