WAFで攻撃に備える(。・д・)o┫゙;`;:゙;`;:

遠藤博樹(NHN JAPAN株式会社)

NHN JAPANの遠藤が、KUSANAGIバージョンアップによってセキュリティ対策用アプリケーションが簡単にインストール可能になったことを紹介。さらに、セキュリティ対策として注目のWAF(Web Application Firewall)について、具体的な導入方法と設定方法を説明しています。WAFを利用することで、Webサイトへの様々な攻撃を防止し、脆弱性を検知することが可能です。その操作方法と活用方法を理解すれば、インターネットでの安全なビジネス運営に必要な情報が得られます。

9回目の投稿となります。
NHN JAPANの遠藤と申します。

よろしくお願いいたします。

2018.9月のKUSANAGI バージョンアップにて、多数のセキュリティ対策用アプリケーションが簡単にインストールできるようになりました。

この事はプライムストラテジー穂苅様も記事として触れられているのですが、具体的にはこんなにあります・・・Σ(’ v ‘ノ)ノ

・WAF(ModSecurity、NAXSI)
・Vuls (脆弱性スキャン)
・Open Source Tripwire (IDS)
・Suricata (IDS IPS)

今回は一番上のWAFについて動作確認をしてみましたので、その事について少し書いてみます。
なお、ApacheとNginxで動作させるWAFが異なりますが、ここでは標準のNginx(NAXSI)をベースに説明します。

また、NAXSIを利用する上で良く使うnxapiやElasticSeaechについてはここでは触れないため、実運用される場合はドキュメントを参照ください。

WAFとは!って解説をすると上述の穂苅様の記事と被ってしまうので省略いたします(*ノノ)

 

1.KUSANAGIコマンドでWAFを有効にする

kusanagiコマンドにwaf の on/offが追加されました。

# kusanagi waf on で有効になります。
初めてonにした時は必要なパッケージのダウンロード等がありますので、少しだけ時間が掛かりました。

2.動作確認をする

KUSANAGIサイト上のマニュアルでは利用する上で次の説明が記載されていました。

NAXSIの設定をカスタマイズするには、下記ファイルを編集することできます。
/etc/nginx/naxsi.d/*/user.conf

有効にするため、 /etc/nginx/naxsi.d/common/default.conf の内容を /etc/nginx/conf.d/*****_http.conf の、location 内に include しました。

location / {
try_files $uri $uri/ /index.php?$args;

SecRulesEnabled;
error_log /home/kusanagi/****/log/nginx/naxsi.log;
DeniedUrl /waf.html;

CheckRule "$SQL >= 8" BLOCK;
CheckRule "$RFI >= 8" BLOCK;
CheckRule "$TRAVERSAL >= 4" BLOCK;
CheckRule "$EVADE >= 4" BLOCK;
CheckRule "$XSS >= 8" BLOCK;
}

errorログは後述しますが、naxsiの動作ログを記録するための記述、/waf.html はWAFが検知したら返すhtmlを指定したものでテスト用に作成したhtml、CheckRuleは閾値の設定です。
標準では /etc/nginx/naxsi.d/naxsi_core.rules.conf に基本的なルールセットが用意されています。
この状態で、# kusanagi nginx で設定を読み込ませ反映させました。

まずは、通常のURLでアクセスしてみます。

http://*****.com/ → 正常に表示しました。

次に不正なパラメータを装って、 http://*****.com/=22/**and//1=”q” でアクセスしてみると、用意したwaf.htmが表示されました。

Naxsiのブロックしたログはログレベルがerrorとしてログに記録されるのですが、KUSANAGIが標準で生成しているconfファイルではerrorログのログレベルはwarn以上を記録するとなっているため、
error_log /home/kusanagi/****/log/nginx/naxsi.log; のようにログレベルerror以上のログを記録する設定を加えました。ブロックしたことは次のようなログで確認できます。

2018/10/10 15:27:20 [error] 21113#0: *1106 NAXSI_FMT: ip=***.***.***.***&server=***.***.***.***&uri=/=22/**and/1="q"&learning=0&vers=0.56&total_processed=159&total_blocked=11&block=1&cscore0=$SQL&score0=16&cscore1=$XSS&score1=16&zone0=URL&id0=1001&var_name0=, client: ***.***.***.***, server: ***.***.***.***, request: "GET /=22/**and//1=%22q%22 HTTP/1.1", host: "***.***.***.***"

アクセスしたURLの一部であるuri=/=22/**and/1=”q” が、 id0=1001 のルールに沿ってブロックした記録となります。
id0=1001は /etc/nginx/naxsi.d/naxsi_core.rules.conf で確認するとダブルクオートに関連したルールということがわかりました。
MainRule “str:\”” “msg:double quote” “mz:BODY|URL|ARGS|$HEADERS_VAR:Cookie” “s:$SQL:8,$XSS:8” id:1001;

 

Naxsiは脆弱性のある良く知られた パターンの99% を含む単純なルールが用意されていてそのルールに基づき攻撃と判断していますが、上記遮断例のようなパラメーターも時には正当なクエリと成りえます。

そのため本来は冒頭に書いたnxapiを利用したり、 学習モードを有効にしてerrorログを確認しながらブラックリストやホワイトリストの成型をしてからの利用を想定しています。
学習モードは設定ファイル内にLearningMode; と記載すると学習モードで動作確認になります。
このモードはログレベルがdebugでの記録となりますのでログレベルの設定も忘れずにしましょう_〆(゚▽゚*)

また、KUSANAGIはWordPressで利用されている方が多いので補足すると、WordPress用のルール(主にホワイトリスト)も /etc/nginx/naxsi.d/wordpress/default.conf に用意されていますし、KUSNAGIはDrupalも簡単にプロビジョニングできますが、Drupalのルールセットは設定ルールが公開されています。


次回もKUSANAGI8.4以降に追加された機能の何れかを試してみようと思いますd(>_< )

 

<< SFTPユーザーを追加する S(・∀・)F人T(・∀・)PTripwireで改ざん検知(σ´∀`)σ >>

関連記事

Webサイト運用の課題解決事例100選 プレゼント

Webサイト運用の課題を弊社プロダクトで解決したお客様にインタビュー取材を行い、100の事例を108ページに及ぶ事例集としてまとめました。

・100事例のWebサイト運用の課題と解決手法、解決後の直接、間接的効果がわかる

・情報通信、 IT、金融、メディア、官公庁、学校などの業種ごとに事例を確認できる

・特集では1社の事例を3ページに渡り背景からシステム構成まで詳解