web-dev-qa-db-ja.com

.encfs6.xmlを指定したEncFSの破壊

EncFSフォルダーのパスワードを忘れた(作成、休暇に行った、忘れた)。しかし、パスワードが作成された方法を覚えています(たとえば、4つの辞書の単語のシーケンスでした)。だから私はパスワードを見つけることを試みることにしました-私がシステムセキュリティの専門家でなくても。

パスワードを解読する唯一の方法は、ブルートフォース攻撃です。

.encfs6.xmlファイルを含むEncFSフォルダーがある場合、フォルダーをマウントしてパスワードを指定するだけで、パスワードが正しいかどうかをテストできます こちら

しかし、この種の攻撃は非常に遅いことに気づきました。並列攻撃を試し、GPUを使用してパスワードをテストしたいと思います。

パスワードに対して「迅速に」攻撃を実行するには、たとえばパスワードのハッシュなどの「何か」を取得し、一致するものが見つかるまで推定パスワードのハッシュを計算する方がよいことを知っています。

ただし、EncFSのしくみはわかりません。.encfs6.xmlがデータを復号化するための基本であることは知っていますが、データに含まれるデータと、それを使用して攻撃を並列化する方法はわかりません。

EncFSはどのようにデータを暗号化し、.encfs6.xmlのコンテンツを使用して、encfsユーティリティを実行せずにパスワードが有効かどうかをテストすることができますか? (または、EncFSコードのどこでこの質問に回答するための関連情報を見つけることができますか?)

編集:

また、攻撃にopensslを使用することを検討していますが、コマンドラインのopensslツールで.encf6.xml情報を使用する方法を理解する必要があります。使用するアルゴリズムについてもわかりません:aes-256-what??

2
AkiRoss

Encfsディレクトリを作成(オプション、初期テスト設定を作成するために追加)

 TMPDIR=$(mktemp -d)
 cd ${TMPDIR}
 mkdir ${TMPDIR}/encrypted
 mkdir ${TMPDIR}/mount_point
 encfs ${TMPDIR}/encrypted ${TMPDIR}/mount_point

例として、パスワードを「正しいホースバッテリー」.

これで、次のファイルができました。

$ find
.
./encrypted
./encrypted/.encfs6.xml
./mount_point

また、次のようにディレクトリをマウントできるはずです。

encfs ${TMPDIR}/encrypted ${TMPDIR}/mount_point

(中にあるので許可エラーがあるかもしれません / tmp。クラッキング自体には必要ないため、無視してください。)

インストール 「ジョン・ザ・リッパー」 そして "噛み砕く"

  1. 最新のJohn the ripperを入手してください。

    $ {JOHN}によって参照されるディレクトリにインストールしたと仮定しましょう。

  2. インストール "噛み砕く" 単語リストを生成するには:

    Sudo apt install crunch

