Winnyの脆弱性は本当かも


# ことの始まりだけを追記

政府による情報操作説が流れているので少し調べた。
(個人的には、UNYUN氏がいうなら信頼できると思ってるけど・・)

オーバーフローする箇所があるみたい。
リモートからWinnyを異常終了させることが可能でした。


# 公開すんなということで内容は消しました。
# ただ、政府の情報操作説は誤り大げさで
# Winnyは本当に危険かもしれないということははっきりさせておきたい
#
# 実行ファイルは残しているけど、これを使ってどうこうはできないつもり。

# Q. 実行ファイルを使って実証できないのはなぜか
# 1. port0ではない? ポートの指定はあっている?(batファイル)
# 2. グローバルIPアドレスが取れない?
# (自分から自分へつなげない? LAN内?)
# ただ、IPアドレスを指定できるようにすると非常にまずい。
# 3. 俺のマシンが特殊仕様!
# 動いた環境
# - Winny2.0b7.1 (DLしてきて、そのまま起動)
# - AirH"
# (グローバルIPアドレスが取得されて、そこへ繋ぎにゆく)
# (Winny側のaccept()から、グローバルIPアドレスが戻るので拒否されない【重要】)
#
# - WindowsXP SP2
# - ThinkPad X40


# LAN内だと動かないようなので。
# インターネットなしでも試せるローカル用のwinnydos2
# 実証だけしたい人は、これが確実に動く。
# IPアドレスは取得せずに127.0.0.1固定にして、
# Attackerをポート0ノードとして繋げて、
# 繋がった瞬間にパケットを送るバージョンです。
# 速すぎて画面上では確認できないかもです。

とりあえず、Denial of ServiceでリモートからWinnyを停止させることは間違いなく可能なので実証実行ファイル。
(影響を考慮して実行ファイルだけです)
WinnyDOS

影響を考慮して他のマシンに繋がらないように、プログラム内で自ホストのIPアドレスを取得しています。(localhost:127.0.0.1だとWinnyに弾かれるのでわざわざ取得します)
影響を考慮してポート番号はプログラム引数で指定。

  1. Winnyを起動(Winny2.0b7.1で試した)
  2. winnydos.batをエディタで開いて4000という数値を起動しているWinnyポートに変更
  3. winnydos.batを実行

実行すると、Winnyのノード情報のところに"Attacker"というクラスタのノードが2秒間ほど表示された後にWinnyが終了します。

影響を考慮して、実証実行コードは安全を心がけています。

  • 追記

落ちているというより、書き換え検知して終了しているか、アクセス違反をハンドリングされている感じ。

  • さらに追記

別。
WinnyDOS2

  • 悪意のコード予防

Winnyに限った話ではないのですけど。
@IT:解説:Windows XP SP2で採用されたDEPの仕組み
万が一でも任意のコードを実行されないように予防。
コードはテキストセグメントに置かれて、そこは書込み禁止にされ、そこ以外のデータ(スタック、データ、ヒープ?)上にあるコードが実行されそうになるとストップ! らしい。

  • こいつに追記

Winnyはパッカーかましているから、そもそもデータ領域にコードがあるので、DEPが働かない可能性があると、Winnyの実装のお粗末さを語るスレの人がゆってた。

  • パッカーとDEPの詳細

不明。詳しいソースのない情報。展開したあとにアクセス権を変えていればDEP動くのでは?とさえ思う。
DEPで任意のコードを実行されることが防げるかどうかは、eEyeに公開してもらったほうがよさげ。
それで「任意のコード実行」が防げて、今回のことが単なる脆弱性の指摘なら、それで不十分ながら最低限の対応になると思う。

  • XPのソフトウェアDEPで任意のコードを実行だけは防げそう

http://tmp6.2ch.net/test/read.cgi/download/1145777669/31
検証してくれた人がいる。

  • 今回の件に対するパッチ


# http://tmp6.2ch.net/test/read.cgi/download/1142613933/
# http://tmp6.2ch.net/test/read.cgi/download/1145802645/ (↑の次スレ)
# 詳細はリンク先参照 (ここにのせると古くなる可能性があるので)

Winnyスレのほうでは、パッチがでているもよう。
ソースコードもついていますが、メモリパッチなので内容よくわかんないす。
自己の判断に基づいて使用というやつかと。
その他のツールと組み合わせる方法も議論されているみたい。

readme.txtを見る限りは、脆弱性のあるコマンド自体を受け取れないようになるらしい(たぶん、switchがコマンド分けている部分つぶしてるのかな・・)ので、これで、ここにあるwinnydosとwinnydos2は無効化されるが、WinnyBBSが使えなくなると思う。

こちらとしては、全部コードを見た上でwinnydosとwinnydos2を出したのではなく、ぱーとみて、2つ見つけたので2つ出しただけなので、本格的に対応やるなら、もう少し見直したほうがよさげ。鵜飼氏が言っているのとは別の可能性もある。(メモリアドレスで場所言われても俺わかんない・・)

  • こいつに追記

スレのほうでは、きちんとバイト長チェックするパッチが出てきそうな雰囲気。ここで出している以外にも、問題があったようでそちらの対策も入るみたい。

  • こいつにさらに追記

Lark氏のWinnypがバージョンアップされ、今回3箇所の脆弱性が修正されました。
詳細は、RinGOchWinny本体スレ参照。(Nynode.info)

  • 動き

2ちゃんねるでは、うそだといったり、信じなかったりが減って、Winnyはこのままではもうだめだとか、どうすれば攻撃が防げるか?という対策の方向へ進みつつあるようにみえる。

  • その後

Nynode.info にパッチなどまとめられているもよう。

Winnyの脆弱性を信じるか信じないか

今回の事で、実証コードを公開できないと、どういうことになるのか見物。
今回の場合、開発側は修正しない(できない)としており、脆弱性が修正されることがないため「利用の停止」が危険の回避方法。
しかし、実証コードが出てこないので、信じないユーザ側が多い。(2ちゃんねるを見る限り)
通常だと、実証コードを開発側だけに突きつけて、開発側に危険性を認識させた上で対応を待つものだけど、今回は各ユーザに危険性を認識させて、自身の判断で対応してもらわないとならない上に、実証コードを公開できないから、実証することができず、信じないユーザが多い。
本当に危険が存在して、それを悪用したワームも作成可能で、それがどれだけ危険なことかを認識しているのなら、今回ばかりは実証コードの公開を許可して、早めに出すべきだと思う。
もちろん、実証コードの公開で、全ての一般ユーザが危険性を認識するのは無理だろうけど、そこは信頼できる識者の意見がいくらかでれば、真偽の判断につながる。

本当にWinnyが危険なら、脆弱性があるということだけが公開されて、その対応がされないという状況は、反ってまずい。