Driftnet: ネットワークを流れる画像を覗き見るツール 📸

セキュリティツール

Driftnetは、ネットワークトラフィックをリッスンし、そこから画像(JPEG、GIF、PNG、WebPなど)や音声(MPEG)データを抽出して表示する、ちょっとユニークなツールです。主にLinux環境で動作し、特にKali Linuxのようなセキュリティテスト用ディストリビューションによく含まれています。 もともとはEtherPEGというツールに触発されて開発されました。多くのウェブトラフィックが行き交うネットワーク上で実行すると、様々な画像がリアルタイムで表示され、ネットワークの「流れ」を視覚的に捉えることができます。

このブログでは、driftnetの基本的な使い方から、便利なオプション、そして利用する上での重要な注意点までを詳しく解説していきます。💡

⚠️ 重要な注意:倫理と法律

利用は自己責任で!

Driftnetは、ネットワーク上のデータを「盗み見る」機能を持つため、その利用には細心の注意が必要です。自分が管理しているネットワーク、または監視する許可を明確に得ているネットワーク以外で絶対に使用しないでください。 他人の通信を同意なく傍受することは、多くの国や地域でプライバシーの侵害にあたり、違法行為となる可能性があります。このツールは、あくまでネットワーク分析やセキュリティ教育、自身の管理下にあるネットワークのトラフィックを理解する目的でのみ、倫理的に正しく利用してください。 GitHubのREADMEにも「これは恐ろしいプライバシー侵害であり、誰もどこでも使うべきではありません (It is a horrific invasion of privacy and shouldn’t be used by anyone anywhere.)」と記載されているほどです。その意味をよく理解して利用しましょう。

インストール方法 💻

Driftnetは多くのLinuxディストリビューションの公式リポジトリに含まれています。通常はパッケージマネージャを使って簡単にインストールできます。

Debian / Ubuntu / Kali Linux (APTベース)

以下のコマンドでインストールできます。

sudo apt update
sudo apt install driftnet

開発版や特定の機能(GTK表示、HTTPサーバー表示)を利用する場合は、依存ライブラリのインストールが必要になることがあります。基本的な利用であれば上記コマンドで十分です。

# 開発に必要なライブラリ (ソースからビルドする場合など)
sudo apt install libpcap-dev libjpeg-dev libpng-dev libgif-dev libwebp-dev

# GTK3表示に必要なライブラリ (通常はdriftnetと一緒にインストールされるはず)
sudo apt install libgtk-3-dev

# HTTPサーバー表示に必要なライブラリ (Webインターフェースを使いたい場合)
sudo apt install libwebsockets-dev

Fedora / CentOS / RHEL (DNF/YUMベース)

ディストリビューションやバージョンによっては、EPEL (Extra Packages for Enterprise Linux) リポジトリの有効化が必要な場合があります。

sudo dnf install driftnet
# または
sudo yum install driftnet

ソースからのビルド

最新版や特定のカスタマイズを行いたい場合は、GitHubリポジトリからソースコードを取得してビルドすることも可能です。事前に必要な開発ツール(`build-essential`, `autoconf`, `automake`など)と上記の依存ライブラリをインストールしておく必要があります。

git clone https://github.com/deiv/driftnet.git
cd driftnet
autoreconf -fi
./configure
make
sudo make install

(注意:ソースからのビルド手順は環境によって異なる場合があります。リポジトリのREADMEを確認してください。)

基本的な使い方 🚀

最も基本的な使い方は、ターミナルを開いて以下のコマンドを実行するだけです。通常、ネットワークインターフェースを直接監視するため、管理者権限(`sudo`)が必要です。

sudo driftnet

これを実行すると、多くの場合、新しいウィンドウ(GTKウィンドウ)が開き、driftnetが監視しているネットワークインターフェース(デフォルトでは利用可能なすべてのインターフェース)を流れる画像が次々と表示され始めます。

どのネットワークインターフェースを監視するかを指定したい場合は、-iオプションを使用します。例えば、eth0というインターフェースを監視する場合は以下のようにします。

sudo driftnet -i eth0

利用可能なインターフェースのリストを確認するには -l オプションが使えます(ただし、これは比較的新しいバージョンの機能かもしれません)。

