「John the Ripper」の版間の差分
(→john をビルドする) |
|||
(同じ利用者による、間の11版が非表示) | |||
行1: | 行1: | ||
− | + | [[John the Ripper]]は、有名な[[パスワードクラック|パスワードクラッキング]]のソフトウェアの1つです。Unix(FreeBSD, Linux)やWindowsのパスワードをクラッキングすることができます。 | |
− | + | ||
− | + | '''読み方''' | |
− | 読み方 | + | |
;[[John the Ripper]]:じょん ざ りっぱー | ;[[John the Ripper]]:じょん ざ りっぱー | ||
__TOC__ | __TOC__ | ||
== 概要 == | == 概要 == | ||
+ | [[John the Ripper]]は、高速なパスワードクラッカーです。多くの[[Unix]]系OSや[[Windows]], DOS, BeOS, OpenVMS などで利用可能です。主要な目的な弱いUnixパスワードを検出することです。それにくわえて、Windows の[[LMハッシュ]]など、いくつもの crypt パスワードハッシュタイプを理解できます。[[John the Ripper]]は、オフラインのパスワードクラッキングツールです。 | ||
− | + | [[John the Ripper]]では、'''総当たり攻撃''' や '''辞書攻撃''' が可能です。 | |
+ | 辞書ファイルとして password.lst が付属しています。 3000件程度のよくあるパスワードが用意されています。 | ||
− | {{ | + | [[John the Ripper]]は、無償のオープンソースソフトウェアです。 |
+ | |||
+ | [[John the Ripper]]は、'''GPU''' をサポートしていて、'''CUDA''や '''OpenCL''' と連携可能です。 | ||
+ | == どのようなシーンで使われるのか? == | ||
+ | 一体、パスワードクラッカーは、どういったときに使われるのでしょうか? | ||
+ | |||
+ | 単純に、自分のパソコンのアカウントのパスワードがわからなくなった、というケースもあるかもしれませんが、それは、稀な話でしょう。 | ||
+ | |||
+ | おそらく、悪の攻撃者集団(不正利用を目的とした営利企業、営利グループ)が、不正利用を目的として、john を使っていると考えられます。 | ||
+ | たくさんのウェブサービスが存在しており、その脆弱性を日夜探している人達がいます。脆弱性を探している人たちの中には、情報を盗むことを目的としてやっている人たちがいます。 | ||
+ | その人達の狙いの1つとして考えられるのが、アカウント情報です。 | ||
+ | アカウント情報には、パスワードといった、非常に重要な情報も含まれています。 | ||
+ | |||
+ | ウェブサービスによって、パスワードが [[平文]] で保存されていることもありますし、[[ハッシュ化されたパスワード]] であることもあります。それは、ウェブサービス提供者のポリシーだったり、知識やスキルによって、どのような実装にされているかが決まってきます。 | ||
+ | |||
+ | [[平文]] でパスワードが保存されている場合には、[[パスワードクラッキング]] の出番はありません。なぜなら、答えがはじめから解っているからです。 | ||
+ | |||
+ | 手に入ったものが [[ハッシュ化されたパスワード]] だとすれば、攻撃者の次の仕事は、[[パスワードクラッキング]] でしょう。もちろん、[[パスワードクラッキング]] にコストを掛けずに、[[平文]] のパスワードが得られそうなサイトを狙っていったほうが効率的かもしれません。 | ||
+ | |||
+ | [[ハッシュ化されたパスワード]] を解くには、非常に多くの時間がかかるかもしれませんし、すぐに解けるかもしれません。単純なパスワードであれば、すぐに解けますし、辞書に存在しない長いパスワードであれば、計算が終わるのは、天文学的な数字の時間がかかるかもしれません。 | ||
+ | |||
+ | 大量のパスワードを相手にするのか、狙った単体のパスワードを相手にするのか、でも事情が変わってきます。大量のパスワードをそこそこクラッキングできれば良いのであれば、辞書ファイルを使って、短時間で解けるものだけ解く、といった方針がとれるかもしれません。 | ||
+ | |||
+ | おそらく、「攻撃者はパスワードクラッカを使用して、パスワードを入手している」ということが言えるでしょう。 | ||
+ | あなたが「攻撃者と戦う側の人間」であるのなら、あなたのユーザを守るために、何ができるのか、考えなければなりません。 | ||
+ | == サポートしているプラットフォーム == | ||
+ | * Windows | ||
+ | * FreeBSD | ||
+ | * Linux | ||
+ | * MacOS | ||
+ | == インストール == | ||
+ | {{pkg|john}} | ||
+ | FreeBSD 版は、 jumbo パッチが当たったバージョンの john がインストールされます。 | ||
{{yum|john|rpmforge}} | {{yum|john|rpmforge}} | ||
+ | === MacOSにインストールする === | ||
+ | <syntaxhighlight lang="bash"> | ||
+ | $ brew install john | ||
+ | </syntaxhighlight> | ||
+ | == john をビルドする == | ||
+ | CentOS では、 openssl-devel をインストールする必要があります。 | ||
+ | Ubuntu では openssl-devel が存在しないので、 libssl-dev をインストールします。 | ||
+ | <syntaxhighlight lang="bash"> | ||
+ | centos$ sudo yum install -y openssl-devel | ||
+ | ubuntu$ sudo apt install -y libssl-dev | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | john のノーマル版は、make するときに、ターゲットの CPU を指定します。 | ||
+ | <syntaxhighlight lang="bash"> | ||
+ | $ tar zxfp john-1.8.0.tar.gz | ||
+ | $ cd john-1.8.0/src | ||
+ | $ make clean linux-x86-64-avx | ||
+ | $ ../john --test | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | make と叩くとターゲットの CPU のリストが表示されます。 | ||
+ | <syntaxhighlight lang="bash"> | ||
+ | To build John the Ripper, type: | ||
+ | make clean SYSTEM | ||
+ | where SYSTEM can be one of the following: | ||
+ | linux-x86-64-avx Linux, x86-64 with AVX (2011+ Intel CPUs) | ||
+ | linux-x86-64-xop Linux, x86-64 with AVX and XOP (2011+ AMD CPUs) | ||
+ | linux-x86-64 Linux, x86-64 with SSE2 (most common) | ||
+ | linux-x86-avx Linux, x86 32-bit with AVX (2011+ Intel CPUs) | ||
+ | linux-x86-xop Linux, x86 32-bit with AVX and XOP (2011+ AMD CPUs) | ||
+ | linux-x86-sse2 Linux, x86 32-bit with SSE2 (most common, if 32-bit) | ||
+ | linux-x86-mmx Linux, x86 32-bit with MMX (for old computers) | ||
+ | linux-x86-any Linux, x86 32-bit (for truly ancient computers) | ||
+ | linux-alpha Linux, Alpha | ||
+ | linux-sparc Linux, SPARC 32-bit | ||
+ | linux-ppc32-altivec Linux, PowerPC w/AltiVec (best) | ||
+ | linux-ppc32 Linux, PowerPC 32-bit | ||
+ | linux-ppc64 Linux, PowerPC 64-bit | ||
+ | linux-ia64 Linux, IA-64 | ||
+ | freebsd-x86-64 FreeBSD, x86-64 with SSE2 (best) | ||
+ | freebsd-x86-sse2 FreeBSD, x86 with SSE2 (best if 32-bit) | ||
+ | freebsd-x86-mmx FreeBSD, x86 with MMX | ||
+ | freebsd-x86-any FreeBSD, x86 | ||
+ | freebsd-alpha FreeBSD, Alpha | ||
+ | openbsd-x86-64 OpenBSD, x86-64 with SSE2 (best) | ||
+ | openbsd-x86-sse2 OpenBSD, x86 with SSE2 (best if 32-bit) | ||
+ | openbsd-x86-mmx OpenBSD, x86 with MMX | ||
+ | openbsd-x86-any OpenBSD, x86 | ||
+ | openbsd-alpha OpenBSD, Alpha | ||
+ | openbsd-sparc64 OpenBSD, SPARC 64-bit (best) | ||
+ | openbsd-sparc OpenBSD, SPARC 32-bit | ||
+ | openbsd-ppc32 OpenBSD, PowerPC 32-bit | ||
+ | openbsd-ppc64 OpenBSD, PowerPC 64-bit | ||
+ | openbsd-pa-risc OpenBSD, PA-RISC | ||
+ | openbsd-vax OpenBSD, VAX | ||
+ | netbsd-sparc64 NetBSD, SPARC 64-bit | ||
+ | netbsd-vax NetBSD, VAX | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | john (jumbo パッチ版) をビルドするには、以下の手順でビルドできます。 | ||
+ | <syntaxhighlight lang="bash"> | ||
+ | $ tar zxfp john-1.8.0-jumbo-1.tar.gz | ||
+ | $ cd john-1.8.0-jumbo-1/src | ||
+ | $ ./configure | ||
+ | $ make | ||
+ | $ ../john --test | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | FreeBSD では、少しビルドが面倒でした。configure やソースコード をいい加減に書き換えてやってしまいました。 | ||
+ | |||
+ | == パスワード辞書ファイル/パスワードリストファイル == | ||
+ | === john に付属している辞書ファイル/パスワードリスト === | ||
+ | [[John the Ripper]]には、辞書攻撃用のパスワードリストファイルの password.lst が付属しています。 | ||
+ | この辞書ファイルは、 openwall.com で公開されている辞書ファイルです。 | ||
+ | 約3600個程度のパスワードが登録されています。 | ||
+ | 登録されているパスワードは、よくあるパスワードです。 | ||
+ | |||
+ | よくあるパスワードというのは、 | ||
+ | * 123456 | ||
+ | * password | ||
+ | * qwerty | ||
+ | といったものです。 | ||
+ | 「よくあるパスワード」というのは、「使用すべきではないパスワード」でもあります。 | ||
+ | === それ以外の辞書ファイル/パスワードリスト === | ||
+ | [[ncrack]] には、いくつかのパスワードリストが付属しています。 | ||
+ | おそらく、john と同じもの、と、それ以外があります。たとえば、 top50000.pwd や myspace.pwd などです。 | ||
+ | == 並行処理について == | ||
+ | [[John the Ripper]] では、 --fork オプションを利用して、並行処理が可能になります。 | ||
+ | CPUの数/CPUのコア数を指定して、処理すれば良いでしょう。 | ||
+ | == 並列処理について == | ||
+ | [[John the Ripper]] では、 '''OpenMP''' が利用できる場合には、自動的に'''スレッド'''がコア数分作成されます。 --fork オプションを利用している場合は、'''スレッド''' ではなく、指定された数の'''プロセス''' が生成されて処理が実行されます。 | ||
+ | == 分散処理について == | ||
+ | John 自体は、単体で動作するものですが、コミュニティ版の jumbo パッチが適応されたものは、分散処理が可能です。 | ||
+ | MPI を利用して、分散処理が可能です。MPI が使えて、 NFS を使うといった形での分散処理になるようです。 | ||
+ | |||
+ | OpenMPI を使うには、 OpenMPI のライブラリやヘッダファイル、 OpenMPI に対応した Cコンパイラが必要になります。 | ||
+ | == 力技の分散処理について == | ||
+ | 分散処理したいが、OpenMPI を使えない環境である場合には、力技で分散処理することもできます。 | ||
+ | |||
+ | 以下のコマンドが使えれば、良いでしょう。 | ||
+ | * ssh/scp | ||
+ | * tmux | ||
+ | * split | ||
+ | あとは、欲しいだけの能力(CPUパワー)を備えた、ホスト x 台数 のリソースを用意します。 | ||
+ | だいたい以下の手順になります。 | ||
+ | # splitコマンドでターゲットになるファイルをホスト数で分割します | ||
+ | #: split コマンドは行数で指定(-lオプション)できるので、 行数 ÷ 台数 を四捨五入した数で、分割します。 | ||
+ | # scp でターゲットファイルを各ホストに配布します | ||
+ | # ssh で tmux を実行し、tmux のセッションに john の実行命令を実行します | ||
+ | # ssh で john --show で進捗をチェックします | ||
+ | == 環境構築 == | ||
+ | === $JOHN/dynamic.conf: No such file or directory === | ||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
$JOHN/dynamic.conf: No such file or directory | $JOHN/dynamic.conf: No such file or directory | ||
行21: | 行166: | ||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
.include <dynamic.conf> | .include <dynamic.conf> | ||
+ | </syntaxhighlight> | ||
+ | === open: $JOHN/john.local.conf: No such file or directory === | ||
+ | FreeBSD の john-1.7.9.j.7 で以下のエラーに遭遇しました。 | ||
+ | <syntaxhighlight lang="bash"> | ||
+ | $ john | ||
+ | open: $JOHN/john.local.conf: No such file or directory | ||
</syntaxhighlight> | </syntaxhighlight> | ||
+ | john.local.conf がない、というので、空のファイルを作れば、問題は解決します。 | ||
+ | <syntaxhighlight lang="bash"> | ||
+ | $ sudo touch /usr/local/share/john/john.local.conf | ||
+ | </syntaxhighlight> | ||
== コマンドラインオプション == | == コマンドラインオプション == | ||
− | |||
<source lang="bash"> | <source lang="bash"> | ||
% john | % john | ||
行74: | 行228: | ||
--crack-status emit a status line whenever a password is cracked | --crack-status emit a status line whenever a password is cracked | ||
</source> | </source> | ||
− | |||
== 使い方 == | == 使い方 == | ||
− | |||
=== FreeBSD === | === FreeBSD === | ||
− | + | FreeBSDのパスワードをクラッキングするには、以下のコマンドを実行します。 | |
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
sudo john /etc/master.passwd | sudo john /etc/master.passwd | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | |||
=== Linux === | === Linux === | ||
− | + | Linuxでは、一度 unshadow を実行する必要があります。 | |
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
sudo sh -c 'unshadow /etc/passwd /etc/shadow > /root/passwdfile' | sudo sh -c 'unshadow /etc/passwd /etc/shadow > /root/passwdfile' | ||
sudo john /root/passwdfile | sudo john /root/passwdfile | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | |||
=== Windowsパスワードのクラック === | === Windowsパスワードのクラック === | ||
− | |||
[[Windowsのパスワード]]の[[ハッシュ]]の[[パスワードクラック]]の例です。 | [[Windowsのパスワード]]の[[ハッシュ]]の[[パスワードクラック]]の例です。 | ||
行98: | 行247: | ||
下記のハッシュを含んだファイル hash.txt を用意します。 | 下記のハッシュを含んだファイル hash.txt を用意します。 | ||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
− | Administrator:500: | + | Administrator:500:01fc5a6be7bc6929aad3b435b51404ee:0cb6948805f797bf2a82807973b89537::: |
</syntaxhighlight> | </syntaxhighlight> | ||
行111: | 行260: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
+ | [[LMハッシュ]]と[[NTLMハッシュ]]のどちらのモードで動かすか、指定しないと警告が出て、自動的に選択されます。 | ||
− | == | + | [[NTLMハッシュ]]を指定する場合。 |
+ | <syntaxhighlight lang="bash"> | ||
+ | $ john --format=nt hash.txt | ||
+ | Loaded 6 password hashes with no different salts (NT MD4 [128/128 X2 SSE2-16]) | ||
+ | XXXX (Administrator) | ||
+ | </syntaxhighlight> | ||
− | * [[ | + | [[LMハッシュ]]を指定する場合。 |
− | * [[ | + | <syntaxhighlight lang="bash"> |
+ | $ john --format=nt2 hash.txt | ||
+ | Loaded 6 password hashes with no different salts (NT v2 [SSE2i 12x]) | ||
+ | Remaining 2 password hashes with no different salts | ||
+ | </syntaxhighlight> | ||
+ | === インクリメンタルにパスワードを生成する === | ||
+ | インクリメンタルにパスワードを生成できます。[[総当たり攻撃]] | ||
+ | <syntaxhighlight lang="bash"> | ||
+ | $ john -incremental -stdout | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | 実行例は、以下の通りです。 | ||
+ | <syntaxhighlight lang="bash"> | ||
+ | % john -incremental -stdout | head -10 | ||
+ | 1952 | ||
+ | sammy | ||
+ | stark | ||
+ | start | ||
+ | stack | ||
+ | stace | ||
+ | steve | ||
+ | stevy | ||
+ | steen | ||
+ | steet | ||
+ | </syntaxhighlight> | ||
+ | パイプで別のコマンドに喰わせたりして、使うことができます。 | ||
+ | |||
+ | パスワードの桁数などのパスワードの定義は、 john.local.conf で設定できます。 | ||
+ | -incrementalオプションにモード(下記の例ではfoo)を指定します。 | ||
+ | <syntaxhighlight lang="bash"> | ||
+ | % john -incremental=foo -stdout | ||
+ | </syntaxhighlight> | ||
+ | FreeBSDでは、 /usr/local/share/john/john.local.conf で設定できます。 | ||
+ | === パスワードリストファイルを指定して辞書攻撃を行う === | ||
+ | パスワードリストファイルを指定して、辞書攻撃のオフラインアタックできます。 | ||
+ | <syntaxhighlight lang="bash"> | ||
+ | john --wordlist=password.lst target.txt | ||
+ | </syntaxhighlight> | ||
+ | === 並行処理を行う === | ||
+ | [[John the Ripper]]で複数プロセスによる並行処理を行う場合には、 --fork オプションを利用します。以下の例では、4プロセスが起動されます。 | ||
+ | <syntaxhighlight lang="bash"> | ||
+ | john --fork=4 target.txt | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | --forkオプションを使用しない場合に、'''OpenMP''' を有効にしてコンパイルされた [[John the Ripper]] は、コア数に応じたスレッド数を自動的に起動して、並列に処理を行えます。 | ||
+ | |||
+ | === ベンチマーク === | ||
+ | ベンチマークには、 --test オプションを使用します。 | ||
+ | <syntaxhighlight lang="bash"> | ||
+ | $ john --test | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | 実行例は、以下の通りです。 | ||
+ | <syntaxhighlight lang="bash"> | ||
+ | $ john --test | ||
+ | Will run 4 OpenMP threads | ||
+ | Benchmarking: descrypt, traditional crypt(3) [DES 128/128 SSE2-16]... (4xOMP) DONE | ||
+ | Many salts: 13942K c/s real, 3576K c/s virtual | ||
+ | Only one salt: 6193K c/s real, 2624K c/s virtual | ||
+ | |||
+ | Benchmarking: bsdicrypt, BSDI crypt(3) ("_J9..", 725 iterations) [DES 128/128 SSE2-16]... (4xOMP) DONE | ||
+ | Many salts: 477184 c/s real, 121915 c/s virtual | ||
+ | Only one salt: 421888 c/s real, 117907 c/s virtual | ||
+ | </syntaxhighlight> | ||
+ | == メモ == | ||
+ | === 自社サービスのアカウントに弱いパスワードを設定させない === | ||
+ | john の話ではありませんが、 | ||
+ | 自社でウェブサービスを提供していて、アカウントサービスを提供しているのであれば、アカウント乗っ取りの対策が必要になります。ユーザアカウントが乗っ取られるとサポート業務が発生します。はじめから、 john に付属している辞書ファイルにあるパスワードを設定させない、というのは、ユーザのためにも、自社のためにも、双方のメリットがあります。 | ||
+ | === 従業員の弱いパスワードを調べる === | ||
+ | john の話ではありませんが、 | ||
+ | 従業員の弱いパスワードを調べることもできますが、はじめから、 john に付属している辞書ファイルにあるパスワードを設定させない、というほうが効率的でしょう。 | ||
+ | == 関連項目 == | ||
+ | * [[/usr/local/cuda-8.0/targets/x86_64-linux/lib/libOpenCL.so.1 no version information available]] | ||
+ | * [[John the Ripper NVIDIA Tesla M40 benchmark]] | ||
+ | * passwd | ||
+ | * unshadow | ||
* [[パスワードクラック]] | * [[パスワードクラック]] | ||
* [[Windowsアカウントのパスワードをクラッキングする方法]] | * [[Windowsアカウントのパスワードをクラッキングする方法]] | ||
+ | <!-- vim: filetype=mediawiki | ||
+ | --> |
2017年9月3日 (日) 12:12時点における最新版
John the Ripperは、有名なパスワードクラッキングのソフトウェアの1つです。Unix(FreeBSD, Linux)やWindowsのパスワードをクラッキングすることができます。
読み方
- John the Ripper
- じょん ざ りっぱー
目次
概要
John the Ripperは、高速なパスワードクラッカーです。多くのUnix系OSやWindows, DOS, BeOS, OpenVMS などで利用可能です。主要な目的な弱いUnixパスワードを検出することです。それにくわえて、Windows のLMハッシュなど、いくつもの crypt パスワードハッシュタイプを理解できます。John the Ripperは、オフラインのパスワードクラッキングツールです。
John the Ripperでは、総当たり攻撃 や 辞書攻撃 が可能です。 辞書ファイルとして password.lst が付属しています。 3000件程度のよくあるパスワードが用意されています。
John the Ripperは、無償のオープンソースソフトウェアです。
John the Ripperは、'GPU をサポートしていて、CUDAや OpenCL と連携可能です。
どのようなシーンで使われるのか?
一体、パスワードクラッカーは、どういったときに使われるのでしょうか?
単純に、自分のパソコンのアカウントのパスワードがわからなくなった、というケースもあるかもしれませんが、それは、稀な話でしょう。
おそらく、悪の攻撃者集団(不正利用を目的とした営利企業、営利グループ)が、不正利用を目的として、john を使っていると考えられます。 たくさんのウェブサービスが存在しており、その脆弱性を日夜探している人達がいます。脆弱性を探している人たちの中には、情報を盗むことを目的としてやっている人たちがいます。 その人達の狙いの1つとして考えられるのが、アカウント情報です。 アカウント情報には、パスワードといった、非常に重要な情報も含まれています。
ウェブサービスによって、パスワードが 平文 で保存されていることもありますし、ハッシュ化されたパスワード であることもあります。それは、ウェブサービス提供者のポリシーだったり、知識やスキルによって、どのような実装にされているかが決まってきます。
平文 でパスワードが保存されている場合には、パスワードクラッキング の出番はありません。なぜなら、答えがはじめから解っているからです。
手に入ったものが ハッシュ化されたパスワード だとすれば、攻撃者の次の仕事は、パスワードクラッキング でしょう。もちろん、パスワードクラッキング にコストを掛けずに、平文 のパスワードが得られそうなサイトを狙っていったほうが効率的かもしれません。
ハッシュ化されたパスワード を解くには、非常に多くの時間がかかるかもしれませんし、すぐに解けるかもしれません。単純なパスワードであれば、すぐに解けますし、辞書に存在しない長いパスワードであれば、計算が終わるのは、天文学的な数字の時間がかかるかもしれません。
大量のパスワードを相手にするのか、狙った単体のパスワードを相手にするのか、でも事情が変わってきます。大量のパスワードをそこそこクラッキングできれば良いのであれば、辞書ファイルを使って、短時間で解けるものだけ解く、といった方針がとれるかもしれません。
おそらく、「攻撃者はパスワードクラッカを使用して、パスワードを入手している」ということが言えるでしょう。 あなたが「攻撃者と戦う側の人間」であるのなら、あなたのユーザを守るために、何ができるのか、考えなければなりません。
サポートしているプラットフォーム
- Windows
- FreeBSD
- Linux
- MacOS
インストール
FreeBSDにインストールする場合
pkgコマンドでインストールする場合
sudo pkg install john
FreeBSD 版は、 jumbo パッチが当たったバージョンの john がインストールされます。
CentOSにインストールする場合
sudo yum -y --enablerepo=rpmforge install john
MacOSにインストールする
$ brew install john
john をビルドする
CentOS では、 openssl-devel をインストールする必要があります。 Ubuntu では openssl-devel が存在しないので、 libssl-dev をインストールします。
centos$ sudo yum install -y openssl-devel ubuntu$ sudo apt install -y libssl-dev
john のノーマル版は、make するときに、ターゲットの CPU を指定します。
$ tar zxfp john-1.8.0.tar.gz $ cd john-1.8.0/src $ make clean linux-x86-64-avx $ ../john --test
make と叩くとターゲットの CPU のリストが表示されます。
To build John the Ripper, type: make clean SYSTEM where SYSTEM can be one of the following: linux-x86-64-avx Linux, x86-64 with AVX (2011+ Intel CPUs) linux-x86-64-xop Linux, x86-64 with AVX and XOP (2011+ AMD CPUs) linux-x86-64 Linux, x86-64 with SSE2 (most common) linux-x86-avx Linux, x86 32-bit with AVX (2011+ Intel CPUs) linux-x86-xop Linux, x86 32-bit with AVX and XOP (2011+ AMD CPUs) linux-x86-sse2 Linux, x86 32-bit with SSE2 (most common, if 32-bit) linux-x86-mmx Linux, x86 32-bit with MMX (for old computers) linux-x86-any Linux, x86 32-bit (for truly ancient computers) linux-alpha Linux, Alpha linux-sparc Linux, SPARC 32-bit linux-ppc32-altivec Linux, PowerPC w/AltiVec (best) linux-ppc32 Linux, PowerPC 32-bit linux-ppc64 Linux, PowerPC 64-bit linux-ia64 Linux, IA-64 freebsd-x86-64 FreeBSD, x86-64 with SSE2 (best) freebsd-x86-sse2 FreeBSD, x86 with SSE2 (best if 32-bit) freebsd-x86-mmx FreeBSD, x86 with MMX freebsd-x86-any FreeBSD, x86 freebsd-alpha FreeBSD, Alpha openbsd-x86-64 OpenBSD, x86-64 with SSE2 (best) openbsd-x86-sse2 OpenBSD, x86 with SSE2 (best if 32-bit) openbsd-x86-mmx OpenBSD, x86 with MMX openbsd-x86-any OpenBSD, x86 openbsd-alpha OpenBSD, Alpha openbsd-sparc64 OpenBSD, SPARC 64-bit (best) openbsd-sparc OpenBSD, SPARC 32-bit openbsd-ppc32 OpenBSD, PowerPC 32-bit openbsd-ppc64 OpenBSD, PowerPC 64-bit openbsd-pa-risc OpenBSD, PA-RISC openbsd-vax OpenBSD, VAX netbsd-sparc64 NetBSD, SPARC 64-bit netbsd-vax NetBSD, VAX
john (jumbo パッチ版) をビルドするには、以下の手順でビルドできます。
$ tar zxfp john-1.8.0-jumbo-1.tar.gz $ cd john-1.8.0-jumbo-1/src $ ./configure $ make $ ../john --test
FreeBSD では、少しビルドが面倒でした。configure やソースコード をいい加減に書き換えてやってしまいました。
パスワード辞書ファイル/パスワードリストファイル
john に付属している辞書ファイル/パスワードリスト
John the Ripperには、辞書攻撃用のパスワードリストファイルの password.lst が付属しています。 この辞書ファイルは、 openwall.com で公開されている辞書ファイルです。 約3600個程度のパスワードが登録されています。 登録されているパスワードは、よくあるパスワードです。
よくあるパスワードというのは、
- 123456
- password
- qwerty
といったものです。 「よくあるパスワード」というのは、「使用すべきではないパスワード」でもあります。
それ以外の辞書ファイル/パスワードリスト
ncrack には、いくつかのパスワードリストが付属しています。 おそらく、john と同じもの、と、それ以外があります。たとえば、 top50000.pwd や myspace.pwd などです。
並行処理について
John the Ripper では、 --fork オプションを利用して、並行処理が可能になります。 CPUの数/CPUのコア数を指定して、処理すれば良いでしょう。
並列処理について
John the Ripper では、 OpenMP が利用できる場合には、自動的にスレッドがコア数分作成されます。 --fork オプションを利用している場合は、スレッド ではなく、指定された数のプロセス が生成されて処理が実行されます。
分散処理について
John 自体は、単体で動作するものですが、コミュニティ版の jumbo パッチが適応されたものは、分散処理が可能です。 MPI を利用して、分散処理が可能です。MPI が使えて、 NFS を使うといった形での分散処理になるようです。
OpenMPI を使うには、 OpenMPI のライブラリやヘッダファイル、 OpenMPI に対応した Cコンパイラが必要になります。
力技の分散処理について
分散処理したいが、OpenMPI を使えない環境である場合には、力技で分散処理することもできます。
以下のコマンドが使えれば、良いでしょう。
- ssh/scp
- tmux
- split
あとは、欲しいだけの能力(CPUパワー)を備えた、ホスト x 台数 のリソースを用意します。
だいたい以下の手順になります。
- splitコマンドでターゲットになるファイルをホスト数で分割します
- split コマンドは行数で指定(-lオプション)できるので、 行数 ÷ 台数 を四捨五入した数で、分割します。
- scp でターゲットファイルを各ホストに配布します
- ssh で tmux を実行し、tmux のセッションに john の実行命令を実行します
- ssh で john --show で進捗をチェックします
環境構築
$JOHN/dynamic.conf: No such file or directory
$JOHN/dynamic.conf: No such file or directory
Linux で上記のエラーメッセージがでる場合は、下記の対応をします。 /etc/john.conf のファイルの下記の部分をコメントアウトすることで、メッセージがでなくなります
.include <dynamic.conf>
open: $JOHN/john.local.conf: No such file or directory
FreeBSD の john-1.7.9.j.7 で以下のエラーに遭遇しました。
$ john open: $JOHN/john.local.conf: No such file or directory
john.local.conf がない、というので、空のファイルを作れば、問題は解決します。
$ sudo touch /usr/local/share/john/john.local.conf
コマンドラインオプション
% john John the Ripper password cracker, ver: 1.7.9-jumbo-5_omp [freebsd-x86-any] Copyright (c) 1996-2011 by Solar Designer and others Homepage: http://www.openwall.com/john/ Usage: john [OPTIONS] [PASSWORD-FILES] --config=FILE use FILE instead of john.conf or john.ini --single[=SECTION] "single crack" mode --wordlist=FILE --stdin wordlist mode, read words from FILE or stdin --pipe like --stdin, but bulk reads, and allows rules --encoding=NAME the input data is in a 'non-standard' character. encoding. NAME = utf-8, koi8-r, and others. For a full list, use --encoding=LIST --rules[=SECTION] enable word mangling rules for wordlist mode --incremental[=MODE] "incremental" mode [using section MODE] --markov[=LEVEL[:opts]] "Markov" mode (see documentation) --external=MODE external mode or word filter --stdout[=LENGTH] just output candidate passwords [cut at LENGTH] --restore[=NAME] restore an interrupted session [called NAME] --session=NAME give a new session the NAME --status[=NAME] print status of a session [called NAME] --make-charset=FILE make a charset file. It will be overwritten --show[=LEFT] show cracked passwords [if =LEFT, then uncracked] --test[=TIME] run tests and benchmarks for TIME seconds each --users=[-]LOGIN|UID[,..] [do not] load this (these) user(s) only --groups=[-]GID[,..] load users [not] of this (these) group(s) only --shells=[-]SHELL[,..] load users with[out] this (these) shell(s) only --salts=[-]COUNT[:MAX] load salts with[out] COUNT [to MAX] hashes --pot=NAME pot file to use --format=NAME force hash type NAME: des/bsdi/md5/bf/afs/lm/ dynamic_n/bfegg/dmd5/dominosec/epi/hdaa/ipb2/krb4/ krb5/mschapv2/mysql-fast/mysql/netlm/netlmv2/netntlm/ netntlmv2/nethalflm/md5ns/nt/phps/po/xsha/crc32/ hmac-md5/lotus5/md4-gen/mediawiki/mscash/mscash2/ mskrb5/mssql/mssql05/mysql-sha1/nsldap/nt2/oracle11/ oracle/phpass-md5/pix-md5/pkzip/raw-md4/raw-md5thick/ raw-md5/raw-sha1/raw-sha/raw-md5u/salted-sha1/sapb/ sapg/sha1-gen/raw-sha224/raw-sha256/raw-sha384/ raw-sha512/xsha512/hmailserver/sybasease/trip/ssh/pdf/ rar/zip/dummy --subformat=LIST get a listing of all 'dynamic_n' formats --save-memory=LEVEL enable memory saving, at LEVEL 1..3 --mem-file-size=SIZE size threshold for wordlist preload (default 5 MB) --field-separator-char=C use 'C' instead of the ':' in input and pot files --fix-state-delay=N performance tweak, see documentation --nolog disables creation and writing to john.log file --crack-status emit a status line whenever a password is cracked
使い方
FreeBSD
FreeBSDのパスワードをクラッキングするには、以下のコマンドを実行します。
sudo john /etc/master.passwd
Linux
Linuxでは、一度 unshadow を実行する必要があります。
sudo sh -c 'unshadow /etc/passwd /etc/shadow > /root/passwdfile' sudo john /root/passwdfile
Windowsパスワードのクラック
Windowsのパスワードのハッシュのパスワードクラックの例です。
ハッシュは、PwDump などを利用して用意します。 詳しくは、 Windowsアカウントのパスワードをクラッキングする方法 を参考にしてください。 下記のハッシュを含んだファイル hash.txt を用意します。
Administrator:500:01fc5a6be7bc6929aad3b435b51404ee:0cb6948805f797bf2a82807973b89537:::
パスワードクラックします。
john hash.txt
パスワードを表示します。
john --show hash.txt
LMハッシュとNTLMハッシュのどちらのモードで動かすか、指定しないと警告が出て、自動的に選択されます。
NTLMハッシュを指定する場合。
$ john --format=nt hash.txt Loaded 6 password hashes with no different salts (NT MD4 [128/128 X2 SSE2-16]) XXXX (Administrator)
LMハッシュを指定する場合。
$ john --format=nt2 hash.txt Loaded 6 password hashes with no different salts (NT v2 [SSE2i 12x]) Remaining 2 password hashes with no different salts
インクリメンタルにパスワードを生成する
インクリメンタルにパスワードを生成できます。総当たり攻撃
$ john -incremental -stdout
実行例は、以下の通りです。
% john -incremental -stdout | head -10 1952 sammy stark start stack stace steve stevy steen steet
パイプで別のコマンドに喰わせたりして、使うことができます。
パスワードの桁数などのパスワードの定義は、 john.local.conf で設定できます。 -incrementalオプションにモード(下記の例ではfoo)を指定します。
% john -incremental=foo -stdout
FreeBSDでは、 /usr/local/share/john/john.local.conf で設定できます。
パスワードリストファイルを指定して辞書攻撃を行う
パスワードリストファイルを指定して、辞書攻撃のオフラインアタックできます。
john --wordlist=password.lst target.txt
並行処理を行う
John the Ripperで複数プロセスによる並行処理を行う場合には、 --fork オプションを利用します。以下の例では、4プロセスが起動されます。
john --fork=4 target.txt
--forkオプションを使用しない場合に、OpenMP を有効にしてコンパイルされた John the Ripper は、コア数に応じたスレッド数を自動的に起動して、並列に処理を行えます。
ベンチマーク
ベンチマークには、 --test オプションを使用します。
$ john --test
実行例は、以下の通りです。
$ john --test Will run 4 OpenMP threads Benchmarking: descrypt, traditional crypt(3) [DES 128/128 SSE2-16]... (4xOMP) DONE Many salts: 13942K c/s real, 3576K c/s virtual Only one salt: 6193K c/s real, 2624K c/s virtual Benchmarking: bsdicrypt, BSDI crypt(3) ("_J9..", 725 iterations) [DES 128/128 SSE2-16]... (4xOMP) DONE Many salts: 477184 c/s real, 121915 c/s virtual Only one salt: 421888 c/s real, 117907 c/s virtual
メモ
自社サービスのアカウントに弱いパスワードを設定させない
john の話ではありませんが、 自社でウェブサービスを提供していて、アカウントサービスを提供しているのであれば、アカウント乗っ取りの対策が必要になります。ユーザアカウントが乗っ取られるとサポート業務が発生します。はじめから、 john に付属している辞書ファイルにあるパスワードを設定させない、というのは、ユーザのためにも、自社のためにも、双方のメリットがあります。
従業員の弱いパスワードを調べる
john の話ではありませんが、 従業員の弱いパスワードを調べることもできますが、はじめから、 john に付属している辞書ファイルにあるパスワードを設定させない、というほうが効率的でしょう。