Virut は Windows ファイルを対象に感染するウイルスで、実行可能ファイルや Web 関連のファイル(.html、.php、.asp など)に感染して拡散します。Virut のペイロードは、Windows の重要なプロセスとして知られる winlogon.exe 内のリモートスレッドとして実行されます。 このペイロードには 2 つの機能があります。
C&C サーバーとの接続は、IRC を介して確立されます。IRC のホスト名とポートはウイルスの本体内にハードコードされていますが、それが拡散中に更新されます。亜種ごとに、プロトコルの詳細はさまざまです。たとえば、Virut は番号の大きい TCP ポートに接続し、暗号化(カスタムの対称アルゴリズム)を利用します。暗号化された層の下には、標準の IRC コマンドがあります。クライアントとサーバーの間で、鍵が直接交換されることはないという点に注目してください。つまり、サーバーは初期の IRC ニックネーム(NICK)要求のとき、既知の平文テキストや既知の暗号化テキストを使って総当たりを試みる必要があるということです。 別の亜種は通信チャネルを暗号化せず、HTTP ポートを使ってファイアウォールをすり抜けることができるので、アプリケーションレベルでパケットがチェックされません。どちらの場合でも、IRC レベルのプロトコルは次のようになっています。まず、クライアントが以下の NICK/USER コマンドを送信して接続を開始します。 NICK [ランダムな8 文字] USER [ランダムな文字][OS のバージョン] . . :[%|#][ボリュームID][CRC] [OS サービスパック] 例: NICK qjhfdskj USER d020501 . . :%111111118 Service Pack 2 次に、ウイルス本体に埋め込まれてハードコードされているチャネル名を復号化し、そのチャネルに接続します。 JOIN #.[ハードコードされた ID] 次にボットが、サーバーから送信される IRC 要求を待機します。自身がコマンドを送信することはありません。ボットは、標準の ping コマンドに対して、サーバーが正常であることを示す pong で応答します。 コマンドは、標準のプライベートメッセージコマンド(PRIVMSG)を介して送信されます。PRIVMSG は、特定のニックネームまたはあるチャネルの全ユーザーに対してメッセージを送信するときに使うコマンドです。このボットは、以下の 2 種類のコマンドを認識することが、リバースエンジニアリングによって判明しています。
サーバーの設定と強化が適切に行われていない場合には、マルウェア作者たちが共有したいと考える以上に多くの情報が渡されてしまいます。Virut の場合、サーバーの情報はきわめて詳細です。 VERSION :k. 351 hvhmdwhu hybrid-7.3beta(SVN). k. :egIKMZ6 TS6ow 私たち執筆陣は、よく知られたオープンソースの IRC サーバーである Hybrid 7.3 を使っています。STATS コマンドを使うと、サーバーで実装されているコマンド(IRC 準拠または Hybrid 固有)の種類を知ることができます。 ネットワークにある IRC サーバーのリストと、現在接続しているボット(ユーザー)の数も確認できます。 MAP :k. 015 hgjfyuis :k. ---------------------------------- | Users: 12202 (100.0%) :k. 015 hgjfyuis : `- u. ------------------------------ | Users: 0 (0.0%) :k. 015 hgjfyuis : |- i. -------------------------- | Users: 0 (0.0%) :k. 015 hgjfyuis : `- j. -------------------------- | Users: 0 (0.0%) また、チャネルのリストや、チャネルに接続しているボットの数も知ることができます。 LIST :k. 322 hgjfyuis #.3159 73 : :k. 322 hgjfyuis #.3146 6 : :k. 322 hgjfyuis #.3302 1 : :k. 322 hgjfyuis #.2535 2 : :k. 322 hgjfyuis #.3627 2 : :k. 322 hgjfyuis #.3224 38 : :k. 322 hgjfyuis #.7800 3 : :k. 322 hgjfyuis #.1625 52 : … Virut の各バージョンで複数のチャネルが使われますが、それぞれの攻撃者に渡されるときにはチャネルが分離されます。 特定チャネルのボットを取得することも可能です。このときのネックネームを見ると、そのチャネルが明らかに Virut のクライアントによってポピュレートされていることがわかります。 NAMES #.3497 :k. 353 hgjfyuis = #.3497 :wnepgxqd zfzguzcn ntvwgkpe drywxfuj hccrgway rkrapoxt jlbbemzr fhospudx itxtqdpi sylxrxwb mxujknoj mrbnarsy wwwotczf dgnjojew clzjzakc hgjfyuis cnethhfx … 適切に設定されていないチャネルもあるため、接続している任意のユーザーが(ボットや悪質なクライアントであっても)、そのチャネル上のあらゆるボットにプライベートメッセージを送信できます。ダウンロードと実行のコマンドフォーマットが理解できれば、悪質なユーザーがどのようにマルウェアをインストールし、ボットネットの部分的な乗っ取りを実行するかは、容易に想像することができます。何千というボットをホストしている大きなチャネルは適切に設定されているようなので、標準ユーザーがチャネルにポストすることはできません。設定が不適切なチャネルでは、感染したシステムを攻撃者が制御できないようにして、ボットの再接続を防ぐことができます。 クライアントが Virut IRC サーバーに接続するときの初期手順は、以下に示すとおりです。 JOIN コマンドの次に、サーバーは PRIVMSG コマンドを送信し、別の脅威をダウンロードするようボットに指示します。LIST コマンドの出力にも注意してください。チャネル #.1794 には 27 のユーザーが接続しています。 ボットが再接続できないようにチャネルをシャットダウンすると、チャネル上のユーザーは 2 つだけになります。これが、攻撃者自身である確率は高いと考えられます。 一部のチャネルはシャットダウンできますが、より大きい大部分のチャネルは適切に設定されているため、外部のユーザーが制御することはできません。ISP 管理者にはサーバー全体をシャットダウンするよう再三要請しましたが、残念ながらそれは却下されました。Virut の活動を部分的には歯止めを掛けることができましたが、その活動は依然として続いているという現状です。
* 日本語版セキュリティレスポンスブログの RSS フィードを購読するには、http://www.symantec.com/connect/ja/item-feeds/blog/2261/feed/all/ja にアクセスしてください。