ガーディアン:システムを守る

「氷のような冬の季節に、

彼らはバックドアサーバーに山をアップロードしました...」



フォーク管理作業







一般的に、ある日、サーバーの1つでphp-shellが発見されました。これにより、悪意のあるハッカーが居心地の良い日記™を破壊しました。

Apacheログを2時間ピックした後、シェルが浸水した穴がありました。

彼らは穴をふさぎ、日記はバックアップから生き返り、考えつくために座った。



3本目のビールを飲んだ後、「PHPスクリプトからシステムコールをキャッチしないのはなぜですか」というアイデアが浮上しました。

ポイントは、ほとんどのphpシェルが何らかの方法でexec()関数を使用することです。システム();shell_exec(); またはパススルー(); 。 したがって、これらの関数の実行を傍受し、ログに記録することができます。そのようなスクリプトは、パラメータ「rm -rf /」でexec()関数と呼ばれます。

すぐに言ってやった。 善人カスティガーはそれらに届けられました。 タスクと作業が沸騰し始めました。

Zend Engineの複雑さについては説明しませんが、最終的にはPHP4 / PHP5の拡張機能のコードネームはBAXTEPになりました。

最初は、コードを一般にアップロードする予定はありませんでした。なぜなら、すべてが「自分用に」書かれており、「from to to」はテストされていなかったからです。



組み立てと設置:





拡張機能は、PHPバージョン4および5をサポートします。



要件:



-PHP4 / PHP5開発パッケージ(php4-dev、php5-dev)

-gcc

-転覆



ソースを取得します。



  svn checkout http://baxtep.googlecode.com/svn/trunk/ baxtep 




収集するもの:



cd baxtep

phpize

./configure

make








アセンブリの後、。/ modules /ディレクトリからbaxtep.soを取り出してextension_dirに配置し、およそ次の行をphp.iniに追加します。



;;;;;;;;;;

; BAXTEP ;

;;;;;;;;;;

; Load extension

extension=baxtep.so



; Absolute path to logfile. File must exist and have write access for php

baxtep.logfile = "/tmp/baxtep_messages"








自分でログファイルを作成する必要があります。 さらに、phpスクリプトには、このファイルに書き込むための十分な権限が必要です。



touch /tmp/baxtep_messages

chmod 777 /tmp/baxtep_messages








それだけで、Apacheを再起動し、テストスクリプトを作成してログを確認します。 次のようなものがあります。



2009-03-13 07:59:05 BAXTEP: system CMDLINE: `pwd` FILE: /var/www/html/test.php on line 5 URI: /test.php







書式:



-- :: BAXTEP: CMDLINE: FILE: on line N URI: REQUEST_URI







UPD: l0rdaには CentOS 5(i386およびx86_64)用のパッケージコンパイルされています。ここからダウンロードできます: rpm.l0rda.biz/CentOS/5/RPMS/i386 、キー: rpm.l0rda.biz/L0RDA-KEY



All Articles