5/12(金)品川プリンスホテルで開催されたInside Winny~Winnyの解析とそのセキュリティ脅威分析セミナーに参加しましたので、その概要をお伝えします。修正点等ございましたらご連絡をお願い致します。
□講演者:鵜飼 裕司氏 eEye社 senior software engineer
(なお、資料には金居 良治氏 eEey社 software engineerの名もある。)
関連:検出ツールの開発者が語る,「Winnyを検出する方法」
※本講演は下記記事の拡張版のようなものです。
http://itpro.nikkeibp.co.jp/article/Watcher/20060411/235051/
□感想
eEye社は脆弱性判定ツールを開発する会社であり、Windows等の数々の脆弱性を発見した会社である。
Winnyのリサーチはわずか1ヶ月とのことだが、このような短期間の間に詳細内容を把握する技術力に驚いた。
なお、現在はWinnyネットワーク可視化、Shareの検出に力を入れており、今後研究の結果についても期待している。
また、Winnyを介したワームについての意見についてはとても興味深い。これについては私の意見を後述する。
□概要
-プロトコル
・ファイル転送用通信:ポート値はランダムな値を取る。26のコマンドで制御し、RC4で暗号化。
・BBS用通信:HTTPでポート値はランダムな値をとる。HTTP通信。
-パケット分析
・初期鍵パケット:最初の2バイトはダミー、次の4バイトが暗号キー(p_keyとしよう)を示す。
・通信ブロック:最初の4バイトはブロック長、次の1バイトがコマンド番号、残りはコマンド引数
・第2パケット以降の暗号方法:p_keyを加工した新しい鍵p_newkeyによりRC4暗号通信を行う。
-コマンド:
26のコマンドは次の通り
0x00:Winnyプロトコルヘッダー
0x01:回線速度通知
0x02:コネクション種別通知
0x03:自ノード情報通知
0x04:他ノード情報通知
0x05:BBSポート番号通知
0x0A:拡散クエリ送信要求
0x0B:キャッシュファイル送信要求
0x0C:拡散クエリ要求
0x0D:クエリ送信
0x0F:BBS拡散クエリ転送要求(検索条件付)
0x10:BBS拡散クエリ転送要求
0x11:BBSキー転送要求
0x15:キャッシュブロック送信
0x16:Port0ノードに対して転送リンク要請
0x17:Port0ノード情報通知
0x18:BBS投稿
0x19:BBS投稿中継依頼
0x1A:BBS書き込み中継結果通知
0x1B:BBS書き込み結果の通知
0x1F:切断要求
0x20:切断要求(転送限界)
0x21:切断要求(BadPort0警告)
0x22:切断要求(無視ノード警告)
0x23:切断要求(低速ノード警告)
0x24:切断要求(捏造警告)
-各コマンドの詳細:
講演では部分的に紹介されていた。主なものを抜粋。
0x03:自ノード情報の通知
・自ノードIPアドレス、ファイル転送ポート、DDNS名文字列長、クラスタリング文字列
0x04:他ノード情報の通知
・他ノードIPアドレス(IPv4アドレスがそのまま載っている)、ファイル転送ポート、BBSポート、回線速度、クラスタリング文字列等
・接続すると他ノードから0x04通信がバラバラ取得できる。これを元にWinnyのネットワークノード情報の列挙が可能。Winnyネットワークの可視化にも利用可能。
0x0D:クエリ送信
・クエリ経由ノード(IPv4アドレス)、経由ノード情報リスト個数、クエリID、検索キーワード、検索キーワード文字列長、キー情報リスト個数、キー情報等
-キー情報
・IPアドレス、ポート、ファイルサイズ、ハッシュ値(MD5)、ファイル名(多重暗号化)、ファイル名長等
・ファイル名の文字列の先頭一部を使ってファイル名をRC4で暗号化している。
-キャッシュファイルの復号
・ファイルをブロック単位で読み込んで復号。
・暗号はRC4で行われている。
-Winnyのセキュリティ脆弱性
・ファイル転送用ポートに対して細工されたパケットを送信。strcpy()命令でピープオーバーフローが発生。
(1)0052290A mov dword ptr [edx],eax:EDX,EAXが制御可能
(2)00406011 call dword ptr [edx+0ch]:EBXが制御可能
(1)は任意のアドレスに任意の32bit値をセットできる。
(2)は任意のアドレスに含まれる32bit値-0x0Chにジャンプできる
First Vectored Handlerポインタ上書きで任意アドレスにジャンプできることを確認。
アドレスはある程度の範囲内で安定(NOPで対処可能な範囲内)。BindShell実行可能。
(脆弱性の部分については講演資料から一部をそのまま抜粋しており、私は要約していません。)
-脆弱性脅威分析
・きわめて簡単に発見できる脆弱性
・Winnyに感染するワームがあれば、数時間でほぼ大半のノードに感染するだろう。
(Winnyは隣接ノードを情報を持つため。)
□質疑応答(追記しました)
Q:脆弱性は現在あるパッチで解決するか?
A:複数パッチがリリースされている中で、とりあえず一つだけチェックしたが、そのパッチでは脆弱性が解決しないことを確認した。どのパッチだかは失念した。(修正しました)
Q:亜種についてはeEye製品で検知できるか?
A:現在はWinny2だけ検知できる。亜種、Shareなどについても検知できるように現在研究中である。
Q:欧米ではWinny+AntinnyのようなP2Pソフト関連の深刻な被害は報告されているか?
A:報告されていない。その理由は日米の文化面の違いではないか?
(補足:日米の文化面の違いについては詳細を語らなかった。おそらく日本のP2Pファイル交換ソフトが匿名性を重視しており、キャッシュ機能等を具備していることを指しているのではないだろうか?)
ちなみに私の質問は以下の通り:
Q:Winnyネットワーク可視化ツールは行政等に販売する予定はあるか?
A:現在可視化ツールの提供方法について検討中である。
Q:P2P Finderとの差別化戦略は?
A:リサーチ期間が短いので日本での状況について今後積極的に意見交換をして把握したいと考えている。
□補足(追記しました)
・Winnyのプロトコル詳細についてはpoenyのソースを見ればよいでしょう。
(IkeJIさまから当Blogへコメントがありました。http://b.ikejisoft.com/?05131147)
poenyとは?(FuktommyさんのBlogから)
http://blog.fuktommy.com/#e1141630998
□考察
Winnyのワーム攻撃の可能性について聞いて、Winnyネットワークに深刻な事態が現れる可能性を考えた。
Windowsサーバに関するワームにおいて、多大な被害を生じている事は多くの人の記憶にあるだろう。
今、Winnyに関してそのようなワームが生じた場合、実はWinnyネットワークを壊滅することが可能だ。
例えば、ワーム感染してから一定時間を経った後、キー送信等をさせない、リンクをダウンさせる、レジストリを書き換えWinnyを立ち上がらせないようにすることにより各ノードをWinnyネットワークから分離してしまうことである。
一旦壊滅されたWinnyネットワークはP2Pの性質から他のWinnyノードを知らない限り復旧は困難だ。またワームに対するパッチを当てるユーザは少ないから、結局今までのようなWinnyネットワークは形成できないかもしれない。
上記攻撃はP2Pネットワークを利用するソフトに対して起きるうる攻撃手法である。
補足:講演資料は非常に詳細な情報が載っている。興味のある方は知人等から資料をコピーしてもらうと良いでしょう。