John the ripperはオフラインのパスワードクラッキングツールです。正確にはパスワードの保存形式であるハッシュ値を解析して元のパスワードを推定することによりクラックします。今回はシステムへのログインパスワードのクラックを試みてみます。
ログインパスワードのクラック
解析対象のファイル(ハッシュ値を含むファイル)の準備
まずはパスワードのハッシュ値を含むファイルを用意します。
ここでは、例によって自分自身のパスワードをクラックしてみます。
つまり何らかの方法でlinuxサーバーに侵入し管理者権限に昇格出来たとの前提で、その後の話としてlinuxのシステム内に保管されているパスワードを取得して解析します。
パスワードは暗号化された状態で、 ” /etc/passwd ” に保管されています。
(注意) 他人のサーバーには侵入しないでください。違法です。
但し、 ” /etc/passwd ” に保管されているのはユーザー名とユーザーID、ホームディレクトリの位置などで、肝心のパスワードはxとなっており、別保管となっています。
パスワード自体はハッシュ化(暗号化)されて、 ” /etc/shadow ” に格納されています。
shadowファイルは、 ” sudo ” 宣言をしないと開けません。
” root: ” の後の長い文字列が、rootのログインパスワードをハッシュ化した文字列です。
ハッシュの構造については後述します。
なので、 ” passwd ” と ” shadow ” の2つを組み合わせて、1つの解析用ファイルを作ります。
この目的で、 ” unshadow ” というコマンドを使います。
sudo unshadow /etc/passwd /etc/shadow > 解析したいファイル名
下記の例では、新しい解析用ファイルを ” hash.txt ” としています。
新造された解析用ファイルを見てみます。
root:などのユーザー名の後に、ハッシュ化されたパスワードが挿入されているのが分かります。
今回は「やられユーザー」として ” abc123 ” を作ってみました。そのログインパスワードは当然、 ” abc123 ” です。(上図では下から2行目にハッシュ化されたパスワードがあります)
簡単なパスワードにしておかないと、非力なラズパイのCPUでは時間がかかってしまうので。
予めファイルの中身は ” abc123 ” の行だけに減らしておきます。(解析時間の節約のためです)
実行
まずは、以下のコマンドで実行してみます。
john 解析したいファイル名
johnはデフォルトではまずは自分の持つ辞書ファイル( ” /usr/share/john/password.lst ” にあります)で解析したのち、それが成功しないと総当たり攻撃を行います。
下記は実行結果ですが、john君は目的の解析ファイルの中のハッシュ値をそもそも見つけられませんでした。kaliのハッシュ方式にjohnの方が対応出来ていないようです。
解析したいファイルが自分が今居るディレクトリと違う場合にはその場所をパス指定します。
ハッシュの構造について
ハッシュとは:
ハッシュ前の文字列(=平文のパスワード)は、とある計算方法(=ハッシュ方式)により、計算後の文字列(ハッシュ値:暗号文)にされます。なおハッシュは逆方向への計算が出来ません。
計算方法(ハッシュ方式)の種類には非常に多くの種類があり、近年のCPU/GPUの計算能力の向上に対抗して新たに堅牢なものが順次開発されています。
ここで少しハッシュについて調べてみました。
abc123(=ログインユーザー名):の後がハッシュ値ですが、正確には$で区切られた4つの部分に分かれています。($を除いて表示しています)
- y:ハッシュ方式
- j9T:不明
- iU00から始まる21文字:salt(パスワードを修飾するランダムな文字列)
- 6FFAから始まる43文字:生成されたハッシュ値
” y ” のハッシュ方式は、 ” yescrypt ” と呼ばれる新しいハッシュ方式を意味します。(kaliでは2021.1以降にデフォルトとなったようです。)
オプション ” –format=crypt ” をつけてみる
色々と調べた結果、 ” –format=crypt ” オプションで、john君は動いてくれました。
john 解析したいファイル名 –format=crypt
下から5行目のabc123がパスワードです。(カッコ内のabc123はユーザー名)
結局 ” –format=crypt ” とオプションで指定してあげることでハッシュ値を見つけてくれ、それを無事クラックしてくれました。
結果の確認
解析結果は ” –show ” オプションで確認します。
john 解析後のファイル名 –show
その他のオプションについて
辞書ファイルを指定して解析するときは、以下のコマンドになります。
john –wordlist=wordlistの位置と辞書ファイル名 解析したいファイル名
総当たり攻撃のオプションは以下の通り
john –incremental 解析したいファイル名
jumboルールオプション
辞書攻撃の際、辞書ファイルにバリエーションをつけて攻撃してくれるオプション。
john –wordlist=wordlistの位置と辞書ファイル名 解析したいファイル名 –rules:jumbo
元の辞書ファイルの文字列に加えて、大文字小文字の組み合わせの変換や、数字の付加などを自動で修飾をしてくれます。
このオプションがあることがjohn the ripperの特徴であり、同じパスワード解析ツールであるhashcatとの違いとなります。
まとめ
johnに、–format=cryptオプションをつけることにより、ログインパスワードの解析が出来ました。
このオプションは、ハッシュの形式を指定するオプションです。つまりkaliのデフォルトのパスワード保存形式である、 ” yescript ” ハッシュ形式の場合、 ” –format=crypt ” とすればいいということです。
コメント