Nseclog

ペネトレーションテスターがセキュリティ検証内容を発信するブログ

John the RipperとHashcatの違いや使い分け方について

代表的なパスワードハッシュ値の解析ツールとして、John the RipperとHashcatがあります。 好みや知名度、情報量の多さなど様々な理由でどちらを使用するか選択されていると思いますが、両ツールには機能や性能について違いがあります。 しかし、公式サイトの説明だけではその違いが分かりづらいと感じたため、実際に検証した内容を紹介します。

ペネトレーションテスト脆弱性診断といった実際の業務はもちろん、VulnHubやHacking The Boxといったセキュリティ学習において、オフラインパスワードクラッキングを行う際の参考になれば幸いです。

※注意
本記事の内容は犯罪行為を助長するものではありません。サイバー空間の安心・安全な環境を確保する目的にのみ利用し、絶対に悪用しないでください。

忙しい人向けのまとめ

  • 両ツールとも主要OS(LinuxWindowsmacOS)、およびGPGPUに対応しているため、動作環境による優劣は少ない
  • 両ツールとも、片方のみがサポートするハッシュタイプが存在する
    • 解析対象のハッシュタイプを片方のツールのみがサポートしている場合は必然的にそちらを使用することになる
    • GPGPUに対応したハッシュタイプはHashcatの方が充実している
  • 解析対象のハッシュタイプを両ツールがサポートしている場合、辞書リストベースの攻撃はJohn the Ripper、総当たりベースの攻撃はHashcatで行うのが良さそう
    • John the Ripperの辞書リスト攻撃では、Jumboというカスタムルールが非常に便利
    • GPGPUによる総当り攻撃は、Hashcatの方が高速であることが多い

各ツールの概要

John the RipperとHashcatはいずれもオープンソースのハッシュ解析ツールです。主にパスワードハッシュ値から平文パスワードを特定する目的に使用されます。

John the Ripper

John the Ripperは、1996年にバージョン1.0がDOS向けにリリース1されたようです。 非常に古くから存在しているため、初期の頃の正確な情報は分かりませんでしたが、GitHubリポジトリは2011年12月に作成されており、少なくともそれ以降の変更履歴は調べることができます。

長い間、パスワードクラッキングツールの代名詞として存在しており、特にLinux環境での使用に関する情報が多い印象がありました。

ソースコードのライセンスは、GNU General Public License2です。

Hashcat

Hashcatは、oclHashcatという名称で2015年にオープンソース化されました。 このときから、GPGPUベースのハッシュ解析をサポートしており、世界最速を謳っています3

元々は、oclHashcatというGPGPUベースの解析に特化したツールと、HashcatというCPUベースの解析に特化したツール(現在もhashcat-legacyとしてリポジトリが残っています)に分かれていましたが、現在では統合されHashcatとして存在しています。

John the Ripperと比較すると後発ではあるものの、サポートするハッシュタイプが多い、解析速度が早い、などの印象がありました。

ソースコードのライセンスは、MITライセンス4です。

使用率アンケート?

「hashcat or john the ripper」などで検索してみると、以下のRedditの投稿がヒットします。

https://www.reddit.com/r/HowToHack/comments/r3b5xg/hashcat_or_john_the_ripper/

これは2021年11月に投稿された「HashcatかJohn the Ripperか?」というアンケートで、1,073票の投票があり、John the Ripperが48%、Hashcatが43%という結果になっています。

両ツールの投票数には思ったより差がないものの、若干John the Ripperの方が投票数が多く、昔から使用しているツールを気に入っている人が多いのかもしれません。

検証環境

本記事で検証に使用した端末のスペックと、各ツールのバージョンは以下のとおりです(記事執筆時点での最新版を使用しています)。

項目 内容
CPU AMD Ryzen 9 5900X 12-Core Processor
GPU NVIDIA GeForce RTX 3080
Memory 64GB
OS Windows 11(バージョン 22H2)
John the Ripper 1.9.0-jumbo-1 64-bit Windows binaries
Hashcat hashcat binaries v6.2.6

サポートする動作環境の比較

各ツールがサポートする動作環境や、各プロセッサで並列コンピューティングを行う際に使用するAPIは以下のとおりです。

