[KALI LINUX] John the Ripper ~パスワードクラッカー~


 John the Ripper 

今日は「John the Ripper」というツールをご紹介したいと思います。実際にはほとんど使わず、ヒドラのような他の一般的なツールで代用している人も多いようです。これらのかなり強力なブルートフォースツールの比較については、詳細を説明しません。それらはそれぞれの場面で機能し、使われているので、それぞれの良さがあります。

John the Ripperはオープンソースのパスワードクラッカーで、複数のアルゴリズムを使ってCPUとGPUの両方のパスワードをブルートフォースすることができます。様々な種類のドキュメントやアーカイブのパスワードを解除したり、様々なリソースのシンプルなユーザーパスワードを解除することができます。Johnの欠点は、ハッシュをクラックすることしかできないこと、つまり、暗号化されたファイルを直接扱うことができないことです。プログラムは、例えばオフィス文書を開き、そこにパスワードを入力することなどができません。

以下の例ではすべて、JohnがすでにプリインストールされているKali Linux OSを使って説明します。その他のLinuxディストリビューションをお使いの場合は、以下のコマンドでインストールまたはアップデートの確認を行う必要があります。

# sudo apt-get install john -y

この記事では、例として、暗号化されたアーカイブのパスワードを回復する方法を見てみましょう

まず、問題のファイルのハッシュを計算(抽出)する必要があります。Johnは自分でその方法を知りません。補助的なユーティリティーが必要です。

2つのファイルを作成し、1つは必要な暗号化されたアーカイブ用です。そして2つ目は、ブルートフォースのための私たちのパスワードのデータベース、インターネット上の彼らのヒープの利点です。

分かりやすいようにスクリーンショットを添付しています。

ここで、コマンドで作成したフォルダに移動します。

# cd (ファイルパス)

直接進んでハッシュ自体を抽出し、Test.txtという同じフォルダに保存します。

# zip2john Test.zip > Text.txt

異なるファイル形式からハッシュを抽出する場合は、ZIPを異なるファイル形式に置き換える必要があります。いくつか例を挙げてみましょう。

rarファイルからハッシュを抽出します。

# rar2john Test.rar > Text.txt

7zアーカイブからハッシュを抽出します。

# 7z2john.pl '/mnt/disk_d/Arch/from_kali.7z'

MS Word 2019ファイルからハッシュを抽出します。

# office2john.py '/mnt/disk_d/Share/Secret.docx' 2>/dev/null

Wi-Fiハッキングのためにハンドシェイクからハッシュを抽出する例

# wpapcap2john ~/RT-725140.pcap

キャプチャしたネットワークトラフィックからVNCハンドシェイクのハッシュを抽出した例。このハッシュを使えば、VNCサーバーのパスワードをクラックすることができる。

# vncpcap2john '/home/mial/VNC.pcapng'

ご覧のように、Text.txtファイルが私たちのハッシュで作成されています。

ランニング

最も頻繁に使われるオプションで、これがないとほとんどすべての起動ができないものとして、--mask(パスワードを生成するためのマスク)と--wordlist(パスワードを含む辞書へのパス)を挙げておきます。

辞書攻撃を行うには、辞書(論理)が必要です。まだお持ちでない方は、rockyouをダウンロードしてください。

辞書攻撃を行うには、次のようなコマンドを実行します。

john --wordlist=(辞書ファイル)

辞書とハッシュファイルをjohnの実行ファイルと同じフォルダに入れているので、コマンドは以下のようになります。

john --wordlist='Passwd.txt' Text.txt

そしてVoilaは、パスワードがAdmin123によって選ばれる

マスク攻撃を行うには、次のような形式のコマンドを使用します。

./john --mask=(マスクハッシュ)

例えば、こんな感じです。

./john --mask='?d?d?d?d?d?d' Text.txt

マスク別にパスワードを把握するためのちょっとしたメモをご紹介します。

Static Characters.
Ranges in the syntax [aouei] or [a-z]. Or both, [0-9abcdef] is the same as [0-9a-f].
Fillers that are just an abbreviated form for ranges, such as ?l, which is 100% equivalent to [a-z].
?l is lowercase ASCII letters
?u are ASCII uppercase letters.
?d are numbers
?s are special characters (all printable ASCII characters except those included in ?l, ?u, or ?d)
?a is full "printable" ASCII. Note that for formats that are not case-sensitive (e.g., LM), this designation includes only lowercase characters, which significantly reduces the key space (the number of possible password candidates), but still covers all possible variants available for a given hash type.
?B is all 8-bit (0x80-0xff)
?b is all (0x01-0xff) (the NULL character is currently not supported by the kernel).
?h are lowercase hexadecimal digits (0-9, a-f)
?H are upper case HEX digits (0-9, A-F)
?L are lowercase, non-ASCII letters
?U are uppercase letters, non-ASCII
?D are "numbers", non-ASCII
?S is for non-ASCII "special characters"
?A is all valid characters in the current code page (including ASCII). Note that for formats that do not recognize case (e.g. LM), this includes only lowercase characters, which greatly reduces the number of password candidates without compromising cracking.
Fillers that are user-defined, so we can, for example, set the value to ?1 and assign it a value, such as [?u?l]. In Hashcat, this is called "user-defined character sets".
?1 .. ?9 is a user-defined placeholder 1 . 9
Fillers for hybrid mask mode:
?w is in Hybrid Mask Mode denotes the source word created by the parent mode.
?W is like ?w except that the source word is case-sensitive (so PassWord becomes PASSWORD).

今回は、John the Ripperの用途の一つをざっと見てみましたが、決してそれだけではありません。

LinuxでJohnを使えない場合は、開発者が気を利かせて、WindowsやMacOSで使える可能性を加えてくれましたが、これはお勧めできません。興味のある方は、インターネット上にたくさんのガイドや記事があります。

以上、ここから先は誠意を持って対応してください この短い記事がどなたかのお役に立てれば幸いです。