PHPIDSを使用したPHPアプリケーションの侵入検知

この記事では、 PHPIDSを構成する方法を示します。 PHPIDS(PHP-Intrusion Detection System)は、アプリケーションのセキュリティを分析するための使いやすく、構造化された、迅速なレイヤーです。 IDS-ユーザーが入力したデータを分析するためのレイヤーではなく、ユーザーがサイトを攻撃しようとしているときのみ認識します。 テスト済みおよびテスト済みの一連のルールに基づいて、各攻撃には危険性の評価が割り当てられます。 これにより、攻撃に関する統計を簡単に保存したり、開発チームに通知を送信したりできます。





まえがき

この記事の例は、Apacheバージョン2およびPHP5、IP-192.168.0.100を使用したDebian Etch LAMPで作成されました。

Apacheのユーザーとグループはwww-dataです。 php.iniへのパスは/etc/php5/apache2/php.iniです。 仮想ホストのドキュメントルートは/ var / www / web1 / webでした



PHPIDSをインストールする

セキュリティイメージから、ドキュメントルートの外部にPHPIDSをインストールしたので、/ var / www / web1 / phpidsを作成しました。



次に、PHPIDSをインストールしました(インストール時の最新バージョンは0.4.7でした)。

cd / tmp

wget php-ids.org/files/phpids-0.4.7.ta​​r.gz

tar xvfz phpids-0.4.7.ta​​r.gz

cd phpids-0.4.7

mv lib / / var / www / web1 / phpids /

cd / var / www / web1 / phpids / lib / IDS

chown -R www-data:www-data tmp /





次に、Config.iniを再構成しました。

cd Config /

vi Config.ini





デフォルトの設定を使用し、パスを変更するだけです

; PHPIDS Config.ini



; 一般的な構成設定



; !!!データベース接続データが追加された場合、このファイルをWEB-ROOT内に配置しないでください!!!



[全般]



filter_type = xml

filter_path = /var/www/web1/phpids/lib/IDS/default_filter.xml

tmp_path = / var / www / web1 / phpids / lib / IDS / tmp

scan_keys = false



例外[] = __utmz

例外[] = __utmc



; PHPIDSロガーを使用する場合、ここで特定の構成を定義できます。



[ロギング]



; ファイルロギング

パス= /var/www/web1/phpids/lib/IDS/tmp/phpids_log.txt



; メールログ



; セーフモードを有効にすると、スパムの試みを防ぐことができます。

; ドキュメントを参照

受信者[] = test@test.com.invalid

subject = "PHPIDSは侵入の試みを検出しました!"

header = "From:info@php-ids.org"

safemode = true

allowed_rate = 15



; データベースロギング



wrapper = "mysql:host = localhost; port = 3306; dbname = phpids"

ユーザー= phpids_user

パスワード= 123456

テーブル=侵入



; ファイルキャッシュ以外の方法を使用する場合は、ここで設定できます



[キャッシュ]



; キャッシング:セッション|ファイル|データベース| memcached |なし

キャッシング=ファイル

expiration_time = 600



; ファイルキャッシュ

パス= /var/www/web1/phpids/lib/IDS/tmp/default_filter.cache



; データベースキャッシュ

wrapper = "mysql:host = localhost; port = 3306; dbname = phpids"

ユーザー= phpids_user

パスワード= 123456

テーブル=キャッシュ



; memcached

; host = localhost

;ポート= 11211

; key_prefix = PHPIDS

; tmp_path = /var/www/web1/phpids/lib/IDS/tmp/memcache.timestamp





PHPIDSを使用する



次に、PHPIDSを使用する/var/www/web1/web/phpids.phpを作成します

set_include_path(

get_include_path()

。 PATH_SEPARATOR

。 '/ var / www / web1 / phpids / lib'

);



require_once 'IDS / Init.php';

$リクエスト=配列(

'リクエスト' => $ _REQUEST、

'GET' => $ _GET、

'POST' => $ _POST、

'COOKIE' => $ _COOKIE

);

$ init = IDS_Init :: init( '/ var / www / web1 / phpids / lib / IDS / Config / Config.ini');

$ ids = new IDS_Monitor($ request、$ init);

