Kismetパケットスニッファ入門

 ネットワークセキュリティの専門家にとって欠かせないオープンソースツールの数は増え続けているが、 Kismet もその一つだ。Kismetは「ワイヤレスネットワーク検出/スニッファ/侵入検知システム」で、Windows、Mac OS X、BSDなどPOSIX互換のどのプラットフォームでも利用可能だが、RFMON(モニタモード)対応ドライバの数がもっとも多く存在することからLinuxでの利用が推奨されている。

 モニタモードを利用すれば、現在自分が(APを使用している場合には)使用中のAP(アクセスポイント)だけでなくKismetが監視可能なあらゆるパケットの調査が可能になるため、Kismetをフル活用するためにはモニタモードの利用が不可欠だ。またモニタモードでは形跡をまったく残さずにパケットを受動的に傍受/収集することが可能だが、そのことは警察やスパイや悪意あるハッカーにとってとほぼ同じくらいにKismetにとっても重要だ。

 つまりKismetをフルに使ってみたいなら最初のステップは手元のワイヤレスNIC(ネットワークインターフェースカード)用のモニタモード対応ドライバを手に入れることだ。そのためにはまずはKismetのリンクページで手元のNICのブランド/モデルで利用可能なドライバについての情報を確認しよう。

設定モデル

 Kismetはクライアント/サーバ型のアプリケーションとして設計されているが、スタンドアロンアプリケーションとしてや、複数のクライアントをサポートするサーバとしてや、さらには、それぞれが特定のワイヤレスハードウェアを監視して捕捉したパケットをサーバに転送する、ネットワーク上のKismet(「ドローン」)を統括するサーバとして実行することもできる。スタンドアロンアプリケーションとして実行する場合、単純に組み込みのクライアントを使用しても良いが、サードパーティ製のKismet用クライアントもいくつか存在するので、試してみたいなら上記のリンクページで確認してみると良いだろう。

 Kismetのドローンは、ネットワーク上で情報収集する際のいわば拠点だ。必要最低限の機能だけしかなく、GUIを持たないものも多い。ドローンごとに用意されている設定ファイルには、監視すべき情報源(つまりワイヤレスカード)の定義や捕捉したパケットの転送先であるKismetサーバのアドレスなどが含まれている。一方サーバは、統括しているすべてのドローンから受け取ったデータを一つのファイル内に記録したり、ワイヤレスネットワークの侵入警告を発する一元的な場所として機能したりする。ドローン/サーバは、複数のAPを持つLAN用のワイヤレスIDS(侵入検知システム)としてKismetを利用する場合に最適な構成だ。

 設定ファイルはすべてのドローンとサーバについて用意する必要があり、Kismetを希望通りに機能させるために必要な作業の多くはこれらの設定ファイルで行われる。具体的には設定ファイルはkismet.conf、kismet_ui.conf、kismet_drone.confの3つのファイルだ。Kismetのウェブサイトに、設定ファイルやその他調整が必要になるかもしれない項目についての詳しい文書が用意されている。

 今回はKismetをスタンドアロン構成で、BackTrack 3ディストリビューションのベータ版から使ってみた。なおモニタモード対応のNICとしてはNETGEAR RangeMaxワイヤレスPCカードを一枚使用した。このようなシンプルな構成であっても、細かな設定には悩まされることもあった。特にオンライン文書の(Kismetの文書では「捕捉情報源」という表現になっている)ワイヤレスカードの定義についての節は注意深く読んでおくと良いかもしれない。この定義が適切でない場合、Kismetはまったく動かないか正しく機能しない。

  Backtrack 3のレビューでも指摘した通り、手元のノートPCではKismetの起動前に、ifconfigを使って内蔵ワイヤレスカード(NETGEAR RangeMaxと同じくAtherosチップセットベース)を無効にしてから、wlanconfigを使ってNETGEARカードをモニタモードにする必要があった。

トップダウン形式のユーザインターフェース

139754-1-thumb.png
図1 Autofitの表示

 Kismetのユーザインターフェースはあまり分かりやすくはないが、高速でパワフルであり慣れれば使いやすい。ユーザインターフェースはデフォルトでは監視可能な全ネットワークのトップレベルのリストであるAutofitを表示する(図1)。このビューでは検出したネットワークについての基本情報を知ることができるが、他のネットワークリストのモードとは異なって、より詳細な情報を掘り下げて知ることはできない。

 Autofitのネットワークリストでは、活動状況、ネットワーク名、ネットワークの種類、WEPの状態、使用チャンネル、監視パケット、フラグ、IPの範囲、捕捉ファイルの容量が表示される。活動状況は、感嘆符(「!」)かピリオド(「.」)か空白のうちのどれかで示される。「!」は最近活動があったこと、「.」は「!」よりも長い期間活動がないこと、空白は最近の活動がまったくないことをそれぞれ示している。なお「最近の活動」はkismet_ui.conf内のdecay変数で定義されていて、デフォルトでは3秒に設定されている。

