LOGIN ID Password Auto Login Register Now! Lost Password?
XUGJ Wiki

ModuleManuals

Protector(Xoops Protector) anchor.png

このマニュアルは旧バージョン用です。最新版はModuleManuals​/protectorV3を見てください

機能:セキュリティ対策
種別:ユーティリティ
作者:GIJOE
バージョン:2.57
動作環境:XOOPS2.0?
配布元:http://xoops.peak.ne.jp/

Page Top

概要 anchor.png

悪意ある攻撃からXOOPSを守るためのモジュールです。
下にあるような攻撃を主に防ぎます。これらが一つでも理解できない場合は、必ずこのprotectorモジュールを導入しましょう。

  • DoS
  • 悪意あるクローラー(メール収集ボットなど)
  • SQL Injection
  • XSS (といっても、ごく一部のパターンだけですが...)
  • システムグローバル変数汚染
  • セッションハイジャック
  • ヌルバイト攻撃
  • ディレクトリ遡り攻撃
  • いくつかの危険なCSRF (XOOPS 2.0.9.2以下に存在するもの)
  • Brute Force (パスワード総当たり)
  • 拡張子偽装画像ファイルアップロード (すなわち、IE Content-Type XSS)
  • 実行可能なファイルをアップロードする攻撃
  • XMLRPC関連

なお、このモジュールは万能ではありません。過信しないでください。
それでもこのモジュールは最低限インストールすべきです。

Page Top

AntiDoS-P との関係 anchor.png

このモジュールの前身は、AntiDoS-P という名前でしたが、すでにDoS対策だけではなくなっていること、コードも全面的に書き直したことから、新たに Xoops Protector と名付けています。

また、モジュールとしては独立していますが、AntiDoS-P の機能はすべて Xoops Protector が引き継いでいますので、AntiDoS-P はアンインストールなされることをおすすめします。

Page Top

インストール anchor.png

通常の方法でインストールしますが、インストールしただけでは動作しません。
インストール時にmainfile.phpを書き換える必要があります。
十分注意して書き換えるようにしてください。

なお、インストール後のパーミッションによっては、一度パーミッションを変更しなければ上書きできません。

最初にモジュールを通常通りインストールします。(このままではモジュールの本来の効果は発揮できていません)
次にサーバ上から稼動状態にあるmainfile.phpをダウンロードします。(バックアップを取っている方はそれでも構いません)良くある間違いにコアパッケージに付属している新品のmainfile.phpを書き換えようとして「該当箇所がありません」と言う質問が発せられることが時々ありますのでご注意ください。

mainfile.phpの下のあたりに、

define('XOOPS_GROUP_ADMIN', '1');
define('XOOPS_GROUP_USERS', '2');
define('XOOPS_GROUP_ANONYMOUS', '3');

include( XOOPS_ROOT_PATH . '/modules/protector/include/precheck.inc.php' ) ;
if (!isset($xoopsOption['nocommon']) && XOOPS_ROOT_PATH != '' ) {
include XOOPS_ROOT_PATH."/include/common.php";
}
include( XOOPS_ROOT_PATH . '/modules/protector/include/postcheck.inc.php' ) ;
赤い部分を挿入してください。

なお、Protectorの権限ですが、モジュールアクセス権限は意味を持ちません。(どのように設定してもOKです)

モジュール管理者権限のみ、管理者に与える形になります。サイトのセキュリティポリシーに関わる設定を変更できるため、この管理者権限はごく少数に与えるべきでしょう。

Page Top

アップデート anchor.png

通常の方法でアップデートします。mainfile.phpに上の内容が記載されていれば変更する必要はありません。

Page Top

アンインストール anchor.png

通常の方法でアンインストールしますが、アンインストールする前に、mainfile.phpに記載した部分を消去(もしくはコメントアウト)してから、通常の方法でアンインストールします。

Page Top

管理画面 anchor.png

Page Top

Protect Center anchor.png

