Hashcat ハッシュの基礎

LinuxBeginner
オンラインで実践に進む

はじめに

ハッシュ化とパスワードクラッキングの世界へようこそ!ハッシュ化は、データの完全性を検証し、パスワードを安全に保存するために使用される、サイバーセキュリティにおける基本的な概念です。ハッシュ関数は、入力(パスワードなど)を受け取り、固定サイズのバイト列であるハッシュを返します。このプロセスは一方向(one-way)になるように設計されており、元の入力を容易に逆算することはできません。

Hashcat は世界的に有名で強力なパスワードリカバリツールです。これを効果的に使用する前に、ハッシュとは何か、そしてそれらをどのように扱うかという基本を理解する必要があります。

この実験(Lab)では、ハッシュ化の基礎概念を学びます。一般的なハッシュタイプを探求し、独自のハッシュを生成し、Hashcat で使用できるように準備し、パスワードとそのハッシュとの重要な違いを理解します。この知識は、Hashcat を習得するための旅における最初の不可欠なステップです。

一般的なハッシュタイプ(MD5、SHA1、NTLM)を理解する

このステップでは、サイバーセキュリティの分野で頻繁に遭遇する 3 つの一般的なハッシュタイプ、MD5、SHA1、および NTLM について学習します。このステップで実行するコマンドはありません。目標は、これらの核となる概念を理解することです。

  • ハッシュとは?
    ハッシュとは、データの一部から生成される、一意で固定長の文字列です。ハッシュアルゴリズムは一方向関数(one-way function)として設計されており、ハッシュだけから元の入力データを復元することは計算上不可能です。

  • MD5 (Message Digest 5)
    MD5 は最も古く、最も広く知られているハッシュアルゴリズムの 1 つです。128 ビット(32 文字の 16 進数)のハッシュ値を生成します。かつてはパスワード保存に広く使用されていましたが、現在では「衝突(collision)」(異なる 2 つの入力が同じハッシュを生成すること)に対して脆弱性があるため、その目的での使用は安全ではないと見なされています。今日では、主にファイル転送中にファイルが改ざんされていないことを確認するためのファイル完全性検証に使用されます。

  • SHA-1 (Secure Hash Algorithm 1)
    SHA-1 は MD5 の後継として開発されました。160 ビット(40 文字の 16 進数)のハッシュを生成します。MD5 と同様に、SHA-1 も発見された脆弱性のため、暗号化目的での使用はもはや安全とは見なされていません。しかし、古いシステムやレガシーアプリケーションでは依然として見られます。

  • NTLM (NT LAN Manager)
    NTLM は、Microsoft Windows がユーザーパスワードを保存するために使用するハッシュアルゴリズムです。Windows システムでパスワードを設定すると、それは NTLM ハッシュに変換されて保存されます。これらは、Windows 環境が関わるペネトレーションテストの業務において一般的なターゲットとなります。

これらのタイプを理解することは、ハッシュを識別し、それをクラックするための正しい方法を選択するための最初のステップです。

'echo' と 'md5sum' を使用して文字列から MD5 ハッシュを作成する

このステップでは、単純なテキスト文字列から MD5 ハッシュを生成します。これは、コマンドラインから少量のデータを素早くハッシュ化するための一般的なタスクです。ここでは、2 つの標準的な Linux ユーティリティである echomd5sum を使用します。

まず、これらのツールについて理解しましょう。

  • echo: このコマンドはテキスト行を表示するために使用されます。
  • md5sum: このコマンドは MD5 メッセージダイジェストを計算し、チェックします。
  • | (パイプ): この演算子は、左側のコマンドの出力を右側のコマンドへの入力として送信します。

文字列 password123 をハッシュ化します。echo-n フラグを使用することが重要です。これは、echo に末尾の改行文字を出力しないように指示します(改行文字が含まれるとハッシュ計算に影響し、異なる結果になるためです)。

ターミナルで次のコマンドを実行してください。

echo -n "password123" | md5sum

以下のような出力が表示されます。長い文字の文字列が "password123" の MD5 ハッシュであり、-md5sum がファイルではなく標準入力(パイプ)から入力を読み取ったことを示しています。

482c811da5d5b4bc6d497ffa98491e38  -

これで、最初のハッシュを正常に作成できました!

単一のターゲットハッシュを含むテキストファイルを用意する

このステップでは、生成したハッシュを保存するためのファイルを作成します。Hashcat などのパスワードクラッキングツールは通常、直接文字列を入力するのではなく、1 つ以上のハッシュを含むファイルで動作します。これにより、一度に多くのハッシュをターゲットにすることができます。