注意点: 現代のウェブトラフィックの多くはHTTPSによって暗号化されています。Driftnetは基本的に暗号化されていないHTTP通信などから画像を抽出するため、HTTPSで保護されたサイト(ほとんどのログインページ、主要なウェブサイトなど)の画像は表示されません。そのため、昔に比べてdriftnetで捉えられる画像は少なくなっています。ネットワーク上で暗号化されていない通信がどれだけ流れているかを確認する、という教育的な側面が強いツールと言えるでしょう。

Driftnetには動作をカスタマイズするための様々なオプションがあります。主要なものをいくつか紹介します。

オプション 説明
-h ヘルプメッセージを表示します。 driftnet -h
-v 詳細な動作情報を表示します(Verbose)。 sudo driftnet -v -i eth0
-i <interface> 監視するネットワークインターフェースを指定します。指定しない場合は、利用可能なすべてのインターフェースを監視しようとします。 sudo driftnet -i wlan0
-p インターフェースをプロミスキャスモード(無差別モード)にしません。通常、driftnetはより多くのパケットを収集するためにインターフェースをプロミスキャスモードに設定しようとします。 sudo driftnet -p -i eth0
-a アジャンクトモード(Adjunct mode)。画像を画面に表示せず、一時ディレクトリに保存し、ファイル名を標準出力に出力します。他のプログラムと連携する場合に便利です。 sudo driftnet -a -d /tmp/driftnet_images
-d <directory> -aオプション使用時に、画像を保存するディレクトリを指定します。デフォルトでは一時ディレクトリが使われます。 sudo driftnet -a -i eth0 -d /home/user/captured_images
-m <number> アジャンクトモードで一時ディレクトリに保持する画像の最大数を指定します。これを超えると古いものから削除される可能性があります。 sudo driftnet -a -m 1000 -d /tmp/images
-x <prefix> 保存する画像ファイルのプレフィックス(接頭辞)を指定します。 sudo driftnet -a -x captured_ -d /tmp/images
-f <file> ネットワークインターフェースをリッスンする代わりに、pcap形式のダンプファイルからパケットを読み込みます。Kismetなどと連携するために名前付きパイプを指定することも可能です。 driftnet -f capture.pcap
-b 新しい画像がキャプチャされるたびにビープ音を鳴らします。 sudo driftnet -b -i eth0
-s 画像に加えて、ストリーミングされている音声データ(現在はMPEGのみ対応)を抽出しようと試みます。 sudo driftnet -s -i eth0
-S 画像は抽出せず、ストリーミング音声データのみを抽出します。 sudo driftnet -S -i eth0
-M <command> -sオプションで抽出したMPEG音声データを再生するための外部コマンドを指定します。コマンドは標準入力からMPEGフレームを受け取るように実装されている必要があります。デフォルトは `mpg123 -` です。 sudo driftnet -s -M 'mplayer -' -i eth0
[filter code] オプションの後に、tcpdump(8) と同様の BPF (Berkeley Packet Filter) 構文でフィルタを指定できます。これにより、特定の条件に一致するTCPパケットのみを処理対象とします。内部的には `tcp and (ユーザー指定フィルタ)` として評価されます。 sudo driftnet -i eth0 'port 80'
sudo driftnet -i eth0 'host 192.168.1.100 and port 80'
-g GTKディスプレイを有効にします(デフォルト)。 sudo driftnet -g -i eth0
-w 画像表示用にHTTPサーバーを有効にします。GTKウィンドウの代わりにウェブブラウザで画像を確認できます。 sudo driftnet -w -i eth0
-W <port> HTTPサーバーが使用するポート番号を指定します(-wも暗黙的に有効になります)。デフォルトは9090です。 sudo driftnet -W 8080 -i eth0

実践的な使用例 ✨

いくつかの具体的なシナリオでの使い方を見てみましょう。

例1: 特定インターフェースで画像と音声をキャプチャ

無線LANインターフェース `wlan0` 上の画像とMPEG音声をキャプチャし、新しい画像が見つかるたびにビープ音を鳴らします。

sudo driftnet -i wlan0 -b -s

(音声再生には `mpg123` などのプレイヤーがインストールされている必要があります)

例2: 画像を表示せずディレクトリに保存

`eth0` インターフェースを監視し、キャプチャした画像を `/var/log/driftnet_images` ディレクトリに `cap_` というプレフィックスを付けて保存します。画面表示は行いません。

sudo mkdir /var/log/driftnet_images
sudo chown <user>:<group> /var/log/driftnet_images # 必要に応じて権限設定
sudo driftnet -a -i eth0 -d /var/log/driftnet_images -x cap_

