家studyをつづって

IT技術やセキュリティで勉強したことをつづっています。

coWPAttyでPSKを解読する

概要

coWPAttyは無線LANのPSK方式で使用するパスワードの解析が可能なツールです。
WPA2-PSK方式では、無線接続時の認証手続き(4way handshake)が収集できれば、
辞書攻撃によりパスワードを解析することが可能です。
今回はcoWPAttyを使用してPSKを解析してみます。

 

 

 

WPA2-PSKに関して

WPA2-PSKはWPA2パーソナルとも呼ばれ、端末と無線APで事前に設定されている共通のパスフレーズを使って認証する方式です。

 

f:id:iestudy:20201224090159p:plain

PSK認証の仕組み(4way handshake)

 

これに対して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のパスワードに関しては一定の長さ以上で設定することを推奨しています。(総務省のリンクは一番下に記載)

www.ipa.go.jp

 

環境設定

以前構築したKali Linuxの環境で行いました。環境の構成イメージは以下の通りです。

f:id:iestudy:20201224093849p:plain

評価環境のイメージ

無線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」で設定しています。

 

実行結果

実際の攻撃の様子を動画にまとめました。

 

youtu.be

 

実行したコマンド

①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

 

参考にさせていただいたサイト

licensecounter.jp

http://www.cse.hut.fi/fi/opinnot/T-110.5240/2009/luennot-files/Lecture%205.pdf

pubinf.blog.jp

http://www.intellilink.co.jp/sites/default/files/imported/solutions/security/article/vulner/pdf/report20171019.pdf

tools.ietf.org

www.cwnp.com

nw.seeeko.com

https://www.soumu.go.jp/main_content/000199320.pdf