CeWL (Custom Word List generator) 徹底解説

Webサイトからカスタムワードリストを生成するツール

CeWL(「クール」と発音します)は、指定されたURLを探索(スパイダリング)し、サイト内で使用されている単語を収集してリスト化するRuby製のアプリケーションです。主にペネトレーションテストやセキュリティ監査の文脈で、ターゲット固有のパスワード辞書を作成する目的で使用されます。例えば、企業のWebサイトから収集した単語リストは、その企業に関連するパスワードを推測する際の辞書攻撃に利用されることがあります。これにより、一般的な辞書ファイルよりも効果的な攻撃が可能になる場合があります。

CeWLは、Rubyアプリとして開発されており、Robin Wood氏によって作成・メンテナンスされています。 PaulDotComのポッドキャスト(エピソード129)で、ターゲットのWebサイトをスパイダリングして独自の単語リストを作成するという議論をきっかけに開発されました。

生成されたワードリストは、John the Ripper、Hashcat、Hydra、Medusaといったパスワードクラッキングツールと組み合わせて使用されることが想定されています。

CeWLの主な機能

  • Webサイトのクロール: 指定されたURLからリンクを辿り、Webページを収集します。クロールする深さ(階層)を指定できます。
  • 単語の抽出: HTMLコンテンツから単語を抽出し、リスト化します。
  • 単語長のフィルタリング: 抽出する単語の最小長(デフォルトは3文字)や最大長を指定できます。
  • 外部サイトへのクロール: オプションで、リンク先の外部サイトもクロール対象に含めることができます。
  • メタデータの抽出: PDFやOfficeドキュメントなどのファイルから、作成者情報などのメタデータを抽出できます。
  • メールアドレスの抽出: mailto: リンクなどからメールアドレスを抽出し、リスト化できます。これはユーザー名のリストとしても利用可能です。
  • 出力オプション: 抽出した単語リスト、メタデータ、メールアドレスをそれぞれファイルに出力できます。
  • 認証・プロキシ対応: Basic認証やDigest認証が必要なサイト、プロキシ経由でのアクセスにも対応しています。
  • 大文字/小文字の扱い: 抽出した単語をすべて小文字に変換するオプションがあります。
  • 数字を含む単語: 数字を含む単語を抽出対象に含めるかどうかのオプションがあります。
  • 単語の出現回数表示: 各単語が何回出現したかを表示するオプションがあります。

CeWLには、関連ツールとして FAB (Files Already Bagged) も含まれています。FABは、ダウンロード済みのファイル(Office文書やPDFなど)からメタデータ(作成者情報など)を抽出し、ユーザー名の候補リストを作成するためのツールです。CeWLが生成したパスワード候補リストと組み合わせて利用されることがあります。

インストール方法

CeWLは多くのペネトレーションテスト用Linuxディストリビューション、特にKali Linuxにはデフォルトでインストールされています

もし、お使いの環境にCeWLがインストールされていない場合や、他のOS(Ubuntu, macOS, Windows上のWSLなど)で利用したい場合は、以下の手順でインストールできます。CeWLはRubyで書かれているため、RubyおよびRubyGemsが事前にインストールされている必要があります。

依存関係

CeWLの実行には、以下のRubyライブラリ(gem)が必要です:

ruby rubygems nokogiri mime-types mini_exiftool rubyzip spider ruby-net-http-digest_auth

さらに、mini_exiftool gemは、システムにexiftoolアプリケーションがインストールされている必要があります。これは通常、各OSのパッケージマネージャでインストールできます。

# Debian/Ubuntu系の場合
sudo apt update
sudo apt install ruby ruby-dev build-essential libgmp-dev zlib1g-dev liblzma-dev patch libcurl4-openssl-dev libxml2-dev libxslt1-dev pkg-config exiftool -y

インストール手順

RubyGemsを使ってインストールするのが一般的です:

sudo gem install cewl

あるいは、GitHubリポジトリからソースコードをクローンし、Bundlerを使って依存関係をインストールすることも可能です。

git clone https://github.com/digininja/CeWL.git
cd CeWL
gem install bundler
bundle install

Kali Linuxでパッケージとしてインストールする場合:

sudo apt update
sudo apt install cewl

Dockerでの利用

Dockerがインストールされていれば、コンテナを使ってCeWLを実行することもできます。

