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