RSSおすすめ記事です

スポンサーリンク

怪しいZIPファイルにご用心、「非再帰的ZIP爆弾」は10MBのファイルが281TBに膨らむ

ニュースセキュリティ

スポンサーリンク

怪しいZIPファイルにご用心、「非再帰的ZIP爆弾」は10MBのファイルが281TBに膨らむ

1 : 名無しのシステムエンジニアさん 2019/07/06(土) 02:34:22.48 ID:CAP_USER.net

https://gigazine.net/news/20190705-zip-bomb/
数十KBのZIPファイルに見えて解凍すると膨大なファイル容量を食う「ZIP爆弾(高圧縮ファイル爆弾)」は、ZIPファイルの中にZIPファイルを格納し、内側のZIPファイルの中にさらにZIPファイルが……という入れ子構造を用いることで圧縮アルゴリズムの限界をうまく回避していますが、それゆえに多くのアンチウイルスソフトで対策されています。この弱点を乗り越えた「非再帰的ZIP爆弾」は、展開後のサイズこそ高効率で作られた再帰的ZIP爆弾にかなわないものの、わずか10MBから281TBへ2800万倍に膨らみます。

ZIPの圧縮で一般的に用いられているアルゴリズムは「Deflate(デフレート)」と呼ばれるもので、圧縮・展開速度の速さが特徴的です。圧縮率が最高で1032:1(約0.096%)という点はZIP爆弾を作る際の「足かせ」となっており、この制限を回避するため、ZIP爆弾ではZIPファイル内にZIPファイルを格納する入れ子構造を利用して、入れ子1つごとに1032倍にできるだけ近い圧縮率を得ることで、巨大ファイルを極小に見せています。

たとえば、有名なZIP爆弾に「42.zip」というファイルがあります。このZIPファイルは2種類存在して、古いバージョンは展開時のパスが不要でファイルサイズが「42,374バイト」、新しいバージョンは展開時にパスが必要でファイルサイズが「42,838バイト」。以下は古いバージョンのプロパティです。

中をのぞいてみると「lib 0.zip」から「lib f.zip」まで連番のつけられた16個のZIPファイルが格納されています。ファイルの元サイズは34,902バイト(35KB)で、圧縮後は2,533バイト(2.6KB)。圧縮率は7.3%。

「lib 0.zip」には、さらに「book 0.zip」から「book f.zip」というZIPファイルがあります。こちらは元サイズが29,446バイト(30KB)、圧縮後が2,084バイト(2.1KB)で、圧縮率7.1%。

外側の42.zipから数えて5層目の「page 0.zip」を開くと、とうとう入れ子が終了して「0.dll」というファイルが登場しました。元サイズは4,294,967,295バイト(4.3GB)で、圧縮後は4,168,158バイト(4.2MB)なので、圧縮率は実に0.1%です。

6層目には同じように0.1%にまで圧縮された巨大ファイルが他にも大量にあるので、もし42.zipを展開をすると、わずか42KBのところから4,507,981,343,026,016バイト(4.5PB)ものファイルが出現することになります。その膨張率は1060億倍。

ただし、これは「再帰的な展開が行われる実装なら」という前提が必要で、最上位層しか展開されない場合、展開後サイズはわずかに558,432バイト(558KB)で、元の13.2倍にしかなりません。

一方、デビッド・フィフィールド氏の提唱する非再帰的ZIP爆弾は、1層目に0.1%まで圧縮されたファイルが250個並んでおり、元ファイルサイズは42.zipと同じ42KBですが、展開すると元の12万9000倍となる5,461,307,620バイト(5.5GB)にまで膨らみます。


元ファイルを10MBにすると、展開後サイズを元の2800万倍の281TBにまで増やせるとのこと。さらに、Zip64を用いると、46MBのファイルを9800万倍の4.5PBにすることが可能。

この非再帰的ZIP爆弾は、ZIPコンテナ内のファイルを重複させることで、コピーを作ることなく複数ファイルに含まれる圧縮率の高いカーネルを参照する仕組みとなっています。このため、入力サイズに比例して出力サイズが増大し、「爆弾」が大きくなるほど圧縮率が向上するとのこと。

記事作成時点で、42.zipはアンチウイルスソフトが反応してダウンロードできないようになっていましたが、フィフィールド氏の作った非再帰的ZIP爆弾ファイルには反応しなかったので、くれぐれも怪しいZIPファイルには気をつけてください。


スポンサーリンク

ネットの反応

4 : 名無しのシステムエンジニアさん 2019/07/06(土) 03:03:07.62 ID:L4LQv+hP.net
Left Caption

単色ビットマップで巨大サイズ作るイタズラ昔有ったよね。
手口としては懐かしい感じw

7 : 名無しのシステムエンジニアさん 2019/07/06(土) 03:34:23.66 ID:eMKTeOzN.net
Left Caption

これでハードディスクが一瞬にして満杯になって作動不能になるわけだな。

8 : 名無しのシステムエンジニアさん 2019/07/06(土) 03:38:37.56 ID:MPiotHvc.net
Left Caption

アウトルックででかいファイル添付するバカのせいでメールサーバー止まったことがあったな

48 : 名無しのシステムエンジニアさん 2019/07/06(土) 17:30:23.85 ID:o09QgzYs.net
Left Caption

