彼らはバックドアサーバーに山をアップロードしました...」
フォーク管理作業
一般的に、ある日、サーバーの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