LAMP Ubuntu 10.04サーバーがあります。多くの(140人以上)ユーザーと、さまざまなPHPウェブサイト(カスタマイズされた、さまざまなPHPフレームワーク、CMSなど)があります。
問題は、時にはサーバーが「スパム」を送信することです。現地輸出入銀行は、この目的には使用されません。次のような奇妙な活動を見つけました。
/usr/bin/lsof -ni | grep smtp |grep -v ^exim4
perl 15177 www-data 510u IPv4 1101127040 0t0 TCP server_ip:46401->65.55.37.72:smtp (SYN_SENT)
perl 15178 www-data 510u IPv4 1101127059 0t0 TCP server_ip:51002->98.136.217.202:smtp (SYN_SENT)
perl 15179 www-data 510u IPv4 1101126982 0t0 TCP server_ip:39232->74.125.205.26:smtp (SYN_SENT)
perl 15180 www-data 510u IPv4 1101126975 0t0 TCP server_ip:53339->65.55.37.72:smtp (SYN_SENT)
perl 15181 www-data 510u IPv4 1101127014 0t0 TCP server_ip:45429->65.55.37.72:smtp (SYN_SENT)
perl 15182 www-data 510u IPv4 1101126984 0t0 TCP server_ip:49985->74.125.205.26:smtp (SYN_SENT)
perl 15183 www-data 510u IPv4 1101126971 0t0 TCP server_ip:42199->65.55.37.72:smtp (SYN_SENT)
..........
...........
perl 15184 www-data 510u IPv4 1101126968 0t0 TCP server_ip:36641->74.125.205.26:smtp (SYN_SENT)
perl 15186 www-data 510u IPv4 1101126979 0t0 TCP server_ip:57690->98.138.112.32:smtp (SYN_SENT)
...........
これらのPerlプロセスを誰が実行しているのか、どのように実行しているのかわかりません。私はこれらのプロセス(pid 15179など)を分析しようとしています:/proc/15179/cmdline - 空です。
/proc/15179/status
Name: perl
State: S (sleeping)
Tgid: 15179
Pid: 15179
PPid: 15176
TracerPid: 0
Uid: 33 33 33 33
Gid: 33 33 33 33
FDSize: 1024
Groups: 33
VmPeak: 10400 kB
VmSize: 10372 kB
VmLck: 0 kB
VmHWM: 8140 kB
VmRSS: 8092 kB
VmData: 6980 kB
VmStk: 88 kB
VmExe: 1200 kB
VmLib: 1980 kB
VmPTE: 32 kB
Threads: 1
SigQ: 0/16382
SigPnd: 0000000000000000
ShdPnd: 0000000000000000
SigBlk: 0000000000000000
SigIgn: 0000000000000080
SigCgt: 0000000180017427
CapInh: 0000000000000000
CapPrm: 0000000000000000
CapEff: 0000000000000000
CapBnd: ffffffffffffffff
Cpus_allowed: f
Cpus_allowed_list: 0-3
Mems_allowed: 1
Mems_allowed_list: 0
voluntary_ctxt_switches: 6431
nonvoluntary_ctxt_switches: 34
lsof -n -p 15179 - ここ ここにリンクの説明を入力してください
親プロセスpidが15176の親プロセス15179を見つけようとしています。
/proc/15176/cmdline - 空
そして
/proc/15176/status
Name: perl
State: S (sleeping)
Tgid: 15176
Pid: 15176
PPid: 1
TracerPid: 0
Uid: 33 33 33 33
Gid: 33 33 33 33
FDSize: 1024
Groups: 33
VmPeak: 11116 kB
VmSize: 11116 kB
VmLck: 0 kB
VmHWM: 8712 kB
VmRSS: 8692 kB
VmData: 7772 kB
VmStk: 88 kB
VmExe: 1200 kB
VmLib: 1940 kB
VmPTE: 32 kB
Threads: 1
SigQ: 0/16382
SigPnd: 0000000000000000
ShdPnd: 0000000000000000
SigBlk: 0000000000000000
SigIgn: 0000000000010080
SigCgt: 0000000180007427
CapInh: 0000000000000000
CapPrm: 0000000000000000
CapEff: 0000000000000000
CapBnd: ffffffffffffffff
Cpus_allowed: f
Cpus_allowed_list: 0-3
Mems_allowed: 1
Mems_allowed_list: 0
voluntary_ctxt_switches: 14467
これはほとんど起こらず(2日に1回)、数分間続きます。だから、より多くの情報を取得するのは難しいです。これらすべての情報は、smtp接続を監視するcronジョブを使用して記録されます。誰がこれらのプロセスを実行しているのか、どのように実行されているのかを識別する方法がわかりません。それらを見つける戦略はありますか?
答え1
表示されるデータにはすでに多くの情報が含まれています。ユーザーのUIDは33で、私のシステムではwww-データ、あなたがマークしたソケットが次に属するので、これがあなたのシステムにも適用される可能性が最も高いと思います。www-データ。
また、コマンドラインがより多くの情報を提供すると思います。 PerlプログラムのPPIDは15176ですが、PPID 15176は1(つまり、内部に)。その間にはシェルやセッションはありません。
連絡されたIPアドレスは特に心配するものではありません。そのIPアドレスはMicrosoftとGoogleに属し、これらの人々は自分自身を保護する方法を知っています。
それでは、反則の証拠はどこにありますか?私は接続のSYN_SENT状態が実際に心配していることに同意します。これは、接続が正しいSYN / ACKを受信せず、静止状態にあることを意味するためです。
それでは、より多くの情報を見つけるために何ができますか?ユーザーを直接識別しようとすることはできません。あなたの投稿にはすでにユーザーがいることを示します。www-データ、プロセスは端末またはセッションに直接接続されません。
しかし、まずあなたのIPがブラックリストにあることを確認することができます。ここ:そうであれば、スパムの証拠です。
第二に、メールプログラムのログに異常なものがあることを確認する必要があります。ブラックリストに登録されているため、サイトで接続を拒否する場合、同じサイトで複数回接続する場合、リレーとして使用される証拠など…。
第三に、以下を使用してポートを監視できます。
ss -lntp
これは、特定の時点で(TCP)ポートを使用するプロセスのpidを知らせ、複数の接続を再確認します。毎秒繰り返して出力を保存するように上記のコマンドを作成できます(おそらく次のように)。ユーザー)とタイムスタンプを使用して、疑わしい接続が発生したときに何が起こったのかを学ぶことができます。これには相関関係がある可能性があります。検視ユーザーがログインしているか、サイトに接続しています。
詳細については、頻繁に発生するMicrosoftサイトにすべてのパケットをダンプするだけです。
nohup tcpdump -n -i eth0 host 65.52.0.0/14 -w outfile &
出力によると、IPアドレス範囲はMicrosoftに属するブロック全体です。世界保健機関65.55.37.72;上記のコマンドはかなり多くの出力を生成する可能性があるため、式フィルタリング技術を磨く準備をしてください。ラインシャーク。
他のすべての方法が失敗した場合は、パスワードの変更を強制する準備をしてください。
答え2
ただ考えです。 GrepはApacheログを調べます。時間があれば、電子メールが送信された後に簡単に見つけることができます。特にPerlスクリプトを探しています。
答え3
ユーザーのインポート
通常UIDフィールド表示UIDプロセスを開始したユーザーです。
あなたの場合、これは次のとおりです。UID 33
。
getent passwd 33
ユーザーの名前を表示するために使用されます。
ユーザー追跡
小さなCデーモンを使用して、ユーザーのアクティビティを簡単に監視および記録できます。
使用これ/proc/pid/status
ファイルを読み取ってユーザーを検索するための小さなライブラリです。
これは、サーバーの実行中に問題を回避するのに役立ちます。
kill
(デーモンにこれらのプロセスを処理させることもできます)