记一次特洛伊木马实战分析
字数 3252 2025-08-05 19:10:02
特洛伊木马实战分析教学文档
1. 样本概述
这是一个DDOS木马样本,具有多种功能模块,包括:
- 持久化机制(自启动项)
- 反调试技术
- 多模块执行路径
- 后门安装
- 系统信息收集
- DDOS攻击能力
2. 样本文件组成
原始样本包含:
- 一个名为"beijing"的程序(实际是某逆向题目)
- 主要恶意程序"soft"
- 一个文件夹(推测包含攻击模块)
3. 字符串分析
初步字符串分析发现:
- "attack"相关字符串
- HTTP协议相关字符串
- 大量IP地址列表
4. 主程序分析
4.1 初始执行流程
v3 = alloca(16);
CSysTool::CloseAllFileDescs(); // 关闭所有文件描述符
CSysTool::Ower6msf(); // 第一组数据解密
// 获取模块完整路径并检查文件大小
std::string::string((std::string *)&v11);
CUtility::GetModuleFullPath((CUtility *)&v11, v8);
v4 = (CFileOp *)std::string::c_str((std::string *)&v11);
if ( CFileOp::GetTgtFileSize(v4, v5) != g_iFileSize )
MEMORY[0] = 0;
// 反调试检查
CUtility::GetParentPath((CUtility *)&v10);
v6 = std::string::c_str((std::string *)&v10);
if ( strstr(v6, "gdb") != 0 ) // 检测是否在gdb调试环境下运行
MEMORY[0] = 0;
4.2 关键字符串解密
程序通过多个解密函数初始化关键字符串:
HGrd9((int)&v12);
std::string::operator=(&g_strSN, &v12); // g_strSN = "DbSecuritySpt"
Mndyuf((int)&v13);
std::string::operator=(&g_strBDSN, &v13); // g_strBDSN = "selinux"
BGtd98();
std::string::operator=(&g_strBDG, &v14); // g_strBDG = "getty"
Osdku6();
std::string::operator=(&g_strML, &v15); // g_strML = "/tmp/moni.lod"
wer54();
std::string::operator=(&g_strGL, &v16); // g_strGL = "/tmp/gates.lod"
4.3 执行路径选择
程序根据g_iGatesType值选择不同执行路径:
CSysTool::CheckGatesType(); // 检查GatesType
CSysTool::Ikdfu94(); // 第二组数据解密
if ((unsigned __int8)CSysTool::IsUpdateTemporary()) {
CSysTool::DoUpdate((CSysTool *)argc, (int)argv, v9);
} else if (g_iGatesType == 1) {
MainBeikong();
} else if (g_iGatesType > 1) {
if (g_iGatesType == 2) {
MainBackdoor();
} else if (g_iGatesType == 3) {
MainSystool(argc, (char **)argv);
}
} else if (!g_iGatesType) {
MainMonitor();
}
5. GatesType判定机制
CheckGatesType()函数通过比较当前程序所在目录确定g_iGatesType值:
| GatesType值 | 对应路径 |
|---|---|
| 0 | /usr/bin/.sshd |
| 1 | 其他路径 |
| 2 | /usr/bin/bsd-port/getty |
| 3 | 系统工具路径(见下表) |
系统工具路径包括:
- /bin/netstat
- /bin/lsof
- /bin/ps
- /bin/ss
- /usr/bin/netstat
- /usr/bin/lsof
- /usr/bin/ps
- /usr/bin/ss
- /usr/sbin/netstat
- /usr/sbin/lsof
- /usr/sbin/ps
- /usr/sbin/ss
6. 各功能模块分析
6.1 MainMonitor (GatesType == 0)
功能:
- 创建子进程
- 向
/tmp/moni.lod写入进程ID - 读取并删除
/tmp/notify.file - 线程循环挂起(每分钟一次)
6.2 MainBeikong (GatesType == 1)
功能:
-
结束并删除
/tmp/moni.lod记录的进程 -
创建持久化机制:
- 创建自启动项
/etc/init.d/DbSecuritySpt,内容为:#!/bin/bash (filepath) # 当前程序路径 - 创建自启动链接
/etc/rc(1-5).d/S97DbSecuritySpt - 执行
ln -s /etc/init.d/DbSecuritySpt (filepath)
- 创建自启动项
-
后门安装(当
g_iDoBackdoor为true且当前进程为root时):- 结束
/usr/bin/bsd-port/getty.lock进程 - 结束
/usr/bin/bsd-port/udevd.lock进程 - 删除
/usr/bin/bsd-port/udevd.lock文件 - 拷贝当前进程到
/usr/bin/bsd-port/getty
- 结束
-
其他操作:
- 如果是root执行,拷贝进程到
/usr/bin/.sshd - 非root执行则删除
/tmp/notify.file - 执行
MainProcess函数
- 如果是root执行,拷贝进程到
6.3 MainProcess函数
功能:
- 删除进程路径下的
update_temporary - 修改DNS配置(在
/etc/resolv.conf添加8.8.8.8和8.8.4.4) - 初始化配置文件:
conf.ncmd.n
- 收集系统信息:
- CPU信息
- 操作系统信息
- 网络信息
- 内存信息
- 磁盘信息
- 初始化330个DNS地址
- 读取
/usr/lib/libamplify.so配置amp资源数据 - 根据收集的信息执行对应的DDOS攻击
6.4 MainBackdoor (GatesType == 2)
功能:
- 检查
/usr/bin/bsd-port/getty.lock后门文件- 存在则写入进程ID
- 创建持久化机制:
- 创建
/etc/init.d/selinux - 创建
/etc/rc(1-5).d/S99selinux
- 创建
- 检查系统工具路径:
- 如果存在,则复制到
/usr/bin/dpkgd/md目录下 - 生成
netstat、lsof等文件 - 设置0755权限
- 如果存在,则复制到
- 执行
MainProcess函数
6.5 MainSystool (GatesType == 3)
功能:
- 调用被复制的系统工具:
netstatlsofps等
- 过滤掉进程目录信息
- 向服务端输出结果
7. 持久化技术分析
该木马使用了多种持久化技术:
7.1 自启动项
-
DbSecuritySpt版本:
- 主文件:
/etc/init.d/DbSecuritySpt - 启动链接:
/etc/rc(1-5).d/S97DbSecuritySpt
- 主文件:
-
selinux版本:
- 主文件:
/etc/init.d/selinux - 启动链接:
/etc/rc(1-5).d/S99selinux
- 主文件:
7.2 后门文件
/usr/bin/.sshd/usr/bin/bsd-port/getty/usr/bin/bsd-port/getty.lock/usr/bin/bsd-port/udevd.lock
7.3 临时文件
/tmp/moni.lod- 存储监控进程ID/tmp/gates.lod- 功能未知/tmp/notify.file- 用于进程间通信
8. 反分析技术
-
反调试:
- 检查父进程路径是否包含"gdb"
- 如果检测到调试器,执行
MEMORY[0] = 0导致崩溃
-
多阶段解密:
- 第一组解密:
CSysTool::Ower6msf() - 第二组解密:
CSysTool::Ikdfu94()
- 第一组解密:
-
路径依赖执行:
- 根据自身所在路径决定执行逻辑
9. 攻击流程总结
-
初始感染:
- 通过某种方式将木马植入目标系统
- 初始执行路径通常为非系统路径(GatesType=1)
-
持久化安装:
- 创建自启动项
- 安装后门到系统目录
- 可能替换系统工具
-
信息收集:
- 收集系统硬件和网络信息
- 初始化DNS配置
-
攻击执行:
- 根据C&C服务器指令执行DDOS攻击
- 隐藏自身网络活动
-
自我更新:
- 通过
IsUpdateTemporary检查更新 - 使用
DoUpdate函数执行更新
- 通过
10. 检测与清除建议
10.1 检测指标
-
文件系统:
- 检查是否存在以下文件:
/etc/init.d/DbSecuritySpt/etc/init.d/selinux/usr/bin/.sshd/usr/bin/bsd-port/getty/usr/bin/bsd-port/getty.lock/usr/bin/bsd-port/udevd.lock/tmp/moni.lod/tmp/gates.lod/usr/bin/dpkgd/md目录下的工具
- 检查是否存在以下文件:
-
进程:
- 检查异常进程名
- 监控
/tmp/moni.lod中记录的进程
-
网络:
- 监控与大量IP地址的连接
- 检查DNS配置是否被修改
10.2 清除步骤
- 终止相关进程
- 删除所有恶意文件和启动项
- 恢复被替换的系统工具
- 检查并清理DNS配置
- 检查定时任务和其他持久化机制
- 审计系统日志查找入侵痕迹
11. 技术亮点
-
模块化设计:
- 根据执行环境自动切换功能
-
隐蔽性:
- 伪装成系统进程(sshd、getty等)
- 替换系统工具隐藏自身
-
持久化多样性:
- 多种自启动机制
- 多位置后门安装
-
信息收集全面:
- 收集系统各方面信息用于定制攻击
-
抗分析能力:
- 反调试技术
- 多阶段解密
- 路径依赖执行
12. 防御建议
-
文件完整性监控:
- 监控系统关键目录和文件的变更
-
权限控制:
- 限制对系统目录的写入权限
- 使用最小权限原则
-
进程监控:
- 监控异常进程行为
- 建立进程白名单
-
网络监控:
- 监控异常外连
- DNS请求监控
-
安全加固:
- 定期更新系统
- 使用安全工具进行扫描
- 实施适当的沙箱和隔离措施