AsyncRAT攻防技术对抗
字数 1420 2025-08-10 08:28:52
AsyncRAT攻防技术对抗全面解析
概述
AsyncRAT是一款基于C#开发的远程管理工具(RAT),因其功能强大且开源而在黑客论坛广泛传播。本文将从网络检测、终端检测、内存检测、内存马提取和配置信息提取等多个角度,全面剖析AsyncRAT的检测与对抗技术。
网络检测技术
1. TLS通信特征检测
AsyncRAT使用TLS加密通信,可通过以下特征进行检测:
- 通信协议:固定使用TLS 1.0协议
- 密钥套件:在Windows 7环境中运行时,使用
TLS_RSA_WITH_AES_128_CBC_SHA (0x002f)密钥套件 - 心跳包特征:
- 心跳间隔稳定在10-15秒(源码指定为10-15秒,实测多为15秒)
- 心跳数据包长度固定(因载荷固定导致加密后长度固定)
2. 明文字符串特征
C#调用gzip压缩时存在特殊现象:
- 部分解压后的明文字符串会出现在压缩数据中(如"Packet"、"savePlugin"、"Dll"等)
- 这种现象可用于识别AsyncRAT流量
终端检测技术
1. YARA规则检测
使用公开的AsyncRAT特征规则进行静态检测:
rule AsyncRAT {
meta:
description = "AsyncRAT v0.5.7B - Remote Administration Tool"
author = "IrishIRL"
reference = "https://github.com/NYAN-x-CAT/AsyncRAT-C-Sharp"
strings:
$s1 = "MZ"
$s2 = "/c schtasks /create /f /sc onlogon /rl highest /tn \""
$s3 = "START \"\" \""
$s4 = "DEL \""
$s5 = "System.Drawing.Imaging"
$s6 = "System."
condition:
all of them
}
2. Loki工具检测
Loki是一款多功能IOC扫描器,支持:
- Yara规则匹配文件内容
- 正则匹配路径和文件名
- Yara匹配进程内存
- 文件Hash匹配
- 进程网络行为C2检测
- 文件系统检测
- 进程异常检测
使用命令:
loki.exe -p <扫描路径> --onlyrelevant --noprocscan
内存检测技术
1. 内存YARA规则
针对内存中的AsyncRAT特征:
rule AsyncRAT_Memory {
meta:
description = "AsyncRAT Memory Detection"
strings:
$s1 = "AsyncClient.exe"
$s2 = "ClientSocket"
$s3 = "Packet"
$s4 = "savePlugin"
$s5 = "Dll"
condition:
3 of them
}
2. 内存检测方法
- 使用Loki工具加载上述规则扫描进程内存
- 重点关注以下进程:
- aspnet_compiler.exe(常见注入目标)
- 其他.NET运行时进程
内存马提取技术
1. MegaDumper工具使用
MegaDumper可直接从内存中转储.NET可执行文件:
- 定位可疑进程(如aspnet_compiler.exe)
- 使用MegaDumper提取.NET模块
- 分析提取的DLL/EXE文件
2. 提取后分析
使用dnSpy等工具对提取的.NET模块进行反编译:
- 查找核心功能类
- 分析通信逻辑
- 提取配置信息
内存配置信息提取
1. 内存中配置信息特征
- 位置特征:
- 配置信息字符串前4字节为长度信息
- 前12字节处有固定标记
0x00 0x00 0x00 0x80
- Key字符串:
- 固定长度0x2C字节
- 通常为Base64编码
2. 自动化提取脚本
使用Go语言编写的提取脚本示例:
package main
import (
"encoding/hex"
"fmt"
"io/ioutil"
"os"
"regexp"
)
func main() {
sss, _ := readFile("memory.dmp")
data := hex.EncodeToString([]byte(sss))
pattern := regexp.MustCompile("00000080.{8}2c000000")
matches := pattern.FindAllStringIndex(data, -1)
if len(matches) > 0 {
fmt.Println("找到匹配:")
for _, match := range matches {
startIndex := match[0] / 2
endIndex := match[1] / 2
fmt.Printf("起始索引: 0x%x, 结束索引: 0x%x\n", startIndex, endIndex)
data_match := data[endIndex*2 : endIndex*2+0x2c*2*2]
fmt.Println(data_match)
aa, _ := hex.DecodeString(data_match)
fmt.Println(string(aa))
}
} else {
fmt.Println("未找到匹配")
}
}
func readFile(filename string) (string, error) {
f, err := os.Open(filename)
if err != nil {
return "", err
}
defer f.Close()
b, err := ioutil.ReadAll(f)
if err != nil {
return "", err
}
return string(b), nil
}
3. 配置信息解密
提取的配置信息通常为Base64编码,可使用AsyncRAT解密算法进行解密(参考《AsyncRAT加解密技术剖析》中的解密脚本)。
综合检测方案
-
网络层面:
- 监控TLS 1.0连接
- 检测固定心跳间隔
- 捕获gzip压缩数据中的明文字符串
-
终端层面:
- 定期使用Loki进行全盘扫描
- 重点关注新创建的.NET可执行文件
- 监控计划任务和自启动项
-
内存层面:
- 对可疑进程进行内存扫描
- 提取并分析内存中的.NET模块
- 从内存中提取配置信息
-
取证分析:
- 固定进程内存证据
- 提取并解密配置信息
- 分析C2服务器地址和其他IOC
防御建议
- 禁用TLS 1.0协议
- 监控异常进程间通信
- 限制.NET程序执行权限
- 部署EDR解决方案监控内存注入行为
- 定期更新YARA规则库
通过以上多层次的检测技术,可以有效发现和分析AsyncRAT的攻击行为,为安全防御提供有力支持。