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

「氷のような冬の季節に、
彼らはバックドアサーバーに山をアップロードしました...」

フォーク管理作業



一般的に、ある日、サーバーの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

Source: https://habr.com/ru/post/J69790/


All Articles