トップ 最新 追記
【ソース+水=麦茶色の何か】

半期 四半期 全カテゴリ

今日の一言


2011/09/04(Sun) クエスト終了。面白かった。 [長年日記] 編集

_ [Linux][Ubuntu][Debian][FC][Mac]WPA/WPA2-PSKのパスワードを超高速で発見できるソフト「Pyrit」

注意点

下記を実施する場合、かならず自分の無線LAN環境で行うこと。

暗号化されているネットワークに無断でアクセスするのは犯罪行為です。許されるのはハッキングまで。クラッキングは絶対にやめましょう。

参考

http://code.google.com/p/pyrit/
http://gigazine.net/news/20110707_pyrit/
http://beta.ivc.no/wiki/index.php/Pyrit_setup

基礎情報

「Pyrit」は、ATI Stream テクノロジー/Nvidia CUDA/OpenCLを使用し、GPUのパワーを使って超高速でWPA/WPA2-PSKのパスワードを解析するソフトウェアである。

「Pyrit」はフリー(GPLv3)のオープンソースソフトウェアであり、無料で使用できる。

WPA/WPA2の解析はPairwise Master Key(PMK)をいかに素早く見つけるかという点にかかっており、「Pyrit」ではGPUを活用することで、「Aircrak-ng」のようなCPUでの計算に比べて数十倍高速にPMKを計算できる。

解析は総当たりでパスワードを全種類試していく手法(ブルートフォースアタック)により行う。ブルートフォースアタックは無線LANのバグやセキュリティホールを突いているわけではないため、(それが現実的な時間かどうかは別問題として)時間さえかければどんなパスワードであろうと発見できる。

「Pyrit」が優れているのは、この総当りの速度が従来に比べて非常に高速である点だ。やっていることとしては、従来のものと同じく、用意したパスワード候補をひたすら試していくだけなので、実際に未知のパスワードを解析できるかどうかは使用するデータベース(辞書ファイル)の質に依存する。

そのため、パスワードの解析に必要となるのは、

・(パスワードの候補を収録した)データベース
・(高速計算を可能にするための、ある程度高性能な)GPU

の2つである。

「Pyrit」は、取得したパケットを元にパスワードの解析を行うだけのソフトであるため、パケットの取得には、また別のソフトウェア(Aircrack-ng等)を使う必要がある。パケットキャプチャについてはここでは説明しない。

実際にはGPUがない状態でもCPUのみで実行できるが、それだと従来のソフトウェア(Aircrack-ng等)と同じなので、わざわざ「Pyrit」を使う意味がない。むしろ、CPUのみでの計算速度では、「Aircrack-ng」のほうが完成度が高い。

また、データベースにはMySQL等が使えるが、ローカルで使用するだけなら適当な文字列を列挙しただけのプレーンなテキストファイルで十分である。

PCの構成

例として、今回使用したPCの構成を示す。

MotherBoard:MSI Big Bang Marshal
CPU:Intel Corei5 i5-2500K 3.3GHz
GPU:RH6990-E4GD/MDP4 x 2枚
HDD:Western Digital 2.0TB WD20EARX
OS:Ubuntu 10.04 64bit


