尋找發送垃圾郵件的人

尋找發送垃圾郵件的人

我有一台 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 - 這裡 在此輸入連結描述

我試圖找到父進程:15179的父進程pid是15176:

/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

這種情況很少發生(每兩天一次)並且持續幾分鐘。因此很難獲得更多資訊。所有這些資訊均使用監控 smtp 連線的 cron 作業記錄。我不知道如何識別誰運行這些進程或它們是如何運行的。有什麼策略可以找到他們嗎?

答案1

您顯示的資料已經包含許多資訊:使用者的UID是33,在我的系統上對應於www-數據,我認為這很可能同樣適用於您的系統,因為您顯示的套接字屬於www-數據

另外,我懷疑命令列會為你帶來更多資訊:perl程式的PPID是15176,但是15176的PPID是1(IE,在裡面)。這中間沒有 shell,也沒有會話。

所聯繫的 IP 位址並不是特別令人擔憂:它們屬於微軟和谷歌,而這些人知道如何保護自己。

那麼,犯規行為的證據在哪裡呢?我同意連線的 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啟動該進程的使用者的。

在你的情況下,這將是 iser 與uid 33

用於getent passwd 33查看使用者的名稱。

追蹤用戶

您可以使用一個小型的 C 守護程式輕鬆監視和記錄使用者的活動,

使用/proc/pid/status用於讀取檔案並在使用者之後進行搜尋的小庫。

這可以幫助您避免伺服器運行時出現問題。

(你也可以讓守護程式處理kill這些行程)

相關內容