ポイント

●パスワード・クラックとは,パスワードを見破ることを指す。例えばZIPファイルにかけられたパスワードを破る場合,一般的なパソコン(2.4GHz動作のPentium4上でWindowsXP稼働)で1秒間に180万通り程度のパスワード文字列を検査できる。この環境下だと,8桁の数字だけのパスワードを総当りで調べるのに1分程度しかかからない
●レインボー攻撃とは,ハッシュ化されたパスワードを解析する手法のこと。あらかじめ計算済みのハッシュ値のテーブル(レインボー・テーブル)を基にパスワードを解析する

 パスワード・クラックとは,パスワードを見破ることを指します。パスワードを設定する時や管理する際の注意点に関しては,この連載の中でも既に扱いました((利用者編)(管理者編))。今回は,攻撃者の視点,すなわち情報収集の手法の一つとしてパスワードを解析する手口や用語を勉強します。

オンライン攻撃とオフライン攻撃

 はじめに,オンライン攻撃とオフライン攻撃という用語を確認しておきましょう。オンライン攻撃とは,実際に動作しているサーバーにIDとパスワードを送って認証に成功するかどうかを調べる手法です。また,サーバー以外でも動作中のサービスに認証情報を送って調査する手法は,オンライン攻撃にあたります。

 これに対してオフライン攻撃は,パスワード・ファイル,あるいはパスワードがかけられているファイルを入手して,攻撃者のコンピュータにそのファイルを移してパスワード破りを試みる手法のことです。

ブルートフォース・アタックと辞書攻撃

 「パスワード破り」で誰もが思いつくのが,使われる文字の組み合わせを片っ端から順番に試してみるやり方です。この方法はブルートフォース・アタック(総当り攻撃)と呼ばれます。ただし,ブルートフォース・アタックは,パスワードの文字列が長かったり,文字種が多かったりすると,総当たりするのに時間がかかってしまいます。そこで,ユーザーがパスワードとして登録しがちな文字列をあらかじめ辞書ファイルに登録しておき,それを順次試していくやり方があります。こちらは辞書攻撃と呼ばれます。

パスワード解析(総当り攻撃)を試してみる

 ファイルをZIP形式に圧縮する際にパスワードをかけることができます。このときに設定したパスワードを忘れてしまった時に解読を試みるPika Zipというフリーソフトがあります※1。このツールは図1のように解読のための方法を細かく指定できるようになっています。これを筆者のパソコン上で動かして擬似的にパスワード破り(ブルートフォース・アタック:総当り攻撃)を試してみました。

図1●hostsファイルの中身
図1●Pika Zip(ZIPファイルのパスワード解析ツール)の設定画面
[画像のクリックで拡大表示]

 実験で用いたパスワードは,数字だけの8桁で構成したパスワード「12345678」(1)と,数字4桁と英小文字4桁を組み合わせた「abcd1234」(2)です。筆者のパソコンは少し型遅れ(2.4GHz動作のPentium4マシンでWindowsXPが稼働)ですが,誰でも入手できる一般的な機材というイメージでみてください。

 このPC上でツールを動作させた場合,1秒間に160万~180万通りの攻撃を試みることができました。これに桁数と文字種の数を勘案して解読に要する時間を見積ると次のようになります。

 (1)の場合,00000000~99999999までの1億通り(0~9まで10種類の文字の8乗通り)ありますので,1秒当たり180万アタックできると仮定して計算すると,全通り検索したとしても55秒程度で解読できるはずです。

 (2)の場合は,00000000~zzzzzzzzまでの2兆8211億990万7456通り(36種類の文字の8乗通り)ありますので,1秒当たり180万アタックで計算すると約435時間で解読できるはずです。

 それでは結果を見てみましょう。

 (1)の方ですが,あらかじめ数字8桁とわかっていますので,数字のみ・全通り検索でスタートしたところ,13秒で解読が終了しました(図2)。

図2●数字8桁のZIPパスワードを解析した結果
図2●数字8桁のZIPパスワードを解析した結果

 続いて(2)の結果を見てみましょう。こちらは英小文字と数字・全通り検索で実施したところ,19時間弱かかりました(図3)。

図3●英小文字4桁と数字4桁のZIPパスワードを解析した結果
図3●英小文字4桁と数字4桁のZIPパスワードを解析した結果

 どちらも予想よりも大幅に短い時間で解析が終了しています。これは,数字のみの場合は0から9,英小文字・数字の場合はaからz,0から9という順番でアタックしていったため,最後の方まで試さなくても正しいパスワードが見つかったからです。

 ここで一つ確認しておきたい点があります。それは,「ブルートフォース・アタックで解読を試みる場合,パスワードがどんな文字種を利用しているかがわかると,解読が容易になる(=検索数が減る)」という点です。

 もちろん,わざわざツールを使って演算しなくても,机上の計算(見積もり)でわかり切っていることですが,攻撃者の立場になって考えてみると実感できるでしょう。具体的には,今回のケース(1)が10数秒で解読できたのは,「パスワードが数字だけで構成されている」ということを知っていて,効率のよい検索方法,つまり数字のみの10種類の文字で攻撃できたからです。「英小文字も交じっているかもしれない」と考えたら,攻撃者は数字+英小文字の36種類の文字を使って攻撃しなければならないため,全く同じ数字のみのパスワードでも(同じツール・同じ解読アルゴリズムを利用した場合)解読までに10数時間かかることになります。