2019/04/03(水) 添付ファイル付不審メール(bebloh/ursnif(A))の解析

2019年4月3日でばらまかれた不審メールを解析してみました。解析方法の整理をかねて、解析結果を今後投稿していこうと思います。まだマルウェア解析歴が浅いため間違っている部分はあるかもしれませんが、その際はコメントを頂ければ幸いです。

 

■添付ファイル

・文書名 -scan-nnnn.xls
※nnnnは数字4桁
https://www.virustotal.com/#/file/a5294a62b4cd9eae6d53816f8335d4e4aa9e48e3947621383658ca595bea4da6/details

 

ハッシュ値

SHA-256   a5294a62b4cd9eae6d53816f8335d4e4aa9e48e3947621383658ca595bea4da6

 

コンテンツの有効化をクリックするとマクロが実行されます。

 

f:id:bankingmalware:20190409175041p:plain

エクセルの中身

■ 解析1<Excelのマクロ起動からPowershell起動まで>

Excel.exeのマクロにより、子プロセスとして、ELZQRKV.exeを作成・起動されます。ELZQRKV.exeはpowershellであることがわかりました。その引数として、難読化されたコードを渡されていました。

 

f:id:bankingmalware:20190409175145p:plain

ファイル起動後のプロセスの動き

f:id:bankingmalware:20190409175227p:plain

powershellに渡された引数

 

■ 解析2. VBAの難読化されたコード解析

olelvbaを利用して、VBAのコードを抽出してみました。難読化されており、完全な解析は困難ですが、powershellをコピーおよびshell関数を利用し、難読化したコードを引数にpowershellを呼び出していることが確認されました。

 

# olevba --reveal ファイル名

 

f:id:bankingmalware:20190410152504p:plain

ランダムなファイル名作成

f:id:bankingmalware:20190410152526p:plain

powershellのコピーから実行まで


 

 

■ 解析3. Powershellの難読化されたコード解析

下記の赤字部分からBase64によるエンコードおよびDeflateアルゴリズムにより圧縮されていることがわかるため、Pythonを利用してコードの難読化を解除します。

<難読化されたPowershellのコード>

& ( ${pSh`O`mE}[21]+${P`s`HOme}[30]+'x')(.(\"{0}{1}{2}{3}\"-f'NeW-','O','B','Ject') (\"{5}{4}{2}{1}{3}{0}\" -f 'prEssion.DefLaTestReAM','io.cO','.','M','STEM','sy')([Io.mEMoRYstREam] [coNVerT]::FROmbaSE64StrInG('ZZpBj+S2EYX/Sh+c7hnAG1QZSQ7bFwXGInLgbAdrwxdjoU...756fn//3zF9z/R8='), [sYsteM.IO.COMPrEssiON.coMPresSiOnMoDe]::dECOMpRess ) | .('%'){ .(\"{0}{2}{1}\" -f 'N','t','eW-OBJec') (\"{1}{2}{5}{0}{3}{4}\"-f'aMrEAD','SYstE','M.io.sT','e','R','rE')(${_}, [SYStEM.tExT.enCoDiNg]::ASCII)} |.('%'){${_}.rEadtoeNd()})

 

・難読化解読Pythonコード

import base64

import zlib

tmp = 'ZZpBj+S2EY...(上のBase64エンコードされた部分)'

decoded = base64.b64decode(tmp)           #base64でデコード

decompressed = zlib.decompress(decoded, -15)          # Deflateで復元

print(decompressed.decode("utf-8"))

 

f:id:bankingmalware:20190409175629p:plain

Pythonコードの実行結果

上記のとおり、2進数で書かれたコードが確認されました。区切り文字を削除して、Asciiコード変換機を利用して、2進数を文字列に変換すると下記のようになりました。

 

f:id:bankingmalware:20190409175712p:plain

Asciiコード復元結果

再び、Base64およびDeflateアルゴリズムにより圧縮されていることがわかるため、もう一度Pythonを利用してコードの難読化を解除します。

 

f:id:bankingmalware:20190409175821p:plain

Pythonによる難読化解読(2回目)

ようやく、悪意のあるコードを複合できました。上のコードを整形すると下記のようになります。コメントアウトはこちらで付け加えた部分ですが、黄色の部分のとおり、https://gerdosan[.]com/uploads/changed.pdfのpdfファイルを開こうとしていることがわかりますが、今はサーバを落とされているため、失敗となりました。これ以降の流れは、下記のページで分析されています。

https://bomccss.hatenablog.jp/entry/2019/04/04/035229

 

f:id:bankingmalware:20190409175943p:plain

難読化を解読したPowershellコード

 

 ■ (参考)解析4. Ursnifの解析

上記で記載した通り、changed.pdfは落ちてこなかったので、直接検体をダウンロードして、解析してみました。

Sha1    2611A2F1A57AB415C11733A80FE92DA843E5AEE5

下記のとおり、Ursnif.exeの子プロセスとして、explorer.exeが実行されていることがわかります。これはexplorer.exeにdllインジェクションされたのだと推測されます。

 

f:id:bankingmalware:20190410153030p:plain

Ursnif実行後のプロセスの動き

Explorer.exeが起動された後、複数のcmd.exeが起動されたことが確認できます。

 

f:id:bankingmalware:20190410153102p:plain

cmd.exeの実行

Cmd.exeの動きを追ったところ、%TEMP%配下に8175.binというファイルを作成・書き込みを行っていることがわかりました。%TEMP%を確認したところ、8175.binというファイルはありませんでしたが、6E44.binというファイルがありました。バイナリエディタで確認したところ、このファイルはCABファイルであることがわかりました。

 

f:id:bankingmalware:20190410153130p:plain

6E44.bin

拡張子を.cabに変換し、解凍したところ、ようやく8175.binを抽出できました。テキストエディタで確認したところ、下記のようにマシン情報(ホスト名やレジスタ情報など)が格納されていたことがわかりました。

 

f:id:bankingmalware:20190410153202p:plain

8175.binの中身

 

今回の解析ではこれ以上の動きが確認できませんでした。おそらくC2等が動作していると、C2へ8175.binの送付およびブラウザの入力内容も%TEMP%配下に格納されるものと推測されます。