PHP
WordPress
Mac
Linux
nginx

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 > /usr/local/var/www/10G.gz

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

レスポンスを差し替えるため /usr/local/etc/nginx/nginx.conf の一部location設定に追加します。

        #Bomb
        error_page 590 = /10G.gz; # ジャンプ用エラーコード時のエラーページ設定
        location /10G.gz {
            default_type  text/html; # 展開後の形式
            add_header  Content-Encoding  gzip; # gzip圧縮済をヘッダに付与
            gzip off; # nginxによる圧縮をOFF
        }

        # Bomb target
        location /php { #/php以下にアクセスした場合
            return 590; #ジャンプ用エラーコード発生
        }

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

アクセス結果

ブラウザ:AndroidのChromeや、PCのChrome、Edgeなどでアクセスすると、メモリが上昇してしばらくした後にエラー表示になります。
コマンドラインツール:curlやwgetでは圧縮後のファイルをダウンロードするだけで自動展開はされないためあまり爆弾になりませんでした。

おわりに

今回はnginx上で不正アクセス者へ展開後に大きくなるファイルによる攻性防壁を構築しました。
実際の運用に適用するにはいろいろ問題があるかとは思いますが、実験としては面白いものでした。
攻性防壁の実験の一つとして触ってみてはいかがでしょうか?