【連載】
セキュアなWebサイトを運営するための
Webアプリケーションに潜むセキュリティホール

第12回 mod_securityのXSS対策ルールを作成する

中村隆之
三井物産セキュアディレクション
2004/9/16

※ご注意

他社および他組織のWebサイトなどへのポートスキャンおよびデータの取得などの行為で得た情報を侵入などに悪用するか、または同じ目的を持つ第三者に提供した時点で違法となります。ご注意ください。

本稿の内容を検証する場合は、必ず影響を及ぼさない限られた環境下で行って下さい。

また、本稿を利用した行為による問題に関しましては、筆者および株式会社アットマーク・アイティは一切責任を負いかねます。ご了承ください。


   クロスサイトスクリプティング用のルール

 完成したクロスサイトスクリプティング用ルールをリスト1に示す。

# スクリプトを呼び出せるタグは禁止
 SecFilter "<[[:space:]]*script.*>"
 SecFilter "<[[:space:]]*style.*>"
 SecFilter "<[[:space:]]*link.*>"
 SecFilter "<[[:space:]]*body[[:space:]]*>"

# 疑似プロトコルは禁止
 SecFilter "javascript:"
 SecFilter "vbscript:"
 SecFilter "about:"

# スクリプトを呼び出せるので禁止
 SecFilter "expression\("
 SecFilter "&{.*};"

# イベントハンドラは禁止
 SecFilter "onError"
 SecFilter "onUnload"
 SecFilter "onBlur"
 SecFilter "onFocus"
 SecFilter "onClick"
 SecFilter "onMouseOver"
 SecFilter "onMouseOut"
 SecFilter "onSubmit"
 SecFilter "onReset"
 SecFilter "onChange"
 SecFilter "onSelect"
 SecFilter "onAbort"

# CookieやBasic認証情報にアクセスできるので禁止
 SecFilter "document\.cookie"
 SecFilter "Microsoft\.XMLHTTP"

# 改行コードは禁止(ただし、TEXTAREAが存在する場合はこのままではダメ)
 SecFilter "\x0d"
 SecFilter "\x0a"
リスト1

 この設定は、管理しやすいように別ファイルにして、Includeディレクティブでhttpd.confに読み込ませるようにしよう。筆者はファイル名をmodsec.confとした。

Include conf/modsec.conf

 このように設定しておくことにより、クロスサイトスクリプティングの脆弱性を突いた攻撃が成功することはないはずである。ただし、完全に防御できることを保証するものではないので、ご了承願いたい。また、上記の設定で禁止文字列としたものが、正しい文字列として入力される場合もある。例えば、掲示板でWebアプリケーションの脆弱性について議論するような場合である。このような例外については、また別途考えていきたいと思う。

   Snortのルールを流用する

 ここまでは、自力でクロスサイトスクリプティング用のフィルタリングルールを作成した。次は、Snortのルールをmod_securityのルールとして流用する方法を紹介しよう。Snortとは、オープンソースのIDS(侵入検知システム)である。詳細は以下のサイトやほかの連載を参照していただきたい。

日本Snortユーザ会
http://www.snort.gr.jp/

Snortでつくる不正侵入検知システム
第1回 不正侵入検知システムを知る

 まずはSnortのルールをmod_security用に変換するスクリプト「snort2modsec.pl」を以下のURLからダウンロードする。バージョンやモジュールに依存した処理は行っていないので、perlであれば、どのバージョンのものでも問題なく動くはずである。このサイトから変換済みのルールもダウンロードできるのだが、せっかくなので自分で変換してみることにしよう。

snort2modsec.pl
http://www.modsecurity.org/documentation/converted-snort-rules.html

 Snortのルールは以下のURLからダウンロードできる。いくつか種類があるが、今回は以下の最新のスナップショットを利用した。

Snortのルール
http://www.snort.org/dl/rules/snortrules-snapshot-CURRENT.tar.gz

 このファイルを解凍すると、攻撃対象によってルールが分類されているが、mod_securityではこのうちファイル名が「web-」で始まっているものを流用する。変換は以下のようにして行う。

