今回のツールは、rcracki_mtです。
Offline Password Attackツールで、レインボーテーブルを使用してパスワード攻撃をします。
いつもは実際に実行するのですが、今回は後述の理由で実行はしていません。
他人の管理下のサーバーを攻撃することは犯罪行為となります。くれぐれも自分の管理下サーバーで行いましょう。
rcrecki_mt
起動
Kali ー 05-PasswordAttacks ー rcracki_mt
起動するとヘルプ画面が出ます。
使い方
基本構文は、
rcracki_mt -h ハッシュ値 レインボーテーブルの位置と名前
ハッシュ値は目的のパスワードをハッシュ関数を通してハッシュ化したものです。(パスワードハッシュとも呼びます。)
レインボーテーブルについては後述します。
ハッシュについて
ハッシュ値は、元の平文(=パスワード)を一定のアルゴリズムに基づいて計算した結果の値です。
このアルゴリズムをハッシュ関数とも呼びます。
平文(パスワード) ⇨ ハッシュ関数 ⇨ ハッシュ値
ハッシュ関数には多くの種類がありますが、同じ種類のハッシュ関数であれば、元の平文の文字数に関わらず、ハッシュ値は同じ文字数となります。
またハッシュ関数は逆方向への計算ができません。
多くのアプリケーションではパスワードを平文では保存せず、そのハッシュ値のみを保持しています。
ログイン時などにパスワードが入力されると、それをハッシュ化します。
そしてその結果と、保持してあるハッシュ値とを比較します。
そしてそれが同じなら、元のパスワードも正しいと判断します。
” John the ripper ” や ” hashcat ” などのOffline Password Attsck Toolsは、ターゲットのハッシュ値を入手してきて、パスワード候補の文字列を片っ端からハッシュ化してハッシュ値同士を比較していき正しいパスワードを見つけます。
ハッシュ関数の種類
ここにあるように非常に多くの種類があります。
古いものほど単純なので破られているものもあります。
新しいほど桁数が増えています。
代表的なものは、 ” MD5 ” や ” SHA1 ” など。
ハッシュ関数の計算の仕方
例えば、MD5の場合
md5sum
で次に、平文を入力し、 ” Ctl + D ” で計算します。
下記は、平文 ” abc123 ” を、MD5でハッシュ化した例。
下記は、同じく平文 ” abc123 ” を、SHA1でハッシュ化した例です。
sha1sum
レインボーテーブルについて
” John the ripper ” や ” hashcat ” などのOffline Password Attsck Toolsは、平文のパスワード候補を集めた辞書ファイルをその都度ハッシュ化して比較する作業を行なっています。
しかし誰かが最初からハッシュ値を計算しておいて対応表を作っておけばいんじゃね?と考えました。
つまりコトが起こる前から計算をやり貯めておく訳です。先回り計算というか、待ち伏せ計算というべきか。
ただ、普通に対応表を作ればとんでもない記憶容量を食うので、特殊な記録方法で記憶容量を節約して記録されたのがレインボーテーブルです。
ツール ” rcracki_mt ” はこのレインボーテーブルを使ってパスワードクラックを行います。
” John the Ripper ” などの他のOffline Password Attackツールに比べて、基本的には1つ1つパスワードハッシュ候補と比較していく作業は同じですが、ハッシュ値が既に計算してある分だけ理論的には早い(はず)です。
” rainbow table ” で検索すると、これを集めたページが出てきます。例えばここです。
ハッシュ関数の種類別・文字セット別・文字数別にレインボーテーブルが並んでいます。
見ればわかるように記憶容量を節約してもこの大きさです。50GBとか600GBとか。
なのでとてもこれをダウンロードしてくる気にはなりませんでした。なので今回は実行していません。(こういう時の為に、ラズパイに差し込むmicroSDカードは容量の大きなものがいいのかも知れません。)
計算が済んでいるハッシュ関数は比較的古いものばかりです。(新しいものもどこかにはあるのかも知れないですけど)
またこのレインボーテーブルのパスワードの最大文字数は10文字までなので、11文字以上のパスワードにすれば事前計算は行われておらずこのテーブルによる攻撃は無力です。
こちらには数字のみですが14桁のテーブルがあります。(=つまり数字だけのパスワードは14桁まで計算が済んでいるので危ない。)
対抗手段
ハッシュ関数の複雑化
さて先回り計算されているのが分かっているので、これに対抗してハッシュ関数側も進化しています。
一つは、MD5 → SHA1 → SHA512など関数が複雑化しています。(もっと多くの種類があるけど省略)
複雑化するほど攻撃に対して堅牢になります。
ソルトとペッパー
元の平文にランダムな文字列を付け加えて、長くなった文字列ごとハッシュ化します。
そうするとハッシュ値がガラリと変わって、折角行なった先回り計算が全て無駄になります。
このように付け加えられたランダムな文字列をソルト(salt)と呼びます。
ソルトは元のハッシュとセットで保存されていますが、それでは物騒なのでハッシュとは別の場所に保存される場合があり、それをペッパー(pepper)と呼びます。
ソルトとペッパーの併用もありです。
ペッパーはシークレットソルトとも呼ばれます。
ストレッチング
ストレッチングはハッシュ関数に何回も通すことにより、ハッシュ値を変えて事前計算を無効にさせます。
平文(パスワード) ⇨ ハッシュ関数 ⇨ ハッシュ値1 ⇨ ハッシュ関数 ⇨ ハッシュ値2
レインボーテーブルの限界
レインボーテーブルを使うこのツールは、古いハッシュをそのまま使っている場合にしか通用しません。(古いハッシュのレインボーテーブルしか計算が済んでいません。)
但し古いままのハッシュ関数を使っているシステムは意外と多いのかも知れません。(一度運用を始めたシステムの変更時には多大な労力がかかるので。)
まとめ
よく情報流出の報道などで「パスワードが流出」と報道されたりしますが、これは多くは「パスワードハッシュが流失」が正しい表現です。
そのパスワードハッシュは闇マーケットに売りに出されて、別の誰かがそれを購入・解読し、さらに別の誰かがそれを購入して攻撃に使うといった手順となります。
つまり流出から攻撃までは若干のタイムラグが生じるので、もし自分の利用するサイトが流出事故を起こした場合は、出来るだけ早急にパスワードを変更する方が良いでしょう。
コメント