パスワードを解読する

  1. John the ripperのハッシュファイルを作成します。

    ${JOHN}/encfs2john.py ${TMPDIR}/encrypted/ > ${TMPDIR}/encfs6.xml.john
  2. クラッキングを開始します。

    1. 生成された単語リストを使用する:

      1. crunchを使用して単語リストを作成します。

        crunch 2 4 -o wordlist.txt -p staple battery horse correct

        これはファイルを生成します wordlist.txt 渡された単語の可能なすべての順序を含む:

         batterycorrecthorsestaple 
         batterycorrectstaplehorse 
         batteryhorsecorrectstaple 
         ... 
         staplecorrecthorsebattery 
         staplehorsebatterycorrect 
         staplehorsecorrectbattery 
        

        それを行うより広範な方法については、ここを参照してください: パスワードリストの生成、順列と長いパスワード

      2. ワードリストを使用してJohn the ripperを実行します。

        コマンド:

        ${JOHN}/john --wordlist=wordlist.txt --progress-every=3 --pot=cracked_passwords.pot ${TMPDIR}/encfs6.xml.john

        出力:

        デフォルトの入力エンコーディングを使用:UTF-8 
        ロードされた1つのパスワードハッシュ(EncFS [PBKDF2-SHA1 128/128 SSE4.1 4x AES/Blowfish])
         8つのOpenMPスレッドを実行します
         「q」またはCtrl-Cを押して中止します。ステータスの他のほとんどすべてのキー
         0g 0:00:00:00 DONE(2020-02-13 21:51)0g/s 0p/s 0c/s 0C/s 
        正しいホースバッテリー (/tmp/tmp.ZGtxLjHUQi/encrypted/)
        1g 0:00:00:01完了(2020-02-13 21:51)0.8695g/s 20.86p/s 20.86c/s 20.86C/s batterycorrecthorsestaple..staplehorsecorrectbattery 
        「-show」オプションを使用して、クラックされたすべてのパスワードを確実に表示します
        セッションが完了しました
    2. マスクモード」の使用:

      このモードでは、一連の文字、最小長と最大長、および既知のパスワード部分を含むマスクを指定できます。詳細はこちらをご覧ください: https://github.com/magnumripper/JohnTheRipper/blob/bleeding-jumbo/doc/MASK

      コマンド:

      ${JOHN}/john --min-length=25 --max-length=25 -2='eolabpcrsthy' -mask='correct?2?2?2sebatterystaple' --progress-every=3 --pot=cracked_passwords.pot ${TMPDIR}/encfs6.xml.john

      出力:

      デフォルトの入力エンコーディングを使用:UTF-8 
      ロードされた1つのパスワードハッシュ(EncFS [PBKDF2-SHA1 128/128 SSE4.1 4x AES/Blowfish])
       8つのOpenMPスレッドを実行します
       「q」またはCtrl-Cを押して中止します。ステータスの他のほとんどすべてのキー
       0g 0:00:00:00(25)0g/s 0p/s 0c/s 0C/s 
       0g 0:00:00:02 3.70%(25)(ETA:21:50:48)0g/s 27.46p/s 27.46c/s 27.46C/s correctbpesebatterystaple..correctyresebatterystaple 
       0g 0:00 :00:05 9.26%(25)(ETA:21:50:48)0g/s 28.57p/s 28.57c/s 28.57C/s correctboosebatterystaple..correctyaosebatterystaple 
       0g 0:00:00:09 14.81%(25)(ETA:21:50:53)0g/s 28.41p/s 28.41c/s 28.41C/s correctbtosebatterystaple..correctyyosebatterystaple 
       0g 0:00:00:11 18.52%(25 )(ETA:21:50:52)0g/s 28.59p/s 28.59c/s 28.59C/s correctsllsebatterystaple..correctaplsebatterystaple 
       0g 0:00:00:14 24.07%(25)(ETA: 21:50:52)0g/s 28.74p/s 28.74c/s 28.74C/s correctshlsebatterystaple..correctaoasebatterystaple 
       0g 0:00:00:17 29.63%(25)(ETA:21:50: 51)0g/s 28.84p/s 2 8.84c/s 28.84C/s correctscasebatterystaple..correctatasebatterystaple 
       0g 0:00:00:21 35.19%(25)(ETA:21:50:52)0g/s 28.89p/s 28.89c/s 28.89C/s correctslbsebatterystaple..correctapbsebatterystaple 
       0g 0:00:00:23 38.89%(25)(ETA:21:50:53)0g/s 28.95p/s 28.95c/s 28.95C/s correctesbsebatterystaple..correctrhbsebatterystaple 
       0g 0:00:00:26 44.44%(25)(ETA:21:50:52)0g/s 28.97p/s 28.97c/s 28.97C/s correctebpsebatterystaple..correctrcpsebatterystaple 
       0g 0:00:00:29 50.00%(25)(ETA:21:50:52)0g/s 29.01p/s 29.01c/s 29.01C/s correcteecsebatterystaple..correctrlcsebatterystaple 
       0g 0:00:00:33 55.56%(25)(ETA:21:50:52)0g/s 29.04p/s 29.04c/s 29.04C/s correctescsebatterystaple..correctrhcsebatterystaple 
       0g 0: 00:00:35 59.26%(25)(ETA:21:50:53)0g/s 29.06p/s 29.06c/s 29.06C/s correctborsebatterystaple..correctyarsebatterystaple 
      正しいホースバッテリー (/tmp/tmp.ZGtxLjHUQi/encrypted/)
      1g 0:00:00:36 DONE(25)(2020-02-13 21:50)0.02746g/s 29.00p/s 29.00c/s 29.00C/s correctborsebatterystaple..correctyarsebatterystaple 
      「-show」オプションを使用して、クラックされたすべてのパスワードを確実に表示します
      セッションが完了しました

      ここに -2 文字のセットを指定する一方で、 ?2 マスクのどこで使用するかを指定します。

ノート

  1. 見つかったパスワードの確認:

    コマンド:

    ${JOHN}/john --pot=cracked_passwords.pot --show ${TMPDIR}/encfs6.xml.john
    出力:
    /tmp/tmp.ZGtxLjHUQi/encrypted/:正しいホースバッテリー
    クラックされたパスワードハッシュ1個、残り0個

    cat cracked_passwords.potを使用することもできます。

  2. あなたはキャンセルされたクラッキング実行を続けることができます:

    ${JOHN}/john --restore
  3. 切り裂きジョン オプション:

    • --progress-every = N :N秒ごとにステータス行を出力します
    • --pot = NAME :使用するポットのファイル名

      デフォルトでは、ジョンは $ {JOHN} /john.pot。このオーバーライドにより、別のjohn.potのようなファイルを使用できるようになります(開始して、見つかったパスワードを格納するため)。

      cf: https://github.com/magnumripper/JohnTheRipper/blob/bleeding-jumbo/doc/OPTIONS

  4. ハッシュキャット そのときはもっと速いかもしれない 切り裂きジョン、しかしそれはまだencfsをサポートしていないようです。

1
KIAaze