ウィルス作者逮捕の話 (3)

私のノード数観測ではそれも取っている。(観測密度が十分ではないが)1年半ほど分のgz圧縮で500Gバイト程度。まだ余裕

はてなブックマーク - HiromitsuTakagiのブックマーク

というブクマコメントをいただいて、確かに容量的には可能かなと思いました。(密度も含めて)
履歴のために必要な最低量の情報は、たぶん、

の24bytesで、ノードは今どのくらい入るか分からないけど、多めに見積もって100万ノードとして、ログサイズ500GBは僕にも余裕な容量なので、

>perl -e "print 500 * 10**9 / 24 / 10**6"
20833.3333333333

で、ノードが100万いて1ノードあたり平均20833のキャッシュファイルを持っていたとしても、現状の各ノードの保持する情報を全てダンプして500GBぽっちなので、まあ余裕でしょーと。実際みんなキャッシュ消しまくりで平均2万ファイル分もキャッシュ持ってないと思いますし、100万ノードもいないはずですし。全然少ないはず。
あとは、そこから各ノードが1日にダウンロードする平均ファイル数×ノード数×24バイトが増え続けるので、その分をとり続ければ、各ノードが過去に手に入れたファイルの履歴が作れます。ただこれには、中継による偽データが何%か混じっていて、どのくらい信用できるかは謎です。
1次配布者だけ把握するためのログなら、各ハッシュ値についてはじめに発見した日以外は捨てていいので、毎日ダンプ+日時処理で不要な差分を消して圧縮していけば結構持つと思います。


容量はいいとして、もうひとつ出来ないと思った理由は、ウィルスの1次配布が開始されてから、クローラーがウィルスのキーを回収するまでに、他のノードがウィルスをダウンロードしまくる確率が結構高いんじゃないかと思ったのですが、これはたぶん僕が必要以上に悪い考えを持っていて、自動ダウンロード設定をモニタリングしてタイミングよく配れば可能とか、複数犯だった場合すでに蔓延した後に見えるんじゃないかとか思っているだけで、普通にWinnyを使って自宅から配布するだけならそんなに高くないのかな。これも計算しようと思いましたが、僕には無理だったのであきらめました。
とりあえず

  • ノードの保持する平均キー数
  • ノードが一度の拡散クエリで送信する平均キー数
  • あるキーがだれかが検索する確率(条件によりものすごく変動)

があって、まず、30秒に一回拡散クエリというのでキー交換が行われるので、それにより隣接にノードに一定の確率で送信されて(一度に送られるキー数/保持キー数*(残り生存期間sec/30)*隣接ノード数)、それだけでいくつかのノードがキーを持つことになって、そこに1分あたり何回かの検索クエリがくると、キーは6ステップして、ステップ上の各ノードは3ノードくらい隣接ノードを持っているので、ある1ノードから何度か検索クエリ飛んでヒットすると最高3^6くらいに広がる可能性があって、それで広がったのがまた拡散クエリでpppそれで生存期間が少し減ってpppそれにまた別の検索クエリがpppp┗(^o^)┓三┗(^o^)┓三┗(^o^)┓三
という感じで、キーが広がっていきます(説明完)。
クローラーは一度も試していなくて、どうやって動かすのがいいのか分からないので本当になんともいえないですが、Winnyは15五分ごとくらいに隣接ノードの接続が切り替わるので、時間でも止めないとネットワーク全体をきれいにたどるのが無理で、たぶん各クラスタごとに監視ノードをおいて、『zip』とか『avi』とかで検索しまくるか、ひたすらユニークノードに接続しまくるくらいしかできないんじゃないのかなーとか思っています。そうしたときに、どのくらいの時間でどのくらいの範囲のノードが保持するキーを回収できるかが分かりません。
と、分からないことが多すぎて、お前はいったいなにを言っているんだ、と自分に言いたくなるくらいのアヤシさですが、それでもなんとなく無理な気がしました。ただ、僕の言う無理というのは、完璧にやるのが無理というだけで、まったく無意味であるというわけではなく、運よく監視しているところからウィルスが出れば大成功です。その成功率がどのくらいなのか、高いのか低いのか分かりませんが、100%じゃないだろーと思ったしだいです。(根拠なくてごめんなさい)