検索
連載

mod_securityのXSS対策ルールを作成するWebアプリケーションに潜むセキュリティホール(12)(2/2 ページ)

PC用表示 関連情報
Share
Tweet
LINE
Hatena
前のページへ |       

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

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

# スクリプトを呼び出せるタグは禁止

 SecFilter ""

 SecFilter ""

 SecFilter ""

 SecFilter ""

# 疑似プロトコルは禁止

 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であれば、どのバージョンのものでも問題なく動くはずである。このサイトから変換済みのルールもダウンロードできるのだが、せっかくなので自分で変換してみることにしよう。

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

 このファイルを解凍すると、攻撃対象によってルールが分類されているが、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 "" at THE_REQUEST 

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

第13回」へ


著者紹介

中村隆之(なかむらたかゆき)

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

三井物産セキュアディレクション

主に、不正アクセス監視サービス、セキュリティ検査、セキュリティポリシー策定支援などのサービス提供している。また、セキュリティに関する教育サービスも実施中。


Copyright © ITmedia, Inc. All Rights Reserved.

前のページへ |       

Security & Trust 記事ランキング

  1. 「生成AIのサイバー攻撃への悪用」は増加する? 徳丸浩氏が予測する2025年のセキュリティ
  2. ChatGPTやClaudeのAPIアクセスをかたってマルウェアを配布するPython用パッケージ確認 Kasperskyが注意喚起
  3. 商用国家安全保障アルゴリズム(CNSA)の期限となる2030年までに暗号化/キー管理サービス市場が60億ドルに達するとABI Researchが予測 急成長の要因とは?
  4. AWS、組織のセキュリティインシデント対応を支援する「AWS Security Incident Response」を発表 アラートに圧倒されるセキュリティチームをどう支援?
  5. Google、オープンソースのセキュリティパッチ検証ツール「Vanir」を公開 多種多様なAndroidデバイスの脆弱性対応を支援するアプローチとは
  6. 「このままゼロトラストへ進んでいいの?」と迷う企業やこれから入門する企業も必見、ゼロトラストの本質、始め方/進め方が分かる無料の電子書籍
  7. 高度なAIでAIをテスト OpenAIが実践するAIモデルのレッドチーム演習とは
  8. 従業員は「最新のサイバー脅威との戦い」を強いられている セキュリティ教育に不満を持つ理由の1位は?
  9. 「SQLite」のゼロデイ脆弱性、GoogleのAIエージェントが見つける AIは脆弱性調査の課題をどう解決したのか?
  10. 堅調なID管理や認証、脅威インテリジェンスなどを抑え、2024年上半期で最も成長したセキュリティ分野は?
ページトップに戻る