$ perl snort2modsec.pl web-attacks.rules > web-attacks.rules
$ perl snort2modsec.pl web-cgi.rules > web-cgi.rules
$ perl snort2modsec.pl web-client.rules > web-client.rules
$ perl snort2modsec.pl web-coldfusion.rules > web-coldfusion.rules
$ perl snort2modsec.pl web-frontpage.rules > web-frontpage.rules
$ perl snort2modsec.pl web-iis.rules > web-iis.rules
$ perl snort2modsec.pl web-misc.rules > web-misc.rules
$ perl snort2modsec.pl web-php.rules > web-php.rules

 これらもまたIncludeディレクティブで読み込ませるようにする。なお、前述したクロスサイトスクリプティング用のルールは、xss.rulesとして別ファイルとして読み込ませるようにし、基本設定のみをmodsec.confに残すようにすると、すっきりすると思う。

 以下にmodsec.confの記述方法を示す。

<IfModule mod_security.c>

 SecFilterEngine On
 SecFilterScanPOST On
 SecFilterSelective HTTP_Transfer-Encoding "!^$"
 SecFilterDefaultAction "deny,log,status:406"
 SecFilterCheckURLEncoding On

 SecFilterDebugLog logs/modsec_log
 SecFilterDebugLevel 1
 SecAuditEngine RelevantOnly
 SecAuditLog logs/audit_log

 Include conf/xss.rules
 Include conf/web-attacks.rules
 Include conf/web-cgi.rules
 Include conf/web-client.rules
 Include conf/web-coldfusion.rules
 Include conf/web-frontpage.rules
 Include conf/web-iis.rules
 Include conf/web-misc.rules
 Include conf/web-php.rules

</IfModule>

 これでapacheを再起動すれば新しいルールが有効になるはずである。

 筆者はこれらのルールを実際の商用サイトで運用したわけではないため、デフォルト設定のままでは誤検知が発生することが予想される。どのルールにマッチしたかは、mod_securityが出力するaudit_logのmod_security-messageの行に示されている。今回作成したクロスサイトスクリプティング用のルールにマッチした場合、以下のようなメッセージがaudit_logに出力される。

mod_security-message: Access denied with code 406.
 Pattern match "<[[:space:]]*script.*>" at THE_REQUEST

 今回はクロスサイトスクリプティングを検知するルールと、Snortのルールを流用する方法について説明した。Webアプリケーションへの攻撃は、もっと多くのパターンがあるため、これらを検知するための設定についても紹介していきたいと思う。

2/2
 第13回」へ

Index
mod_securityのXSS対策ルールを作成する
  Page1
ポジティブモデルかネガティブモデルか
クロスサイトスクリプティング攻撃を検知するには
Page2
クロスサイトスクリプティング用のルール
Snortのルールを流用する


Profile
中村隆之(なかむらたかゆき)
三井物産セキュアディレクション株式会社勤務。 セキュリティコンサルタントとして主にWebアプリケーションのセキュリティ検査に従事しており、大手ポータルサイト、オンラインバンキングなどの数多くの検査実績を持つ。また、セキュアネットワーク及び暗号関連の研究に携わり、大手製造、官公庁、金融機関へのセキュリティシステム導入など数多くの実績を持つ。

三井物産セキュアディレクション株式会社
主に、不正アクセス監視サービス、セキュリティ検査、セキュリティポリシー策定支援などのサービス提供している。また、セキュリティに関する教育サー ビスも実施中。

関連記事
特集:クロスサイトスクリプティング対策の基本
連載:不正侵入の手口と対策
連載:インシデントレスポンスはじめの一歩〜rootkitを検出するために

Security&Trust記事一覧

TechTargetジャパン

Security&Trust フォーラム 新着記事

@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

RSSフィード

キャリアアップ

- PR -
@IT Sepcial

イベントカレンダー

PickUpイベント

- PR -
もっと見る
- PR -

お勧め求人情報

ホワイトペーパーTechTargetジャパン

@IT Sepcial
ソリューションFLASH