「DorkBot」―「NgrBot」にそっくりなボットネット

「DorkBot」は「IRCボット」の改変型の1つで、「NgrBot」と非常によく似ていることから、多くの場合アンチウィルスソフトは同一の検知機能で「NgrBot」と「DorkBot」を同じように扱っています。私たちのボットネット監視システムでも「NgrBot」と「DorkBot」をほぼ同時にキャプチャしたことがあります。しかし、「NgrBot」と「DorkBot」両方を詳しく分析した結果、これらはそれぞれ別々に対処されるべきだということが分かりました。

今回の記事では、これら2つのボットネットの類似点と相違点について解説していきます。

バージョン番号

私たちが受け取った「DorkBot」のハードコードされたバージョン番号は「NgrBot」のバージョン番号と同一です。このことから、「DorkBot」と「NgrBot」が同一のソースコードからきているのではないかと考えられます。


図 1. ハードコードされたバージョン 1.1.0.0

暗号解読とハードディスク消去の仕組み

「DorkBot」には私たちがこちらで解説しているような、ハードディスク消去のテクニックを含む「NrgBot」の暗号解読技術の大半が受け継がれています。

パーティションにゼロ(0)を入力すると表示されるメッセージボックスは「DorkBot」では若干異なり、下の図のように別のタイトルが付けられています。


図 2. メッセージボックスの表示

ボット名

図2に示されているように、ボット製作者は「DorkBot」に別の名前をつけており、これはバイナリコードでも確認することができます。


図 3. 「DorkBot」のコードにおけるハードコードされたボット名

ローダーとモジュール実行の仕組み

「DorkBot」は1つのボットをローダーとモジュールの2つの部分に分割します。 「DorkBot」のモジュールは「NgrBot」そっくりの実行ファイルで、ローダーのリソースセクションでハードコードされます。


図 4. ローダーのリソースセクションでハードコードされたモジュール

ローダーは自身を svchost.exe プロセスに注入することで開始します。svchost.exeに注入されたコードはnotepad.exeの実行中のインスタンスがないかチェックします。もしある場合は、それらのインスタンスを停止させ、サスペンドモードでnotepad.exe のインスタンスを新たに作成し、この新しいnotepad.exe のDnsQuery_A とDnsFreeのAPIを(ともに dnsapi.dllから)フックしてコマンドアンドコントロール(C&C)URLのDNSクエリをリダイレクトします。このフックの機能については後ほど解説します。

一方、この感染した notepad.exe のプロセスは、「DorkBot」のモジュールが注入される間ウィンドウを表示しません。

続いて「DorkBot」のローダーが再起動し、 自身の中でモジュールを展開させます。ローダーのこの2番目のインスタンスはモジュールとなり、実行中の処理にコードを注入し、まさにローダーのように、DnsQuery_A と DnsFreeをフックします。しかしモジュールの持つこのフック機能には別の目的があるのです。「NgrBot」同様、モジュールのフック機能はセキュリティ関連のウェブサイトへのアクセスをブロックするために使用されます。

いったんモジュールがコードを注入したプロセスがnotepad.exe であることを確認すると、C&C通信を含む主なコードが実行されます。この点でもexplorer.exeに主なコードを注入し実行する「NgrBot」とは異なります。


図 5. 「NgrBot」と「DorkBot」におけるターゲットプロセス

ご存知のように、Windows デスクトップのGUIは デフォルトではexplorer.exeがつかさどっているため、「NgrBot」による注入は常に成功します。これに対しnotepad.exe の処理は常にデフォルトで実行されるわけではないため、「DorkBot」は自身のモジュール注入を成功させるためにnotepad.exe を作成する必要があるのです。さらに、感染前に自分のnotepad.exe のインスタンスを開くユーザーとの衝突を防ぐため、ローダーは既存のnotepad.exe の処理をすべて消去してから、モジュールを注入する隠しnotepad.exeを作成するのです。

いったんモジュールがnotepad.exe に注入されると、 DNS クエリを実行しハードコードされたC&CサーバーURLの最終IPを入手します。しかし、これらのハードコードされたURLは本物のC&Cサーバーではなく偽物なため、グローバルDNSシステムには決して存在しません。


図 6. モジュールにおける偽のC&C サーバーURL

すでに述べたように、感染したnotepad.exeの DnsQuery_A と DnsFree のAPI はこの時点ですでにローダーにフックされているため、DNSクエリの運用をキャプチャすることが可能となります。これらのDNSに関連したAPIをフックする機能は、クエリを出されているドメイン名がハードコードされたC&Cサーバーの ドメイン名のいずれかと一致するかチェックします。


図 7. フックされたAPIでC&CのURLをチェック

クエリを出されているドメイン名がハードコードされたC&Cサーバーの ドメイン名のいずれかと一致する場合、リストにある本物のC&Cドメインのいずれかに取って代わられますが、リストにはおよそ100のドメイン名があります。


図 8. 「DorkBot」の本物のC&Cドメインリストの一部

この仕組みはまた、「DorkBot」のモジュールが自身では実行できないことを意味します。これが「NrgBot」との最も大きな相違点です。

当初のIRCコマンドを変更

IRCサーバーに直接ログインするためにIRCの元々のコマンドを使用する「NgrBot」と異なり、「DorkBot」はIRCのコマンドを変更するという、一歩進んだ手段をとっています。下の図に見られるように、「DorkBot」は IRCコマンドの NICK を KCIKに、 USER を SSRRに変更します。


図 9. 「NgrBot」と「DorkBot」におけるIRCコマンドの比較

これらの特徴はネットワークトラフィックを監視する上での目印として役立つでしょう。

C&C サーバーとの通信

「DorkBot」のC&C サーバーとの通信は 「NgrBot」と非常に似ています。下の図から、ボットネットをダウンロードするコマンドが確認できます。「:!dl」が含まれるのは常に「:hub.us.com 332」で始まるIRC コマンドです。また、2つの異なるダウンロード命令が1行にまとめられていることも分かります。「DorkBot」のモジュールはその後それぞれのダウンロード命令の詳細なレポートを送信します。


図 10. キャプチャされたダウンロード命令

C&C の指令

「DorkBot」の最新亜種がサポートするC&Cサーバー指令の全リストは以下の通りです。

  • :!v
  • :!rc
  • :!die
  • :!rm
  • :!s
  • :!us
  • :!stop
  • :!stats
  • :!logins
  • :!rs0
  • :!speed
  • :!m
  • :!j
  • :!p
  • :!dl
  • :!msn.set
  • :!msn.int
  • :!http.set
  • :!http.int
  • :!http.inj
  • :!mdns
  • :!vs
  • :!up
  • :!slow
  • :!mod
  • :!rs1
  • :!udp
  • :!ssyn

C&Cサーバーによって送信された指令で、私たちが現時点でキャプチャしたのは「:!dl」コマンドと「:!up」コマンドの 2つだけです。

結論

「NgrBot」と類似点はあるもののさらに巧妙な 「DorkBot」は、新型の「IRCボット」と考えられるべきでしょう。 偽のC&Cドメイン名の使用に見られるような複雑な手口は分析をさらに難しくする可能性がありますが、私たちのボットネット監視システムはその他の主なボットネットファミリ同様、「DorkBot」の活動を引き続き監視していきます。