比較項目 John the Ripper Hashcat
サポートするOS LinuxUnixWindowsmacOS、など LinuxWindowsmacOS
サポートするプロセッサ CPU、GPU CPU、GPU、APU など、OpenCLランタイムに付属するすべてのもの
CPUによる並列コンピューティング OpenCLOpenCLなしでも解析は可能) OpenCL
GPUNVIDIA)による並列コンピューティング OpenCL CUDA

サポートする動作環境については、いずれも主要なOS(LinuxWindowsmacOS)に対応しています。 また、GPGPUによるパスワードクラッキングといえばHashcatというイメージがありましたが、意外にもJohn the RipperGPGPUによるパスワードクラッキングを2012年にサポート5していたようです。 これらのことから、動作環境や扱えるプロセッサという観点では大きな差がないことが分かります。

なお、GPGPUによる並列処理を行う際のAPIには明確が違いがあり、John the RipperOpenCLを使用しますが、HashcatはCUDAを使用します。

サポートするハッシュタイプの比較

John the Ripperがサポートするハッシュタイプは、以下のコマンドで確認可能です。

C:\path\to\john-1.9.0-jumbo-1-win64\run> john.exe --list=formats
descrypt, bsdicrypt, md5crypt, md5crypt-long, bcrypt, scrypt, LM, AFS,
tripcode, AndroidBackup, adxcrypt, agilekeychain, aix-ssha1, aix-ssha256,
aix-ssha512, andOTP, ansible, argon2, as400-des, as400-ssha1, asa-md5,
AxCrypt, AzureAD, BestCrypt, bfegg, Bitcoin, BitLocker, bitshares, Bitwarden,
BKS, Blackberry-ES10, WoWSRP, Blockchain, chap, Clipperz, cloudkeychain,
[..snip..]

サポートするハッシュタイプの数を数えてみると全部で351種類ありました。 しかし、John the Ripperは同じハッシュタイプでもOpenCLの使用有無によって指定する文字列が異なります。 例えば、OpenCLを使用せずにNTLMハッシュを解析する場合、ハッシュタイプには「NT」を指定しますが、OpenCLを使用する場合は「NT-opencl」を指定するといった感じです。

一部例外はありますが、ハッシュタイプに「-opencl」と付与されているもののほとんどは重複しているため数から除外すると、John the Ripperがサポートするハッシュタイプの数は263種類となります。

ただし、ここで注意すべき点があります。 John the Ripperを用いてOpenCLによる解析を行う場合、上記の通りハッシュタイプは末尾に「-opencl」が付与されたものを指定する必要があります。 つまり、解析したい対象のハッシュタイプに「-opencl」が付与されたものがなければ、John the RipperはそのハッシュタイプについてOpenCLを用いた解析をサポートしていないということになります。

John the Ripperによる解析でOpenCLを使用しない場合は、一般的なペネトレーションテストで使用するほとんどのハッシュタイプがサポートされています。 しかし、GPUを用いた高速な解析処理を行おうとすると、比較的よく対象となるハッシュタイプであってもサポートされていない可能性があります。

私が眺めてみた限りでは、PKZIPやkrb5tgsなどのハッシュタイプについてOpenCLによる解析がサポートされていませんでした。

これに対して、Hashcatがサポートするハッシュタイプは以下のコマンドで確認可能です。

C:\path\to\hashcat-6.2.6> hashcat.exe --help
hashcat (v6.2.6) starting in help mode

Usage: hashcat [options]... hash|hashfile|hccapxfile [dictionary|mask|directory]...

[..snip..]

- [ Hash modes ] -

      # | Name                                                       | Category
  ======+============================================================+======================================
    900 | MD4                                                        | Raw Hash
      0 | MD5                                                        | Raw Hash
    100 | SHA1                                                       | Raw Hash
   1300 | SHA2-224                                                   | Raw Hash
   1400 | SHA2-256                                                   | Raw Hash
  10800 | SHA2-384                                                   | Raw Hash
   1700 | SHA2-512                                                   | Raw Hash
  17300 | SHA3-224                                                   | Raw Hash
  17400 | SHA3-256                                                   | Raw Hash
[..snip..]