# Dockerイメージのビルド
git clone https://github.com/digininja/CeWL.git
cd CeWL
docker build -t cewl .

# コンテナの実行 (ローカルファイルアクセスなし)
docker run -it --rm cewl [オプション] ... <url>

# コンテナの実行 (ローカルファイルアクセスあり - カレントディレクトリをマウント)
docker run -it --rm -v "${PWD}:/host" cewl [オプション] ... <url>

基本的な使い方

最も基本的な使い方は、cewlコマンドの後に対象のURLを指定するだけです。これにより、指定したURLのWebページから単語が抽出され、標準出力に表示されます。デフォルトでは、深度2(指定したページと、そこから1回リンクを辿ったページ)までクロールし、3文字以上の単語を抽出します。

cewl http://example.com

上記のコマンドを実行すると、http://example.comとそのサイト内のリンク先(深度2まで)から収集された単語のリストがターミナルに出力されます。

ファイルへの出力

多くの場合、生成されたワードリストをファイルに保存して、他のツールで利用したいでしょう。-w または --write オプションを使用します。

cewl http://example.com -w wordlist.txt

このコマンドは、抽出した単語リストを wordlist.txt という名前のファイルに保存します。

主要なオプション解説

CeWLには多くのオプションがあり、挙動を細かく制御できます。以下に主要なオプションを説明します。

オプション 省略形 説明 デフォルト値
--help -h ヘルプメッセージを表示します。
--depth <x> -d <x> スパイダーが辿るリンクの深さ(階層)を指定します。 2
--min_word_length <x> -m <x> 抽出する単語の最小文字数を指定します。 3
--max_word_length <x> -x <x> 抽出する単語の最大文字数を指定します。 指定なし
--offsite -o 指定したURL以外の外部サイトへのリンクも辿るようにします。 注意: 意図せず広範囲なクロールになる可能性があります。 無効
--write <file> -w <file> 抽出した単語リストを指定したファイルに書き込みます。 標準出力
--ua <agent> -u <agent> HTTPリクエスト時に送信するUser-Agent文字列を指定します。 CeWLのデフォルト値
--no-words -n 単語リストを出力しません(メタデータやメールアドレスのみ抽出する場合などに使用)。 単語リストを出力
--lowercase 抽出した単語をすべて小文字に変換します。 変換しない
--with-numbers 数字を含む単語も抽出対象とします(例: “product123″)。 数字を含まない単語のみ
--convert-umlauts ウムラウトなどの特定のISO-8859-1文字をASCII相当の文字に変換します (ä→ae, ö→oe, ü→ue, ß→ss)。 変換しない
--meta -a ドキュメントファイル(PDF, Officeなど)からメタデータ(作成者情報など)を抽出します。exiftoolが必要です。 抽出しない
--meta_file <file> 抽出したメタデータを指定したファイルに書き込みます。 標準出力 (--meta指定時)
--email -e ページ内からメールアドレスを抽出します。 抽出しない
--email_file <file> 抽出したメールアドレスを指定したファイルに書き込みます。 標準出力 (--email指定時)
--count -c 各単語の出現回数を表示します。リストは回数順にソートされます。 表示しない
--verbose -v 詳細な処理情報を表示します。デバッグに役立ちます。 無効
--debug さらに詳細なデバッグ情報を表示します。 無効
--auth_type <type> 認証タイプを指定します (basic または digest)。
--auth_user <user> 認証に使用するユーザー名を指定します。
--auth_pass <pass> 認証に使用するパスワードを指定します。
--proxy_host <host> プロキシサーバーのホスト名を指定します。
--proxy_port <port> プロキシサーバーのポート番号を指定します。 8080
--proxy_username <user> プロキシ認証が必要な場合のユーザー名を指定します。
--proxy_password <pass> プロキシ認証が必要な場合のパスワードを指定します。
--header, -H <header:value> -H カスタムHTTPヘッダーを追加します (例: -H "Cookie: sessionid=123")。複数指定可能です。
--keep -k ダウンロードしたファイルを保持します。 保持しない
--exclude <file> クロール対象から除外するパスのリストを含むファイルを指定します。
--allowed <regex> クロールを許可するパスの正規表現パターンを指定します。
--meta-temp-dir <dir> メタデータ抽出時にexiftoolが使用する一時ディレクトリを指定します。 /tmp