pprotector_fig01.gif
拒否IPリストサイトへのアクセスをIPアドレスで制限する場合に記載します。生IPアドレスを、|で区切って記述します。^は先頭を、$は末尾を表します。
IPによる拒否を有効にするIPアドレスによる制限を行うときは「はい」にします

なお、実際に攻撃があった場合など、この下にそれらのログが残ります。このログの見方ですが、ログに残っている攻撃は、むしろちゃんと「防いだ」ことを意味しているので、あまり気にすることはありません。

むしろ、正常なアクセスなのに、攻撃と誤認された場合の原因切り分けに使うことがほとんどでしょう。

各ログは自動で消えないので、管理者が確認し適切に対処した後で消すようにします。

Page Top
種別の表示 anchor.png
CONTAMIシステムグローバル変数汚染関連の攻撃が検出されています。誤認はほとんどないので、なんらかの自動攻撃を受けたケースがほとんどでしょう。ログに記録されている以上、逆に心配は無用です。
CRAWLERクローラー(メール収集ボットなど)として認識されています。頻繁に来るようであれば、IPアドレスを逆引きして、悪意あるアクセスだと判断できたら、.htaccessなどで禁止してしまうのも良いでしょう。
xmlrpcxmlrpc.phpへのアクセスがあった場合に記録されます。なんらかのXMLRPCクライアントを利用してうまく動作しない時には、このログを確認します。
UPLOAD攻撃と誤認の両方の可能性があります。
例:アップロードするファイルに拡張子が2つ以上ある場合
Attempt to multiple dot file hogehoge.thumb.jpg.
例:アップロードされたファイルの拡張子と中身が一致しない場合(拡張子がgifなのに、中身はHTMLなど)
Attempt to upload camouflaged image file xxxx.bmp.
なおいずれの場合も、アップロード時には真っ白状態になります
BRUTE FORCE短時間に複数回のログイン。単純にパスワードが忘れてしまい短時間に当てずっぽうで入力して引っかかる場合が多いようです。
例:ログインID: xxxx でのログインがあった場合
Trying to login as 'xxxx' found.
DoS短時間に同一ページへのアクセスがあった場合(意図的でなければ、DoS攻撃とみなす時間を伸ばすか、チャットモジュールなどであればそのモジュールを対象外にします)
NullByteヌルバイト攻撃があった場合に記録されます。ブラウザによる差が多く、意外と誤認もあります。誤認であったとしても、副作用もほとんどないので、気にしなくても大丈夫です。
Injecting Null-byte ' ' found.
CRITERIAコアバージョン2.0.14JP(本家版は2.0.13.2)以前に存在するcriteria.phpの脆弱性を利用した攻撃とおぼしきアクセスパターンがあった場合に記録されます。コアバージョンが最新であれば気にすることはありません。
ISOCOMSQLインジェクションに良く使われる文字列が入ったアクセスパターンを検知しています。非常に誤認が多いので、一般設定での「孤立コメントのチェック」は「なし」にした方が良いかもしれません。投稿文の最後に*/ が入った場合、これが検知されています。
Page Top

セキュリティガイド anchor.png

protectorが正しく動作しているかを確認することができます。画面のように各項目が OK になっているようにします。

pprotector_fig02.gif
項目名推奨状態説明
'register_globals'offphpの設定の一つです。PHPスクリプトが予期していない変数初期化を、URLの書き換えによって行なわせることができるためoffが推奨されています。
'allow_url_fopen'offphpの設定の一つです。
'session.use_trans_sid'offphpの設定の一つです。
'XOOPS_DB_PREFIX'xoopsMySQLデータベースの接頭語です。初期状態ではxoopsになっている場合が多いですので変更することをオススメします。
 PREFIXマネージャへ上の接頭語を変更することができます。
'mainfile.php'patchedこのモジュールを有効にするためには、mainfile.phpへの追加変更が必要です。この変更が適用されていれば、patchedが表示されます。
'レスキューパスワード'okこのモジュールの管理画面で、レスキューパスワードが設定されていれば、okが表示されます。