>>8
メールのサイズで弾かない設定にしてるのが悪い。

11 : 名無しのシステムエンジニアさん 2019/07/06(土) 04:09:01.26 ID:uJHLNBXY.net
Left Caption

えげつない

20 : 名無しのシステムエンジニアさん 2019/07/06(土) 09:15:45.32 ID:IVRM4rOZ.net
Left Caption

しかし、展開先もどうせ仮想ディスクなのであった。

21 : 名無しのシステムエンジニアさん 2019/07/06(土) 10:08:26.86 ID:5WJD2H0H.net
Left Caption

ディスクの容量って2種類あって、
一つはGBとかの分かりやすい容量
もう一つはファイル数を扱う容量
ファイル数を何百万個扱えるかは4KB、8KBといったフォーマット時のブロック単位で変わってきて、専門用語ではi-node数が2つ目の容量になる
1ファイルあたり、1ブロック数(4KB)より少ない容量で大量のファイルを用意すると、i-nodeが枯渇してディスク容量不足が発生する
Windowsならフォルダのインデックス作成で爆死するレベル
素人に作りやすいのは1個の巨大ファイルを高効率で圧縮できるバイナリファイルの作成だろうけど、この攻撃によるダメージは無いに等しいくらい簡単に復旧できる

22 : 名無しのシステムエンジニアさん 2019/07/06(土) 10:12:03.41 ID:CYTBsbOx.net
Left Caption

なんと迷惑なw

26 : 名無しのシステムエンジニアさん 2019/07/06(土) 10:31:51.18 ID:jsGN5Q7b.net
Left Caption

増えるワカメ

27 : 名無しのシステムエンジニアさん 2019/07/06(土) 10:36:31.21 ID:4LJJ/RbW.net
Left Caption

他人に嫌がらせするために情熱燃やせる連中とは関わり合いたくねえな

28 : 名無しのシステムエンジニアさん 2019/07/06(土) 11:27:06.12 ID:CS/lEhIg.net
Left Caption

300TBのHDD積んどけば問題ないな

33 : 名無しのシステムエンジニアさん 2019/07/06(土) 12:28:22.59 ID:PwFGGGw1.net
Left Caption

32KBしか容量がなかったファミコン時代のテクニックみたいな話だなあ

34 : 名無しのシステムエンジニアさん 2019/07/06(土) 12:54:54.28 ID:XaFcmuQ0.net
Left Caption

要するに「ZIPでくれw」は危険だ、ということかな?w

35 : 名無しのシステムエンジニアさん 2019/07/06(土) 13:04:08.67 ID:JiRM0ybp.net
Left Caption

>>34
そこで「LZHでくれw」

37 : 名無しのシステムエンジニアさん 2019/07/06(土) 13:10:57.73 ID:B9xnns66.net
Left Caption

メールに添付して送信すると
メールサーバがウイルスチェックのために zip を展開してダウンするのかね?

43 : 名無しのシステムエンジニアさん 2019/07/06(土) 15:59:21.37 ID:tRafcpzv.net
Left Caption

今時zipでくれとか誰も言わんよな

46 : 名無しのシステムエンジニアさん 2019/07/06(土) 16:16:43.65 ID:7hHKV14C.net
Left Caption

ファイルを圧縮して送る場合、zip以外なら何がいいのだろ?

49 : 名無しのシステムエンジニアさん 2019/07/06(土) 17:45:16.88 ID:KeIfOPor.net
Left Caption

>>46
RAR

47 : 名無しのシステムエンジニアさん 2019/07/06(土) 16:43:34.21 ID:jlHzf62D.net
Left Caption

ハードディスクの中身完全消去するには良さそう

55 : 名無しのシステムエンジニアさん 2019/07/06(土) 20:05:39.51 ID:L76+5H0T.net
Left Caption

format c/

59 : 名無しのシステムエンジニアさん 2019/07/07(日) 01:31:44.10 ID:rryxSCDq.net
Left Caption

>>55
ちがう。

format c: /q

62 : 名無しのシステムエンジニアさん 2019/07/07(日) 02:14:02.89 ID:bMikqJ+t.net
Left Caption

圧縮ってエントロピーの限界があるって耳学問で聞いたことあるけど??

63 : 名無しのシステムエンジニアさん 2019/07/07(日) 02:34:05.48 ID:9MZ9a/uO.net
Left Caption

情報エントロピーの限界というのは、理想的にランダムな数列に対して可逆圧縮を行う際の概念でしかない。

ランダムではない数列(たとえば「バーカ!お前の母ちゃんデベソ!!」という文字列を一兆回繰り返す、など)の圧縮率は高く、
また画像や音声、動画などは、情報の一部を切り捨てて不可逆的な圧縮を行うことで、圧縮率を高める事ができる。

プログラムコード等の、劣化が許容されず、パターン化も困難でランダムに近いデータの圧縮率は、およそ2倍ほどとされる。

64 : 名無しのシステムエンジニアさん 2019/07/07(日) 02:43:37.81 ID:1otth20t.net
Left Caption

zipにパスワードかけてくださいってマニュアルを先ずは一掃しよう。
エクスキューズにならん

Posted by flac