John the Ripper とは ? |
version 1.3 からの変更点 |
- 辞書:wordlist | rulesの適用(有、無) |
- シングルクラック:single | login /GECOS 情報を使う |
- インクリメンタル:incremental | すべての文字のコンビネーションを試す |
- 外部モード:external | 自分のモードを定義できる |
インストール |
ソースをコンパイルするには、解凍したディレクトリで make を実行する。
サポートしているシステムのリストが現れる。その中から選ぶかリストになければ
'make generic'を試す。GCCとGNU makeを使うこと。
( bin/make が既に存在するかのもしれないので make はフルパスで指定すること)
使い方 |
John the Ripper を使うにはパスワードファイルとクラッキング・モードを指定する。
クラックされたパスワードはスクリーンに表示され ~/john.pot ('~' はhome directory
を意味する。例えばjohnの実行ファイルのディレクトリ)に保管される。
このファイルは同じパスワードを再度クラックするときにクラックされたアカウントを
ロードしないためにも使われる。クラックしたパスワードを表示するには -show オプ
ションを使う。
クラッキング中に Enterを押すと状況(status)表示する。Ctrl+Cでセッションを中止する。 セッション情報はデフォルトで restoreに保存される。続けて2回 Ctrl+Cを押すと 保存しないで直ちに停止する。セッション情報はクラッシュに備えて10分おきに保存 される。
コマンドライン オプション
---------------------------
コマンドラインで次のオプションを指定できる。すべてのオプションは大文字と小文字
を区別する。
(case sensitive)また、短縮形も使える。
-pwfile:<file>[,..] passwd file(s)を指定 (ワイルドカード可)このオプションはクラックするパスワードファイルを指定する。
-wordfile:<file> -stdin 辞書モード <file> あるいは stdinから単語を読む。 -rules 辞書に対して rules を適用するルール(Alec Muffettによる Crackのような)を適用する。このルールは /john.iniの section [List.Rules:Wordlist]に保存されている。
-incremental[:<mode>] インクリメンタル・モード [using john.ini entry <mode>]~/john.ini で指定されたルールを使う。(section [Incremental:<mode>] )
-single シングルクラック・モードシングルクラック・モードでは rules [List.Rules:Single] が適用される。
-external:<mode> イクスターナル・モード using john.ini entry <mode>~/john.ini の [List.External:<mode>]で指定された外部機能を使う。
-restore[:<file>] restore session [from <file>]中断されたセッションを指定したファイル(デフォルトは~/restore )で再開する。
-makechars:<file> 文字セットを作る <file> は上書きされる~/john.potに現れる頻度により、文字セットファイルを作る。インクリメンタル モードで使われる。指定がなければ John.potは文字セットファイルとして使われる。 このオプションと一緒にイクスターナル filter() ルーチンを使う事もできる。
-show クラックした passwords の表示クラックしたパスワードを分かりやすいかたちで表示する。パスワードファイルを 指定しなければいけない。
-test ベンチマーク テストクリティカルルーチンのパフォーマンスをテストし、異なるアカウントとソルトの クラッキングスピードの計算表を表示する。
パスワードクラッカーの内部をよく知らない人のために:
xform1()とxform2()は実際の暗号ルーチンだ。 各 key/saltのペアに対して呼ばれる。setkey() はそれぞれの単語に対して呼ばれる。xform1() や xform2() (クラッキングモードによる)は十分な ソルトがロードされていれば、クラッキングスピードに 影響するルーチンであることを意味する。 ところで、setkey()は xform2()を使うときは、単語の 長さが1つ違う、1文字以上置き換わるとき、 xform1()を使う時はパスワードが8文字で全部違う (ぜんぜんマッチしない)としている。 MD5ベースのパスワードファイルでは、md5crypt() が すべての他のルーチンの代わりに使われる。
-users:<login|uid>[,..] 指定したユーザー(複数可能)のみクラックするクラックや -show(表示)ではフィルターをかけることができる。
-shells:[!]このオプションは必要なshellのみクラックしたり表示するのに有効だ。また、不要 シェルアカウントをクラックしなかったり、表示しないときにも使う。 (シェルの前の!は否定を意味する)シェル名のパスを省略する事ができる。 -shells:cshは /bin/cshと /user/bin/cshの両方にマッチする。[,..] この shell(s) のアカウントのみクラックする
-salts:[!]<count> 少なくともとも<count>アカウントのみソルトをクラ ックこの機能はパフォーマンスを向上させる事がある。例えば、-salts:2を使い早くクラック し、その後 -salts:!2でクラックするとする。トータル時間はほぼ同じだが、いくつかの アカウントを早くクラックできる。残りは必要ないかもしれない。
-lamesalts ソルトがクリアテキストパスワードとみなすこの働きを理解していなければ、このオプションを使ってはいけない。
-timeout:<time> <time> 分後にセッションを中止する。これは決められた時間が経過するとjohnを終了する。
-list 単語をリストするクラック中の単語をstdoutに表示する。これはクラッキングモードをカスタム化した ときに、正確に動いているか確認する時に有効だ。
-beep -quiet パスワードが見つかったときに beep を鳴らす、鳴らさないデフォルトは ~/john.iniで決まる。
-noname -nohash ログインネームとハッシュテーブルにメモリを使わない十分なRAMがなければ必要になる。-nonameはシングルクラックモードでは働かない。
-des -md5 DES あるいは MD5 モードこの2つのオプションは検出された暗号方法をオーバーライドする。
付属 ユーティリティ
----------------------
これらは johnに似合った便利なものだ。
xtract [source] [> <target>]テキストファイルから(あるいは stdin)単語を抜き出す。辞書として使える。 重複は取り除かれない。
unshadow <passwd> <shadow> [> <target>]passwdファイルとshadowファイルを結合する。(すでに両方とも持っていれば) もしshadowファイルだけなら、シングルクラックモードで使うGECOSが無いし、 -shellオプションも使えない。
クラッキング・モード |
辞書モード
---------------
これは Johnがサポートしているもっとも単純なクラッキングモードだ。
辞書とパスワードファイルを指定するだけでよい。(辞書はテキストファイルで
1行に1つの単語)これにルール(単語を変化させる)を適用することもできる。
ルールはリストのすべての単語に適用される。
辞書にある単語は重複してはいけない。Johnは多くのRAMを使わないように単語を ソートしない。それにはメモリーに全部の単語をロードしなくてはならない。 クラッキング中にディスクから読み込む。単語の順序は気にしなくてよい。頻度 の高い単語を最初に置いてよい。しかし合理的な順序に並べないなら、アルファ ベット順にソートしたほうがよい。(トライする単語が、前の単語と少し違うだけ なら Johnは少し速くなる。特に少しのアカウントを一度にクラックするときには 顕著になる)
しかし、単語が8文字以上でも気にしなくてよい。最初の8文字が同じで実際には 同じパスワードだとしても。Johnはこの状況をうまく処理する。(一度だけトライ する)そのような単語は即座に次に移る。辞書を8文字に切りつめないほうがよい。 なぜなら、ルールを適用する時に残りの部分が必要かもしれない。
シングルクラック・モード
--------------------------
まず最初にクラックを始めるモードだ。パスワードとして login/GECOS情報を
使う。この情報はそのアカウントに対してのみ使う。(そして同じsaltのアカウ
ントにも。ほとんど余分な時間はかからない)そのためシングルクラックモード
は辞書モードよりはるかに速い。そしてたくさんのルール(rules)を適用する。
同時にたくさんのパスワードファイルをこのモードで走らせると、ファイルを 分けて走らせるより多くのアカウントをクラックすることがある。
すべてのルールを適用しないで走らせるのも良いアイデアだ。タイムアウトを 設定し、他のモードへ移る。この場合ルールは成功率の高い順にソートしておく べきだ。
Cracker Jackのユーザーは、johnのシングルクラックモードがJackとまったく 違うことに注意しなければならない。johnはビルトインされたルールをサポート しているので、特別な辞書は必要ない。
インクリメンタル モード
--------------------------
これは最もパワフルなモードだ。パスワードとして全ての可能性を試す。
しかし、このモードをクラックに使うとその組み合わせの多さにより、終了しない。
(実際には、パスワードの文字数を制限したり、小さな文字セットを使うと終わるだろう)
限られた時間でできるだけ多くのパスワードをゲットするために、このモードは文字頻度
テーブルを処理する。このモードを使うにはモードのパラメーターを定義しなければなら
ない。(パスワードの長さ制限と文字セット) このパラメーターは John.iniの
[Incremental:<mode>]セクションで定義する。ここで <mode>はモードの識別子だ。
(モードは Johnのコマンドラインで指定する)インクリメンタルモードでは、あらかじめ
決められた定義を使う事も、カスタム定義を使う事もできる。
一度定義すれば、インクリメンタルモードとモードの識別子、パスワードファイルをコマ ンドラインで指定すればよい。
イクスターナル モード
--------------------------
Johnでは外部クラッキングモードを設定できる。これは ~/john.iniの
[List.External:<mode>]と呼ばれるセクションで定義できる。
<mode>は識別子を割り当てる。このセクションには John がトライする単語を作り出す
機能がある。これらの機能はCのサブセットでコーディングされる。
John のスタートアップ時にコンパイルされる。(コマンドラインで指定していれば)
カスタマイズ |
コンフィグレーションファイルはいくつかのセクションを含む。それぞれのセクション は、かぎ括弧内に名前を含む行から始まる。 セクションは変数の割り当て( 形式は 'variable = value')あるいは特別のセクション タイプ(そのようなセクション名は 'list.'で始まる)の定義からなる。 セクションと変数名は大文字と小文字を区別しない。(not case sensitive) '#'や';'で始まる行と空行は無視される。これはコメントや完全に消したくない行を コメントアウトするのに使われる。
一般的な オプション
--------------------------
コマンドライン・オプションのデフォルトは[Defaults]で定義される。
次の変数を定義できる。
Wordfile 辞書ファイルをセット。これは 辞書モードをデフォルトにする。 このデフォルトをオーバーライドしないなら、コマンドラインで -wordfileを使う必要はない。 Timeout 値は分でセットする。デフォルトですべてのモードのタイムアウトを 有効にする。 Beep 'Y'と'N'でパスワードが見つかったとき、あるいは見つからなかったと きにビープを鳴らすかセットする。コマンドラインのオプション -beep -quiet でデフォルトはオーバーライドされる。この変数を省略すると デフォルトは鳴らさないとなる。 ほかのオプションは[Options]セクションで定義される。 Realtime 'Y'にセットすると経過時間を「秒」(Jackのような)のかわりに D:HH:MM:SS で表示する。 Percent 'Y'にセットすると、進行状況を表示する。インクリメンタル モード のパラメーター
CharCount John に早い時期に長いパスワードにトライさせるために、文字セットを 制限する。 CharCountより少ない外部文字セットを使う時、指定したサイズに拡張 するためにも使える。デフォルトではすべての指定された文字セットを 使う。(パラメーターが指定されていないとき) MinLen パスワードの長さ(ミニマム) デフォルトは1 MaxLen パスワードの長さ(マキシマム) デフォルトは8 Wordlike 'Y'にセットするとシンプルなビルトイン・ワードフィルターを使う。 (1列に1つ以上の母音、2つ以上母音以外の単語はフィルターアウト) File 外部の文字セットファイル名。(フルパスで指定しなければ ~ からロードする) このパラメーターをセットすると、コンフィグレーションファイルの定義は 無効になる。 CharsetNM NとM は数字 1 <= N <= 8, 1 <= M <= N パスワード長 N,文字位置 M の 文字セットを定義。文字セットの順序は重要だ。頻度の高い文字を最初に 置く。文字セットは同じサイズでなくてよい。辞書のルール
Ordinary commands: : no-op - 入力に何もしない <n 文字数が < n なら拒否する。n = 0-9 >n 文字数が > n なら拒否する。n = 0-9 ^x 'x' を前に置く $y 文字 'y' を付け加える l 小文字に変換 u 大文字に変換 c キャピタライズ(captarize:訳注:fred→Fred) r リバース : "Fred" -> "derF" d 繰り返し : "Fred" -> "FredFred" f 折り返し : "Fred" -> "FredderF" p 小文字の複数形を作る onx n番目( 0から始まる)の文字を 'x' に変える inx 文字 'x' を n 番目( 0から始まる ) に挿入する もし、 n > strlen(input)なら、文字 'x' を加える xnm n番目( 0から始まる)から文字 m まで引き抜く キャラクタークラスに使われるコマンド Commands which may use character classes: sxy 文字 'x' を 'y'に置き換える s?cy 'c'クラス(訳注:下記)の文字を 'y'に置き換える @x 単語から 'x' を取り去る @?c 単語から 'c'クラスを取り去る !y 'y'を含む単語を拒否する !?c 文字クラス 'c'を含む単語を拒否する /x 文字 'x'が含まれていなければ拒否する /?c 文字クラス 'c'が含まれていなければ拒否する =nx n番目の文字が 'x'でなければ拒否する =n?c n番目の文字クラスが 'c'でなければ拒否する nb: 単語は position 0から始まる 上記コマンドに使うキャラクター クラス ?? '?' にマッチ ?v 母音( vowels : "aeiouAEIOU" )にマッチ ?c 子音( consonants:"bcdfghjklmnpqrstvwxyzBCDFGHJKLMNPQRSTVWXYZ")にマッチ ?w ホワイトスペース(whitespace: " \t")にマッチ ?p 句読点( punctuation: ".,:;'\"?!`" )にマッチ ?s シンボル( symbols "$%^&*()-_+=|\\<>[]{}#@/~" )にマッチ ?l 小文字 ('a' to 'z')にマッチ ?u 大文字 ('A' to 'Z')にマッチ ?d 数字 digits ('0' to '9')にマッチ ?a 文字 ('a' to 'z' and 'A' to 'Z')にマッチ ?x 文字と数字 ('a' to 'z', 'A' to 'Z' and '0' to '9')にマッチ 大文字はそのクラスの否定(complement)をあらわす。 例えば ?d == 数字( DIGITS ) ?D == 数字ではない( NON-DIGITS ) など。 上記のコマンドは Crack v4.1 と同じだ。次は、johnで追加された。 (有効でないかもしれない。必要なほとんどの事はすでに Crack v4.1で実現している) { 文字を左シフト: "jsmith" -> "smithj", etc } 文字を右シフト: "smithj" -> "jsmith", etc Dn n 文字目をデリートし残りを左にシフト(0 から start) P "crack" -> "cracked", etc (小文字のみ) G "crack" -> "cracking", etc (小文字のみ) ~i キーボードの大文字小文字(Case)を変換: "Crack96" -> "cRACK(^", etc (訳注:siftキーの on/off) ~I 大文字小文字の変換: "Crack96" -> "cRACK96", etc ~v 母音のみ小文字に変換: "Crack96" -> "CRaCK96", etc ~> 文字をキーボードの右に変換: "Crack96" -> "Vtsvl07", etc ~< 文字をキーボードの左に変換: "Crack96" -> "Xeaxj85", etc単語のペアをサポートする特別なシングルクラックモードをサポートした。
1 最初の単語のみ 2 次の単語のみ + 両方を結合する( '1' か '2'のあとに使われる)上記のコマンドをルールで使うと、単語のペアを作るだけだ。(GECOSからのフルネーム) そして1つの単語は拒否する。
マニュアルで指定しなければ '+'はルールの終わりと見なされる。例えば 1l2uは最初を小文字 に次を大文字に変換し、両方を結合する。+ は他のコマンドにも適用できる。 1i2u+r はコマンドを適用したあとに両方を結合し反転(reverse)する。
Crack v5.0 は私が Johnがサポートするルールをコーディングしたときには 発表されていなかった。そこで独自の拡張をおこなった。
新しい Crack v5.0のルールは余計であるように思える。あるいは私がすでに John に加えたものと似ている。( [ == D0, ] == rD0r,C == c~I, t == ~I, (x == =0x, ) x == r=0xr, 'n == x0n )残されたルールは %nx や %n?c だ。(少なくとも nインス タンスの文字 'x' あるいはクラス'c'のメンバーが含まれていなければ 、その単語 を拒否する)とにかく私はコンパチビリティを理由に Johnに加えた。プレフィックス [ と ] は \を使うことに注意。これらはプリプロセッサのコントロール文字だ。
ルールが単語を変化させないなら、ルール全体が ':'でなければその単語は拒否される。
プリプロセッサは一つのソースラインにルールを結合するためにも使われる。 例えば、Johnに小文字で数字がついた単語をトライさせたいとき、数字ごとに10種類の ルールを書くこともできる。2桁の数字だとしたら--コンフィグレーションファイルは 巨大に、そして醜くなる。
プリプロセッサでこれらのことを簡単にできる。これらのルールの共通部分を含む
ソースラインを書けばよい。そしてかぎ括弧の中に別のルールを使う文字セットの
リストを書く。(正規表現が使える)
プリプロセッサが Johnのスタートアップ時にルールを作り出す。例えば上の例では、
ソースラインが 'l$[0-9]' (小文字に数字を加える) と 'l$[0-9]$[0-9]'(小文字に
2桁の数字を加える)となる。これらのソースラインはそれぞれ 10と100のルールに
展開される。ところでプリプロセッサのコマンドは、右から左に処理される。文字は
左から右に処理される。2桁の数字を加える上の例ではこうして数字が普通の順序で
処理される。例では文字の範囲しか使わなかったが、文字リストも使える。
'[aeiou]'は母音(vowels)を使う。'[aeiou0-9]'は母音と数字を使う。
ルールにはいくつかのコントロール文字がある。( [ はプリプロセッサの文字リスト を始める。- はリスト内で範囲をマークする、など )文字に特別な意味を持たせたく ないときは文字の前に \ を置く。もちろん \ 自身にも使う。もしプリプロセッサの 文字リストを行の先頭から始めたいなら、':'を置く。そうすると新しいセクション の始まりと見なされる。
イクスターナル モードの定義
------------------------------
イクスターナル・クラッキングモードを定義するには、[List.External:<mode>]と
呼ばれるセクションを作る。<mode>はモードの識別子に使う。
セッションはC言語のサブセットで書かれた関数を含む。Johnはコマンドラインで
このモードを有効にすると、これをコンパイルして使う。コンパイラーはインター
プリタコードか実行コードに変換される仮想マシンコード(Vertual machine code)
を生成する。(これは現在 x86ハードウェアのみで行われる)
次の関数は現在 Johnで使っている。
init() startup で呼ばれる。グローバル変数を初期化する。 filter() トライするワードごとに呼ばれる。ワードをフィルターアウトする。 generate() 単語のジェネレートで呼ばれる。 restore() 中断されたセッションのリストアで呼ばれる。これらは引数なし(no argument)で void 型だ。init() 以外はグローバル変数 'word' を使う。(これは int word[16] と定義されている) init()は word を初期化する 前に呼ばれる。word には現在トライしている単語が ASCIIZで格納される。 filter()は変更できる。あるいは word[0]を0にするとするとスキップする。 generate()は呼ばれた時にトライする次の単語を置く。クラッキングが終わると word[0]が0になる。restore()は与えられた word からグローバル変数をセットする。
イクスターナルモードは他のクラッキングモードと一緒に使うことができる。 そのとき、init()とfilter()のみが使われる。(filter() は要求があれば ) イクスターナルフィルタは他のモードのコマンドライン・オプション -makechars と コンパチブルだ。
generate()と一緒にイクスターナルモードで、filter()を使ったり、多くの単語を filterにかけないことを勧める。generate()をフィルターアウトされる単語を生成し ないように変更したほうがよい。
すでに述べたように、このコンパイラはCのサブセットをサポートしている。 Johnは Crackerでコンパイラではない。私はこれで十分だと思っている。次は Johnのコンパイラの概要だ。
- 基本的な関数のみサポートした。独自の拡張はできない。
- 'while' ループのみサポートしている
- 'int' と 'void' 型のみサポートしている
- 一次元配列のみサポートしている
- 構造体と共用体(structs/unions) はサポートしていない
- ポインタはサポートしていない (right, more about arrays below);
- 多分、ほかにも...
いくつかの機能はCとは違う。
パワフルなCの表現(すべての整数演算)、if/elseとwhileが使える。ほとんどの コーディングにはこれで十分だろう。
イクスターナル・モードのサンプルはテンプレートとして、 Johnと一緒に供給 されるコンフィグレーションファイルにある。
使用例 |
コマンドライン
----------------
1. あなたがパスワードファイル 'passwd.1'を持っているとする。 シングルクラック・モードから始めるのがよい。 john -single passwd.1 あるいは短縮したオプションで john -si passwd.1 クラックするファイルは複数を指定できる。 john -single passwd.1 passwd.2 あるいは john -single passwd.* 2. パスワードがクラックされたらカレントディレクトリ ~/john.pot にセーブされる。 これを取り出すには、 john -show passwd.1 アカウントリストが大きくて、スクリーンに入りきらなければ出力をリダイレクトする。 john -show passwd.1 | more 多くのアカウントのシェルが無効かもしれない。johnにこれらを無視させることが できる。(/etc/expired と呼ばれる) john -show -shells:!/etc/expired passwd.1 短縮形を使い、どの path にもマッチさせる john -show -shells:!expired passwd.1 他のシェルも無視したいなら、/etc/newuser とすると john -show -shells:!expired,!newuser passwd.1 クラックした root(uid 0) アカウントをチェックするには、 john -show -users:0 passwd.1 すべてのファイルのクラックした rootアカウントをチェックするには、 john -show -users:0 passwd.* root(ログインが root)アカウントだけ表示する。 john -show -users:root passwd.1 3. シングルクラックモードで不足なら、もっとパワフルなモードを使う。 例えば辞書モード。辞書ファイルが'words.lst'だったとすると、 john -w:words.lst passwd.1 あるいは rules を適用して (遅い。しかしパワフルだ) john -w:words.lst -rules passwd.1 有効なシェルのみクラックするには、 ( -shellsと -usersはすべてのクラッキングモードで働く) john -w:words.lst -rules -shells:sh,csh,tcsh,bash passwd.1 ほかのクラッキングモード同様、一度にすべてのファイルをクラックした方が早い。 john -w:words.lst -rules passwd.* いくつかのアカウントだけクラックすることができる。これはすべての root(uid 0) をトライする。 john -w:words.lst -rules -users:0 passwd.* 私はrootパスワードだけクラックすることは勧めない。 それは通常、セキュリティホールをついてハックするより時間がかかる。(そして 合理的な時間内では不可能だろう)自分のパスワードファイルがクラックできない事 を確かめるなら、よい rootパスワードを選ぶ。そして残りをクラックしてみる。 パスワードファイルを別々にクラックすることも有効だ。 john -w:words.lst -rules -salts:2 passwd.* john -w:words.lst -rules -salts:!2 passwd.* これは2つかそれ以上のソルトで早くアカウントにトライする。 それから残りをトライする。トータルのクラックタイムはほとんど同じだ。 しかし、いくつかのアカウントを早くクラックできる。また、すべてのアカウントを 小さな辞書でクラックしたり、大きな辞書で(-salts:2を使い)早くトライできる。 -saltsを2より大きくするほうが良いことがある。(時には1000以上) 値は状況により調整する。 デフォルトの辞書ルールは 最初の行に':'を含んでいる。(これは単語をリストのまま トライすることを意味する)もし、すでにルールなしで辞書を走らせて同じ辞書でルール を適用しようとするなら、この行はコメントアウトしたほうがよい。 4. もっともパワフルなモードは、インクリメンタルだ。単に走らせればよい。 john -i passwd.1 これはデフォルトのインクリメンタルモードのパラメーターを使う。それは John.ini の[Incremental:All]セクションにある。Johnとともに提供されるコンフィグレーション ファイルでは、これらのパラメーターは 95文字すべてを使い、可能性のあるすべての文 字長さ(1〜8)をトライする。この方法が、無理のない時間内に終わる事を期待してはいけ ない。(すべてのパスワードが弱く、クラックされなければ) ほとんどの場合、他のプリ・デファイン インクリメンタルモード・パラメーターを使う か、限られた文字セットでシンプルなパスワードだけクラックするほうが速い。 次のコマンドは'a'から'zzzzzzzz'までの 26の文字セットのみトライする。 john -i:alpha passwd.1 インクリメンタルモードで rootのアカウントのみ Johnの他の機能でクラックすること もできる。このコマンドはすべてのパスワードファイルのすべての root(uid 0)とそれ らにマッチするアカウントのみクラックする。少なくとも2倍のパフォーマンスがある。 大量のパスワードファイル(1000くらい)がなければ、ソルトがマッチする rootは無いだろう。 john -i -users:0 -salts:2 *.pwd 5. すでにパスワードファイルの多くのアカウントをクラックしていたら、そのファイル から文字セットを作りたいと思うだろう。 john -makechars:custom.chr passwd.1 それから、インクリメンタルモードに新しいファイルを使う。 同じ国のいくつかのパスワードファイルを持っていたら、それを文字セットファイルと して使うと有効だろう。その国のパスワードファイルのアカウントをもっとクラックで きるだろう。 john -makechars:custom.chr passwd.1 passwd.2 < ~/john.iniにカスタムモードの定義を追加 > john -i:custom passwd.3 上の例では passwd.1 と passwd.2は同じ国のすでに多くのアカウントを持っている パスワードファイル、passwd.3 がクラックしたいファイルと仮定している。 文字セットファイルを作る時にあらかじめ定義された、あるいはカスタム化した 文字フィルターを使う事ができる。 john -makechars:my_alpha.chr -external:filter_alpha passwd.1 ~/john.potが充分大きければ(あるいはぜんぜん文字セットファイルがなければ)、 新しい文字セットとして使いたいだろう。 john -makechars:all.chr john -makechars:alpha.chr -external:filter_alpha john -makechars:digits.chr -external:filter_digits 上の例では ~/john.potをベースにした文字セットファイルで(存在していれば)上書き される。(パスワードファイルを指定しなければ Johnはすべてのファイルを使う) ワードフィルターは Johnと一緒に供給される ~/john.iniで定義されている。コンフィグレーション ファイル
[List.Rules:Single] $?$! ヒント:すべてのデフォルトルールを一時的にコメントアウトしたいなら、その セクションの名前を Johnが使っていない名前にリネームするだけでよい。 そして前の名前で新しいルールを定義する。名前の list.部分は残す事。 そうしなければ構文エラーになる。また辞書のルールにも、同じ事が適用できる。
[Incremental:Custom] File = custom.chrこれは文字セットを生成したファイルのみ Johnが使う。
CharCount = 95この行を加えると ファイルを生成中に 95文字(ASCIIコード 32 から 126)が見つから なくても展開するように Johnに伝える。 文字は a-z, A-Z, 1-9, 0,の順で加えられる。
Johnにトライさせる文字セットを制限するには CharCountを使う。
CharCount = 25文字セットファイルを作る時にフィルターを使わないなら、CharCountを低くセット するとまれな文字は使わなくなる。そして Johnに早いうちから複雑な長いパスワード をトライさせることになる。
John にある長さのパスワードだけトライさせるには、次を使う。
MinLen = 6 MaxLen = 8パスワードを手に入れたマシンで短いパスワードが許可されていないのなら、MinLenを 大きくしたほうが合理的だ。(しかし root はどのユーザーにもどんなパスワードでも セットできる)
逆にパスワードが短いとおもったら、MaxLenを小さくセットする。
多くのパスワードが単純だと思ったら、ビルトインフィルタを使いアルファベット の文字セットを使うことも有効だ。
[Incremental:Wordlike] CharCount = 26 MinLen = 3 Wordlike = Yeah File = alpha.chr3. 4Mb以下の RAMしかインストールされていないマシンでJohnを使うとき、もっと 小さい文字セットにする必要があるかもしれない。-makecharsは(速く動作させるため) 展開に多くのメモリーを要求する。大量のパスワードファイルをロードさせた時にも 十分なメモリーが残らないため、必要になるだろう。 あるいは少ない(あるいは1つ) ソルトでクラッキングするとき、少し速くJohnを走らせたいときにも。
これは、少しだけ文字を変更して、できる限り前の単語と似た形で John が利用する からだ。 外部の大きな文字セットファイルを使う時には、~/john.ini内部の小さな文字セット を使う時と違う順序でトライする。また、トライする単語にも違いが大ある。 大きな文字セットは展開に余分な時間がかかる。しかし c/sの値が少しあがっても それは早くパスワードがクラックできるという意味ではない。大きな文字セットを 使う時にはトライする順番のほうが重要だ。小さな文字セットのみ使うことも賢い。 他に方法がなければ、とにかくすべての文字の組み合わせをトライすることになる だろうから。
私は故意に小さな文字セットを john.iniの中に残した。File = の行をコメントアウト するとこの小さな文字セットが使われる。
4. もう一つの小さな文字セットの使い方は、特別な場合マニュアルで定義する。 例えば、ユーザーがパスワードに1を加えることを知っていたら、
[Incremental:Suffix1] MinLen = 6 MaxLen = 6 Charset61 = abcdefghijklmnopqrstuvwxyz Charset62 = abcdefghijklmnopqrstuvwxyz Charset63 = abcdefghijklmnopqrstuvwxyz Charset64 = abcdefghijklmnopqrstuvwxyz Charset65 = abcdefghijklmnopqrstuvwxyz Charset66 = 1もちろん同じ事を違う長さでもできる。文字を頻度によりソートすることは賢い。 もし怠け者でこれをしないなら、単にインクリメンタルモードで定義されている文字 セットを持ってくる。例えば、上の例のようにデフォルトの [Incremental:Alpha]で 定義されている Charset51 から 55を Charset61 から 65に持ってくれば5文字が アルファベットで最後に1を持つ 6文字のパスワードの頻度を計算したものと ほとんど同じものが完成する。
5. 同じ事をイクスターナル・ワード・フィルタをコーディングしてもできる
[List.External:Filter1] void filter() { int i; i = 0; while (word[i] && word[i] >= 'a' && word[i] <= 'z') i++; if (word[i] != '1' || word[i + 1]) word = 0; }このフィルタはいくつかのアルファベットと最後の1を取り去る。 これを他のクラッキングモードでも使える。しかし、多くの単語がフィルターアウト されるので遅くなる。これを文字セットの生成に使う方が良い。
何らかの理由で頻度テーブルを使わないなら、新しいイクスターナルモードを コーディングして、同じ事ができる。
[List.External:Suffix1] int len, current[9]; void init() { int i; current[len = 6] = 0; current[i = len - 1] = '1'; while (i--) current[i] = 'a'; } void generate() { int i; i = len + 1; while (i--) word[i] = current[i]; i = len - 2; while (++current[i] > 'z') if (i) current[i--] = 'a'; else current = -1; } void restore() { int i; i = len + 1; while (i--) current[i] = word[i]; }
F.A.Q. |
Q: なぜ "John"?
A: 別にいいじゃない( Why not? )
Q: なぜ "the Ripper"?
A: これは Lost Soul のアイデアだ。彼に聞いてくれ( Ask him.)
Q: John the Ripper は Cracker Jackより優れているか ?
A: 私はそう思う。johnは Cracker Jackのすべての機能をサポートしている。
また、john はjackより Pentiumではかなり、486では少し速い。
Q: John the Ripper は Crack より優れているか ?
A: それは自分で決めることだ。Johnは速く、さらにいくつかの機能がついている。
しかし Crackも確かに良い。
Q: なぜ John は古い386 では速く走らないか ?
A: Johnは486以降で最適化(optimize)している。別の386バージョンをコーディング
するのは、おそらく時間の無駄だろう。もし、386マシンしか持っていなかったら
インターネット上のどこかの速いマシンでJohnを走らせた方がよい。
Q: Pentium の最適化バージョンは ?
A: John はすでにペンティアムでも最適化されている。
Q: John の crypt() ルーチンが正しいか確かめる方法は ?
A: John は実行中、常に自分自身でテストしている。エラーが起これば通知する。
Q: John の "single crack" モードの使い方は ? 辞書を使っていないようだが。
A: そのとうり。Cracker Jackのシングルモードとは違う。RTFM.
(訳注:Read The Fucking Manual:マニュアルを読め!)Q: なぜ シングルモードを Jackのように改良しないのか ?
Q: Windows 95 で走る Jack の JPP.EXE の替わりはあるか ?
A: それは必要ない。"カスタム化"のセクションをもう一度読め。辞書のルールを。
私はまた、確信を持って Windows95を使わないことを奨める。
Q: クラックしたパスワードの見かたは ? Cracker Jackには Jackpot.exeがあった。
A: Johnのコマンドラインで -showオプションを使う。
Q: なぜ Johnは私のパスワードファイルをロードしないのか ?
'Loaded 0 passwords'と表示されるだけだが。
A: そのパスワードファイルはたぶんシャドウ化されている。パスワードとシャドウ
ファイル両方が必要だ。それからそれらを結合する。もし、そのパスワードファイル
のフォーマットを Johnがサポートしていなければ、同じメッセージがでる。
Q: どうやって unshadowするか ?
A: これはおそらく root権限なしにshadowファイルが手に入るかという意味だろう。
普通は rootでなければだめだ。いろいろなトリックや rootハックの方法を書くわ
けにはいかない。それはこの FAQの目的と違う。
Q: なぜ Johnはインクリメンタルモードで進行状況を表示しないか ?
A: いつも 0% の表示を本当に見たいか ? もう一度インクリメンタルモードを記述した
部分を読む必要がある
Q: なぜ Johnは本当の crypt() /秒 を表わしていない無意味な c/sを表示するのか ?
A: Johnではこの値は コンビネーション(ログインとパスワード) /秒を表わしている。
crypt()/秒ではない。暗号のベンチマークを行いたいなら、-testオプションを使う。
クラッキング中の c/sは意味がないわけではない。特定のパスワードファイルに対
する実際のクラッキングスピードを表わしている。-saltsオプションを使うときには
値を調整するのに役立つ。
Q: インクリメンタルモードでは他のモードより c/sが小さい事に気がついた。
John v1.0よりも少ない。なぜ ?
A: たぶん、数分 Johnを走らせただけだろう。新しいインクリメンタルモードの実行
には大きな文字セットを使う。これは Johnが違う長さのパスワードにスイッチす
るたびに文字セットを展開させる必要がある。長さのスイッチには時間がかかる。
それで c/sが下がる。幸いな事にこれは Johnがスタートしたときに顕著だ。
すでに何時間もクラックを続けていれば新しいパスワードの長さにスイッチするこ
とはめったにない。これはより良い順番でトライするためには無駄ではないと思う。
とにかくこの新しい方法が嫌いなら、大きな文字セットを無効にできる。
( john.iniの File = がある行をコメントアウトする)
Q: John は並列処理をサポートしているか ?
A: 私はその目的のためにネットワーク管理のインクリメンタルモードだけのクラッカ
ーを
分けた。Johnは真の並行処理はサポートしていない。
しかし、最初のマシンで'a'から始まるパスワードだけクラックするよう文字セットを
カスタマイズすることもできる。
また、インクリメンタルモード以外で外部ワードフィルタを使い、似たようなことができる。
(もし2台のマシンがあれば、すべての単語をフィルターするようなことで、グローバルワードカ
ウンタを使い達成できる)
Q: Johnで供給されているデフォルトの文字セット(~/john.ini と*.chr files)は
何をベースにしているのか ?
A: 私は世界中の異なるマシンの 65,000以上の実際のパスワードリストを使った。
これらのパスワードをセットしてくれたユーザーに感謝している。
Q: どこで辞書が手に入るか ?
A: ftp://sable.ox.ac.uk/pub/wordlists で見つかるだろう。
Q: どうやって作者とコンタクトするか ?
A: このドキュメントの最後にある。
参 照 |
- Crack by Alec Muffett -- 辞書のルールの構文 - Cracker Jack by Jackal -- ユーザーインターフェース - Star Cracker by The SOrCErEr -- 有効なたくさんの文字セットを与えてくれたcrypt()ルーチンは Alec Muffettによる Crack v4.1を基本にした。いくつかの イニシャライズ・ルーチンは変更せずに使っているが、残りは私のアイデアや他 の crypt()でコーディングしなおした。(実際には #ifdefでいくつかの違うアル ゴリズムをサポートしている)
x86 assembly バージョンの基本は Roman Rusakov の crypt()による。
彼の最適化のヒントは、有効だった。
DOS バージョンは DJGPP v2 by DJ Delorie with GCC 2.7.2 でコンパイルした。
(http://www.delorie.com) Charles W Sandmann の DPMI サーバーは、
(sandmann@clio.rice.edu; 1206 Braelinn, Sugar Land, TX 77479)
ソースコードは、
ftp://ftp.simtel.net/pub/simtelnet/gnu/djgpp/v2misc/csdpmi3s.zip.
Win32バージョンのコンパイルに Cygnus Developer's Kit
(http://www.cygnus.com/gnu-win32) を使った。
作者への連絡 ? |
このファイルを全部読むまで(もしクラックをよく知らなければ、一般的なパスワード クラックのFAQを読むまで)私に質問しないでほしい。また、私にパスワードファイル を送らないでほしい。私は「クラックサービス屋」ではない。
署名
Solar Designer