パスワードをかけても中身を見られてしまうZIPファイルの脆弱性〜既知平文攻撃〜
目次
ZIPファイルとは
主にWindowsで使用されるデータ圧縮フォーマットです。
#ZIPのフォーマットで圧縮されたファイル file.zip
データ圧縮によく使用されるフォーマットで、シンプルな暗号化機能も備えています。
圧縮するときにパスワードを設定するのですが、この暗号化には重大な脆弱性があることで知られています。
今回はその脆弱性についての記事をまとめました。
既知平文攻撃
ZIPファイルの暗号化は、設定されるパスワードを元に鍵を生成する共通鍵暗号方式です。
当然ながら、第3者にパスワードが知られてしまえばZIPファイルの中身を見られてしまいます。
ZIPファイルに長〜いパスワードをかける人はあまりおらず、しかもZIPファイルはパスワード入力制限もないので、かなり貧弱なランダム数生成器によるブルートフォースアタックでも簡単にパスワードを特定できそうですね。
しかし今回はそういった力技ではなく既知平文攻撃というちょっとスマートな攻撃方法を見てみます。
この既知平文攻撃では、条件が揃えばパスワードを知らなくても中身をみることができてしまいます。
既知平文攻撃は条件が揃った場合のみに有効です。
その条件とは、暗号化されたZIPファイルの中に1つでも中身のわかるファイルが存在する場合です。
もし、1つでも中身のわかるファイルが存在していれば、暗号化されたそのファイルと暗号化されていないファイルを比較して、パスワードを割り出すことができます。
パスワードがわかってしまえば、ZIPの暗号が解けるため他のファイルの閲覧も可能になります。
ゆえに既知平文攻撃と呼ばれています。
中身のわかるファイルが暗号化されたZIPファイルの中にある場合なんて少ないのでないかとも思うのですが、例えばネットに落ちている画像なんかをZIPファイルに置いていたりすると、既知平文攻撃が可能となります。
攻撃者はネットからその画像を拾ってきて、暗号化された画像と拾ってきた画像と比較してパスワードを割り出そうとします。
このような形でZIPファイルのパスワードをクラックされてしまうのが既知平文攻撃です。
実演
2つのファイルを用意します。
- password.txt
- hello.txt
#password.txtはこんな中身 password is 43jJKqqT
#hello.txtはこんな中身 hello world!!
この2つのファイルをZIPして、暗号化します。
zip -P 43jJKqqT hatena.zip password.txt hello.txt
パスワードは、43jJKqqT。
8文字のランダムな英数字です。
この時、hello.txtのファイルの中身は既知という設定です。(hello.txtと言えば、中身の推測も容易ですしね)
そして、読まれたくないファイルはpassword.txtです。
これで環境は整いました。
ここで既知平文攻撃をするために使用するツールがpkcrackです。
pkcrackは既知平文攻撃を行うツールで、Windowsは32bit版、UbuntuなどのLinux系はソースからビルドすることで使用することが出来ます。。
wget https://www.unix-ag.uni-kl.de/~conrad/krypto/pkcrack/pkcrack-1.2.2.tar.gz pkcrack-1.2.2/src make
無事にビルドできたら、次はpkcrackを使って既知平文攻撃を開始します。
./pkcrack-1.2.2/src/pkcrack -C hatena.zip -c hello.txt -p hello.txt -d hatena2.zip
pkcrackの使い方は以下です。
-C [暗号化されたzipファイル]
-c [暗号化されたzipファイルの中で平文がわかるファイル]
-p [平文のファイル]
-d [出力先(復号したzipファイルの名前)]
pkcrackの処理が終了すると、hatena2.zipにパスワードが解除された状態で出力されています。
これでpassword.txtの中身が見れてしまいます。
まとめ
既知平文攻撃という攻撃でした。
大事なのは、ZIPの暗号化を信用しないことです。
あくまでもZIPの暗号化をしてもローカルにとどめておくことが大事なのではないでしょうか。
暗号化したからと言って、ネットに上げるとこういった攻撃に晒され、クラックされる危険性が高くなります。
暗号化と言ってもZIPの場合は、極めて重大な脆弱性があるということを覚えておく必要がありそうです。
以上終わり!