はじめに
この実験 (lab) では、不正なアクセスポイント (AP) および悪意のあるキャプティブポータルを特定するための基本的な手順を学びます。不正な AP とは、ネットワーク所有者の明示的な許可なくネットワークに設置されたワイヤレスアクセスポイントのことです。攻撃者はしばしば、トラフィックを傍受するために「中間者攻撃」を仕掛けるためにこれらを使用します。
キャプティブポータルとは、ユーザーがパブリックネットワークへのアクセスを許可される前に表示および操作する必要があるウェブページのことです。多くの正規のホットスポットがこれらを使用していますが、攻撃者は認証情報をフィッシングするために独自のものを偽装して作成することができます。
この実験 (lab) では、安全な環境でこのシナリオをシミュレートします。コマンドラインツールを使用してネットワークをスキャンし、疑わしい「Evil Twin」ネットワークを見つけ、偽のキャプティブポータルを分析して脅威として特定します。
クライアントデバイスでの Wi-Fi ネットワークのスキャン
このステップでは、利用可能な Wi-Fi ネットワークのスキャンをシミュレートします。実際のシナリオでは、nmcli、iwlist、またはairodump-ngのようなツールを使用します。この実験 (lab) では、ネットワークスキャンの出力を模倣する scan-wifi.sh という名前のスクリプトを用意しました。これにより、物理的な Wi-Fi ハードウェアを必要とせずに実験 (lab) を実行できます。
この実験 (lab) のすべてのファイルは、~/project ディレクトリにあります。スクリプトを実行して、シミュレートされた Wi-Fi ネットワークのリストを確認しましょう。
ターミナルで以下のコマンドを実行してください。
~/project/scan-wifi.sh
以下のような出力が表示され、利用可能なネットワーク、その信号強度、およびセキュリティタイプがリストされます。
IN-USE BSSID SSID MODE CHAN RATE SIGNAL BARS SECURITY
* AA:BB:CC:11:22:33 CorpWifi Infra 6 54 Mbit/s 90 ▂▄▆█ WPA2
AA:BB:CC:44:55:66 CorpWifi Infra 11 54 Mbit/s 95 ▂▄▆█ --
DE:F0:12:34:56:78 GuestWifi Infra 1 54 Mbit/s 70 ▂▄▆_ WPA2
同じ名前 (ESSID) を持つ 2 つのネットワークに気づく
このステップでは、スキャン結果を分析して異常を見つけます。ESSID (Extended Service Set Identifier) は、Wi-Fi ネットワークの公開名です。
前のステップの出力結果をよく見てください。「CorpWifi」という同じ SSID を共有する 2 つの異なるネットワークに気づくはずです。これは、「Evil Twin」攻撃の典型的な兆候です。一方のネットワークは正規のものであり、もう一方は攻撃者によって設定された不正な AP です。
主な違いは SECURITY 列にあります。正規のネットワークは WPA2 暗号化を使用していますが、不正なネットワークはオープン(-- で示されます)です。攻撃者は、ユーザーがパスワードなしで接続する可能性が高いため、オープンネットワークを作成することがよくあります。
これをより明確にするために、grep コマンドを使用して出力をフィルタリングし、「CorpWifi」という名前のネットワークのみを表示しましょう。
~/project/scan-wifi.sh | grep CorpWifi
このコマンドは、2 つのネットワークを強調表示した以下の出力を生成します。
* AA:BB:CC:11:22:33 CorpWifi Infra 6 54 Mbit/s 90 ▂▄▆█ WPA2
AA:BB:CC:44:55:66 CorpWifi Infra 11 54 Mbit/s 95 ▂▄▆█ --
ネットワークのオープン(暗号化されていない)バージョンに接続する
このステップでは、疑わしいオープンな「CorpWifi」ネットワークへの接続をシミュレートします。実際のシナリオでは、デバイスのオペレーティングシステムが接続を処理します。私たちのシミュレーションでは、「接続」とは、不正な AP のキャプティブポータルとして機能するローカル Web サーバーを起動することを含みます。
この偽のポータルのファイルは、~/project/portal ディレクトリにあります。そのディレクトリから簡単な Python Web サーバーを実行します。ターミナルを他のコマンドのために解放しておくために、サーバーをバックグラウンドプロセスとして実行します。
まず、現在のディレクトリを ~/project/portal に変更します。
cd ~/project/portal
次に、& シンボルを使用してバックグラウンドで Python Web サーバーを起動します。
python3 server.py &
プロセス ID と確認メッセージが表示され、サーバーが実行されていることを示します。
[1] 1234
Serving captive portal on port 8000
サーバーは現在実行中で、ポート 8000 で接続をリッスンしており、不正なネットワークの環境をシミュレートしています。
ログインページへの自動リダイレクトを観察する
このステップでは、キャプティブポータルの動作を確認します。キャプティブポータルを持つネットワークに接続した後、Web を参照しようとすると、通常はインターセプトされ、ログインページまたは利用規約ページにリダイレクトされます。
これは、curl コマンドを使用してウェブサイトにアクセスしようとすることでシミュレートします。開始したばかりの Python サーバーによって制御されているシミュレートされたネットワーク環境であるため、localhost:8000 への HTTP リクエストはすべて「キャプチャ」され、ポータルの index.html ファイルが提供されます。
curl を使用してローカルサーバーにリクエストを送信します。これは、新しいネットワークに接続した後のブラウザの最初の要求を模倣します。
curl http://localhost:8000
コマンドは、偽のログインページの HTML ソースコードを返します。実際のブラウザでは、このコードはグラフィカルなログインフォームとしてレンダリングされます。
<!DOCTYPE html>
<html>
<head>
<title>CorpWifi Login</title>
<style>
body {
font-family: sans-serif;
background: #f0f2f5;
display: flex;
justify-content: center;
align-items: center;
height: 100vh;
margin: 0;
}
.login-box {
background: white;
padding: 20px 40px;
border-radius: 8px;
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
text-align: center;
}
input {
margin: 10px 0;
padding: 8px;
width: 200px;
border: 1px solid #ddd;
border-radius: 4px;
}
button {
padding: 10px 20px;
background-color: #1877f2;
color: white;
border: none;
border-radius: 5px;
cursor: pointer;
width: 100%;
}
</style>
</head>
<body>
<div class="login-box">
<h2>CorpWifi Access</h2>
<p>Please log in to continue.</p>
<input type="text" placeholder="Username" />
<br />
<input type="password" placeholder="Password" />
<br />
<button>Log In</button>
<p style="font-size: 12px; color: #888; margin-top: 15px;">
Powered by CorpWifi-Login.net
</p>
</div>
</body>
</html>
URL が正当なドメインではないことを認識する
この最終ステップでは、これが悪意のあるキャプティブポータルであることを確認する重要なチェックを実行します。このようなポータルの目的は、偽のページに認証情報を入力させることです。偽物を見破る最も確実な方法は、ドメイン名(URL)を調べることです。
実際のブラウザでは、アドレスバーを確認します。私たちのシミュレーションでは、HTML コンテンツから手がかりを調べることができます。前のステップからの HTML を見ると、下部に疑わしいテキスト行が見つかります。grep を使用して、index.html ファイル内でそれを見つけましょう。
まず、メインのプロジェクトディレクトリに戻ります。
cd ~/project
次に、ポータルの HTML ファイル内で疑わしいテキストを検索します。
grep 'CorpWifi-Login.net' portal/index.html
コマンドは、疑わしいドメインを含む行を見つけて表示します。
<p style="font-size: 12px; color: #888; margin-top: 15px;">Powered by CorpWifi-Login.net</p>
ドメイン CorpWifi-Login.net は非常に疑わしいです。攻撃者は、公式に聞こえるがそうではないドメインを登録することがよくあります。正当な企業のポータルは、会社の公式ドメイン(例:wifi.corp.com)でホストされるはずです。この発見により、オープンネットワークが不正な AP であり、ログインページがフィッシング詐欺であることが確認されます。
まとめ
この実験では、シミュレーションを通じて不正 AP と悪意のあるキャプティブポータルを特定することに成功しました。一般的な Wi-Fi の脅威を特定するための実践的なステップバイステッププロセスを学びました。
以下のことを達成しました。
- Wi-Fi ネットワークをスキャンし、安全なネットワークと同じ名前を持つ暗号化されていない「イービルツイン」を特定しました。
- ローカルサーバーを起動して、不正 AP への接続をシミュレートしました。
- キャプティブポータルが Web トラフィックをどのようにインターセプトし、ログインページを表示するかを観察しました。
- ログインページのコンテンツを分析して、疑わしい非正規のドメイン名を見つけ、フィッシング詐欺であることを確認しました。
重要な教訓は、常にオープン Wi-Fi ネットワークに注意し、機密情報を入力する前にログインページの URL を精査することです。
最後に、バックグラウンドサーバープロセスを停止しましょう。%1 は最初のバックグラウンドジョブを指します。
kill %1