インテル Core i5 2500K Box (LGA1155...

インテル Core i5 2500K Box (LGA1155...
価格:17,980円(税込、送料込)

【送料無料】WesternDigitalWD20EARX バルク品 ...

【送料無料】WesternDigital WD20EARX バルク品 ...
価格:5,640円(税込、送料込)

RH6990-E4GD/MDP4は2つのGPUを備えたマルチコア構成となっている。そのため今回の構成では、RH6990-E4GD/MDP4を2枚使って4つのGPUコアによる計算が可能である。

※4つ以上のコアを使って計算が可能かどうかは未確認であるため、チャレンジする場合は自己責任でお願いします。

ここで、複数のグラフィックボードを使用する場合は、CrossFireで接続『しない』ことに注意する。

どうやら、CrossFireで接続してしまうと、複数のGPUではなく、1つの高性能なGPUとして扱われてしまう模様。この状態でも一応「Pyrit」は実行できるものの、CrossFire接続した場合に比べて圧倒的に計算速度が遅くなる。

具体的には、CrossFire接続をした状態だと、2つのGPUを使った場合でも、1つのGPUだけで計算した場合と比較して、計算速度が 1.2 倍程度にしか向上しない。対して、CrossFire接続しない場合の計算速度は、単純に 2 倍となる。

pyritインストール前の準備

端末から以下のコマンドを実行する。

$ sudo apt-get update
$ sudo apt-get install python-scapy
$ sudo apt-get install python-dev
$ sudo apt-get install libpcap-dev
$ sudo apt-get install libssl-dev

pyritのインストール

端末から以下のコマンドを実行する。

$ wget http://pyrit.googlecode.com/files/pyrit-0.4.0.tar.gz
$ tar zxvf pyrit-0.4.0.tar.gz
$ cd pyrit-0.4.0
$ python setup.py build
$ sudo python setup.py install

正しくインストールできていることを確認

端末から以下のコマンドを実行する。

$ pyrit eval
$ pyrit list_cores
$ pyrit -e linksys create_essid

すべてエラーが出なければ、プログラムは正しくインストールされているはず。

なお、この段階ではまだGPUが使用可能になっていないため、CPUのコアしか発見できない。

ここで複数のコアが表示されるのは、CPUがマルチコアのため。今回の構成だと以下のように4つのコアが見えるはず。

Computed 3235.5 PMKs/s total.
#1: 'CPU-Core (SSE2)': 811.4 PMKs/s (RTT 2.8)
#2: 'CPU-Core (SSE2)': 768.2 PMKs/s (RTT 2.8)
#3: 'CPU-Core (SSE2)': 792.7 PMKs/s (RTT 2.5)
#4: 'CPU-Core (SSE2)': 782.9 PMKs/s (RTT 2.5)
#5: 'Network-Clients': 0.0 PMKs/s (RTT 0.0)

グラフィックボードのドライバをインストール

ディスプレイドライバをインストールし、GPUを計算に使用できる状態にする。

以下は、今回使用したRH6990-E4GD/MDP4の場合の設定方法である。これ以外のボードでも手順そのものは大きく変わらないはず。

まず、使用するGPUに合わせてグラフィックドライバーをインストールする。

ATIのボードの場合は以下のページからDLできる。

http://support.amd.com/us/gpudownload/Pages/index.aspx

今回はRH6990-E4GD/MDP4を使用するため、下記の手順でAMD Radeon HD6990のドライバをインストールする。

$ wget http://www2.ati.com/drivers/linux/ati-driver-installer-11-8-x86.x86_64.run
$ sudo apt-get update
$ sudo apt-get install libqtgui4
$ sudo sh ./ati-driver-installer-11-8-x86.x86_64.run
(GUIでインストール。参考ページのdebからインストールする方法だと失敗したため)

ディスプレイドライバの設定

インストールしたドライバに合わせて「/etc/X11/xorg.conf」を作成する。以下のコマンドを打つと、自動的に現在の環境にあわせた設定が書き込まれる。

$ sudo aticonfig --initial -f

ここで一度ログアウトし、ドライバを読み込む。

ドライバが正しく読み込まれていることを確認

以下のコマンドを実行。

$ sudo  fglrxinfo

使用しているグラフィックボードの情報が表示されるはず。

OpenCLをインストール

GPUによる計算には、OpenCLというライブラリを使用する。

AMDの場合、AMD APP SDK(旧ATI Stream SDK)がOpenCLに対応しているため、それを使用する。

http://developer.amd.com/sdks/AMDAPPSDK/Pages/default.aspx#five

※なお、Nvidiaの場合はNvidia CUDAがOpenCLに対応しているらしい(未確認)

以下のコマンドを実行し、AMD APP SDKをインストールする。

$ mkdir AMD-APP-SDK
$ cd AMD-APP-SDK/
$ wget http://download2-developer.amd.com/amd/APPSDK/AMD-APP-SDK-v2.5-lnx64.tgz
$ tar zxvf AMD-APP-SDK-v2.5-lnx64.tgz

ホームページからinstallation notesをDLし、それにしたがってインストールする。

※注意※

マニュアルには、

$ sudo ./Install-APP.sh

でインストールしろという説明があるが、手動で設定できるなら、可能な限り使わない方がいい。

なぜなら、これは一連の処理を実行したら警告もメッセージもなしにいきなりrebootするというひどいスクリプトだからだ。

一応logは吐かれるものの、再起動が終わってlogを確認するまで、インストールが成功しかどうかすら分からない。

しかも2回以上実行すると/etc/profileが破壊されるというおまけ付き。(これは自分の環境が悪いだけかも知れない)

もしこのスクリプトを複数回実行させてしまってログインできなくなった(ログイン画面⇒認証⇒ログイン画面⇒・・・と無限ループしてしまう)場合は、仮想コンソール(「Alt」+「F1」~「F6」)からCUIでログインし、「/etc/profile」を修正する必要がある。

Cpyrit OpenCL moduleのビルド

OpenCL用のモジュールをインストールし、GPUを使ってPryitを実行できるようにする。

$ wget http://pyrit.googlecode.com/files/cpyrit-opencl-0.4.0.tar.gz
$ tar zxvf cpyrit-opencl-0.4.0.tar.gz
$ cd cpyrit-opencl-0.4.0

ここで、「setup.py」内のincludeをしている部分に以下のパスを加える。

'/opt/AMDAPP/include', \

さらに、以下のコマンドでlibOpenCLへのリンクを貼る。

$sudo ln -s /opt/AMDAPP/lib/x86_64/libOpenCL.so /lib64/

ここまで設定できたら、ビルドとインストールを行う。

$ python setup.py build
$ sudo python setup.py install

正しくインストールされたことを確認。

$ pyrit list_cores
$ pyrit benchmark

おそらく以下のような結果が得られるはず。

Computed 36724.5 PMKs/s total.
#1: 'OpenCL-Device 'Cayman'': 33617.5 PMKs/s (RTT 1.7)
#2: 'CPU-Core (SSE2)': 796.5 PMKs/s (RTT 2.8)
#3: 'CPU-Core (SSE2)': 733.4 PMKs/s (RTT 2.8)
#4: 'CPU-Core (SSE2)': 789.8 PMKs/s (RTT 2.8)
#5: 'Network-Clients': 0.0 PMKs/s (RTT 0.0)

この時点では、Xを起動しているのは(マルチディスプレイでない限りは)ディスプレイに接続しているグラフィックボード1台だけなので、リストにもGPUは1つしか表示されない。

以下、xorg.confを修正して残りのGPUも計算に使用できるようにする。

xorg.confの設定

参考:

http://code.google.com/p/pyrit/issues/detail?id=123
http://www.backtrack-linux.org/forums/backtrack-howtos/33227-ati-driver-|-stream-sdk-2-2-opencl-1-1-|-cal-|-cpyrit_calpp-|-7.html

上でも書いたが、pyritでの計算の際には、CrossFireを無効にする必要がある。

特に、今回使用するHD 6990はデュアルGPU構成のため、ボード上の2つのGPU間でデフォルトでCrossFireが有効になっているため、このままだと問題が発生する可能性がある。

※自分の環境では、デュアルGPUの複数差しをした場合にPyritがうまく実行できず、エラーが出た。シングルでの仕様の際には、1枚のボードに乗っている2つのがまとめて1つのGPUとして扱われるため、一応は実行できる(ただし、CrossFire接続のため、十分に性能が発揮できない)

以下の手順で、CrossFireの設定を無効化し、4つのGPUをそれぞれ独立させて計算できるようにする。

まず、以下のコマンドで/etc/X11/xorg.confを初期化する。

$ sudo aticonfig --adapter=all --initial

その後、Xを再起動させる。再起動後、CrossFireの設定を確認。

$ aticonfig --lscs

まだCrossFireの設定がenableになっているものがあれば、以下のコマンドを打つ。

$ sudo aticonfig --adapter=all --cf=off

その後、Xを再起動させる。再起動後、CrossFireの設定を確認。

$ aticonfig --lscs

まだCrossFireの設定がenableになっているものがあれば、以下のコマンドを打つ。

$ sudo aticonfig --adapter=0 --cfd

その後、Xを再起動させる。再起動後、CrossFireの設定を確認。

$ aticonfig --lscs

まだCrossFireの設定がenableになっているものがあれば、以下のコマンドを打つ。

$ sudo aticonfig --adapter=all --cfd

その後、Xを再起動させる。再起動後、CrossFireの設定を確認。

aticonfig --lscs

CrossFireの設定がすべてdisableになっていることを確認したら、以下のコマンドでコアリストを表示する。

$ pyrit list_cores

GPUが一つしか認識されていない場合は、以下のコマンドを打ち、他のGPUにアクセスできるようにする。

$ export DISPLAY=:0

再度コアリストを表示する。

$ pyrit list_cores

すべてのコア(GPU4つ)が表示されたら、以下のコマンドで動作をチェックする

$ pyrit benchmark
$ pyrit selftest

おそらく次のような結果が得られるはず。

Computed 12974.3 PMKs/s total.
#1: 'OpenCL-Device 'Cayman'': 42157.5 PMKs/s (RTT 1.7)
#2: 'OpenCL-Device 'Cayman'': 37175.3 PMKs/s (RTT 1.8)
#1: 'OpenCL-Device 'Cayman'': 39431.6 PMKs/s (RTT 1.7)
#2: 'OpenCL-Device 'Cayman'': 45134.9 PMKs/s (RTT 1.8)
#5: 'Network-Clients': 0.0 PMKs/s (RTT 0.0)

自分の環境では、およそ13,000 PMKs/s の速度で実行できた。これはCPUのみで計算した場合の約30倍である。

うまく実行できたら、ホームディレクトリの「.bashrc」に、

export DISPLAY=:0

を追記する。これで、起動時に自動で全てのGPUコアが使用可能になる。

以上でPyritのセットアップは完了。

あとは公式HP(http://code.google.com/p/pyrit/)を見ながら、実際に解析を行っていくだけである。

補足(最低限の使い方)

pcapの解析(SSID等の確認や、handshakeが含まれているかを確認)
$ pyrit -r wpa-Induction.pcap analyze

使用するpcapはOmnipeekやAircrack-ng等でキャプチャしたものでOK。

動作チェックをしたいだけなら、プログラムのソースにサンプルが入っているので、それを使えばいい。また、Wiresharkのページ(http://wiki.wireshark.org/HowToDecrypt802.11)にサンプルがあるので、それを使わせていただくのもいいかもしれない。

辞書ファイルを使ったパスワード解析

Pyrit自体には、辞書を生成する仕組みはない。辞書の質がパスワード解析の可否を握っているので、未知のパスワードを解析する場合には、いかにしてこれを準備するかが重要となる。

簡単にプログラムの動作チェックをしたいだけなら、プログラムのソースにサンプルが入っているので、それを使えばいい。

なお、辞書ファイルは適当な文字列を列挙したテキストファイル(もしくはそれをtarで圧縮したもの)であればいいため、ランダムな文字列を記載した辞書を作成するプログラムを作るか、ネットから適当な辞書を探せばとりあえず最低限の解析は出来るはず。

BSSIDを指定して解析

$ pyrit -r wpa-Induction.pcap -i dic.txt -b 00:0b:86:c2:a4:85 attack_passthrough

ESSIDを指定して解析

$ pyrit -r wpa-Induction.pcap -i dic.txt -e Coherer attack_passthrough

対象を指定せずに解析

$pyrit -r wpa-Induction.pcap -i dic.txt attack_passthrough

蛇足(一般的なパスワードを解くのにかかる時間)

「password」や「aaaaaaaa」のように、よく使用される単語をパスワードにしている場合、(使用する辞書ファイルに依存するが)パスワードが破られる可能性はある。

なぜなら、今回使用したPCのように、1秒間に13万個という速度で計算が出来るのであれば、1億単語が収録された辞書でもたった1時間で全てチェックできるからだ。

少なくとも、既存の単語のみを使ったパスワードやその繰り返し(testtestなど)は避けたほうが無難である。

対して、完全にランダムな文字列からなるパスワードを解くのは実質的に不可能といっていい。

例えば、バッファロー製の無線LANルーター(WZR-HP-AG300H)の場合、デフォルトで設定されているパスワードには

(数字:10文字+英小文字:26文字)×13文字 = 36の13乗
= 170,581,728,179,578,208,256

もの組み合わせがある。

もしこれを 13万 PMKs/s ですべて解析しようとすると、およそ『4000万年』ほどかかる。

偶然に答えが得られる確率は、『4年間計算させ続けてやっとジャンボ宝くじ1等当選と同程度』でしかない。

なので、もしネットワークの安全性に出現に不安を感じているなら、完全にランダムな文字列を用意するか、それが面倒なら、製品のデフォルトパスワードを使うことをお勧めする。

反対に言うと、完全にランダムな文字列を使っているWPA / WPA2-PSKネットワークに対しては、「Pyrit」のような超高速でブルートフォースアタックをするようなツールでは(少なくとも一般人が手に入れられるレベルのPCでの)ハッキングおよびクラッキングはきわめて困難だと言える。

WPAパーソナルモードのパスフレーズは、『8文字から63文字』の『ASCIIの印字可能文字(94文字)』もしくは『64桁の16進数』と定められている。つまり、パスワードの長さまでランダムに定めるならば、その組み合わせの総数は、

(ASCII印字可能文字:93文字)×63!/7! = 3.6×10の85乗

となる。これは、塵劫記寛永8年式でいうところの不可思議(10の80乗)を超えて無量大数(10の88乗)に迫る勢いだ。先の『(数字:10文字+英小文字:26文字)×13文字』など比較にもならない。

なので、(実際には完全にランダムな文字列と言うことはありえないだろうが)「Pyrit」のような辞書攻撃に対して一番頑健なのは、『ASCII印字可能文字からランダムに抽出した93文字の文字列』をパスワードに使うことだろう。まず破られることはありえない。

まとめると、現状「Pyrit」でWPA / WPA2-PSKのパスワードが破られる可能性があるのは、辞書に登録されているような予測可能なパスワードを使っている場合や、数字のみ、英小文字のみといった限定された文字種のみを使った短いパスフレーズを設定している場合に限られる。

このことから、従来の数十倍の解析速度と言うのは確かに驚異的ではあるが、その程度ではWPA / WPA2-PSKの安全性を脅かすほどの脅威ではない、と考えられる。


2011/09/24(Sat) 連休はすばらしい [長年日記] 編集

_ [Firefox][Windows]Firefox、Thunderbirdをタスクトレイへ収納できるプラグイン(MinimizeToTray Plus)

「MinimizeToTray Plus」というプラグインを使うことで、「Firefox」および「Thunderbird」を、最小化時にタスクバーではなくタスクトレイへ収納できるようになる。

それぞれ“Add-ons for Firefox”および“Add-ons for Thunderbird”からダウンロード可能。


2011/09/25(Sun) 休みが終わってしまう・・・ [長年日記] 編集

_ [Linux][Ubuntu][Debian]Grubの再インストール

参考:

http://www.nucl.phys.titech.ac.jp/~kenichi/grub.html
http://netlog.jpn.org/r271-635/2009/12/ubuntu_910_grub2.html

はじめに

以下はDebian系Linuxで広く使われているGrubをブートローダーとして設定するための方法です。

デュアルブート環境でLinuxのあとにWindowsをインストールした場合などは、WindowsのブートローダーがLinuxをリストに加えてくれないため、この方法を使ってGrubをMBRに再インストールする必要があります。

なお、Grubの設定に失敗するとOSが起動しなくなる可能性があります。事前にバックアップを取り、自己責任で行ってください。

設定メニューの作成

以下のコマンドを打つとパーテーションの状態に合わせた設定ファイル(/boot/grub/menu.lst)が自動生成される。

※上書きされてしまうため、特殊なブート設定をしている場合は使わないでください。

# update-grub

kernel imageを自動で検出してメニューに追加してくれるので、細かい所を必要に応じて変更するだけでOKです。

grubのインストール

以下のコマンドを打つと、MBRに設定ファイルの内容が書き込まれる。

# grub-install /dev/hda

ここで、hdaはGrubのインストール場所を示しています。なお、環境によっては、hdaではなくsdaの場合があるので注意してください。

これで、再起動後は再インストールされたGrubが実行されます。


2011/09/26(Mon) オレシカまでもう少し [長年日記] 編集

_ [Linux][Ubuntu][Debian][FC]Linuxでコマンドの実体(パス)を確認する(type)

参考:

http://itpro.nikkeibp.co.jp/article/COLUMN/20060227/230909/

typeというコマンドを使うことで、任意のコマンドに関する情報を表示できる。

例えば、lsコマンドに関する情報を表示する場合は以下のようにする。

$ type -a ls
ls is aliased to `ls --color=tty'
ls is /bin/ls

指定できるオプションには以下のものがある。

-a 	コマンドのパス名として,実際に起動されるパス以外に,その他のパスも表示する
-p 	コマンド名を指定した場合に,実行されるファイル名を表示する。
-t 	コマンドの型を表示する

2011/09/27(Tue) はじめての有給 [長年日記] 編集

_ [Debian][FC][Linux][Ubuntu]Linuxでハードウェアの情報を一覧表示する(lshw)

参考:

http://www.tempest.jp/linux/lshw.html
http://www.atmarkit.co.jp/flinux/rensai/linuxtips/657hardinfo.html

lshwというコマンドを使うことで、PCのハードウェア情報の一覧が表示できる。

# lshw

また「-html」オプションをつけることで結果をhtml形式での出力も可能である。

# lshw -html > HardwareInfo.html

その他、「-xml」オプションでXML形式での出力も出来る。

# lshw -xml > HardwareInfo.xml

2011/09/28(Wed) GREEのCMがあの時のAC並みにうっとうしい [長年日記] 編集

_ [MSOffice][Windows]Microsoft Office Word 2003で音声認識データが保存できないというエラー

参考:

http://support.microsoft.com/kb/915263/ja

以下のようなメッセージが表示されたときの対処法。

「文書は保存されましたが、音声認識データを保存する十分な空き領域がないため、データは失われました」

現在開いている文書でメッセージを表示されないようにする

1. Wordを起動する
2. 「ツール」メニューの「オプション」をクリック
3. 「保存」タブを開き、「言語データを埋め込む」をオフにして[OK] をクリック

デフォルトで音声認識データを保存しないようにする

1. Wordをセーフモードで起動する(Ctrl キーを押しながら起動)
2. 「ファイル」をクリックし、「開く」をクリック
3. 「ファイルの種類」を「文書テンプレート」に変更し、以下の場所にある「Normal.dot」 を開く。
   ドライブ名\Documents and Settings\(ユーザー名)\Application Data\Microsoft\Templates\
4. 「ツール」メニューの「オプション」をクリック
5. 「保存」タブを開き、「言語データを埋め込む」をオフにして[OK] をクリック
6. ファイルを上書きする

これで、以降の文書ファイルで言語データの保存がオフになる。


2011/09/29(Thu) 最近、本を読んでない・・・もうだめだー [長年日記] 編集

_ [MSOffice][Windows]Microsoft Office Wordでフィールドをすべて更新する(全選択後F9キー)

「F9」を押すことで、カーソルのあったフィールドを更新することが出来る。

そのため、全てのフィールドをまとめて更新したい場合は、

「Ctrl」+「a」の後、「F9」

とすれば良い。

_ [Windows]Windowsのダイヤルアップ(PPPoE)/VPN接続設定ファイルの保存場所

参考:

http://www.atmarkit.co.jp/fwin2k/win7/02win7mig/02win7mig_05.html
http://www.eurus.dti.ne.jp/~yoneyama/Win_Xp/index.html

Windowsではダイヤルアップ(PPPoE)やPPTP、VPNの接続設定の設定は「rasphone.pbk」というファイルに書かれている。

保存場所は以下のとおり。

Windows XP以前
%SystemDrive%\Documents and Settings\All Users\Application Data\Microsoft\Network\Connections\Pbk\rasphone.pbk
Windows Vista / 7
%UserProfile%\AppData\Roaming\Microsoft\Network\Connections\Pbk\rasphone.pbk

Windows PC間で環境の移行をする場合などは、このファイルをコピーして移行先のPCに配置するだけでいいので知っておくと便利である。

また、保護等のかかっていないファイルであるため、任意の場所にバックアップを作ることもできる。

ただし、発信時に使用するユーザーIDやパスワードの情報はこのファイルには記憶されていないため、別途記録しておく必要がある。

※これらのユーザー名やパスワードは通常の方法では取り出せないため「dialupass」等のソフトが必要となる。

補足情報

なお、この設定ファイルをそのままクリック等で実行すると、ダイアルアップのプログラムが起動するが、このファイル自体は平文で書かれた単なるテキストファイルである。

そのため、適当なテキストエディタに放り込めば手作業で設定を書き換えることができる。