概要
coWPAttyは無線LANのPSK方式で使用するパスワードの解析が可能なツールです。
WPA2-PSK方式では、無線接続時の認証手続き(4way handshake)が収集できれば、
辞書攻撃によりパスワードを解析することが可能です。
今回はcoWPAttyを使用してPSKを解析してみます。
WPA2-PSKに関して
WPA2-PSKはWPA2パーソナルとも呼ばれ、端末と無線APで事前に設定されている共通のパスフレーズを使って認証する方式です。
これに対してWPA2にはWPA2-EAP(WPA2エンタープライズ)と呼ばれる認証方式もあります。WPA2-EAPではEAPを使い認証サーバによる認証を行います。
無線LANの通信では複数の暗号化鍵を使用して行います。
それらの暗号化鍵を生成するための元となる鍵としてMSK(Master Session Key)と呼ばれるものがあり、WPA2エンタープライズとWPA2パーソナルではMSKの生成方法に違いがあります。
WPA2-EAP
認証サーバにより、端末ごとに個別のMSKが生成されます。EAP認証が成功した後、生成されたMSKが端末に送信されます。
端末は受け取ったMSKをもとにPMKを生成します。
WPA2-PSK
認証で使用するPSKを元にMSKを作成します。
そのため、WPA2-PSKにおいては同一のSSIDに接続する端末はすべて同じPMKを使用することになります。
WPA2-EAPではMSKの生成を認証サーバと連携して行いますが、WPA2-PSKではMSKの生成の手順が簡略化されていることがわかります。
また、認証後に行われる4way handshake(上の図)ではPMKを基に、4way handshake内でやり取りされる情報(MACアドレスや乱数(Nonce))を使って通信暗号化のための情報を生成します。
そのため、WPA2-PSKでは4way handshakeの通信を傍受することで、PSKを推測するための情報が収集でき、辞書攻撃によるパスワード解析が可能となります。
※上記のため、IPAや総務省ではWPA2-PSKのパスワードに関しては一定の長さ以上で設定することを推奨しています。(総務省のリンクは一番下に記載)
環境設定
以前構築したKali Linuxの環境で行いました。環境の構成イメージは以下の通りです。
無線AP設定
無線APはCisco Aironet1231Gを使いました。
以下は今回のコンフィグです。(太字は設定箇所)
ap(config)#do sh run
Building configuration...Current configuration : 1307 bytes
!
version 12.3
no service pad
service timestamps debug datetime msec
service timestamps log datetime msec
service password-encryption
!
hostname ap
!
enable secret 5 $1$v/e.$SRddakbaoDQsL53TO2r0B/
!
ip subnet-zero
!
!
no aaa new-model
!
dot11 ssid test-psk
authentication open
authentication key-management wpa
guest-mode
wpa-psk ascii 7 095C4F1A0A1218000F
!
!
!
username Cisco password 7 01300F175804
!
bridge irb
!
!
interface Dot11Radio0
no ip address
no ip route-cache
!
encryption mode ciphers aes-ccm tkip
!
ssid test-psk
!
speed basic-1.0 basic-2.0 basic-5.5 6.0 9.0 basic-11.0 12.0 18.0 24.0 36.0 48.0 54.0
channel 2437
station-role root
bridge-group 1
bridge-group 1 subscriber-loop-control
bridge-group 1 block-unknown-source
no bridge-group 1 source-learning
no bridge-group 1 unicast-flooding
bridge-group 1 spanning-disabled
!
interface FastEthernet0
no ip address
no ip route-cache
duplex auto
speed auto
bridge-group 1
no bridge-group 1 source-learning
bridge-group 1 spanning-disabled
!
interface BVI1
ip address 192.168.1.252 255.255.255.0
no ip route-cache
!
ip http server
no ip http secure-server
ip http help-path http://www.cisco.com/warp/public/779/smbiz/prodconfig/help/eag
!
bridge 1 route ip
!
!
!
line con 0
line vty 0 4
login local
!
end
※コンフィグ上はPSKは暗号化されて「wpa-psk ascii 7 095C4F1A0A1218000F」のように表示されますが、設定時は「wpa-psk ascii 0 password」で設定しています。
実行結果
実際の攻撃の様子を動画にまとめました。
実行したコマンド
①4way handshakeのパケット収集
- sudo airmon-ng start wlan0
- iwconfig
- sudo airodump-ng wlan0mon
- sudo airodump-ng -c 6 --bssid 00:0F:8F:44:21:80 -w test-psk wlan0mon
②レインボーテーブルによるパスワード解析
- genpmk -f list -d test-rainbow -s test-psk
レインボーテーブルの生成
-f:辞書を指定
-d:生成したレインボーテーブルのファイル名の指定
-s:対象となるSSIDの指定 - cowpatty -r test-psk-01.cap -d test-rainbow -s test-psk
-r:4way handshakeが含まれているパケットキャプチャファイル
-d:使用するレインボーテーブルの指定
※なお、動画には含まれていませんが、辞書による解析を行う場合は以下のコマンドで解析が可能です。
- cowpatty -r test-psk-01.cap -f list -s test-psk
参考にさせていただいたサイト
http://www.cse.hut.fi/fi/opinnot/T-110.5240/2009/luennot-files/Lecture%205.pdf
https://www.soumu.go.jp/main_content/000199320.pdf