図1 ボットと攻撃者間の典型的な通信パターン
図1 ボットと攻撃者間の典型的な通信パターン
[画像のクリックで拡大表示]

 現在では「ボット」が大きな問題となっている。ボットとは、感染PCを乗っ取って、DoS(サービス妨害)攻撃やスパム送信の踏み台などにするマルウエア(悪質なプログラム)の一種である。

 ボットが問題になっている原因の一つは、膨大な数の変種や亜種が出現していることだ。ボットのソースコードはインターネット上で公開され、誰でも入手することが可能である。入手したソースコードから新たなボットを容易に作成できる状況になっている。

 このため、シグネチャ・ベースのアンチウイルスや侵入検知システムは、もはや有効なボット対策手段とはいえないのが現状だ。シグネチャ・ベースでは、新しく出現したボットを検知するには、そのボットに対応した新たなシグネチャが必要となるからだ。さらに、シグネチャの開発は非常に手間のかかる作業であり、開発環境の整備や開発者の確保には巨額な費用も必要となる。

 こういった問題点を解決するためには、プロアクティブ、すなわち、未知のマルウエアが出現しても対処可能な対策を用意しておくことが重要となる。そこで本稿では、プロアクティブに検出する手法の一つとして、レスポンス・タイム(応答時間)からボットなどのマルウエアを検出する手法を数回にわたって検討したい。

ボットの応答は速い

 通常、マルウエアがおこなう動作は、人間がマニュアル操作によっておこなうことも可能である。しかし、マルウエアはそれらの処理をすべて自動化しているので、処理スピードが速く、処理手順はプログラミングされているので予測可能である。人間がマニュアル操作でおこなった場合、その処理は自動化されたプログラムよりも遅く、しかも予測不可能になる。

 ボットにおいても同様のことがいえる。ボットはIRC(Internet Relay Chat)を通じて攻撃命令を受け付け、命令を処理した結果を攻撃者に通知する。このときの攻撃命令に対するボットのレスポンスは、人間によるものと比較すると速く、予測可能である。そこで、ボットのレスポンス・タイムに着目し、ボットを検出する手法を検討する。

 ボットと攻撃者間の典型的な通信パターンは図1のようになる。攻撃者はボットに命令を送り、ボットはそれぞれの命令に対して応答を返す。攻撃者はボットからの応答により、命令が処理されていることを確認できる。

ボットを“飼って”実験

 実際、ボットと攻撃者の間ではどのようなメッセージがやり取りされているのだろうか。それを調べるために、実験環境を構築して、PCにボットを感染させてみた。実験環境は、ボット感染PCとIRCサーバー(これは、攻撃者PCも兼ねる)、攻撃対象PCそれぞれ1台ずつで構成した。

 実験では、「Sdbot.B」というボットを感染PC上で動作させ、攻撃者PCから命令を送信した。やり取りされるメッセージの一例を下表に示す。送信内容はテキスト形式で、暗号化などは施されていない。攻撃者からの命令メッセージとボットの応答メッセージのいずれについても、IRCの「PRIVMSG」コマンドを使用していることが分かる。

送信元送信内容
攻撃者PRIVMSG #d3l3t3 :.login gr34t
ボットPRIVMSG #d3l3t3 :password accepted.
攻撃者PRIVMSG #d3l3t3 :.about
ボットPRIVMSG #d3l3t3 :mIRC v6.03 Khaled Mardam-Bey by [sd]
攻撃者PRIVMSG #d3l3t3 :.sysinfo
ボットPRIVMSG #d3l3t3 :cpu: 1300MHz. ram: 255MB total, 102MB free. os: Windows XP (5.1, build 2600). uptime: 0d 2h 27m. Current user: hoshizawa
攻撃者PRIVMSG #d3l3t3 :.syn 192.168.17.140 80 60
ボットPRIVMSG #d3l3t3 :SYN flooding [192.168.17.140:80] for 60 seconds

 最初に、攻撃者はボットにログインする必要がある。これは、ボットが勝手にコントロールされることを避けるためと思われる。Sdbot.Bでは「.login (パスワード)」がボットにログインのための命令メッセージである。適切なパスワード(Sdbot.Bでは「gr34t」)が送信されると、ボットはログインが成功したことを通知する「password accepted.」というメッセージを返信する。これ以降、攻撃者はボットを自由にコントロールすることが可能になる。

 実験では、「about」命令、「sysinfo」命令、「syn」命令の3種類を試した。aboutはボットのバージョンを確認する命令。ボットがこの命令を受信すると、ボット自身が保持しているバージョン情報を返信する。sysinfoはボット感染PCの情報を収集するための命令である。感染PCのOSのバージョンやログイン・ユーザー名などを収集して送信する。synコマンドはSYNフラッド攻撃を実行するための命令で、攻撃対象のIPアドレス、ポート番号、攻撃時間を指定することができる。

<以下、「レスポンス・タイムによるボット検知手法(その2)」に続く>