超ド級の展開率、重ね合わせ型の新型ZIP爆弾登場

先日、46MBのZIPファイルを展開することで4.5PBのサイズまで膨れ上がらせることができるという驚異のZIP爆弾が発見された。ZIPフォーマットの穴というか、想定外の使い方をするというか、巧みにZIPフォーマットを構築するとすごいレベルの圧縮率(展開率?)が実現できてしまうという恐ろしい爆弾が明らかになったのだ。発見者によると、次のような展開が実現できる。

ZIPファイルサイズ 展開後サイズ
42KB 5.5GB
10MB 281TB
46MB 4.5PB

46MBを4.5PBまで膨れ上がらせるには、Zip64を使う必要がある。このため、実質的には10MBを281TBまで膨れ上がらせることができるというのが最大値となるだろう。

しかも、この発見が素晴らしいのは、既存のZIPフォーマットの枠組みの中で実現しているというか、既存のZIPパーサが解釈できる枠組みの中で実現しているため、既存のunzipコマンドや展開系コマンドと互換性があるのだ。

つまり、使っている環境でZIPファイルを展開するだけで、10MBが281TBへ膨れ上がる。こんな大きなサイズのストレージを使っている人はほとんどいないだろうから、ZIPファイルを展開するとディスクを使い切ることになる。こんなものを送りつけられたらたまったものではない。

「でも、そんなファイルを作るのは難しいのでは?」と考えるかもしれない。しかし、すでに実証コードが公開されており、実に簡単に作成することができるのだ。

ZIP爆弾を展開してみる

それでは、本連載の目的に合わせ、早速このZIP爆弾を展開してみたい。ここでは、10MBの新型ZIP爆弾を用意した。次の環境で実行してみる。なお、本番環境ではこんなことを絶対にしてはいけない。

  • 実験に使った環境

    実験に使った環境

ZIP爆弾を展開しつつ、ほかのターミナルでディスクの使用量を調べてみると、次のように順調にディスク空き容量が減っていった。

  • 順調に減っていくディスク空き容量

    順調に減っていくディスク空き容量

しばらく動かし続けると、次のようにディスク空き容量を使い切ってunzipコマンドが停止した。

  • ディスクの空き容量がなくなってunzipコマンドが停止

    ディスクの空き容量がなくなってunzipコマンドが停止

実際にどのようなファイルが作成されているのか調べてみると、4GBのファイルが順次作成されていることがわかる。最後にはディスク使用率が100%になって、もう書き込めない状態になっている。

  • 0、1、2・・・ といったファイル名で4GBのファイルが生成されていく

    0、1、2……といったファイル名で4GBのファイルが生成されていく

なお、この状態に陥るとシェルがまともに動かなくなってくる。ssh経由でしか操作できない環境でこういった作業を行うと、最悪の場合はログインができなくなる。実際の運用環境では決してこういったことはしないでおこう。

ソーシャルエンジニアリングとの併用に注意

迷惑メールは時間とともに巧妙さを増している。例えば、コンプライアンスの関係で、暗号化されたZIPファイルとパスワードを別のメールで送る仕組みを採用している企業がある。こうした企業から送られてきたZIPファイルのように装ってZIP爆弾が送られてきたとしよう。スパムでわざわざパスワードをかけたZIPファイルを送ることはないだろうと思って、送信元をよく確認しないでファイルを展開してしまったりはしないだろうか。

添付されているZIPファイルがZIP爆弾だったら、そこからディスクを使いつぶすまでゴミデータがディスクに書き込まれていくことになる。そして、この新型ZIP爆弾はもう情報が公開されており、誰でも結構簡単に作れてしまう。

メールに添付されているZIPファイルを展開してフィルタリングやウィルスチェックを実施するタイプのアプライアンスやソフトウェアを使っている場合、そのソフトウェア自体が適切に動作しなくなる可能性も高い。実際にこうした攻撃が簡単に実施できてしまうということは覚えておこう。