はじめに
ペネトレーションテストやセキュリティ監査では、ハッシュのセットに対して複数のパスワードクラッキング技術を試すことが一般的です。各コマンドを手動で実行するのは時間がかかり、非効率的です。Bash スクリプトは、このプロセスを自動化するための強力な方法を提供し、パスワードが見つかるまで順番に実行される攻撃チェーンを作成します。
この実験では、人気があり強力なパスワードリカバリツールである hashcat を使用して一連の攻撃を自動化する Bash スクリプトを作成します。まず辞書攻撃を試み、次にルールベース攻撃、そして最後にマスク攻撃を実行するようにスクリプトを構成する方法を学びます。この実践的な経験により、サイバーセキュリティのコンテキストにおける自動化の基本を習得できます。
この実験を完了すると、以下のことができるようになります。
- Bash スクリプトを作成し、実行可能にする。
hashcatコマンドのシーケンスをスクリプトに追加する。hashcatの異なる攻撃モードを理解し、実装する。- スクリプトを実行してワークフローを自動化する。
新しい Bash スクリプトファイルの作成
このステップでは、空の Bash スクリプトファイルを作成し、必要な shebang 行を追加して、実行可能にします。Bash スクリプトは、一連のコマンドを含むプレーンテキストファイルです。スクリプトの先頭にある shebang (#!/bin/bash) は、ファイル内のコマンドを実行するためにどのインタプリタを使用するかをシステムに指示します。
まず、touch コマンドを使用して、~/project ディレクトリに attack.sh という名前の新しいファイルを作成します。
touch attack.sh
次に、nano テキストエディタでファイルを開き、shebang 行を追加します。
nano attack.sh
nano エディタ内で、ファイルの一番上に次の行を追加します。これは、このファイルを Bash スクリプトとして宣言します。
#!/bin/bash
Ctrl+X、次に Y、そして Enter を押してファイルを保存し、nano を終了します。
最後に、スクリプトをプログラムとして実行できるように、実行権限を与える必要があります。これを行うには、+x フラグを付けて chmod コマンドを使用します。
chmod +x attack.sh
ls -l を使用して権限を確認できます。attack.sh の権限ブロックに 'x' が表示されるはずです。
ls -l attack.sh
期待される出力:
-rwxr-xr-x 1 labex labex 12 May 20 10:00 attack.sh
辞書攻撃のための Hashcat コマンドの追加
このステップでは、スクリプトに最初のコマンドである辞書攻撃を追加します。これは、最も一般的で効果的なパスワードクラッキング方法の 1 つです。指定されたリスト(辞書)のすべての単語を潜在的なパスワードとして試します。
この攻撃を実行するために hashcat を使用します。実験環境には、ハッシュファイル hashes.txt と単語リスト wordlist.txt が事前に設定されています。
nano を使用して attack.sh スクリプトを再度開きます。
nano attack.sh
#!/bin/bash 行の下に、次の hashcat コマンドを追加します。
hashcat -m 0 -a 0 /home/labex/project/hashes.txt /home/labex/project/wordlist.txt
このコマンドの内訳を見てみましょう。
hashcat: 実行するプログラムです。-m 0: ハッシュタイプを指定します。0は MD5 に対応します。-a 0: 攻撃モードを指定します。0はストレート辞書攻撃に対応します。/home/labex/project/hashes.txt: クラックするハッシュが含まれるファイルです。/home/labex/project/wordlist.txt: 攻撃に使用する辞書ファイルです。
これで、attack.sh ファイルは次のようになります。
#!/bin/bash
hashcat -m 0 -a 0 /home/labex/project/hashes.txt /home/labex/project/wordlist.txt
Ctrl+X、次に Y、そして Enter を押して保存し、終了します。現時点ではスクリプトを構築しているだけで、最終ステップまで実行しません。
ルールベース攻撃のための 2 番目のコマンドの追加
このステップでは、スクリプトに 2 番目の攻撃を追加します。辞書攻撃が失敗した場合、ルールベース攻撃は次に論理的なステップとなることがよくあります。この攻撃は、単語リストを取得し、各単語に一連のルールを適用して新しいパスワード候補を生成します。たとえば、ルールはすべての単語に「123」を追加したり、最初の文字を大文字にしたりする場合があります。
このデモンストレーションのために、別の単語リスト wordlist_for_rule.txt と簡単なルールファイル rules.txt を用意しました。
再度 nano で attack.sh を開きます。
nano attack.sh
辞書攻撃コマンドの後に、新しい行に次のコマンドを追加します。
hashcat -m 0 -a 0 /home/labex/project/hashes.txt /home/labex/project/wordlist_for_rule.txt -r /home/labex/project/rules.txt
このコマンドの新しい部分は次のとおりです。
-r /home/labex/project/rules.txt: このフラグは、指定されたファイルで定義されたルールを適用するようにhashcatに指示します。
これで、attack.sh スクリプトには 2 つの hashcat コマンドが含まれるようになります。
#!/bin/bash
hashcat -m 0 -a 0 /home/labex/project/hashes.txt /home/labex/project/wordlist.txt
hashcat -m 0 -a 0 /home/labex/project/hashes.txt /home/labex/project/wordlist_for_rule.txt -r /home/labex/project/rules.txt
Ctrl+X、Y、Enter を押して変更を保存します。スクリプトは実行時にこれらのコマンドを順番に実行するようになります。
マスク攻撃のための 3 番目のコマンドの追加
このステップでは、スクリプトに最後の攻撃方法であるマスク攻撃を追加します。この方法はブルートフォース攻撃としても知られており、パスワードの長さや含まれる文字の種類など、パスワードの構造について何かを知っている場合に役立ちます。
マスクは構造を定義します。たとえば、?l は小文字、?u は大文字、?d は数字、?s は特殊文字を表します。
最後に nano で attack.sh を開きます。
nano attack.sh
スクリプトの末尾の新しい行に、次のマスク攻撃コマンドを追加します。このマスク ?l?l?l?l?l?l?l?l は、8 文字の小文字パスワードのすべての組み合わせを試行します。
hashcat -m 0 -a 3 /home/labex/project/hashes.txt ?l?l?l?l?l?l?l?l
このコマンドの重要な部分は次のとおりです。
-a 3: これは攻撃モードを3に設定します。これはマスク攻撃です。?l?l?l?l?l?l?l?l: これはマスク自体であり、テストするパスワード構造を定義します。
これで、完全な attack.sh スクリプトは次のようになります。
#!/bin/bash
hashcat -m 0 -a 0 /home/labex/project/hashes.txt /home/labex/project/wordlist.txt
hashcat -m 0 -a 0 /home/labex/project/hashes.txt /home/labex/project/wordlist_for_rule.txt -r /home/labex/project/rules.txt
hashcat -m 0 -a 3 /home/labex/project/hashes.txt ?l?l?l?l?l?l?l?l
Ctrl+X、Y、Enter を押してファイルを保存し、nano を終了します。これで、自動化された攻撃スクリプトが完成しました。
スクリプトを実行して攻撃チェーンを自動実行する
最終ステップでは、作成したスクリプトを実行します。./attack.sh を実行すると、シェルは内部のコマンドを一つずつ実行します。hashcat は賢く、ハッシュをクラックすると、その結果を「potfile」(~/.local/share/hashcat/hashcat.potfile)に保存し、再度クラックしようとはしません。
これで、ターミナルからスクリプトを実行します。
./attack.sh
スクリプトは最初の hashcat コマンドを開始します。wordlist.txt に正しいパスワード(「password」)が含まれているため、最初の攻撃は成功します。初期化および実行中の hashcat からの出力が表示されます。
成功した実行では、「Cracked」ステータスが表示されます。パスワードは最初のステップで見つかるため、hashcat はそれを potfile に追加します。スクリプト内の後続のコマンドは実行されますが、hashcat はハッシュが既にクラックされていることを認識し、スキップします。
クラックされたパスワードを表示するには、hashcat の --show オプションを使用できます。
hashcat -m 0 --show /home/labex/project/hashes.txt
このコマンドは、入力ファイルに対応するクラックされたハッシュを potfile でチェックし、それらを表示します。
期待される出力:
5f4dcc3b5aa765d61d8327deb882cf99:password
おめでとうございます!パスワードクラッキング攻撃のチェーンを自動化する Bash スクリプトを作成し、実行することに成功しました。
まとめ
この実験では、Bash スクリプティングを使用してセキュリティタスクを自動化する基本を学びました。複数の hashcat パスワードクラッキング技術を連鎖させるスクリプトを正常に作成しました。
まず、新しい Bash スクリプトファイルを作成し、実行可能にしました。次に、辞書攻撃、ルールベース攻撃、マスク攻撃のコマンドを段階的に追加しました。最後に、スクリプトを実行して実際に動作を確認し、hashcat が最初の段階で効率的にパスワードを見つけ、結果を記録する方法を観察しました。
練習した主なスキルは次のとおりです。
- 基本的な Bash スクリプト作成(
touch、chmod、shebang)。 - 異なる攻撃モード(
-a 0、-a 3)でのhashcatの使用。 - 辞書攻撃、ルールベース攻撃、マスク攻撃の実装。
- コマンドのシーケンスを自動化して効率的なワークフローを作成すること。
このスクリプティングと自動化のアプローチは、サイバーセキュリティ、システム管理、およびその他の多くの IT 分野における中核的なスキルであり、複雑で反復的なタスクを単一のコマンドで実行できます。


