Blackhole Exploit Kitアップグレードされる

4 分で読める

ある業界では有名な「Blackhole Exploit Kit」ですが、どうやら最近アップグレードが行われたようです。

Symantec : BlackHole 悪用ツールキットがアップグレード: 擬似ランダムなドメイン
Slashdot : Blackhole Exploit Kit Gets an Upgrade

で、今回の目玉は「疑似乱数によるドメインの動的生成」らしいです。

何のことかと言うと、まず、Exploit Kit によるマルウェアサイトに誘導する主な手法はサイト改竄です。
その理由は、セキュリティベンダなどが提供しているブラックリストベースの検出を回避するため。
また、既存のサイトを改竄することで、特に何もすることなくユーザーが怪しむことなく集まります。
攻撃者にとってはホイホイな訳で。

そこで、改竄時に挿入される難読化されたJavaScriptについてが本題です。
大まかな動作としては、攻撃用サーバーにアクセスさせるために不可視のiframe(インラインフレーム)を埋め込みます。
んで、そこからJavaやらAdobe Flash / Reader やらのExploitが送り込まれて、それらが成功すればドライブバイダウンロードでマルウェア感染ってなことが一連の流れです。

ただ、従来の方法には一つ欠点がありました。
それはiframeとして埋め込んだURLがダウンした(ブラックリスト入りしたり、対策された)時です。
攻撃用サーバーにアクセスさせるためには、当然新しいURLに差し替える必要があります。
ただ、大量の改竄サイトを更新するのは困難であると。
そこで、もしダウンした場合でも自動的に更新するために、日付などの情報を基にして疑似乱数を基にドメイン名を動的に生成しようという訳です。


では、早速そのアップグレードされたBlackhole Exploit Kitで改竄されたと思しきサイトを見つけたので早速調査。
今のところ「/*km0ae9gr6m*/」「/*qhk6sa6g1c*/」とのコメントに囲まれたものが確認できた。
(参考までに、アップグレード前のBlackkhole Exploit Kitの改竄例として以前取り上げたもの⇒WordPress 増える改竄被害 

まず改竄サイトに挿入される難読化されたJavaScriptです。
fromCharCodeメソッドを用いてぱっと見分からないように簡易的に難読化。
また、20KB超のコードを一行にまとめてしまっています。
難読化されたコード

次に、これをデコードしたもの。
これが難読化の本処理で、まだ実際のコードが見えてきません。
デコード1

さらに上を展開したものです。
デコード2
ハイ、これで実際に実行されるコードが見えてきました。
Symantecのブログで紹介されているのとほぼ同じですね。
以前と比較して明らかなように、

  • nextRandomNumber
  • RandomNumberGenerator
  • createRandomNumber
  • generatePseudoRandomString

なる関数が追加され、月日時などに基づいた疑似乱数を用いて、動的にドメイン名を生成していることが分かります。
たぶんRandomNumberGenerator関数中の「var s = d.getHours() > 12 ? 1 : 0;」の条件分岐(時刻が12時以上か否か)で、
12時間サイクルで生成ドメイン名が変化するものと思われます。
ちなみに、本記事投稿時点では以下のドメインが生成されました。

lohnrnnpvvtxedfl.ru

以上のように、生成アルゴリズムがわかれば、生成されるドメイン名を予測することが可能です。
但し、アルゴリズムはいくらでもカスタマイズ可能な訳で、ブラックリストによるブロッキングがより困難になることは容易に想像できます。
これらの仕組みは、いわゆる「Domain Generation Algorithm(DGA)」というやつで、これ自体特に目新しいものではありません。
かつてのCofickerやZbotなどにも実装されていました。
それがBlackhole Exploit Kitで実装されたのですから、攻撃の成功率は上がり、被害者は増えるでしょうね。


[追記]
ちょっとググっていたら、このようなDGAを実装したJavaScriptコードによるサイト改ざんは以前にもあったようです。

Peering Through the iFramePDF
PastebinよりBlackhole exploit kit domain generation algorithm of SInowal

Mebroot(Sinowal)が拡散した時に用いられていたとのことで、Twitterのトレンド検索(?)もDGAに取り入れていたらしいのとで驚きです。

comments powered by Disqus