某天,到公司,查看服務器。其中一台服務器的對外流量暴漲到了20Mbps(買的帶寬最大值),而這台服務器平時的流量都只是1Mbps之內。通過ssh,由於帶寬完全被占滿,幾乎連不進去了。只能找通過機房人員,讓他們把服務器流出帶寬限定在一定范圍內。服務器為CentOS6.5
查看歷史執行腳本,發現多了以下一些奇怪的腳本執行:
46 ethtool eth0
47 /etc/init.d/iptables stop
48 service iptables stop
49 SuSEfirewall2 stop
50 reSuSEfirewall2 stop
51 echo "nameserver 8.8.8.8" >> /etc/resolv.conf
52 chmod 0777 2444
53 chmod u+x 2444
54 ./2444 &.
55 chmod 0777 2444
56 chmod u+x 2444
57 ./2444 &
進去服務器之后,通過top命令,發現了幾個異常的進程,名字很奇怪,如ypyvjyodov等:
最開始,用kill -9 PID,殺掉這些進程,但是這些進程消失之后,top查看,重新又出現了好幾個類似的進程。mygod,這是完全kill不掉的節奏!
接下來,嘗試了第二種方式,就是通過whereis ypyvjyodov 查找命令所在,然后到相應目錄下刪除之,結果還是和kill一樣!直接修改命令文件,對這些進程都沒有影響!
之后,我嘗試了對服務器的的啟動服務檢測:chkconfig --list,發現多了很多的服務:如abrt-ccpp ,abrtd ,acpid ,atd ,autofs ,blk-availability ,certmonger ,cgconfig ,cgred ,cpuspeed ,cups ,haldaemon ,irqbalance ,kdump ,lhpoeizkfw ,libvirt-guests ,lvm2-monitor ,mcelogd ,mdmonitor ,nfs ,nfslock ,ntpd ,numad ,oddjobd ,portreserve ,psacct ,quota_nld ,rngd ,rpcbind ,rpcgssd ,rpcsvcgssd ,sssd ,smartd ,svnserve ,wbtsabcfvm ,winbind ,xvvywwwsnr ,xvzzwtskrd ,ypbind
對這些服務的文件進行檢查,進入/etc下,多了一堆的配置文件:
abrt acpi alsa at.deny certmonger cgconfig.conf cgrules.conf
cgsnapshot_blacklist.conf cups drirc elinks.conf foomatic ghostscript
gssapi_mech.conf hal ipa java jvm jvm-commmon kdump-adv-conf kdump.conf
latrace.conf latrace.d libreport libvirt lsb-release lsb-release.d ltrace.conf lvm
mailcap mail.rc maven mcelog mime.types nanorc netconfig nfsmount.conf ntp.conf
numad.conf oddjob oddjobd.conf oddjobd.conf.d pm-utils-hd-apm-restore.conf
portreserve prelink.cache prelink.conf prelink.conf.d quotagrpadmins quotatab
readahead.conf redhat-lsb request-key.conf request-key.d samba scl setuptool.d sssd
subversion Trolltech.conf updatedb.conf warnquota.conf yp.conf
發現這些之后,心里有些小激動,然后就是刪除服務、文件、重啟服務器,以為一切都是那么的順理成章。然而,服務器重啟之后,並沒有發現奇跡!這些服務確實不存在了,但是類似的進程,還是好好的!重新看了一下自啟動服務:
這之后,我在想,是不是有定時任務在執行呢,然后執行了命令:ls -l /etc/cron.*,發現了很多任務在跑:
執行命令:cat /etc/crontab,發現2個定時腳本在跑:/etc/cron.hourly/kill.sh,/etc/cron.hourly/gcc4.sh
難道就是這些任務的原因?清理掉這些任務之后,重新kill異常的進程,發現還是衍生了其他的進程!
再重新看這/etc/cron.hourly下的這兩個文件,又重新生成了!那是不是這個病毒不但監聽了kill信號,同時還監聽了remove信號!
最后我在想,既然無法把你刪除,那我干脆就把你修改了:修改了/etc/cron.hourly/kill.sh的腳本,同時修改這個腳本里面相關的/lib/libkill.so的信息,讓其成為一個錯誤程序,並把他們的執行權限去掉:
這么修改之后,再kill掉那些進程,這次奇跡出現了:那些進程沒有再啟動了。
最后,這些病毒並沒能完全清理,等把環境和數據都部署好了,還是需要重裝服務器。
結語:雖然這次沒有弄清楚這個病毒的原理,也沒能完全消除它,但通過這些方式,希望能幫助遇到同樣問題的人。