euphonictechnologies’s diary

Haskell超初心者の日記です。OCamlが好きです。

follow us in feedly

ディスクイメージファイル(dmg)にかけたパスワードをAmazon EC2上でクラックする

パスワードが分からない!

昔アーカイブしたパスワード付きdmgファイルのパスワードがわからなくなってしまいました…。何とかしてクラック、いや、パスワードリカバリをしなければいけません。 おまけに手元にあるのは古いMacbook Airなのであんまりぶんぶんファンを回すとぶっ壊れてしまいそうです。それは嫌だ。というわけで、どっかクラウド上でクラックできないか、というのが本題です。

今ならAmazon Web Serviceが一年間無料

aws.amazon.com

によると、最小構成みたいなものが1年間無料で使えるみたいです。これはこの手のものを試すには持ってこいです。なのでいまさら初めてEC2を触ってみます。

Amazon Webserviceに登録してEC2を使えるようにする

これは上記からうまくやるとすぐに登録できます。後々の課金用に住所とか名前とかクレジット番号とかが必要です。課金するつもりはありませんが。

EC2インスタンスを作る

というわけで、登録した後から。

f:id:euphonictechnologies:20150906194818p:plain

このEC2を選択します。

次の画面でスクリーン中程のLaunch Instanceを選択します。

f:id:euphonictechnologies:20150906194914p:plain

その次は作るインスタンスのOS構成を選択します。一番上のAmazon標準を選びましょう。

f:id:euphonictechnologies:20150906194954p:plain

つぎはインスタンスの種類を選択します。無料なマイクロ(一番弱っちいやつ)を選びましょう。

f:id:euphonictechnologies:20150906195049p:plain

マイクロを選択したら確認画面へ行きましょう。Review and Launchです。

f:id:euphonictechnologies:20150906195124p:plain

そうするとストレージとかもろもろ全部設定されているので、このままLaunchで起動できます。このあとキーペアの設定があるので、適当に打ち込んでキーペアをダウンロードしましょう。キーペアファイルはsshコマンドでログインするときに必要です。

インスタンス作成が完了しました。

f:id:euphonictechnologies:20150906195233p:plain

Launch Instanceが画面の真ん中にある画面左側にはダッシュボードがあります。Instancesで作ったインスタンスの一覧が見られます。これで作成完了です。

EC2インスタンスに接続する

インスタンス一覧画面のPublic DNSが接続に必要なホスト情報です。キーペアファイルをどこかローカルディスク上に用意してください。

シェルからログインしましょう。

$ chmod 400 test.pem.txt
$ ssh -i test.pem.txt ec2-user@ec2-XXXXXXXXX.us-west-2.compute.amazonaws.com

こんな感じで接続できるはずです。まずキーペアファイルを400に設定しましょう。そうしないとログインできません。そのあとsshでログインします。

クラックに必要なソフトウェアJohnTheRipperをインストールする

JohnTheRipperのCommunity Editionはgithubじょうで開発が続けられています。

github.com

まずはコンパイルに必要なパッケージをインストールしましょう。

$ sudo yum install gcc
$ sudo yum install openssl-static.x86_64

これでパッケージがインストールできるはずです。JohnTheRipperをダウンロードしてコンパイルしましょう。

$ git clone https://github.com/magnumripper/JohnTheRipper.git

URLについては変更される可能性があるので上記githubページを参考にしてください。

クローンし終わったらクローンしたディレクトリ内のsrcディレクトリに移動しましょう。

$ cd JohnTheRipper/src

ここでconfigureしてmakeすればコンパイルできます。

$ ./configure && make

これでバイナリがsrcの隣のrunディレクトリにできているはずです。

$ cd ../run
$ ./john --test

テストしてみましょう。準備ができたらいよいよdmgのクラックです。

dmgをクラックしてみる。

runディレクトリにあるdmg2johnユーティリティでハッシュを生成して、そのハッシュをクラックする形になっています。

$ ./dmg2john ~/Desktop/folder.dmg > folder.dmg.txt

こんな感じでfolder.dmg.txtをつくって、このテキストファイルをクラックします。

$ ./john folder.dmg.txt

これでクラックスタートです。時間が経つとパスワードが見つかる…はず! GNU screenを使うとログアウトしてもセッションを保っておけるので便利です。

$ ./john folder.dmg.txt
Warning: detected hash type "dmg", but the string is also recognized as "dmg-opencl"
Use the "--format=dmg-opencl" option to force loading these as that type instead
Using default input encoding: UTF-8
Loaded 1 password hash (dmg, Apple DMG [PBKDF2-SHA1 128/128 AVX 4x2 3DES/AES])
Press 'q' or Ctrl-C to abort, almost any other key for status
0g 0:00:03:50 17.35% 1/3 (ETA: 20:04:11) 0g/s 25.32p/s 25.32c/s 25.32C/s Users/users/XXXXXX/desktop/folder.dmga..Ufoldera
...
a                (/Users/XXXXXX/Desktop/folder.dmg)
1g 0:00:35:11 DONE 2/3 (2015-09-06 20:17) 0.000473g/s 25.43p/s 25.43c/s 25.43C/s 777..mmm
Use the "--show" option to display all of the cracked passwords reliably
Session completed

見つかりました。"a"がパスワードです。これはテスト用に作ったdmgファイルです。

一回クラックを止めるにはqもしくはCtrl-cでプログラムをストップさせる。再開時には必ず

$ ./john --restore

ではじめること。ファイル名等は最後のセッションの記録に含まれているので指定しなくてよいです。新しく探索を始めると最後のセッション情報は消えてしまいます。気をつけましょう。

まとめ

これでdmgのパスワードを忘れても大丈夫!ただし複雑なパスワードをクラックするには天文学出来な時間がかかります。セキュリティ万歳!