Winnyを検出 WinnyCap

eEyeの鵜飼氏による鵜飼裕司のSecurity from KAGURAZAKA - 検出ツールの開発者が語る,「Winnyを検出する方法」:ITproなんて、検出ネタがでているようなので、こういうネタを懐かしんで少し参加。
紹介ページでの2つ目の方法(ポートスキャナー)は、Perl Winny Scannarという実装が公開されています。
そこで、3つ目の方法(モニタリング)のテキトウな実装を作ってみました。
(去年の10月くらいに作って、今日新しくコンパイルしました! 新品です)

さて、古いネタを出してきましたよ・・・。

これは、起動してるコンピュータのNICを流れるパケット(受信パケット)からWinnyからの接続と思われるものを検出して、

  1. バージョン
  2. 回線速度
  3. 接続待ちアドレス+ポート
  4. クラスタリングキーワード×3

をリアルタイムに復号し、表示します。
(インターネットで試すなら、ローカルでWinnyかポエニーを動かしておく必要があります)

WinnyCap
Windows専用。D言語によるソースコード付き。DOS窓CUI・・・。

IPパケットを拾うためにRAW Socketを扱うので、起動にはAdministrator権限が必要です。
基本はダブルクリックで動きます。bindするIPアドレスを指定する場合は引数に指定します。

内容ですが、まずIPパケットを拾って、それがTCPパケットならデータサイズからWinnyっぽいか検査します。Winnyっぽかったら少し長めにパケットを拾います。それを復号してみて、ある程度復号できたなら、画面上に表示します。
それだけ・・。

@ 気になったこと


その他、漏洩してしまった情報の追跡や消去を支援するためのツール群も開発中です。

おもしろいね。Winnyは、クエリIDの管理がテキトウなので、特定のハッシュ値のキーを外部から強制的に上書きすることができる弱点を持っているので、このあたりをうまく使うと、特定のファイルをダウンロードしづらくしたりはできると思うけど、消去ってのはどうするんだろ。・・まさか「フルパスを含む名前のキーをダウンロードするとキャッシュ変換時にDownフォルダ以外の任意の場所にファイルを作成することができる脆弱性(妄想)」のようなものを発見していて、それを利用してデリートしてしまうおつもりか。いや、「支援」だからそれ自体が直接消去しなくてもいいのかな。

  • 追記

キーを上書きするときに、名前をテキトウなものに変えとけば検索にヒットしなくなるので、消去といえるかも。某BBSにハッシュ値を貼られた後なら手遅れですが。

@ 余談とか
コードみると分かるかもしれませんが、ポエニーの祖先です。
去年の10月にWinnyの技術を読んで、「これ検知ソフト作れるな」と思い作ってみる。できた。できたら、こう思った。「これWinnyとプロトコル互換なソフト作れるな」。・・・・バグってるけど一応できた。