Edited at

nginxを用いてgzip爆弾による不正アクセスへの攻性防壁


はじめに

Wordpressの脆弱性狙いの不正アクセスに対して、展開後にとても大きくなるgzipファイルをレスポンスすることで攻性防壁を構築するブログを参考に、nginxを用いてMacのローカルPCに検証構築した記録です。

参考: How to defend your website with ZIP bombs


ソフトウェアバージョン

MacOSX Sierra

nginx : 1.12.2


手順

Homebrewにてnginxをインストールして検証しました。

nginxの設定ファイルなどのパスについては、自分の環境に適宜置き換えてください。


1. gzip爆弾ファイルの作成

展開後に10GBになるgzファイルをwww配下に作成します。

圧縮状態だと10MB程です。

$ dd if=/dev/zero bs=1m count=10240 | gzip > /PATH/TO/WWW_ROOT/10G.gz


2. 不正アクセスパス(/php)のレスポンスに作成したgzipファイルを返すようにセット

レスポンスを差し替えるため location 設定に追加します。

# /php 以下にgzip爆弾を仕掛ける

location ^~ /php {
default_type text/html; # 展開後の形式
add_header Content-Encoding gzip; # gzip圧縮済をヘッダに付与
gzip off; # nginxによる自動圧縮をOFF
alias /PATH/TO/WWW_ROOT/10G.gz; # レスポンスは必ずBombファイル
}

設定後、変更を反映させるためnginxを再起動します。


アクセス結果

ブラウザ:AndroidのChromeや、PCのChrome、Edgeなどでアクセスすると、メモリが上昇してしばらくした後にエラー表示になります。

コマンドラインツール:curlやwgetでは圧縮後のファイルをダウンロードするだけで自動展開はされないためあまり爆弾になりませんでした。


おわりに

今回はnginx上で不正アクセス者へ展開後に大きくなるファイルによる攻性防壁を構築しました。

実際の運用に適用するにはいろいろ問題があるかとは思いますが、実験としては面白いものでした。

攻性防壁の実験の一つとして触ってみてはいかがでしょうか?