なお、画面下の Protectorの動作チェック には、protectorが「変数汚染」「孤立コメント」を実際に動作させてみることができます。

Page Top
Protectorの動作チェック anchor.png
変数汚染:変数汚染の状態を確認します
孤立コメント:孤立コメントの状態を確認します

Protectorの一般設定で「変数汚染が見つかった時の処理」「孤立コメントが見つかった時の処理」をそれぞれ「強制終了」に設定しておき、上記リンクをクリックします。
ブラウザの新しいウィンドウが起動し、真っ白なページが表示されれば、Protectorによる強制終了が正常に動作している証拠です。
再び管理者権限でログインし、ProtectorのProtect Centerに、上記チェックを行った際の攻撃の種類と、IPがログに記録されていることを確認します。

Page Top

PREFIX マネージャ anchor.png

XOOPSをインストールするときにテーブル接頭語を標準のXOOPSのままにしてしまった方も多いでしょう。
その設定でインストールした人はセキュリティガイドの所で
'XOOPS_DB_PREFIX' : xoops 非推奨
と表示されていると思います。

ではなぜこれが非推奨なのか。
XOOPSのデータはデータベースに保存されています。
そのデータベースの設定に関する部分なら

 ****_config
として保存されています。
この****の部分をPREFIX(接頭語)と呼びます。
デフォルトの設定だと****の部分がXOOPSとなります。
もしデフォルトのXOOPSだった場合、攻撃者がサイトのデータを改ざんするとき、
例えば設定部分を改ざんするときに、デフォルトのXOOPSならばxoops_configを攻撃すればいいとわかってしまうのです。
しかし、この部分を変更してしまえば、いくら最後の部分が_configだとわかっていてもPREFIXがわかっていないので攻撃できないのです。
PREFIX マネージャはそのPREFIXの部分を簡単に変更することができます。
「copy」の部分に新しいPREFIXを記入して横のボタンを押します。
そしてmainfile.phpの
define('XOOPS_DB_PREFIX', '***');
の***の部分を新しく設定したPREFIXに書き換えてアップロードします。
そしたらPREFIXが前ののデータをdeleteボタンで削除することで完了です。

Page Top

一般設定 anchor.png

