どの PHP スクリプトが SPAM を送信しているかを検出する方法

どの PHP スクリプトが SPAM を送信しているかを検出する方法

PHP スクリプトが大量のメールを送信しています。送信元を検出したいです。すべてのメールは、ユーザーが Apache で使用した www-data を使用して送信されます。プロセスを確認すると、次の結果が得られます。

www-data 16220  0.7  4.7 402508 95924 ?        S    09:37   0:06 /usr/sbin/apache2 -k start
www-data 16352  0.4  3.8 402132 78064 ?        S    09:39   0:03 /usr/sbin/apache2 -k start
www-data 16725  0.6  3.8 402472 78624 ?        S    09:46   0:02     /usr/sbin/apache2 -k start
www-data 16840  0.8  4.2 410744 87204 ?        S    09:48   0:01 /usr/sbin/apache2 -k start
www-data 16949  1.0  4.5 417560 93436 ?        S    09:49   0:01 /usr/sbin/apache2 -k start
www-data 16958  1.0  3.5 402120 72748 ?        S    09:50   0:01 /usr/sbin/apache2 -k start
www-data 16978  1.2  4.6 425160 94864 ?        S    09:51   0:00 /usr/sbin/apache2 -k start
www-data 16980  0.8  3.5 402140 72208 ?        S    09:51   0:00 /usr/sbin/apache2 -k start
www-data 16983  0.4  2.6 402160 54400 ?        S    09:51   0:00 /usr/sbin/apache2 -k start

Apache は多くのプロセスを使用しており、メールを送信するスクリプトが何であるかわかりません。

それを実行する方法はありますか?

答え1

strace を実行して、実行中のすべての Apache プロセスをファイルにダンプし、スパムがなくなったら、何が起こっていたのかを追跡できるかどうかを確認します (たとえば、strace でファイル パスを調べても明らかでない場合は、mod_status を使用してサーバー ステータスのダンプを頻繁に保存するなど)。

次のような方法を試すこともできますが、リソースを大量に消費する可能性があることに注意してください。-s必要に応じてパラメータを調整してください。

pidlist=''; \
for pid in `ps ax | grep apache2 |grep /usr/sbin/apache2 | awk '{print $1}'`;\
    do pidlist="$pidlist -p $pid"; \
done; \
strace -s 1024 -tt -F -f $pidlist  > strace_apache2.out 2>&1

関連情報