| Dumnetと遊ぼう | |||||||||||||
|
あなたは、自分の目の前にあるネットワークケーブル上をどのようなデータが流れているか知ってますか? もしインターネットにコンピュータをつなげて、サーバとして運用しているとしたら、そのコンピュータがどのようなパケットを受け取っているか知ってますか? ネットワーク上を流れるデータは、プロトコルに従った行儀の良いデータだけとは限りません。たとえば、一時期世間を騒がせたBlasterワームを思い出してください。あなたには、すでに過去の出来事のように思えるかもしれませんが、実際のインターネット上では、いまだにBlasterワームが蔓延っています。 嘘だと思うのなら、ちょっとネットワークを覗いてみてください。インターネットにつながったコンピュータで、以下のようにtcpdumpを動かしてみます。
しばらく様子をみてください。そうですね。ネットワークの構成にもよりますが、数分から1日で、ほぼ間違いなく以下のようにBlasterワームがバックドアを求めて彷徨っている様子が得られます。
この例ではたまたま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は以下のサイトから入手することができます。
現在はまだ0.4.0ですが、機能的にも、安定性の面でも、手元では十分な状態であることを確認しています。 Dumnetをビルドするには以下のライブラリが必要となります。
また実際にDumnetを動作させる場合、以下のツールがあると更に幸せになれるかもしれません。やはりSnortユーザ会ですので、Snortを紹介することはお約束です。あとtcpdumpは重要です。tcpdumpのコマンドラインパラメータを覚えていることはもちろん、BPFのExpressionくらいは書けるようになりましょう。ネットワーク管理者たるべきもの、BPFのExpressionくらい書けないと村八分になりますので、気をつけた方がいいです。 つまり、これはTCP/IPについて理解していることを暗に示しています。もちろんみなさんは「えきすぱーと」ですから、こんなこと無問題ですね。ボクはちょっと不自由してますが。
それから、もしもあなたが使っているネットワーク機器がダサダサだった場合、dsniffとか持ってると嬉しいかもしれません。 というか、初期の頃の Dumnet は、ARP poisoning の機能を持っていなかったので、dsniff などでARPを乗っ取る必要があったのですが、1.0 で ARP poisoning を実装しましたので、特に必要無いかもしれません。でも持っているとなにかと便利なツールですので、この際入手しておくと良いかもしれません。
Redhat Linuxなどの場合、dsniffのビルドが上手く行かない場合がありますので、適当にrpmパッケージでも拾ってくるか、自力で直してください。 libpcap、libnet 共にビルドとインストールは簡単です。お約束の呪文を唱えるだけです。サルでもビルドできます。
ですね。で、Dumnetも当然同じです。さらっとインストールしちゃってください。というか、ここらで引っかかる人はそもそもDumnet使ってる場合じゃないですね。あ、dsniffのビルドはちょっと苦労するかもしれませんが。 | |||||||||||||
|
・使ってみる | |||||||||||||
|
つぎにDumnetを動作させる形態を検討しなければなりません。Dumnetにパケットを誘い込むためのIPアドレスを与える必要があります。たとえそのIPアドレスにコンピュータが設置してなくても、まるで設置してあるかのように振舞うことが可能です。いわゆるVirtualIPaddressってヤツです。もちろんDumnet自身が動くコンピュータのIPアドレスを利用することも可能です。 この動作形態によって、必要とされる設定作業に微妙な違いが出てきますが、みなさんはネットワークの「えきすぱーと」ですから、特に問題は無いことでしょう。ね。 さて、この例では、実際には存在しないIPアドレスをDumnetに騙ってもらいます。
で、騙るIPアドレスが決まったなら後は簡単。以下のように実行してください。ネットワークデバイスの部分は適当なデバイス名を必ず与えてください。
これだけで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に割り当ててあげれば良いのです。
ただし、最近の安物ルータにはStaticARPが設定できないものが存在します。その場合は少し知恵を絞らないとなりません。 そこで必要なのが ARP poisoning です。dumnet には ARP poisoning の機能が実装されています。以下のように実行してみましょう。
-P (Gateway IP Address):(Spoofed IP Address) といったカンジで記述してやることにより、Gatewayを騙してARPテーブルを書き換えることができます。 もちろんdsniffを使っても構いません。ARP Spoofing toolである arpspoof を使って同様に ARPテーブルを書き換えることが可能です。
これでルータである 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のルールを書くのも良いでしょう。楽しみ方はいろいろあります。
今後はDumnetを使ってインターネット上の多地点観測システムの構築を検討しています。名づけて「インターネット百葉箱プロジェクト」良いカンジでしょ?それには観測したデータの分析手法が重要になります。今のところお約束ですが、RRDTOOLに喰わせてグラフ化とかくらいしか考えてませんが、効率的な集計の手法などをこれから考えて行く予定です。 実際にパケットをDumnetがどのように記録しているか興味があるでしょうから、ボクの実験環境で集められたデータを転載します。iplogだけではわからないような現象が色々と観察できて、なかなか興味深いですよ。
| |||||||||||||
|
| |||||||||||||
|
Katsuhiro Watanabe at RIKEN Tue Mar 2 20:00:18 JST 2004 |