前のステップで生成した password123 の MD5 ハッシュ(482c811da5d5b4bc6d497ffa98491e38)を使用します。

再度 echo コマンドを使用できますが、今回は出力リダイレクト演算子 > を使用して、文字列を target_hash.txt という名前の新しいファイルに書き込みます。このコマンドは、現在のディレクトリ(~/project)にファイルを作成します。

ファイルを作成するために次のコマンドを実行します。

echo "482c811da5d5b4bc6d497ffa98491e38" > target_hash.txt

次に、ファイルが正しく作成され、ハッシュが含まれていることを確認します。cat コマンドを使用してファイルの内容を表示します。

cat target_hash.txt

出力はハッシュそのものであるはずです。

482c811da5d5b4bc6d497ffa98491e38

これで、Hashcat のようなクラッキングツールですぐに使用できる、適切にフォーマットされたターゲットファイルが用意できました。

Hashcat のヘルプから MD5 の正しいハッシュモードを特定する

このステップでは、Hashcat で特定のハッシュタイプに対応する正しいモードを見つける方法を学びます。Hashcat は数百種類の異なるハッシュアルゴリズムをサポートしており、どのタイプのハッシュをクラックしようとしているのかを正確に伝える必要があります。これは数値の「ハッシュモード」を使用して行われます。

正しいモードを見つけるには、Hashcat に組み込まれているヘルプメニューを使用できます。hashcat --help を実行すると、サポートされているすべてのハッシュタイプとその対応するモードの非常に長いリストが表示されます。必要なものを素早く見つけるために、この出力を grep コマンドにパイプして "md5" を検索できます。

MD5 ハッシュモードを検索するために次のコマンドを実行します。

hashcat --help | grep -i "md5"

grep-i フラグは、検索を大文字・小文字を区別しないようにします。MD5 には多くのバリエーションがあるため、多くの出力が表示されます。最も基本的なものを探してください。

...
      0 | MD5                                            | Raw Hash
...
   2410 | Cisco-ASA MD5                                  | Operating System
...

出力からわかるように、標準的な生の MD5 ハッシュのハッシュモードは 0 です。これは、MD5 ハッシュをクラックしていることを Hashcat に伝えるために -m フラグ(例:-m 0)と共に提供する数値です。

ハッシュとパスワードの違いを理解する

この最終ステップでは、パスワードとそのハッシュの決定的な違いを再確認します。これはパスワードクラッキングにおける基本的な概念です。

  • パスワード (Password) は、秘密の、人間が読める文字列です。私たちの例では password123 です。
  • ハッシュ (Hash) は、パスワードから生成された、スクランブルされた固定長の文字列です。私たちの例では 482c811da5d5b4bc6d497ffa98491e38 です。

パスワードクラッキングは、ハッシュを逆変換するわけではありません。代わりに、候補となるパスワードのリスト(ワードリスト)を取り出し、それぞれをハッシュ化し、その結果をターゲットハッシュと比較することで機能します。一致した場合、パスワードが見つかったことになります。

これを説明するために、簡単なワードリストファイルを作成します。実際のシナリオでは、このファイルには数百万のパスワード候補が含まれます。この実験(Lab)では、正しいパスワードが 1 つだけ含まれます。

元のパスワードを含む potential_passwords.txt という名前のファイルを作成します。

echo "password123" > potential_passwords.txt

次に、準備した 2 つのファイルを見てみましょう。ls コマンドを使用して、ディレクトリ内のファイルを確認します。

ls
potential_passwords.txt  target_hash.txt

クラック対象のハッシュを含む target_hash.txt と、テストするパスワードを含む potential_passwords.txt があります。この分離が、パスワードクラッキングツールの動作方法の鍵となります。

まとめ

この実験(Lab)の完了、おめでとうございます!Hashcat のようなツールを使用する前に必要となる、ハッシュに関する基本的な概念を習得しました。

この実験では、以下のことを行いました。

  • MD5、SHA-1、NTLM のような一般的なハッシュタイプの背後にある概念を学びました。
  • echo コマンドと md5sum コマンドを使用して、文字列から MD5 ハッシュを生成しました。
  • クラッキングツールにとって標準的な形式であるターゲットハッシュファイルを用意しました。
  • hashcat --help コマンドを使用して、MD5 の正しいハッシュモードを特定しました。
  • パスワードとその対応するハッシュとの決定的な違いについての理解を深めました。

この基礎知識があれば、これらのファイルと概念を使用して、Hashcat による実際のパスワードクラッキング攻撃を実行する、より高度な実験(Lab)に進む準備が整いました。