🐉

ハッキング・ラボで遊ぶために辞書ファイルを鍛える本 をやってみた

2024/09/16に公開

はじめに

TryHackMeを始めたものの、辞書攻撃を行う中で、使う辞書やツールの選定に迷うことが多かった。
行数が多い大きな辞書は、網羅性があるが時間がかかるし、行数が少ない小さな辞書は、短時間で解析が完了する代わりに解析の精度が低下する可能性がある。
辞書本体もどこから選べばいいかなとなっていた時に、電子版「ハッキング・ラボで遊ぶために辞書ファイルを鍛える本」を、以前購入したのを思い出した。

IPUSIRON氏著の本書は、パスワード解析に用いる辞書ファイルを主体で扱った本であり、辞書ファイルの自作方法や強化方法が解説されている。ちょうどいい機会だと思い、手を動かしながら読み進めることにした。
本書はBoothで購入できる。正誤表は、IPUSIRON氏のブログ記事にて公開されている。

https://hack.booth.pm/items/1933611

https://akademeia.info/?page_id=22508

本書の感想

辞書ファイルの作成方法や強化方法が詳細に解説されていて、手を動かしてツールを触るのが楽しかった。今までは漫然とrockyou.txtやseclist内のファイルを選びがちだったが、本書を通じて解析効率を上げるための様々なアプローチを試せたのでよかった。

また本書の2.3節で「初心者は辞書攻撃と総当たり攻撃の実践力の習得に注力してほしい。中級者は攻撃の組合せや応用的な解析手法の習得を目指してほしい。上級者は最新研究の論文の理解や解析手法の提案・ツールの開発に挑戦してほしい。」と書かれていた。上級者となる熟練の方々が、日々研究や開発をしてくださっているおかげで、今日たくさんの理論やツールを活用できるのだと有難みを実感した。

本書を通じて「なんのためにこの手段をとるのか」「このツールは今使えるのか」「ツールの特徴・強み・弱みは何か」「代わりのアプローチや改良する手段はあるか」「自作で同等機能を実現可能か」などを考える重要性を認識できた。
辞書に限らずだが、目的や特性を言語化できる状態で使うことが、ツールを使いこなす側とツールに使われる側の分岐点かもしれないと感じた。

最後に、本書はパスワード解析に係る攻撃の解説や辞書ファイルの運用法、rockyouファイルの考察など、辞書ファイル自体をかなり深掘りした内容になっている。セキュリティに興味のある方や、ハッキングラボの書籍を手に取った方は本書に惹かれると思うので、ぜひ読んでいただきたい。

全体の感想は以上として、以降は本書の内容で今後使いたい考え方やツールのメモを記す。

今後真似たい考え方

  • 辞書を自分でも管理しておく。
    • 辞書ファイルはローカルに一度ダウンロードしたきりになりがちだが、辞書が非公開になる可能性も考えられる。またKali環境を新しく立てる時に楽ができるので、自身でも管理しておきたいと思った。
  • ハニーポットの攻撃のログから辞書用のパスワードを取得する。
    • 本格的なハニーポットでなくとも、自宅にサーバを立てておいて、認証失敗ログを収集するのが楽しそうだと思った。またハニーポットの実験を行うにしても、観察要素が増えて楽しそうだと思った。
  • 解析効率を上げる工夫をする。
    • 「パスワードポリシーに沿わないワードを仕掛けても無駄」がその通りすぎて目から鱗だった。辞書を作るのか、使い分けるのか、強化するのか、自分でカスタマイズするところに辞書の奥深さがあると感じた。

