■
いやー、かなりの期間(約9年半)さぼってました。
何となく仕事の関係で、調べた事を残しておきたくて書いてます。
さて何の件かというと、パスワードのクラックにかかる時間です。
仕事の関係でパスワードクラックってどれくらい時間がかかるものなのか調べていたら
IPAさんが掲載していた2008年のレポート(https://www.ipa.go.jp/security/txt/2008/10outline.html)が見つかりました。
でも、このレポートは10年前のもので、H/Wの性能は高くなっているはずだと他を当たってみたのですが、
出てくるのは、かなり高性能なマシンでのレポートだったことから現実的じゃなかったので、
最終的に自分でプログラムを作成する事にしました。
取り敢えず手元の環境で作ろうと調べていて、NTLMハッシュだと、HDDからツールでPWファイルを引っ張ってきて
そのデータと比較してブルートフォースアタックでクラックできそうなので、その方法を再現するように
C#を使ってプログラミングしました。
時間計測の方法としては、NTLMハッシュ(MD4のハッシュ)のクラックを想定し、IPAさんの結果と比べられるように、
同種の文字種と桁数から発生する可能性のあるハッシュ値をブルートフォースで全件チェックするロジックです。
実際にしたことは、例えば4桁の英小文字であれば、"aaaa"から"aaab"、"aaac"から"zzzz"まで
の456,976種のハッシュ値を生成し、ランダムに発生させた5桁MD4のハッシュ値(基本的には一致
しないはずのハッシュ値)と比較するのにかかった時間を計測しました。
環境は、
CPU:Intel® Core™ i7-3770 @ 3.4GHz (4Core, 8Thread) / Mem: 12GByte
使用OS:Windows 7 Professional SP1 64bit
と言った感じです。
結果は、
文字種 | 4桁 | 6桁 | 8桁 | 10桁 |
---|---|---|---|---|
英小文字:26種 | 1秒未満 | 約40秒 | 約8時間 | 約227日 |
英小文字+数字:36種 | 1秒未満 | 約5分 | 約4.5日 | 約16年 |
英大小文字+数字:62種 | 約2秒 | 約2時間 | 約315日 | 約3,317年 |
英大小文字+数字+記号:93種 | 約10秒 | 約22時間 | 約22年 | 約18.6万年 |
と言った感じです。
なんだかぱっとしなかったので、再度ネットを検索して回ることに、
そこで見つかったのが、"GPUを使ったハックツールだと速い"というのがあったので、早速試してみる事に・・・。
今回は、hashcatの64bit版(http://hashcat.net/からダウンロード)を使いました。
(さすがにGPUのプログラミングまでは手が出なかった。)
とは言っても、はじめの環境には使えるGPUを積んだカードがなかったため、
GPU: NVIDIA® GeForce® GTX750 (CUDA Core 512)
を中古(\8,000-)で購入し、前述の環境へセッティング
結果は、
文字種 | 6桁 | 8桁 | 9桁 | 10桁 |
---|---|---|---|---|
英小文字:26種 | 数秒 | 約50秒 | 約20分 | 約9時間 |
英小文字+数字:36種 | 数秒 | 約11分 | 約6.5時間 | 約10日 |
英大小文字+数字:62種 | 約18秒 | 約14時間 | 約11日 | 約6年 |
英大小文字+数字+記号:95種 | 約3分 | 約18日 | 約5年 | 約430年 |
と言った感じです。
GTX750は最新のグラボではないけど、一般的に言われている8桁の英文字(大小)と数字のパスワードだと、
約14時間で解析できてしまうというのはいかがなものかと・・・。
今回のクラックではNTLMのMD4ハッシュだったので、ノートPCなどパスワードが入っているドライブを
盗まれなければ大丈夫かもしれないけど、今後はもう少し長めのパスワードにしないと危ないって事が分かった。