|
必聴講座ご紹介 ビッグデータ EXPO 2012春 日本マイクロソフト ビッグデータ EXPO 2012春 NEC Cloud Days Osaka 2012 セールスフォース・ドットコム |
Winnyの通信解読に挑戦!Winnyの通信を特定する方法には,「流れるパケットのパターン(トラフィック・パターン)を調べる方法」と,「パケットの中身を調べてWinnyのパケットであることを確認する方法」の2通りがある。前者は,直接中身のデータをのぞいているわけではないため,通信の秘密を守るという大前提があるプロバイダがWinnyを規制する際に使っている。しかし,Winnyの通信を確実に特定するなら,後者の方法がベストである。実際にWinnyの通信を解読できるのか,Winny作者の金子勇氏の著書『Winnyの技術』やインターネットで得られた情報などを参考に挑戦してみた。
Winny(ウイニー)同士の通信はすべて暗号化されている。このため,流れるパケットをのぞいても,内容がどんなものなのかだけでなく,Winnyの通信なのかどうかも,ひと目ではわからない。Winnyが採用している暗号アルゴリズムRC4は,Webアクセスや無線LANの暗号化でも使われているように,正しく使えば簡単には解読できない。 ただし,Winnyは不特定多数の相手と共通鍵暗号を使って通信するので,通信を始める前に暗号鍵を直接やりとりするか,事前に暗号鍵をソフトに組み込んでおく必要がある。このため,パケットをキャプチャしたり,クライアント・ソフトを解析すれば暗号鍵を探し出して通信データの内容を解読できるはずだ。そこで,実際に簡単なツールを使ってWinny通信の解読に挑んだ。
ツールをそろえたら,自分のパソコンにパケット・キャプチャ・ツールとWinnyをインストールする(図2)。Winnyは最新バージョンであるWinny2.0b7.1を使った。
自分から相手へ接続するときのパケットを解析
パケットをキャプチャした結果を見ると,最初にTCPの3WAYハンドシェーク(キーワード解説)のパケットがやりとりされているのがわかる(図3)。Winnyは通信プロトコルに必ずTCPを使うが,TCPでは最初に通信相手と接続する(TCPコネクションを確立する)ために3WAYハンドシェークという手順を踏む。そしてTCPコネクションが確立したあと,Winnyの実際の通信が始まる。 Winny通信の始まりでは,接続元(自ノード)が最初に決まった形式のパケット2個を相手ノードに必ず送る。第1パケットは長さが11バイトのデータが入っていて,暗号鍵のやりとりとバージョン確認に使われている。そして第2パケットで,リンクの種類や自分のノード・タイプ,待ち受けポート番号などの情報を伝えるコマンドが送られる。 では,これら2個のパケットの内容を解読していこう。これらの内容が解読できれば,そのあとのWinnyパケットも同じ要領で解読できる。
>>■基礎知識編
連載新着記事一覧へ >>
|