動作の一時的中断あらゆる防御動作を一時的に無効化します。なにか問題が起こった際の切り分けに使います。問題が解決されたら無効化を解除することをお忘れなく
信用できるIP管理者の場合、短時間での作業がDOS攻撃とみなされる場合などがあるので、管理者のIPアドレスなど記載します。
ログレベルProtect Centerでのログの取得方法を設定します
ログ出力一切なし:
危険性の高いものだけログを取る:
危険性の低いものはログしない:
全種類のロギングを有効とする:(推奨)
セッションを継続する保護ビットセッションハイジャック対策です。セッションIDを盗まれても、これによって守られることも多くあるでしょう。32が最強ですが、いくつかのISPでは、アクセス毎に異なるIPアドレスを「回して」使うことも多く、16くらいが無難かも知れません。16だと完全ではありませんが、それでも、セッションIDを知った悪意ある攻撃者がセッションハイジャックするためのハードルは相当に高くなります。
IP変動を禁止するグループ上の保護ビットを有効化するグループを指定します(複数可)。大きな権限を持つユーザグループだけを指定するのが良いでしょう。
ヌル文字列をスペースに変更する通常は「はい」にします。
実行可能ファイルアップロードによる強制終了通常は「はい」にします。
変数汚染が見つかった時の処理システムグローバルを上書きしようとする攻撃を見つけた場合の処理
なし(ログのみ取る):
強制終了:(推奨)
拒否IP登録:
孤立コメントが見つかった時の処理SQLインジェクション対策。誤認が多いので、「なし」でも良いでしょう。
UNIONが見つかった時の処理SQLインジェクション対策。こちらは誤認も少ないので、「無害化」としておくのがお勧めです。
ID風変数の強制変換storyidなど、変数名がidで終わるものを、数値に強制変換します。myLinks派生モジュールに特に有効で、XSSなども防げますが、一部のモジュールで動作不良の原因となる可能性があります。とりあえずはONで運用してみて、おかしな動作が見つかったらこの設定を疑ってみるのが良いでしょう。
DirectoryTraversalの禁止DirectoryTraversalを試みていると判断されたリクエスト文字列から、".." というパターンを取り除きます。
Brute Force対策パスワード総当たりに対抗します。10分間中、ここで指定した回数以上、ログインに失敗すると、そのIPを拒否します。
DoS監視の対象から外すモジュール外したいモジュールのdirnameを | で区切って入力してください。チャット系モジュールなどに有効です
DoS等の監視時間 (秒)DoSや悪意あるクローラーのアクセス頻度を追うための監視単位時間です。監視時間そのものは短い方が、システム負荷は少ないでしょう。
F5アタックと見なす回数上で設定した監視時間内に、この回数以上、同一URIへのアクセスがあったら、攻撃されたと見なします
F5アタックへの対処対処方法を設定します。
なし(ログのみ取る):
Sleep(非推奨):
exit:(推奨)
拒否IPリストに載せる:
.htaccessにDENY登録(試験的実装):
悪意あるクローラーと見なす回数上で設定した監視時間内に、この回数以上、アクセスがあったら、悪意あるクローラーだと見なします。
悪意あるクローラーへの対処F5アタックへの対処と同一です。
拒否しない User-Agent無条件でクロール許可するエージェント名を、perlの正規表現で記述します。初期値は /(msnbot | Googlebot | Yahoo! Slurp)/i です。
拒否IP登録の保護グループここで指定されたユーザーからのアクセスは、条件を満たしてしまっても、拒否IPとして登録されません。ただし、そのユーザーがログインしていないと意味がありませんので、ご注意下さい。
危険な機能の無効化XOOPSの仕様で、ほとんど使われない割に危険な機能を最初から無効化してしまう、という積極的な防御策です。xmlrpcを無効化しておくのがお勧めです。
レスキューパスワードもし、何らかの理由で、あなた自身がXOOPSにIP拒否されてしまった場合の救済手段を提供します。
XOOPS_URL/modules/protector/admin/rescue.php にアクセスして、ここで指定したパスワードを入力して下さい。ここでパスワードが設定されていないと、レスキュー機能自体が無効になりますのでご注意下さい。
Page Top

よくある質問 anchor.png

Page Top

自分自身がロックアウトされてしまいました。レスキューパスワードを入れる画面は? anchor.png

XOOPS_URL/modules/protector/admin/rescue.php です。

Page Top

セキュリティガイドに、php.iniの変更が反映されない? anchor.png

基本的にはサーバ設定の問題です。
試しに、phpinfo()を、modulesの下で実行してみましょう。

CGI版PHPであるいくつかのサーバでは、php.iniのスコープが設置したディレクトリ直下にしか効かないことも多くあります。この場合、そのホスティングサービスに訊くのが一番ですが、"suPHP_ConfigPath" という設定で有効化されるサービスもあるでしょう。

Page Top

ライセンス anchor.png

GPLv2です。


トップ   凍結 差分 バックアップ 複製 名前変更 リロード印刷に適した表示   ページ新規作成 全ページ一覧 単語検索 最新ページの一覧   ヘルプ   最新ページのRSS 1.0 最新ページのRSS 2.0 最新ページのRSS Atom Powered by xpWiki
Counter: 10507, today: 1, yesterday: 3
初版日時: 2006-05-27 (土) 07:15:50
最終更新: 2014-01-13 (月) 22:06:01 (JST) (1284d) by ゲスト
Back to Page Top
MainMenu
Manuals
Search
XOOPS Official & Dev.
XOOPS Communities