Pyritの実行環境をサクッと構築する

なにこれ

家の無線APのパスフレーズ(WPA2)の強度を測りたかったので,Pyrit入れようとしたらmakeが上手く出来なくて,「う〜〜ん?」ってしたりしなかったりな話.

こういうのやる時の決まり文句だけど,自分のお家のネットワーク機器に対して行っています.

書くこと

  • Pyritのインストール方法
  • GPUの認識(Nvidia

書かないこと

  • 4-way handshake周りの話
  • パケットのキャプチャ方法
  • GPUの認識(Radeon*1

環境

$ cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=16.04
DISTRIB_CODENAME=xenial
DISTRIB_DESCRIPTImON="Ubuntu 16.04.3 LTS"
$ uname -mr
4.10.0-42-generic x86_64

構築

pyritではパケットの収集が出来ないので別途用意する.
makeが上手く通らなかった.
apt で全部出来そうだったのでそっちでやることにした.

$ sudo apt search pyrit

pyrit/xenial,now 0.4.0-5 amd64
  GPGPU-driven WPA/WPA2-PSK key cracker

pyrit-opencl/xenial 0.4.0-1 amd64
  OpenCL extension module for Pyrit

pyrit-openclなるパッケージがあった.
最初は気にしていなかったけど,後で調べた所,Nvidia,AMD Radeonのコアを使って計算速度を向上させるらしい.これも使ってみる.
というかこれを使わないとCPU onlyで計算する羽目になるので,必須.

$ apt install pyrit pyrit-opencl
とりあえず突っ込んだPyritは動作した.CPUでは計算が出来たが,GTX760の認識をしない.

なんでかなぁと弄っていたらcudaのインストールをしていなかった.そりゃ動かないな.
wgetで引っ張ってきた.
$ sudo dpkg -i cuda-repo-ubuntu1604_9.1.85-1_amd64.deb
これで認識してくれる.
環境変数の設定もした気がするけど,覚えてない.

$ pyrit list_cores
Pyrit 0.4.0 (C) 2008-2011 Lukas Lueg http://pyrit.googlecode.com
This code is distributed under the GNU General Public License v3+
The following cores seem available...
#1:  'OpenCL-Device 'GeForce GTX 760''
#2:  'CPU-Core (SSE2)'

認識した.
ベンチマークを走らせる.

$ pyrit benchmark
Pyrit 0.4.0 (C) 2008-2011 Lukas Lueg http://pyrit.googlecode.com
This code is distributed under the GNU General Public License v3+
Running benchmark (38188.5 PMKs/s)... \
Computed 38188.48 PMKs/s total.
#1: 'OpenCL-Device 'GeForce GTX 760'': 40630.6 PMKs/s (RTT 2.8)
#2: 'CPU-Core (SSE2)': 793.8 PMKs/s (RTT 3.0)

PMKs/sというのが一秒間に計算されるパスフレーズの数.
RTTってなんだ?
辞書を用意して解析させる.

実行

$ pyrit -r [.cap] -i [.lst] attack_passthrough
Parsing file '[.cap]' (1/1)...
Parsed 2236 packets (2236 802.11-packets), got 1 AP(s)

Picked AccessPoint 00:00:00:00:00:00 ('[ESSID]') automatically.
Tried 6523830915392 PMKs so far; 43534 PMKs per second.

Password was not found. Retry the attack with '--all-handshakes'.

not foundらしい. ちゃんと動いているのか気になったので,パスフレーズの入ったファイルを読ませてみた所succeededと言われ正しいパスフレーズが出てきた.

まとめとか

  • Pyritのコマンドで strip というのがあって,4-way handshakeが含まれるパケットのみのファイルに再構成してくれた. 不要なパケットを削ぎ落とすのに有効.

  • 上には書いてないけどcrunchを使う際は

$ crunch [min] [max] abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#$%^&*()'"=_`:;?~|+-\/[]{}<> | pyrit -r [.cap] -i - attack_passthrough

と書くと,pipeが効くので総当りが可能(やりたくはない)

おわりに

6000~7000円のグラボで毎秒4万近くのパスフレーズを解析出来るのか...といった感じ.
結構長いフレーズなのでまず破られることはない思うけど,今から4年前のミドルレンジモデルのグラボでこれだから,最近のでやったらもっと結果出るだろうし気を付けていこうな.っていう気持ちになった. 定期的な変更は面倒だし,家族用のAPにもEnterprise認証を使おうかなぁ.

*1:探せば結構あったし、僕がRadeon持っていないので