よもぎのメモ帳

備忘録的な感じで技術的なことをストックしていきます。

マルウェア(トロイの木馬)を初めて解析してみた

f:id:y0m0g1:20190626234232p:plain
社畜ちゃん台詞メーカーより

どうもこんにちは。よもぎです。

院試*1の足音が近づく日々ですが、いかがお過ごしでしょうか。 私はだめ、やばい

今回は 迷惑メールに添付されていたマルウェアを解析してみた ので、それについてのエントリになってます。 解析らしい解析はしていないけれども、初めてなので大目に見てね💫


迷惑メール、そしてトロイの木馬

こういうのが届きました

f:id:y0m0g1:20190626234636p:plain
届いた迷惑メール

解雇される覚えはないので、迷惑メールだなぁとわかりました。そもそもですが、書かれている電話番号は有効ではありません。*2

M.doc.zip が添付されていたので解凍してみると、M.doc.js ファイルが出てきました。 ファイラーで拡張子を表示しない設定にしておくと、 M.doc とだけ出てしまって、 ファイル名だけ見るとWordファイルに見えるので誤って開いてしまう ことを狙っているようです。 実行しないように気をつけて開いてみます。

中身をあなただけに少しお見せします

f:id:y0m0g1:20190626235201p:plain
1行のJavaScriptファイル(右端で折り返し表示)

(ぼかし加工してます) こういう マルウェア*3は難読化されていることが多い のですが、今回もそんな感じでした。 ただ、今回の難読化の方法は比較的容易だったので、これなら私にも読めるのでは??という気持ちになりました。


よく見てみる

とりあえず整形

tools.m-bsys.com

ここを使ったら割ときれいに整形してくれました。

f:id:y0m0g1:20190627125039p:plain
整形したやつ

復号する

あとは難読化を解読していくのですが、だいたい2つの方法が用いられていました

  • 変数名・関数名が意味の無い文字列に変換される
  • 配列リテラルとインデックス、文字列の連結を混ぜて読みにくくしている

1つ目はまあよくあること。*42つ目はどういうことなのかというと

['c' + 'o' + 'ns' + ['Mgu', 'AapM', 'tru'][2] + ['dlfg', 'hOh', 'ct', 'Gh1'][2] + ['Whi', 'jEey', 'or'][2]]
// -> ['c' + 'o' + 'ns' + 'tru' + 'ct' + 'or']
// -> ['constructor']

あと、この解析を通じてJavaScriptの面白いなと思った仕様*5が、 メソッド呼び出しは連想配列の取得みたいな感じでできる ことです。

String.fromCharCode(65) // -> "A"
String['fromCharCode'](65) // -> "A"

f:id:y0m0g1:20190627130532p:plain
Chromeの開発者ツールで試してみた

知らなかった(✽ ゚д゚ ✽)

変数名は復元できないので適当に val00 とかつけて、ちまちま直したらこんな感じになりました。

f:id:y0m0g1:20190627131852p:plain
ちまちま直した後


結局これどんなことをするの?

だいたいこんな感じの挙動になっているみたいです。

  1. google.comに繋いでみる。失敗したら5000ミリ秒待つ
  2. 悪意あるサイト*6から実行ファイルをHTTP GET
  3. 実行ファイルはバイナリとして %TEMP% 以下に保存し実行される
  4. 実行結果など何かしら送信してる?

いわゆる URSNIF と呼ばれる 情報剽窃型のトロイの木馬 の一種のようです。


詳しい人はもっと知っている

詳しい人はもっと早くもっと色んなことを知っているみたいです。Twitterで見た。

これは私の体験談的な感じなので許して(2回目)

最近は迷惑メールばっかり見ているので迷惑メールの人になりつつあります。どうか救いを。

*1:院死

*2:桁数が一つ足りない

*3:Malicious+Software:悪意のあるソフトウェア・プログラムの総称

*4:意味のある名前だと、その役割を推測できて挙動の推定が簡単になります

*5:他にもJavaとかでも同じ仕様かも……?調べていないです

*6:http[://]bibicity[.]ru