ssh で鍵のパスフレーズを忘れること、ありませんか? 私は過去に2回ほどあります。 設定したパスフレーズではなぜか使えなかったり、パスフレーズをどこに控えたかを忘れてしまったり。 そんなときに、とても時間がかかりますがブルートフォースでパスワードを当てる方法があります。
使うもの
- john the ripper
- 総当たりをするための候補を作るプログラム。 linux だとパッケージに入っていることが多いです。
- ssh-privkey-crack.c
- キーの検証を行うプログラム。 コンパイルできる環境が必要です。
手順
lusas というプロジェクトから
ssh-privkey-crack.c
をダウンロードします。 (執筆時にはダウンロードできていたのですが、時点ではダウンロードできなくなっていました。)ダウンロードした
ssh-privkey-crack.c
をコンパイルします。 コンパイルの方法はプログラム内のコメントに書かれています。 私の環境ではgcc -Wall -o ssh-privkey-crack ssh-privkey-crack.c -lssl -lcrypto
でコンパイルできました。 コンパイル後のファイルには実行権限をつけておきます。john the ripper をダウンロードして設定ファイルを編集します。 私の環境(ubuntu)では
/etc/john/john.conf
がデフォルトの設定ファイルになっていました。 それに追記する形で設定を追加しました。123456[Incremental:Pattern1]File = $JOHN/digits.chrExtra = abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZMinLen = 3MaxLen = 10CharCount = 62総当たりをする場合の設定です。 File の指定は存在する chr ファイル を指定し、 Extra に chr ファイル 外 の文字で使用する文字を記述します。 chr ファイル の作り方がいまいち把握できていないのでこのようにしました。 MinLen 、 MaxLen はパスフレーズの長さの範囲を指定します。 CharCount で使用する文字の総数を記述します。 今回は 数字と大文字、小文字なので 62 です。 chr ファイルは私の環境だと
/usr/share/john/
にありました。- コマンド
john -stdout -incremental:Pattern1 | ./ssh-privkey-crack ssh-private-keyfile
を実行します。 最後に “-v” をつけると詳細なアウトプットが出せます。 (実際のところ MinLen = 3, MaxLen = 10, CharCount = 62 だとまず終わらないです。)