例3: 特定のホストとのHTTP通信のみを監視

`eth0` 上で、IPアドレス `192.168.1.50` のホストとのポート80(HTTP)での通信に含まれる画像のみをキャプチャします。

sudo driftnet -i eth0 'host 192.168.1.50 and port 80'

例4: pcapファイルから画像を抽出

事前に `tcpdump` などで保存しておいた `network_traffic.pcap` ファイルから画像を抽出し、GTKウィンドウに表示します。

driftnet -f network_traffic.pcap

(ファイルからの読み込みの場合、`sudo` は不要な場合があります)

例5: HTTPサーバーモードで実行

`eth0` を監視し、ポート8080でHTTPサーバーを起動します。同じネットワーク上の他のPCからブラウザで `http://<driftnet実行PCのIP>:8080` にアクセスすると、キャプチャされた画像が表示されます。

sudo driftnet -w -W 8080 -i eth0

仕組みと限界 🤔

Driftnetは、指定されたネットワークインターフェースを流れるパケットを受動的に監視(スニッフィング)します。インターフェースがプロミスキャスモードで動作している場合、そのネットワークセグメントを流れるすべてのパケット(自分宛てでないものも含む)を受信します。

受信したパケットの中からTCPセグメントを再構築し、HTTPやその他のプロトコルデータ内に含まれる画像データ(特定のファイルヘッダやパターンを持つもの)やMPEG音声ストリームを識別して抽出します。抽出されたデータは、GTKウィンドウに表示されたり、ファイルに保存されたり、外部コマンドに渡されたりします。

限界点:

  • 暗号化 (HTTPS): 前述の通り、SSL/TLSで暗号化されたトラフィックの内容は基本的に解析できません。現代のウェブサイトの多くがHTTPSを採用しているため、driftnetでキャプチャできる画像の量は限定的です。
  • スイッチングハブ環境: スイッチングハブを使用しているネットワークでは、通常、自分宛のパケットとブロードキャスト/マルチキャストパケットしか流れてきません。他のPC間の通信を見るためには、ARPスプーフィングなどのMan-in-the-Middle(中間者攻撃)手法を併用する必要がありますが、これは極めて高い倫理的・法的リスクを伴います。絶対に必要な場合を除き、また明確な許可がない限り行うべきではありません。
  • 対応フォーマット: 対応している画像・音声フォーマットは限られています(JPEG, GIF, PNG, WebP, MPEGなど)。新しいフォーマットや特殊な形式のデータは抽出できない可能性があります。
  • 断片化・欠損パケット: ネットワーク状況によってはパケットが欠損したり、TCPストリームの再構築がうまくいかなかったりして、画像が正しく復元できないことがあります。

教育と分析ツールとして 🧑‍🏫

Driftnetは、その性質上、非常にデリケートなツールですが、正しく使えば有用な側面もあります。

  • ネットワークの可視化: ネットワーク上をどのような画像データが(暗号化されずに)流れているかを視覚的に確認できます。
  • セキュリティ教育: HTTPのような暗号化されていないプロトコルの危険性をデモンストレーションするのに役立ちます。「このように簡単に見られてしまう」という事実を示すことで、HTTPSの重要性や安全なネットワーク利用の意識を高めることができます。
  • トラフィック分析(限定的): どのような種類の画像コンテンツがネットワーク上で多く見られるか、といった傾向を(管理下のネットワークで)把握する一助になるかもしれません。
  • デバッグ: 自身で開発したアプリケーションが意図せず画像を平文で送信していないかなどの確認に使える可能性もあります。

繰り返しになりますが、これらの利用はすべて、完全に管理された、許可された環境で行うことが大前提です。

まとめ

Driftnetは、ネットワークトラフィックから画像や音声をリアルタイムに抽出する、興味深くも注意が必要なツールです。ネットワークの動作やセキュリティについて学ぶ上で、非暗号化通信の実態を視覚的に理解するのに役立ちます。 しかし、その機能は強力なプライバシー侵害ツールにもなり得ます。利用にあたっては、法的な規制と倫理的な問題を常に念頭に置き、許可されたネットワーク環境でのみ、責任ある使い方を心がけてください。🚫

HTTPSが普及した現代では活躍の場面は減りましたが、特定の状況下や教育目的では依然としてユニークな価値を持つツールと言えるでしょう。使い方を理解し、適切に活用してください。😊

コメント

タイトルとURLをコピーしました