![]() |
【連載】
セキュアな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とした。
|
|
このように設定しておくことにより、クロスサイトスクリプティングの脆弱性を突いた攻撃が成功することはないはずである。ただし、完全に防御できることを保証するものではないので、ご了承願いたい。また、上記の設定で禁止文字列としたものが、正しい文字列として入力される場合もある。例えば、掲示板で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-」で始まっているものを流用する。変換は以下のようにして行う。
|
|
これらもまたIncludeディレクティブで読み込ませるようにする。なお、前述したクロスサイトスクリプティング用のルールは、xss.rulesとして別ファイルとして読み込ませるようにし、基本設定のみをmodsec.confに残すようにすると、すっきりすると思う。
以下にmodsec.confの記述方法を示す。
|
これでapacheを再起動すれば新しいルールが有効になるはずである。
筆者はこれらのルールを実際の商用サイトで運用したわけではないため、デフォルト設定のままでは誤検知が発生することが予想される。どのルールにマッチしたかは、mod_securityが出力するaudit_logのmod_security-messageの行に示されている。今回作成したクロスサイトスクリプティング用のルールにマッチした場合、以下のようなメッセージがaudit_logに出力される。
|
今回はクロスサイトスクリプティングを検知するルールと、Snortのルールを流用する方法について説明した。Webアプリケーションへの攻撃は、もっと多くのパターンがあるため、これらを検知するための設定についても紹介していきたいと思う。
|
2/2
|
「第13回」へ |
| Index | |
| mod_securityのXSS対策ルールを作成する | |
| Page1 ポジティブモデルかネガティブモデルか クロスサイトスクリプティング攻撃を検知するには |
|
| Page2 クロスサイトスクリプティング用のルール Snortのルールを流用する |
|
Webアプリケーションに潜むセキュリティホール バックナンバー
- 第1回 サーバのファイルが丸見え?!
- 第2回 顧客データがすべて盗まれる?!
- 第3回 気を付けたい貧弱なセッション管理
- 第4回 エラーメッセージの危険性
- 第5回 Webアプリケーションの検査テクニック
- 第6回 Webサイトのセッションまわりを調べる方法
- 第7回 攻撃されないためのセッション管理の検査方法
- 第8回 Webサイトの問い合わせ画面に含まれる脆弱性
- 第9回 オンラインショッピングにおける脆弱性の注意点
- 第10回 安全なWebアプリケーション開発のススメ
- 第11回 Webアプリケーションファイアウォールによる防御
- 第12回 mod_securityのXSS対策ルールを作成する
- 第13回 OSコマンドインジェクションを防ぐルールを作成する
- 最終回 Webアプリケーションの脆弱性を総括する
| Profile |
| 中村隆之(なかむらたかゆき) 三井物産セキュアディレクション株式会社勤務。 セキュリティコンサルタントとして主にWebアプリケーションのセキュリティ検査に従事しており、大手ポータルサイト、オンラインバンキングなどの数多くの検査実績を持つ。また、セキュアネットワーク及び暗号関連の研究に携わり、大手製造、官公庁、金融機関へのセキュリティシステム導入など数多くの実績を持つ。 三井物産セキュアディレクション株式会社 主に、不正アクセス監視サービス、セキュリティ検査、セキュリティポリシー策定支援などのサービス提供している。また、セキュリティに関する教育サー ビスも実施中。 |
|
||||||||
| Security&Trust記事一覧 |
TechTargetジャパン
- Facebook タイムライン利用時の「鉄則」 (2012/2/9)
ユーザーインターフェイスの変更措置に伴い浮上した、Facebookの「過剰な情報提供」のリスクと対策とは - 無料サービスなら通信内容を記録してもいいの? (2012/1/13)
無料の公衆無線LANサービスが、ユーザーに無断で通信履歴を記録していたことが判明し、話題に - 攻撃はまるでレーザービーム (2011/12/26)
2011年に話題となった標的型攻撃は「人」という弱点ををねらい打ちにしました。では、人に教育さえしておけば防げるものなのでしょうか? - 見せたくないなら「持たせない」が鉄則! (2011/12/15)
逆コンパイル対策で難読化したのに、大事なデータが解析されちゃった? Androidアプリのセキュリティの道は深い
|
|
キャリアアップ
スポンサーからのお知らせ
- - PR -
イベントカレンダー
- - PR -