こちらも数を数えてみたところ、サポートするハッシュタイプは全部で473種類でした。 John the Ripperとは異なり、Hashcatはこれらのハッシュタイプすべてにおいて、GPGPUによる解析が可能です。

GPGPUによる解析をサポートしているハッシュタイプの数はHashcatの方がかなり多いですが、John the RipperがサポートしているすべてのハッシュタイプをHashcatもサポートしているというわけではありません。 そのため、解析対象のハッシュタイプが片方のツールでのみサポートされている場合は、必然的にそちらのツールを選択することになりそうです。

各ツールのアタックモードについて

John the Ripperがサポートするアタックモードには、Wordlist mode、Single crack mode、Incremental mode、External modeなどがあります。各アタックモードの詳細は省きますが、辞書リストベースの攻撃や総当たり攻撃など一通り可能です。

一方で、Hashcatは、Straight mode、Combination mode、Brute-force mode、Hybrid mode、Association modeなどがあります。こちらも、John the Ripperと同様に辞書リストベースの攻撃や総当たり攻撃など一通り可能です。

いずれのツールも解析時のルールを細かく定義することが可能であり、使用感にも大きな差はありませんが、John the RipperにはJumboという独自のカスタムルールがあります。 これは辞書リストベースのパスワードクラッキングを行う際に、辞書リストに載っているパスワード候補をそのまま突合するだけでなく、パスワードの大文字小文字の組み合わせを変更したり、末尾に数字や記号を付与したりしてくれます。 これによって、辞書リストに載っている単語を少し変更しただけの平文パスワードを特定できる可能性が期待できるため、この機能が非常に便利だと感じました。

これらのことから、解析対象のハッシュタイプを両ツールがサポートしている場合、辞書リストベースの解析はJohn the Ripperを用い、細かなルールを定義した後の総当り攻撃(マスク攻撃)はHashcatを用いるなどの工夫をすることで、効率的かつ高速なパスワードクラッキングができそうです。

解析速度の比較

最後に、ペネトレーションテストで比較的よく解析対象となるハッシュタイプについて、John the RipperとHashcatで解析速度を比較してみました。

比較の条件は以下のとおりです。

  • 比較するハッシュタイプは、NTLM、krb5tgs、sha512cryptの3つ
  • 解析対象のパスワードは、ランダム文字列20文字(今回のルールでは解析不可)
  • 辞書リスト攻撃で使用する辞書ファイルは「rockyou.txt」(Jumboなどのカスタムルールは未適用)
  • 総当り攻撃のルールは、長さが8文字、文字種が小文字+数字

なお、解析終了まで30分以上かかる組み合わせについては、時間の都合上解析終了まで実施せず、ツールが表示する終了予想時間を記載しています。 そのため、実際の解析時間とは大きく異る可能性がある点、ご了承ください。

比較項目 John the Ripper Hashcat
NTLM(辞書リスト) Instant Instant
NTLM(総当り) 1min24secs 43secs
krb5tgs(辞書リスト) Instant(GPU非対応) Instant
krb5tgs(総当り) 2days5hrs(GPU非対応) 46mins
sha512crypt(辞書リスト) 1min31secs 58secs
sha512crypt(総当り) 198days5hrs 107days2hrs

krb5tgsについては、John the RipperOpenCLに対応していないためCPUによる解析を行っているのに対して、HashcatではGPUによる解析を行っているため、解析時間に大きく差があります。 それ意外の項目については、いずれもGPUによる解析を行っているものの、Hashcatの方が全体的に高速であることを確認できます。

これらのことからも、解析対象のハッシュタイプを両ツールがサポートしている場合における総当り攻撃については、基本的にHashcatで行う方が効率が良さそうです。

おわりに

各ツールの使い分け方に関する全体のまとめとしては、冒頭の忙しい人向けのまとめに記載しているとおりです。

両ツールとも得意不得意があるため、適材適所で組み合わせることによって、効率的かつ高速なパスワードクラッキングを行うことができます。

個人で用意できる検証環境に限界があり、今回は単体のGPUによる検証を行いましたが、HashcatはマルチGPU環境における解析も強みです。 速度比較で検証したハッシュタイプも3種類、2ルールと少なく、その他にも比較しきれていない部分は多々ありますが、セキュリティ学習などの参考になれば幸いです。

参考文献