今後使いたいコマンド

  • echo "hoge" -n > fuga.txt: echoコマンドはそのままだと末尾に改行を入れてしまうが、パスワードは改行不要なため、-nオプションをつける。
  • wc -l fuga.txt : Word Countコマンド。デフォルトでは行数、単語数、バイト数の順に表示する。辞書ファイルは1行1ワードなので、行数からパスワードの総数が分かる。-lオプションで行数のみ表示可能。
  • grep -x {正規表現} : 行全体がパターンに一致する場合のみ表示。
    • grep -x '.\{4,12\}' rockyou.txt > piyo.txt のように実行すると、rockyouファイルから条件に一致した行(今回は4文字以上12文字以下)を抽出して、piyo.txtに出力可能。
    • 毎回rockyou.txtをそのまま使うより、パスワードポリシー次第で抽出したファイルを使った方が効率が良い。
    • ただし元が膨大なので抽出しても大きいままである。自作or他ファイルの使い分けも必要。
    • 8-63文字で960万、8-16文字で948万、4-8行で77万である。rockyouで使用されていた文字数の分析内容が本書4.8節に記載されており、興味深い結果だった。
      rockyou_grep_wc_result
      rockyou.txtから抽出した結果

今後使いたいツール

  • chrunch: 任意の文字を指定できる、辞書ファイル作成ツール。
    • 本文の5.1-5.2節で紹介。
    • 引数は「xからyの数までの文字を生成する」形式。x=12, y=12だと12文字のみ生成する。x=4, y=8だと4文字から8文字を生成する。x=1, y=4だと1文字から4文字を生成する。
    • パスワード1~4文字で73MB、1~5文字で5.5GBのファイルになった。
      • 1~8文字での実行はPB単位になるらしい。自作Zip爆弾で自爆するデータ容量である。指数関数や組み合わせ爆発を連想した。
    • -tオプションで指定した位置に以下の文字を指定可能。
      • @:小文字、,:大文字、%: 数字、^: 記号

chrunch
5文字目に記号を入れた場合。5文字のみ生成なので、小さい容量で済む。

  • cupp: 特定の標的を狙う場合に有用な、辞書ファイル作成ツール。
    • 本文の5.3節で紹介。
    • 標的本人と家族の情報を入力して実行する。不明箇所は空でよい。
      • 入力情報:本人/パートナー/子供の名前・あだ名・誕生日、ペットと本人の所属会社名。
    • 誕生日の数字と名前の組み合わせなどの、標的本人に近しい情報に基づいたパスワード候補を生成してくれる。
      • OSINTで情報収集して、cuppで辞書を作ってクラックするタイプの問題とかありそう。
      • 入力後に聞かれるのは全てオプション。Leet文字のワードを追加したりできる。

cupp_input
某天下人を標的にして入力した。意外とWikiに情報が載っていた。
cupp_output
生成されたパスワード。親子で綴りが似すぎて、本人を探せ状態になった。

  • Mentalist: 辞書ファイルの強化に有用な、ルールを基に辞書ファイルを改良できるツール。
    • 本文の6.2節で紹介。
    • GUIで動く。ベースとなるテキストファイルにルールを指定し、実行することで、ルールに基づくワードが追加されたファイルが生成される。ルールの拡張子は.mentalist
    • 大文字小文字の変換や、Leet文字に変換したワードを追加したり、先頭/末尾に指定した文字や数字を追加したりできる。

mentalist_input
Linux版も提供されており、Kaliでも問題なく動いた。

今後読み直したい箇所

1周目で理解が浅い箇所や、今後見返したい箇所を備忘録として記載しておく。

  • 5.4節: キーマップウォーキングパスワードの辞書ファイルを作成する
    • 本記事作成時点では、日本語のキーマップファイルは元々入っていたので軽く読んだが、ルールを理解しきったうえで自作したい。USキーと見比べたい。
  • 6.3節: 辞書ファイル作成にテキスト処理コマンドを活用する
    • sed, awk, uniq, rev, sort, trコマンドや正規表現はこの辺の本でインプットしてから読み直したい。
    • 解析用ツールを使わずに、Linuxのテキスト処理関連のコマンドで辞書ファイルを表現・生成するのは華麗だと思った。
  • 7章: 辞書ファイルをパスワードクラッカーに活用する
    • 今後ツールを使って慣れていきたい。
    • ハッキングラボ旧版を読み返したくなった。

参考記事

Discussion