実践的な利用例

例1: 基本的なクロールとファイル保存

指定したサイトを深度2、最小単語長5文字でクロールし、結果を docs.txt に保存します。

cewl -d 2 -m 5 -w docs.txt https://example.com

例2: メアドとメタデータの抽出

深度1でクロールし、単語リストは出力せず、メールアドレスとメタデータを抽出し、それぞれ別のファイルに保存します。

cewl https://target-site.com -d 1 -n -e --email_file emails.txt -a --meta_file metadata.txt

例3: Basic認証が必要なサイトへのアクセス

Basic認証が必要なサイトに対して、ユーザー名とパスワードを指定してクロールします。

cewl --auth_type basic --auth_user admin --auth_pass password123 -w auth_words.txt https://secure.example.com

例4: プロキシ経由でのアクセス

プロキシサーバー proxy.local:8080 を経由してサイトにアクセスします。

cewl --proxy_host proxy.local --proxy_port 8080 -w proxy_words.txt https://internal.example.com

例5: 詳細表示と単語カウント

クロールプロセスを詳細に表示し、各単語の出現回数をカウントしてファイルに出力します。

cewl -v -c -w counted_words.txt https://blog.example.com

例6: 数字を含む単語と小文字化

数字を含む単語も抽出し、すべて小文字に変換してワードリストを作成します。

cewl --with-numbers --lowercase -w alphanumeric_lower.txt https://techforum.example.com

高度な使い方と注意点

効果的なターゲット選定

CeWLの効果は、ターゲットとするWebサイトの選定に大きく依存します。従業員のブログ、会社の「会社概要」や「製品情報」ページ、技術ドキュメント、フォーラムなど、ターゲット組織に関連する固有の単語が多く含まれていそうなページを選ぶことが重要です。

他のツールとの連携

CeWLで生成したワードリストは、そのままパスワードクラッキングツール(John the Ripper, Hashcatなど)やブルートフォースツール(Hydra, Medusaなど)の辞書ファイルとして利用できます。より効果的なパスワードクラックのためには、CeWLで生成したリストに、一般的な辞書リスト(例: RockYou)や、他のルールベースの単語生成(例: Crunch)を組み合わせることも有効です。

# CeWLでリスト生成
cewl -d 3 -m 6 -w cewl_list.txt https://target.example.com

# HashcatでCeWLリストを使ってクラック試行
hashcat -m 0 -a 0 hashfile.txt cewl_list.txt

# HydraでCeWLリストを使ってログイン試行
hydra -L users.txt -P cewl_list.txt target.example.com http-post-form "/login.php:user=^USER^&pass=^PASS^:F=Login Failed"

クロール深度と範囲の注意

-d (深度)オプションを大きく設定したり、-o (外部サイト許可)オプションを使用すると、クロール範囲が非常に広くなり、時間とリソースを大量に消費する可能性があります。また、意図しないサイトへ大量のリクエストを送ることになりかねません。これらのオプションは慎重に使用してください。--exclude--allowed オプションでクロール範囲を適切に制限することも検討しましょう。

法的・倫理的な側面

CeWLを含むあらゆるセキュリティツールは、必ず許可された環境、または自身の管理下にある環境に対してのみ使用してください。許可なく第三者のWebサイトをクロールしたり、取得した情報で不正アクセスを試みることは、法律で禁止されており、重大な結果を招く可能性があります。

まとめ

CeWLは、特定のターゲットに合わせたカスタムワードリストを効率的に生成するための非常に強力なツールです。Webサイトのコンテンツから関連性の高い単語を抽出することで、一般的な辞書攻撃よりも成功率の高いパスワードクラックやブルートフォース攻撃を可能にします。

豊富なオプションにより、クロール範囲、単語のフィルタリング、メタデータやメールアドレスの抽出など、様々なニーズに対応できます。ペネトレーションテストやセキュリティ評価において、ターゲットに関する情報を活用したパスワード推測は重要な手法の一つであり、CeWLはそのプロセスを自動化し、効率化する上で大きな助けとなります。

ただし、その強力さゆえに、使用には法的・倫理的な配慮が不可欠です。常に許可された範囲内で、責任ある使い方を心がけましょう。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です