$ result = $ ids-> run();



if(!$ result-> isEmpty()){

//結果オブジェクトを見てください

echo $ result;

require_once 'IDS / Log / File.php';

require_once 'IDS / Log / Composite.php';



$ compositeLog = new IDS_Log_Composite();

$ compositeLog-> addLogger(IDS_Log_File :: getInstance($ init));

$ compositeLog->実行($結果);

}





その後、ブラウザに192.168.0.100/phpids.phpと入力すると、空白のページが表示されます。

ただし、たとえば192.168.0.100/phpids.php?test=%22%3EXXX%3Cscript%3Ealert(1)%3C / script%3Eなどのさまざまなパラメーターを追加すると、PHPIDSはそれらを検出して結果をブラウザーに出力します







次に、各スクリプトでPHPIDSが使用されていることを確認します。 もちろん、システム上のすべてのphpファイルを変更する必要はありません。 スクリプトを開始するたびにPHPIDSを実行するようにphpに指示します。 auto_prepend_fileパラメーターを使用してこれを行います。 これを行うには、php.iniまたは.htaccessファイルに変更を加えます

auto_prepend_file = /var/www/web1/web/phpids.php

または.htaccessの場合

php_value auto_prepend_file /var/www/web1/web/phpids.php



Apacheを再起動します(php.iniを変更した場合)



内容を含むinfo.phpファイルを作成します

phpinfo();


ブラウザ192.168.0.100/info.phpに書き込むと、phpinfo()コマンドの通常の出力が表示されます。

192.168.0.100/info.php?test=%22%3EXXX%3Cscript%3Ealert(1)%3C / script%3Eのようなパラメーターを追加します

そして、あなたは表示されます







PHPIDSはこのデータを/var/www/web1/phpids/lib/IDS/tmp/phpids_log.txtに書き込みます

「192.168.0.200」、2008-06-04T17:36:08 + 02:00.54、「xss csrf id rfe lfi」、「REQUEST.test =%5C%22%3EXXX%3Cscript%3Ealert%281%29% 3C%2Fscript%3E GET.test =%5C%22%3EXXX%3Cscript%3Ealert%281%29%3C%2Fscript%3E "、

「%2Finfo.php%3Ftest%3D%2522%253EXXX%253Cscript%253Ealert%281%29%253C%2Fscript%253E」




今、記録を見ることによって。 ハッカーがアプリケーションで何かを実行しようとしていたことがわかります。



アプリケーションに別のレベルのセキュリティを追加するには、PHPIDSが攻撃を検出した場合にスクリプトを停止できます。

このようなものを追加できます

死ぬ

立ち去れ!

');

ファイル/var/www/web1/web/phpids.phpスクリプトのif(!$ result-> isEmpty())セクション{}へ

set_include_path(

get_include_path()

。 PATH_SEPARATOR

。 '/ var / www / web1 / phpids / lib'

);



require_once 'IDS / Init.php';

$リクエスト=配列(

'リクエスト' => $ _REQUEST、

'GET' => $ _GET、

'POST' => $ _POST、

'COOKIE' => $ _COOKIE

);

$ init = IDS_Init :: init( '/ var / www / web1 / phpids / lib / IDS / Config / Config.ini');

$ ids = new IDS_Monitor($ request、$ init);

$ result = $ ids-> run();



if(!$ result-> isEmpty()){

//結果オブジェクトを見てください

echo $ result;

require_once 'IDS / Log / File.php';

require_once 'IDS / Log / Composite.php';



$ compositeLog = new IDS_Log_Composite();

$ compositeLog-> addLogger(IDS_Log_File :: getInstance($ init));

$ compositeLog->実行($結果);



死ぬ

立ち去れ!

');

}





攻撃がない場合、スクリプトは実行を継続します。そうでない場合、ハッカーはこれを確認します





翻訳者のコメント

上記の例は、戦闘システムで使用できます。 ただし、これには何らかの変換が必要になります

$ init = IDS_Init :: init( '/ var / www / web1 / phpids / lib / IDS / Config / Config.ini');



毎回ファイルから設定ファイルをロードする必要はなく、以前に記述されたクラスで置き換える必要があるため



All Articles