●
要旨Protector は、XOOPS2ベースの
各種CMSを
様々な
悪意ある
攻撃から
守るためのモジュールです。
このモジュールでは、
以下の
攻撃を
防ぎます。
- DoS
-
悪意あるクローラー(メール
収集ボットなど)
- SQL Injection
- XSS (といっても、
全てではありません)
- システムグローバル
変数汚染- セッションハイジャック
- ヌルバイト
攻撃- ディレクトリ
遡り
攻撃- いくつかの
危険なCSRF (XOOPS 2.0.9.2
以下に
存在するもの)
- Brute Force (パスワード
総当たり)
-
拡張子偽装画像ファイルアップロード (すなわち、IE Content-Type XSS)
-
実行可能なファイルをアップロードする
攻撃- XMLRPC
関連- コメントSPAM/トラックバックSPAM
等、あらゆるSPAM
これらの
攻撃からあなたのXOOPS2ベースCMSを
守り、ログに
記録します。
ただし、このモジュールはあくまで、
最大公約数的な
防御しか
行いません。
一部の3rdパーティモジュールに
見られるような
穴の
一部は
防げるかもしれませんが、すべての
穴を
防ぎきるものではなく、
過信は
禁物です。
その
限界は
承知の
上で、すべてのXOOPS2ベースCMSユーザーに
対して、インストールを
強くお
勧めします。
●
利用方法インストールには、XOOPS_TRUST_PATHの
設定が
必要です。
アーカイブのhtml
内を、XOOPS_ROOT_PATH
側にコピーし、アーカイブのxoops_trust_path
内を、XOOPS_TRUST_PATH
側にコピーします。
モジュール
管理からインストールできれば、
正しくファイルが
置けています。
ただ、それだけではまったく
動作していませんので、mainfile.php からも
呼び
出すようにすることが
絶対必要条件です。
Protector をインストール
後、お
使いのXOOPS2ベースCMSの mainfile.php の
一番下のあたりに
include XOOPS_TRUST_PATH.'/modules/protector/include/precheck.inc.php' ;
if (!isset($xoopsOption['nocommon']) && XOOPS_ROOT_PATH != '' ) {
include XOOPS_ROOT_PATH."/include/common.php";
}
include XOOPS_TRUST_PATH.'/modules/protector/include/postcheck.inc.php' ;
と、
赤くなっている2
行を
追加して
下さい。
青色の
部分は、
最初にインストールした
時のバージョンによって
異なりますが、
違っていても
気にしなくて
結構です。
バージョン3から、システムモジュール
由来のIPアクセス
拒否は
利用しなくなりました。XOOPS_TRUST_PATH/modules/protector/configs を
書込許可してください。Protectorが
拒否IPを
自動登録する
場合、ここに
記述するようになります。
もし、なんらかの
理由で、
自分自身がIP
拒否リストに
載ってしまった
場合、バージョン2まではレスキューパスワードを
利用していましたが、バージョン3からは、FTP
等で XOOPS_TRUST_PATH/modules/protector/configs
内のファイルを
編集または
削除してください。
2.34から、
実験的に、.htaccessによるDoS
防御というオプションを
追加しました。これを
利用する
場合、XOOPS_ROOT_PATHにある.htaccessを
書込可能とする
必要があります。
導入する
際には、.htaccessファイルが
書込可能である、というリスクと
比較して
下さい。
●XOOPS Cube Legacy 2.1へのインストール
特段違いはありません。
mainfile.php の
書き
換えポイントの
周辺が
違うので、パッチを
当てた
後を
示しておきます。
if (!defined('_LEGACY_PREVENT_LOAD_CORE_') && XOOPS_ROOT_PATH != '') {
include XOOPS_TRUST_PATH.'/modules/protector/include/precheck.inc.php' ;
@include_once XOOPS_ROOT_PATH.'/include/cubecore_init.php';
if (!isset($xoopsOption['nocommon']) && !defined('_LEGACY_PREVENT_EXEC_COMMON_')) {
include XOOPS_ROOT_PATH.'/include/common.php';
}
include XOOPS_TRUST_PATH.'/modules/protector/include/postcheck.inc.php' ;
}
●ImpressCMSへのインストール
mainfile.php へのパッチは
必要ありません。
アーカイブの extras/ImpressCMS/preload/protector.php を、ご
利用中のImpressCMSのpreloadフォルダにコピーしてください。
preloadを
提供してくれたvaughanに
感謝します。
●バージョン2からのバージョンアップ
まず、mainfile.php から、Protectorに
関する
行を
削除してください。
次に、いったんXOOPS_ROOT_PATH/modules/protector/
内のファイルを
全て
削除します。
すぐに、インストールと
同様に
全ファイルをアップロードします。
管理画面からモジュール
管理に
入って、Protectorモジュールをアップデートします。
最後に、
再度、mainfile.phpを
編集し、precheckおよびpostcheckを
有効にしてください。バージョン2では、XOOPS_ROOT_PATH となっていた
部分が、バージョン3では、XOOPS_TRUST_PATH となっていることに
注意が
必要です。
●フィルタープラグインの
利用V3から、XOOPS_TRUST_PATH/modules/protector/filters_enabled/ にフィルタープラグインを
格納することで、
追加チェックや
追加メッセージ・ロギングなどができるようになりました。
作成や
改造も
簡単なはずです。
このアーカイブ
内にデフォルトで
用意されているフィルタープラグインのうち
一般的なものを
紹介します。
- postcommon_post_deny_by_rbl.php
スパム
対策用。
RBLを
利用してPOSTをはねます。
RBLに
登録されたIPからの
投稿はすべてSPAMだと
判定します。
問い
合わせが
入るため、
投稿時の
処理がやや
重くなるかもしれません。(
特にChatなどでは
影響があるかも)
- postcommon_post_deny_by_httpbl.php
スパム
対策用。
http:BLを
利用してPOSTをはねます。
利用する
前に、ファイルをエディタで
開いて、
define( 'PROTECTOR_HTTPBL_KEY' , '............' ) ;
この
行を
書き
換えます。HTTPBL_KEYは、http://www.projecthoneypot.org/ から
取得してください。
-postcommon_post_need_multibyte.php
スパム
対策用。
投稿に
日本語が
含まれていることを
要求するプラグイン。
日本語が1
文字も
含まれていない100byte
以上の
文字列があったらSPAMだと
判定します。
-postcommon_post_htmlpurify4guest.php
ゲストによるPOSTデータすべてについて、HTMLPurifierを
通過させるフィルターです。
ゲストにHTMLを
許可している
場合では
有効にすることを
強くお
勧めします。
-postcommon_register_insert_js_check.php
ロボットによるユーザ
登録を
防ぐプラグイン。
登録しようとするユーザのブラウザでJavaScriptが
動作している
必要があります。
-bruteforce_overrun_message.php
パスワードを
指定回数以上間違えた
時のメッセージを
指定します。*_message.php というフィルタープラグインはいずれも、メッセージを
指定するタイプのフィルターです。
-precommon_bwlimit_errorlog.php
過負荷防止機能が
働いた
時に、その
旨をApacheのエラーログに
記録します。
*_errorlog.php というフィルタープラグインはいずれも、エラーログに
記録するタイプのフィルターです。
いずれも、XOOPS_TRUST_PATH/modules/protector/filters_byconfig/ に
置いてあるので、
必要に
応じて、filters_enabled にコピーしてください。
XOOPS_TRUST_PATHは、
複数サイトに
利用出来る
仕様なので、あるフィルターをサイトによって
使い
分けたいケースもあるでしょう。
その
場合は、Protectorの
一般設定に、
利用したいフィルター
名を
記述してください。もちろん、
記述のないサイトでは
有効化されません。
●3.3からの
新機能: DBレイヤートラップanti-SQL-Injection
Protector-3.3
以降、データベースレイヤーを
乗っ
取って、
動的なSQL Injection
対策をする
機能を
追加しました。これによって、ほとんどのSQL Injection
脆弱性は
無害化できる
気がします。(わざと
穴を
空けるつもりならいくらでも
手はあるので、
保証はしません)
これを
有効にするためには、
原理的にデータベースファクトリクラスにパッチを
当てる
必要があります。
patches/ フォルダに、
各コア
用のパッチ
済データベースファクトリクラスファイルが
用意されているので、この
機能を
利用したい
場合には、これで
上書きしてください。
もちろん、
各コアチームが
積極的にこのパッチをHEADに
採用してくれるのがベストだと
考えています。パッチについても、なるべく
採用しやすい
形にしたつもりです。
なお、
以下のコアの
最新版は、この
機能のパッチが
最初から
当たっています。(
対応ありがとうございます)
- XCL2.1.x
- ImpressCMS 1.x
●
変更履歴3.50 beta (2009/11/17)
-
各サイトのProtector
一般設定でフィルターのON/OFFをコントロール
可能とした
- filters_disabled に
収まっていたフィルターをfilters_byconfigへ
移動した
- FTPワームや
第三者によるサイト
改ざんチェッカーを
新設した
3.41 (2009/11/17)
- swfファイルのファイルタイプ
誤認に
対応-
言語ファイル
追加-- polish_utf8 (thx jagi)
3.40 (2009/09/16)
-
安定版として
番号を
振り
直した
- "Xoops Protector" という
名前をやめてシンプルに "Protector" へと
変更した
- ImpressCMSおよびXCL
対応アイコンを
用意した (thx rene)
-
一部環境でのpostcommon_post_need_multibyteの
動作不良に
対応 (thx orange) 3.40a
-
言語ファイル
更新-- spanish (thx Colossus) 3.40b
3.36 beta (2009/08/27)
- HTMLPurifier を 4.0.0 に
更新- フィルター
追加-- postcommon_post_htmlpurify4everyone.php (POSTが
常にHTMLPurifierを
通過する)
-- postcommon_post_register_moratorium.php (
登録直後のURL
付投稿を
禁止する) 3.36a
-
言語ファイル
更新-- persian (thx voltan) 3.36a
3.35 beta (2009/08/13)
- ImpressCMS
等でmodinfo.phpが
常に
英語になっていたのを
修正 (thx Phoenyx)
- DBLT-ASIのコメントに
対する
動作をリクエストから
判断するように
修正した
- モジュールメンテナーのために、Protectorの
動作モードを
知るための
定数を
定義した
-- PROTECTOR_ENABLED_ANTI_SQL_INJECTION
-- PROTECTOR_ENABLED_ANTI_XSS
-
言語ファイル
更新-- arabic (thx Onasre) 3.35a
3.34 beta (2009/07/06)
- DBレイヤートラップanti-SQL-Injection(DBLT-ASI)のコメントに
対する
動作を
緩和した
- DBレイヤートラップが
常にONになってしまう
環境に
対応するオプションの
追加3.33 beta (2009/04/03)
- PHP_SELFやPATH_INFOの
特殊文字強制変換をやめた (thx nao-pon)
- PHP_SELFも
大きな
傘anti-XSSの
対象に
加えた
- PROTECTOR_VERSION
定数で、Protectorのバージョンを
確認できるようにした
- ImpressCMS へのインストール
方法やHTMLPurifierの
適用を
改善した (thx vaughan)
- F5Attackやクローラーで「ログのみ」の
処理がおかしかったのを
修正 (thx ChaFx)
-
大きな
傘Anti-XSSの
初期値を
有効に
変更した
3.32 beta (2009/01/27)
- nocommon
状況でのDBレイヤートラップanti-SQL-Injection
動作を
回避した (thx naao)
-
言語ファイル
更新-- persian (thx voltan)
3.31 beta (2009/01/20)
-
一般設定などでダブルクオーテーションがあるとSQL Injectionと
判定される
問題を
修正-
言語ファイル
更新-- spanish (thx Colossus)
3.30 beta (2009/01/14)
- DBレイヤートラップanti-SQL-Injectionを
実装した
-
過負荷中のフィルターがかかった
場合にエラーログを
吐くフィルターを
追加-
不正IPとして
弾かれたアクセスについてエラーログを
吐くフィルターを
追加-
言語ファイル
更新-- spanish (thx Colossus)
-
過負荷対策フィルターについては503エラーを
返すようにした (thx Colossus) 3.30a
3.22 (2008/12/03)
-
削除済クッキーが'deleted'という
値で
送られ、BruteForce
扱いとなる
現象に
対応- セキュリティガイドにXOOPS_TRUST_PATHがプライベートとなっているかのチェックを
追加-
言語ファイル
追加-- nederlands (thx Cath)
-
言語ファイル
更新-- persian (thx voltan) 3.22a
- ページナビを
下にも
表示するようにした (thx McDonald) 3.22a
3.21 (2008/11/21)
-
一般設定に
帯域制限を
追加- IP BANを
喰った
相手に
解除時間を
知らせるメッセージをデフォルトにした
- precommonフィルターでも
言語指定を
可能にした
-
言語ファイル
更新-- spanish (thx Colossus) 3.21a
-
拒否IPリストを
更新出来なくなっていたのを
修正 (thx rohi) 3.21a
3.20 (2008/09/17)
-
安定版としてバージョン
番号をふり
直した
-
言語ファイル
更新-- arabic (onasre)
-
言語ファイル
修正-- de_utf8
-
言語ファイル
追加-- italian (thx Defcon1) 3.20a
-
携帯判定メソッド isMobile() をProtectorFilterAbstractクラスに
追加 3.20b
3.17 beta (2008/04/24)
- URI SPAM
判定で、
自ホストと
同一の
場合は
通過するようにした
-
言語ファイル
更新-- persian (thx stranger and voltan) 3.17a
-
言語ファイル
追加-- de_utf8 (thx wuddel) 3.17a
3.16 beta (2008/01/08)
- SPAMフィルター
追加 postcommon_post_deny_by_httpbl (honeypotproject.orgのBL
利用)
-
言語ファイル
更新-- polish (thx kurak_bu)
3.15 beta (2007/10/18)
- ログのコンパクト
化追加- ログの
全削除追加-
言語ファイル
追加-- fr_utf8 (thx gigamaster)
3.14 beta (2007/09/17)
- HTMLPurifier
導入 (special thx! Edward Z. Yang) ※PHP4ではまともに
動きません
- フィルターポイントを
追加 (spamcheck, crawler, f5attack, bruteforce, purge)
- フィルタープラグイン
追加-- ゲスト
投稿のすべてをHTMLPurifierに
通過させるフィルター (PHP5
専用)
-- SPAM
判定された
時にメッセージを
表示する(リダイレクトする)フィルター
--
悪質クローラ
判定された
時にメッセージを
表示する(リダイレクトする)フィルター
-- F5アタック
判定された
時にメッセージを
表示する(リダイレクトする)フィルター
-- ブルートフォース
時にメッセージを
表示する(リダイレクトする)フィルター
-- その
他排斥処理される
直前にメッセージを
表示する(リダイレクトする)フィルター
3.13 beta (2007/08/22)
- フィルタープラグインをグローバル
関数からクラスに
変更- フィルターポイントを
追加 (badip, register)
- フィルタープラグイン
追加-- ユーザ
登録時にJavaScriptチェックを
入れるフィルター(ユーザ
登録SPAM
対策)
--
拒否IP
時にメッセージを
表示するフィルター
--
拒否IP
時にリダイレクトするフィルター
3.12 beta (2007/08/16)
- $xoopsOption['nocommon'] が
動作していなかったバグの
修正3.11 beta (2007/08/16)
- mainfile.php へのパッチでprecheckとpostcheckを
取り
違えても
動くように
対応- RBLフィルターのデフォルトからniku.2ch.netを
削除-
言語ファイル
追加--
フランス語 (thx Christian)
3.10 beta (2007/07/30)
- precheckのconfigは、ローカルキャッシュから
取得するようにした
- MySQLへの
二重コネクションを
極力排除した
-
信用できるIPが
一部で
機能していないバグの
修正- インストールとmainfileパッチの
順番が
逆でもエラーが
出ないようにした
- ホダ
塾インストーラだとフォルダのパーミッションを
事前にチェックするロジックの
追加-
拒否IPを「
一致」「
前方一致」「
正規表現」のいずれでも
表記できるようにした
-
拒否IPに
時間制限を
設けた
- configsディレクトリが
書込禁止になっている
場合のWarningを
追加3.04 (2007/06/13)
- phpmailerのコマンド
実行脆弱性に
対するチェックを
追加した
- postcommon_post_need_multibyte のチェックをもう
少し
強力にした (3.04a)
3.03 (2007/06/03)
- インストーラアタックへの
対策を
追加した
-
言語名変更-- ja_utf8 (
以前のjapaneseutf) 3.03a
3.02 (2007/04/08)
- ID
風変数の
強制変換の
処理をもう
少し
緩やかにした
- セキュリティガイドのリンク
切れを
修正- DoS/crawlerチェックをスキップできる
手段の
提供(ある
定数を
定義する)
- D3システムのアップデート
-
言語ファイル
追加-- persian (thx voltan)
-- russian (thx West) 3.02a
-- arabic (thx onasre) 3.02b
-- japaneseutf 3.02c
3.01 (2007/02/10)
- IPソートルールの
変更-
言語ファイル
追加-- portuguesebr (thx beduino)
-- spanish (thx PepeMty)
-- polish (thx kurak_bu) 3.01a
-- german (thx wuddel) 3.01b
- module_icon.php をキャッシュ
可能に 3.01c
- module_icon.php のtypo
修正 3.01d
3.00 (2007/02/06)
-
安定版としてのリリース
- ログレベル
指定ミスの
修正- マルチバイトプラグインが
登録ユーザのPOSTを
弾かないように
修正 (thx mizukami)
-
本家版2.2.xとの
相性問題の
改善 3.00a
3.00beta2 (2007/01/31)
- プラグインシステムの
導入 (とりあえず postcommon_post_* というタイプのみ)
- フィルタープラグインの
追加-- postcommon_post_deny_by_rbl.php (RBLによるIPベースなSPAM
対策)
-- postcommon_post_need_multibyte.php (
文字種類によるSPAM
対策)
3.00beta (2007/01/30)
- XOOPS_TRUST_PATH
側に
本体を
置くことにした
- IP
拒否機能を
単純なファイル
処理(configsディレクトリ
下)に
変更した
- グループ1になれるIPアドレス
制限機能の
追加(これも
単なるファイル
処理)
- レスキュー
機能の
削除 (3.0
以降は
単にFTP
等でファイルを
削除すれば
復活します)
- テーブル
構造の
修正 (MySQL5
対応)
- BigUmbrella anti-XSS の
導入- コメント・トラックバックSPAM
対策機能追加- Cube 2.1 Legacy RC での
動作確認●
謝辞 - Kikuchi (
繁体中国語ファイル)
- Marcelo Yuji Himoro (ブラジルのポルトガル
語・スペイン
語ファイル)
- HMN (
フランス語ファイル)
- Defkon1 (イタリア
語ファイル)
- Dirk Louwers (オランダ
語ファイル)
- Rene (ドイツ
語ファイル)
- kokko (フィンランド
語ファイル)
- Tomasz (ポーランド
語ファイル)
- Sergey (ロシア
語ファイル)
- Bezoops (スペイン
語ファイル)
(
以上、バージョン2までの
言語ファイル
作成者です。バージョン3ではいったん
削ってます。すみません)
- beduino (ブラジルのポルトガル
語ファイル)
- PepeMty (スペイン
語ファイル)
- kurak_bu (ポーランド
語ファイル)
- wuddel (ドイツ
語)
- voltan&stranger (ペルシャ
語)
- onasre (アラビア
語)
また、このモジュール
作成にあたり、
様々なご
指導・ご
鞭撻をいただいた、zxチームの
皆様、とりわけJM2さん、minahitoさんに、
心より
感謝いたします。
------------------------------------------------------------
GIJ=CHECKMATE <gij@peak.ne.jp>
2004-2009
PEAK XOOPS
http://xoops.peak.ne.jp/