139754-2-thumb.png
図2 Kismetのヘルプ画面

 さらに掘り下げてもっと詳しい情報を得るには、まず別のビューに切り替える必要がある。Kismetのインターフェースにはヘルプ機能があって、「h」を入力すればヘルプ画面を表示できる(図2)。ビューの切り替え方法についての詳しい説明もここに書かれている。ヘルプ画面も含め表示中の画面は「x」を入力すれば閉じる。また「Page Up」キーと「Page Down」キーを使えばヘルプ画面をスクロールできる。

 ヘルプの最後の画面には「Autofitモードでは、ネットワーク選択、タグ付け、グループ分け、スクロールなどはすべて無効になっている」という内容の注意書きがある。つまり、その他のネットワーク情報を知るにはモードを変更する必要があるということだ。

 ヘルプ画面を閉じて「s」を入力すればネットワークのリストを別の順序でソートできるようになる。例えば、「s」の後に続けて「b」か「B」を入力すればBSSID(ネットワークのAPのMACアドレス)の順でリストをソートすることができる。その際、Network List(ネットワークのリスト)パネルのタイトルが「Network List (BSSID)(ネットワークのリスト(BSSID))」に変わって、より詳細な情報を知りたいネットワークの位置まで上下矢印キーを使って上下にリストをスクロールできるようになる。

 目的のネットワークを選択した状態で「i」を入力すれば、そのAPについての詳細な全情報が表示される(図3)。「a」を入力すればトラフィックについてのチャンネルごとの統計情報が表示される。「c」を入力すればAPへの接続をKismetが検出した全クライアントのMACアドレスが表示される(図4)。最後の「c」オプションは特に、自分のAPを守るためにKismetを使用している場合に役立つだろう。

139754-3-thumb.png 139754-5-thumb.png
図3 APの詳細情報表示 図4 クライアントのMACアドレス表示

 なお「c」を入力してクライアントのリストを表示すると、パネルウィンドウのタイトルが「Client List(Autofit)(クライアントのリスト(Autofit))」になることに注意しよう。これは、さらに詳細な情報を得るためには「Network List(ネットワークのリスト)」の場合と同様に、上記で行ったようにビューを変更する必要があることを示している。そこで「l」を選択すると、新しく検知された順でクライアントのリストが表示された。なお大文字で「L」を入力すればリストの順序が逆転して、新しく検出されたクライアントが最後になるように表示される。

 ネットワークのリストの場合と同様にリスト中のクライアントのどれかを選択して「i」を入力すれば、クライアントについて入手された情報が表示されて、図5のように接続の種類やMACアドレスなどのデータが表示される。

 なおこの状態で「h」を入力すれば、デフォルトの「Network List(ネットワークのリスト)」が表示されているときに「h」を入力した場合に表示されたヘルプ情報と同じ内容ではなく、コンテクスト別のヘルプが表示される。したがってこの場合、画面ではFrom DS/To DS/Intra DS/Established/Sent To/Unknownといった様々な接続の種類についての説明が表示される(図6)。

139754-6-thumb.png 139754-7-thumb.png
図5 クライアント情報の詳細表示 図6 コンテクスト別のヘルプ

基本的な設定の調整

 Kismetの使い方によっては、kismet.confのオプションを変更する必要があることもある。例えばAPを探している場合、その他にも詳細な調整がおそらく必要だが、少なくとも「channelhop = true」を設定する必要があるだろう。一方、もっぱら一つのAPだけを監視してそこから取得できるトラフィックをすべて入手したいという場合には、他のチャンネルのスキャン中にパケットを逃してしまうことがないようにチャンネルホッピングは無効にした方が良いだろう。こうしておけばAPに接続中のクライアントやこれから接続しようとしているクライアントをすべて追跡できるので、侵入検知の際に役立つだろう。

 ログはデフォルトではKismetが起動されたディレクトリに作成されるが、kismet.confの中でlogtemplateの値を変更すれば別の場所に作成することもできる。なおkismet.confの中のlogtypesの値が変更されていなければ、dump、network、csv、xml、weak、cisco、gpsというログがそれぞれ作成される。中でもdumpログには生のパケットが記録されているので、Aircrack-ngや、ネットワークプロトコル解析器のWireshark(元Ethereal)など、他のパケット解析プログラムへの入力として利用するのに適している。

まとめ

 Kismetは初心者が使うのには難しい。インストールして実行さえすれば何らかの意味のある結果が得られるという類いのプログラムではない。Kismetは適切に設定する必要があり、適切に設定するためには、ワイヤレスネットワーク、ハードウェア、ワイヤレスセキュリティについて今まで以上に学習する必要があるだろう。とは言え嬉しいこととして、その困難を乗り越えてそのような内容について学習すれば、知識が増えるにつれてKismetを使ってできることも増えるので、その価値があると感じることができるだろう。

 Kismetには本稿で取り上げたよりも遥かに多くのことができる。ワイヤレスについてとワイヤレスのセキュリティについての知識が増えれば、隠蔽されたSSIDネットワークの発見やワイヤレスネットワーク構成図の作成など、より多くのKismetの機能を使いこなすことができるようになる。

 ワイヤレスのセキュリティについての知識はあまり持っていない私だったが、今回Kismetを使って、ホームオフィスのLANのワイヤレスアクセスのために重要な安全対策を行うことができた。まだ使い始めたばかりだが、それでも最初の時点と比べれば、ワイヤレスの危険性についての知識がかなり増えたと思う。特に、機密データの通信を保護するためにWEPに依存するべきではない理由と、自分のAPに対する無断ワイヤレスアクセスの検出方法とを学ぶことができた。どちらも、Kismetの文書には載っていない重要な隠し機能、すなわち「Kismetは優れた学習用ツールである」ということのおかげだと思う。

Linux.com 原文