🎩

John the RipperのJumboルールを使ったパスワード解析

2021/12/20に公開

はじめに

皆さんこんにちは、ふぁいあー(@fire_fire_2)です。
これは、Qiita セキュリティ Advent Calendar 2021、20日目の記事です。

近年、空前のペネトレーションテストブームで、OSCPやTryHackMe、HackTheBoxなどが流行っているような気がしています。その中でも比較的使うことが多い手法として、入手したハッシュ値の解析があると思います。ハッシュ解析ツールとしてJohn the RipperやHashcatなどありますが、今回はJohn the Ripperについて紹介したいと思います。

John the Ripperとは

John the Ripperとは、オープンソースなハッシュ解析ツールで、ハッシュ化されたパスワードの復元などで使用します。

使用例として、とあるサービスの全ユーザのパスワードハッシュ値に対して、公開されているパスワード辞書などを使って解析を試みたとします。そしてそこで解析に成功してしまったユーザは、強度が非常に弱いパスワードを設定しているということを確認することができます。このように、パスワード強度の監査などでも利用することが可能です。

John the Ripperの一般的な使い方

ペネトレーションテストで利用される有名なLinuxディストリビューションとして、Offensive SecurityのKali Linuxがありますが、Kali LinuxではJohn the Ripperがデフォルトで使用可能な状態です。

以下のようなコマンドを入力すると、John the Ripperのバージョンやオプションとしての引数の使い方などが確認できます。

$ john --help
John the Ripper 1.9.0-jumbo-1+bleeding-aec1328d6c 2021-11-02 10:45:52 +0100 OMP [linux-gnu 64-bit x86_64 AVX AC]
Copyright (c) 1996-2021 by Solar Designer and others
Homepage: https://www.openwall.com/john/
(中略)

基本的には以下のようにハッシュの種類、パスワード辞書を指定して実行することでハッシュ解析を行えます。

$ john --format=<ハッシュの種類> <解析対象ハッシュリストファイルのパス> --wordlist=<パスワード辞書ファイルのパス>

以下のように、showオプションをつけて実行することで、解析に成功したハッシュの一覧を表示することができます。

$ john --format=<ハッシュの種類> <解析対象ハッシュリストファイルのパス> --show

しかしこれだけのオプションだと、正解となるパスワードの文字列が、辞書内にアルファベットの大文字や小文字などが完全に合致した形で含まれていないと、解析が成功することはありません。

そこで、使うのがJumboルールです。

Jumboルールとは

Jumboルールを使用すると、--wordlistで指定した辞書に含まれる文字列をもとに、アルファベットの大文字小文字の違う組み合わせや、それらの文字列に何かしらの数字や記号などを連結するなどした文字列でも解析を試みてくれます。

簡単にいうと、指定した辞書を自動的に拡張して解析してくれるルールということです。

Jumboルールの適用方法

Jumboルールを使用してハッシュを解析するには、通常の利用方法に、--rules:jumboのオプションをつけるだけです。

$ john --format=<ハッシュの種類> <解析対象ハッシュリストファイルのパス> --wordlist=<パスワード辞書ファイルのパス> --rules:jumbo

試してみよう

ではちょっと試してみましょう。
みなさんがよく使っているWindowsはレジストリに設定しているパスワードハッシュが格納されています。それらのレジストリは、管理者としてコマンドプロンプト開き、以下を実行することで保存できます。

> reg save hklm\sam sam.hive
> reg save hklm\system system.hive
> reg save hklm\security security.hive

Kali Linuxには、これらのレジストリファイルから、パスワードハッシュ値を抽出するツールであるimpacketのseacretsdumpもインストールされています。

以下を、先ほど取得したレジストリファイルに対して実行することでWindowsのパスワードハッシュ値が取得できます。

$ impacket-secretsdump -sam sam.hive -system system.hive -security security.hive LOCAL

では、ここで取得したパスワードハッシュ値をファイル(hash.txt)に保存してパスワードを解析してみます。今回使う辞書は、いつものrockyouです。ちなみに、Windowsのパスワードハッシュ値はNTLMとよばれる種類のハッシュです。

$ sudo gzip -d /usr/share/wordlists/rockyou.txt.gz 
$ john --format=NT hash.txt --wordlist=/usr/share/wordlists/rockyou.txt --rules:jumbo

Windowsのユーザアカウントに、rockyou辞書に載っているパスワードと似たようなパスワードを設定していた場合は、もしかしたらパスワードの解析に成功したことでしょう。

まとめ

今回は、パスワードハッシュ値をJohn the Ripperを使って、またJumboルールを適用させて解析をする、ということを紹介しました。これでパスワードの解析をなんとなく取りこぼすことなく行えることでしょう。

もっと良い方法があるかもしれませんが、限られたパスワード辞書でパスワードをいい感じに解析する基本的な方法でした。

Discussion