WinPcapって何とかそういう話

連日ブログを更新している珍しい状況だが、さて、すこし前回までの話の補足をしよう。
1. AutoItとは何か?
はてなダイヤリーキーワード登録されてねぇ…。主にWindows操作の自動化を目的としたVBみたいなスクリプト言語(否オブジェクト指向)。軽快な動作とシンプルな文法とかでやたら筆者が気に入って使っている。マウスとかキーボードとかを「簡単に」動かすスクリプトを書いたりできる。あとGUIアプリも比較的簡単に作れたり。*1
2. WinPcapとは何か?
ネットワークの低い階層(OSI参照モデルの第2層)にアクセスするためのライブラリ。その名の通り、Windows用。具体的には自分のLANに入ってきたパケットをキャプチャしたり、生のパケットデータを投げることできる。つまり、通常破棄されるような自分宛じゃないパケットも拾い集めて見ることが出来たり、通常触ることの出来ないヘッダ部分まで好き勝手にいじりまわしたネットワークパケットを投げられる。
そんなワケで、オレの好きなスクリプト言語で好き勝手ネットワーク関係のいたずらが出来るようになって夢が広がりそうじゃあないか、と興奮しているが、いや、まて、あんまり広がるようなことが思いつかなくて困っているワケでもある。そもそもAutoItではもともと(ヘッダはいじれないにしても)TCPだろうがUDPだろうが好きなパケットの送受信はできたわけだし、それで超簡易的なIPメッセンジャーを作ったことすらある。今回のWinPcapで新しく出来ることといえば…
1) 今までいじれなかったネットワークパケットのヘッダをいじりまわせる。
2) ポート番号とか知らなくてもネットワークパケットを受信できる。あと、自分宛じゃあないARP要求みたいなパケットも拾える。
ふむ。1)のヘッダがいじれるとどんなことが出来るのかって、ようはヘッダについてる情報といえば、宛先、送信元、あとパケットのバージョンとかそんな感じ。つまり、いじれたところで出来るのは宛先とか、送信元の偽装ってコトだ。ちなみに、宛先・送信元の偽装以外のアイディアとして、ICMPパケットでチャットシステムを作った猛者もいる*2。それで何の意味があるのかと問われると困るが、しかし、偽装云々という凝り固まったアイディアでは無いという意味で、これはいい例といえる。
2)に関して言えば、通常アプリケーションでのパケットの受信は、送られてくるパケットのポート番号というものを決めうちで口を空けて待っている。つまり、口をあけてない部分にかんしては、PCがパケットは受信しても、アプリケーションからはアクセスでき無い、すなわち外部から散々攻撃されていても、もしかするとこちらは何も気付いていない、って可能性もある。WinPcapを使うと、別に口をあけた以前の段階で全てのパケットにアクセスできるので、たとえば隣人が我が家の無線LANに進入したら、たとえ、オレのPCに対して明示的な通信を行わなくても、どっかの節(ブロードキャストパケット投げたときとかに)にそれを発見するなんてことも出来る。ただし、ネットワークをただ監視するようなことは、Etherealに代表されるソフトウェアでも散々出来てきたことだし、今更面白みを感じないのも正直なところだ。一応、監視した上でアクションが行なえるというのが、既存のスニファ系のソフトウェアとの違いといえば違いだけどね。
それで、じゃあ、何しよう? 上に書いてないことから気付いたかもしれないが、WinPcapはパケットの送受信は出来てもパケットのブロックは出来ない。貴方のPCのスパイウェアが散々あなたのマル秘フォルダを持ち出そうとしてることを見つけ出せたところで、「一寸待ちたまえ!」と検問をかけるような機能はついていないのだ。スパイウェアは監視カメラの下、大胆にも反抗を成し遂げ、マル秘フォルダは貴方の個人情報と共にどっかの掲示板でさらし者にされるかもしれない。貴方はそれに気付いているのに! ひとつのアイディアとして、この検問をかけるようなソフトウェアの開発は実は可能なのじゃあないかと考えている。
i. ディフォルトゲートウェイを自分のIPにして自分宛にパケットを投げさせる。
ii. 自分から自分宛のパケットのみをキャプチャし、そのパケットに問題が無ければヘッダを書き換え、本当のゲートウェイへ送ってやる。
コレを応用すれば、一時的に自分のIPとMACを他人のものに成りすます、みたいなことも出来そうだ。
(気が向いたら次回へ続く)

*1:話を脱線させると、AutoItはフリーウェアだがオープンソースではない。コレはもともとオープンソースプロジェクトとしてやっていたが、どっかのアホがそのまま商用として売り出したのをきっかけにソースが非公開になったって経緯がある。あと作者の一人はAutoItでオンラインRPGBOT作り目的でプロジェクトに参画し始めたとか。

*2:ああ、そういえばICMPにはそういうデータ乗せるだけのキャパシティがあるんだったね…