Wi-Fi セキュリティーの話
はじめまして、MSP部の木ノ下です。 IT 業界の分野の中にもネットワークやクラウドに興味があり、 現在は SAP(Solutions Architect - Professional)の勉強に励んでおり、その次は CCNP を狙ってみたいと考えております。 CCNA 勉強していた際 Wi-Fi についての理解を深めるために実施した実験につて記載いたしました。
Wi-Fi セキュリティプロトコルについて
基本的に Wi-Fi で使われるプロトコルは下記4つ存在します。
- WEP → かなり古く、5分あれば敗れるので使わない方がいいです
- WPA → 脆弱性があるらしく、避けた方がいいです
- WPA2 → 一般家庭ルーターによく使われるプロトコル (WPA2 + PSK、規定でWPSもオンになっている場合が多い)
- WPA3 → 最新で強いプロトコルですが、まだサポートしていないデバイスが存在するため現在普及に至らず
Wi-Fi の基本
詳しい話は省きますが、下記単語が出れば大体こういうことです
- 周波数は 2.4GHz 帯と 5.0GHz 帯が存在し、基本的に近くて AP とデバイスの間に障害物が少なければ 5.0 を使用し、壁とか障害物が多いときは 2.4 を使用する。ただし、2.4 はブルートゥースや電子レンジなどと同じ波数使用しているので、干渉が起こる可能性があったりしますね。
- チャンネル → 他の AP とチャンネルが被ると干渉が起こる可能性があり、基本的に 2.4GHz だと周囲の AP と調整しながらチャネル 1 , 6 , 11 にあることが多いです。(重なっている部分を避け、干渉を減らすためです)
ペネトレーションテストに必要なもの
- 比較的に新しいLinuxディストロが入っている PC、または VM (自分は Kali Linux 好きです) ※ VM だとデバイス譲る設定がちょっとめんどい
- モニターモードとパケットインジェクション機能が付いている Wi-Fi カードまたはアダプター ※ 公式 Linux ドライバー用意していないメーカーが多いので、チップセット調べて探してくるしかなかったりします
- 対象のルーター (自宅のルーターを使用) - ※ 他人に迷惑かけてはいけません
実験に使用するアプリ
- Wifite
- Aircrack-ng
- (任意) Wifi Analyzer ※ 携帯のアプリ → 歩きながら信号の強さを測って物理的な地位を推測できたりします。
- 辞書 ※ よく使用される PW のリスト
Wifite 使い方
Wifite は人気の Wifi 攻撃ツールをまとめ、自動化されているアプリです。
※ 自動化されていることから理論的に楽になるものの、実際は状況に合わせて調整しないといけなかったりするので各ツールは何をやっているかを理解したほうがいい気もします..
- [#sudo wifite --dict Desktop/pass.txt --kill] ← 実行したら色々動く (--dict [場所] で辞書を指定し、--kill で干渉している他サービス強制的に終了させる) ※ NetworkManager とか停止させられるので、終わったら sudo systemctl start networkmanager で再起動させないとネットが使えません。
- 使用するワイヤレスインタフェースを選択 (wlan0 になっていることが多い)
- 実験対象 (自宅ルーター) を ESSID で特定する
そうしますと、自動的に下記のことが行われる :
- WPS Pixie-Dust 攻撃 ※ PIN のハッシュが弱いルーターに有効、比較的に新しいものには通用しないことが多い
- WPS PIN 攻撃 (reaver) ※ WPS 8桁 PIN のブルートフォース攻撃 、最近のルーターはタイムアウトさせられるので通用しないことが多い
- PMKID キャプチャー ※ 自分もあまり理解していない
- WPA Handshake スニッフィング ※ ここが重要!!
WPA 4-Way Handshake とは
Wi-Fi は仕組み上ブロードキャスト形式になってしまい、通信中の内容を暗号化しないとただ漏れてになってしまいますので、4-Way Handshake を通じて暗号化のカギのやり取りをし、最終的に通信中に使うカギをお互い決めるのです。
Handshake フレームをどうやってスニッフィングする?
まず、wifite は特定した AP に Deauthentication フレームを注入し、無理やり接続中のデバイスを切断させる。(Deauth 攻撃には aireplay-ng が使われる)
- aireplay-ng --deauth [回数] -a [APのMACアドレス] -c [デバイスのMACアドレス] [インタフェース名]
そうすると、一瞬だけデバイスが切断され、もう一度 4-Way Handshake を行って接続することになります。
この隙について、airodump-ng でハンドシェイクのフレームを拾っていきます。※ Wireshark などでも正しいチャネルで聞いていれば、拾うことができるはずです
スニッフィングしてきた Handshake フレームをどう使う?
裏の動きについてそこまで理解している自信はないですが、多分こんなイメージで動いているはずです :
この4つのフレームの中に色々な情報が含まれていますが、肝心な内容として下記の内容があると考えられます。
- 暗号化に使うカギ
- PW を暗号化した後のデータ
- 接続できていること→ PW は合っているということ
256-bit AES 暗号化方式を破ることが無理であれば、逆に PW を当てて、それを同じカギにかけて、結果が暗号化したものと一致すれば PW をクラッキングすることができるかなというイメージです。
すべての組み合わせを試すことは一般 PC では難しいので、人が使いそうな PW のリスト (辞書) で試すことが一般的です。
※もっと複雑な仕組みになっているはずですが、詳しい話は省きます
自分を守る方法
強い PW を設定しておけば、簡単にクラッキングされることはありません。
比較的に新しいモデルのルーターでは、一般的に自動生成の PW が規定に設定されており、それを利用すればほぼ問題はないと思います。
※ 自動生成 PW は辞書の乗っていないためです
例えば、下記のサイトから計算し、小文字アルファベット 10文字 + 数字 3文字の組み合わせの PW だと、すべての組み合わせを試すには 大体 312 年間かかります。
結論
この実験に通じて、強い PW を設定することが大事だと実感しますね。
攻撃手段を理解すれば、セキュリティの意識も高まると思います。
ご一読いただいた方々ありがとうございます 。