この記事では、セキュリティテストやパスワード強度監査に不可欠なカスタムワードリストを作成できる強力なツール「Crunch」について詳しく解説します。Crunchを使えば、特定の文字セット、長さ、パターンに基づいて、可能性のある組み合わせや順列を生成できます。これにより、総当たり攻撃(ブルートフォースアタック)や辞書攻撃をより効率的に行うためのターゲットリストを作成することが可能です。💪
Crunchとは? 🤔
Crunchは、指定された基準に基づいてワードリスト(辞書ファイル)を生成するためのコマンドラインユーティリティです。最小長、最大長、使用する文字セット(小文字、大文字、数字、記号)を指定して、あらゆる可能な組み合わせの単語リストを作成できます。生成されたワードリストは、画面に表示したり、ファイルに保存したり、他のプログラム(John the RipperやHydraなど)にパイプで渡したりすることができます。
特に、パスワードクラッキングやペネトレーションテストの文脈で、特定のターゲットに対してより可能性の高いパスワード候補リストを作成する際に非常に役立ちます。例えば、「ターゲットが使いそうな特定の単語や数字を含んだ8文字のパスワード」といった条件でリストを生成できます。
インストール方法 💻
Crunchは、多くのペネトレーションテスト用Linuxディストリビューション(Kali Linuxなど)にはデフォルトでインストールされています。
もしインストールされていない場合や、他のLinuxディストリビューション(Debian/Ubuntu系など)で使用したい場合は、以下のコマンドでインストールできます。
sudo apt update
sudo apt install crunch
macOSの場合は、Homebrewを使ってインストールできます。
brew install crunch
ソースからコンパイルする場合は、公式サイト(SourceForgeなど)から最新版をダウンロードし、展開してから `make` と `make install` を実行します。
wget https://downloads.sourceforge.net/project/crunch-wordlist/crunch-wordlist/crunch-3.6.tgz
tar -xzvf crunch-3.6.tgz
cd crunch-3.6
make
sudo make install
インストール後、`crunch -h` または `man crunch` でヘルプやマニュアルを確認できます。
基本的な使い方 🚀
Crunchの基本的な構文は以下の通りです。
crunch <min> <max> [charset] [options]
- <min>: 生成する文字列の最小長(必須)
- <max>: 生成する文字列の最大長(必須)
- [charset]: 使用する文字セット(省略可能、省略時はデフォルトの小文字アルファベット)
- [options]: 様々なオプション(後述)
簡単な例
最小3文字、最大3文字の小文字アルファベットの組み合わせをすべて生成し、画面に出力します。
crunch 3 3
最小4文字、最大5文字で、文字セット「abc12」のみを使用した組み合わせを生成します。
crunch 4 5 abc12
最小1文字、最大2文字で、数字「012」と記号「@#」を使用した組み合わせを生成し、`output.txt`というファイルに保存します (`-o` オプション)。
crunch 1 2 012@# -o output.txt
注意: 生成されるワードリストのサイズは、文字長や文字セットのサイズによって指数関数的に増加します。非常に大きなリストを生成すると、ディスク容量を圧迫し、生成にも時間がかかる可能性があります。🤯
主要なオプション解説 🛠️
Crunchには多くのオプションがあり、生成プロセスを細かく制御できます。
オプション | 説明 | 例 |
---|---|---|
-o <ファイル名> |
生成されたワードリストを指定したファイルに出力します。`START`を指定すると、ファイルサイズや行数に応じて自動的に分割されます。 | crunch 4 4 abcd -o wordlist.txt |
-f <charset.lstのパス> <文字セット名> |
charset.lst ファイル(通常 `/usr/share/crunch/charset.lst` などにあります)から定義済みの文字セットを使用します。 |
crunch 4 4 -f /usr/share/crunch/charset.lst mixalpha-numeric-all-space |
-t <パターン> |
特定のパターンに基づいてワードリストを生成します。プレースホルダーを使用します:@ : 小文字アルファベット, : 大文字アルファベット% : 数字^ : 記号 (charset.lstのsymbolsで定義)固定文字も指定可能。パターンを使用する場合、minとmaxはパターンの長さと同じにする必要があります。 |
crunch 8 8 -t pass@@%% (例: pass followed by 2 lowercase and 2 numbers) |
-s <開始文字列> |
指定した文字列からワードリストの生成を開始します。中断した作業を再開する際に便利です(`-r` オプションと関連)。 | crunch 4 4 abcd -s bbaa (bbaaから生成開始) |
-b <サイズ>[単位] |
-o START と併用し、出力ファイルを指定したサイズで分割します。単位は `kb`, `mb`, `gb`, `kib`, `mib`, `gib` が利用可能です(数字と単位の間にスペースを入れない)。 |
crunch 6 8 -b 50mib -o START (50 MiB ごとにファイルを分割) |
-c <行数> |
-o START と併用し、出力ファイルを指定した行数で分割します。 |
crunch 1 1 abc -o START -c 2 (2行ごとにファイルを分割) |
-d <数字><記号> |
連続する同じ文字の数を制限します。`@`, `,`, `%`, `^` を使って対象の文字タイプを指定します。 | crunch 5 5 -d 2@ (小文字が3つ以上連続しない) |
-p <単語1> <単語2> ... |
指定された単語の順列(並び替え)を生成します。文字の組み合わせではなく、与えられた単語自体の並び替えです。min/maxは無視されますが指定は必要です。引数なしで使うと、指定した文字セットの文字の順列を生成します(重複なし)。 | crunch 1 1 -p pass word 123 (出力: pass, word, 123) |
-q <ファイル名> |
-p オプションと同様の動作をしますが、順列を生成する単語をファイルから読み込みます。 |
crunch 1 1 -q words.txt |
-z <形式> |
-o で出力するファイルを圧縮します。形式は `gzip`, `bzip2`, `lzma`, `7z` が利用可能です。 |
crunch 5 5 abcde -o words.gz -z gzip |
-i |
出力の順序を反転させます(最初の文字が頻繁に変わるようになります)。 | crunch 3 3 abc -i |
-l |
-t オプションで使用する @ , % ^ をリテラル文字(文字そのもの)として扱います。 |
crunch 5 5 -t @@a%% -l a@@a% (パターン内の ‘a’ は固定文字、’@’ と ‘%’ はリテラル) |
-r |
中断されたセッションを再開します。-o オプションで出力ファイルが指定されている必要があります。元のコマンドと同じオプション(`-s`を除く)を指定し、最後に `-r` を追加します。 |
crunch 4 4 abcd -o wordlist.txt -s bbaa (中断後) → crunch 4 4 abcd -o wordlist.txt -r |
-e <停止文字列> |
指定した文字列が生成されたら、処理を停止します。 | crunch 3 3 abc -e abc (abcを生成したら停止) |
実践的な使用例 ✨
例1: 特定のフォーマットのパスワード生成
8文字で、最初の文字が大文字、最後の2文字が数字、それ以外が小文字のパスワードリストを生成します。
crunch 8 8 -t ,@@@@@%% -o CapLowNum.txt
このコマンドは `CapLowNum.txt` というファイルに以下のような形式のパスワードを生成します: `Aaaaaa00`, `Aaaaaa01`, …, `Zzzzzz99`
例2: 特定の文字セットと長さでファイル分割
6文字から8文字の長さで、小文字、大文字、数字を使用し、出力ファイルを100MBごとに分割して `output_` プレフィックスで保存します。
crunch 6 8 abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789 -o START -b 100mb
これにより、`aaaaaa-xxxxxxxx.txt`, `yyyyyyyy-zzzzzzzz.txt` のようなファイル名のファイルが複数生成されます。
例3: charset.lst を利用した生成
Kali Linuxの `/usr/share/crunch/charset.lst` に定義されている `numeric` (数字のみ) と `special-1` (限定的な記号) を使って、5文字のパスワードリストを生成します。
# charset.lstの内容を確認(例)
# numeric = [0123456789]
# special-1 = [!@#$%]
crunch 5 5 -f /usr/share/crunch/charset.lst numeric -f /usr/share/crunch/charset.lst special-1 -o num_special.txt
`-f` オプションは複数回指定でき、指定された文字セットを結合して使用します。ただし、コマンドラインで直接文字セットを指定する方が一般的な場合もあります: `crunch 5 5 0123456789!@#$% -o num_special.txt`
例4: スペースを含む文字セット
文字セットにスペースを含めたい場合は、バックスラッシュ `\` でエスケープするか、文字セット全体を引用符 `”` で囲みます。
# バックスラッシュでエスケープ
crunch 4 4 abc\ 123 -o space_included.txt
# 引用符で囲む
crunch 4 4 "abc 123" -o space_included.txt
charset.lst ファイルについて 📄
`charset.lst` は、よく使われる文字セットの組み合わせを名前で定義しておくための設定ファイルです。通常、`/usr/share/crunch/` ディレクトリなどに配置されています。
ファイル形式はシンプルで、`名前 = [文字セット]` の形式で記述されます。
[...]
# Character sets are defined one per line in the form:
# name = [list of characters]
hex-lower = [0123456789abcdef]
hex-upper = [0123456789ABCDEF]
numeric = [0123456789]
lalpha = [abcdefghijklmnopqrstuvwxyz]
ualpha = [ABCDEFGHIJKLMNOPQRSTUVWXYZ]
lalpha-numeric = [abcdefghijklmnopqrstuvwxyz0123456789]
ualpha-numeric = [ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789]
mixalpha = [abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ]
mixalpha-numeric = [abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789]
symbols14 = [!@#$%^&*()-_+=]
symbols-all = [!@#$%^&*()-_+=~`[]{}|\:;"'<>,./?]
[...]
このファイルに自分でカスタムセットを追加することも可能です。`-f` オプションを使うことで、これらの定義済みセットを簡単に呼び出すことができます。
パフォーマンスと注意点 ⚠️
Crunchは強力なツールですが、使用には注意が必要です。
- ディスク容量: 生成されるワードリストは非常に巨大になる可能性があります。数GB、場合によってはTB単位になることもあります。実行前に必要なディスク容量を確認してください。
- 生成時間: 長い文字列長や複雑な文字セットを指定すると、生成には膨大な時間がかかることがあります。
- CPU負荷: ワードリスト生成はCPUリソースを消費します。
- 倫理的な使用: Crunchはパスワード強度監査や正当なセキュリティテストのために設計されています。許可なく他者のシステムやアカウントに対して生成したワードリストを使用することは、不正アクセス行為となり法律で禁止されています。 必ず倫理的な範囲内で、適切な許可を得て使用してください。🚫
`-b` や `-c` オプションを使ってファイルを分割したり、`-z` オプションで圧縮したりすることで、大きなワードリストを扱いやすくすることができます。
まとめ 🎉
Crunchは、カスタマイズ性の高いワードリストを生成するための非常に便利なツールです。基本的な使い方から、パターン指定、ファイル分割、文字セットの利用まで、様々なオプションを駆使することで、特定の要件に合わせた効率的なワードリスト作成が可能になります。
パスワード監査やセキュリティテストにおいて強力な武器となりますが、その能力を理解し、倫理的に正しく使用することが重要です。ぜひ、`man crunch` で詳細なマニュアルも参照してみてください。 Happy Crunching! 😄
参考情報
- Kali Linux Tools – crunch: https://www.kali.org/tools/crunch/
- Crunch SourceForge Project: https://sourceforge.net/projects/crunch-wordlist/
コメント