Rust在恶意软件开发中的应用
引言
作者分享了学习Rust进行恶意软件开发的经历,旨在提升模拟真实攻击的能力。Rust因其固有的反分析特性成为首选语言,能开发更具隐蔽性的工具。
Rust与C语言的对比分析
近年来,Go、Nim和Rust等语言在恶意软件作者中日益流行,主要基于两个假设:
- 这些语言编译的二进制文件比C/C++更难逆向分析
- 非常规语言开发的恶意软件更容易绕过基于签名的检测机制
2023年罗切斯特理工学院的一项研究证实:
- Rust二进制文件显著大于C/C++版本
- 自动化分析工具对Rust程序产生更多误报和漏报
- Ghidra和IDA Free等工具对Rust二进制文件的反编译效果较差
实例分析:Shellcode加载器
通过功能相同的Rust和C版shellcode加载器进行对比:
|
|
编译后,Rust程序(151.5KB)几乎是C程序(71.7KB)的两倍,这是因为Rust默认静态链接依赖项。
Ghidra逆向分析对比
Rust程序的反编译输出难以理解,原因包括:
- Ghidra尝试将Rust反编译为伪C代码,但内存管理和优化差异导致难以理解
- rustc的编译优化导致函数边界模糊,汇编代码高度优化
相比之下,C程序的反编译输出与源代码高度一致。
开发Rust恶意软件投放器
构建一个投放器演示,功能包括:
- 枚举目标进程以注入payload
- 使用文件映射注入技术执行payload
- 通过HTTPS部署Sliver C2框架
关键代码模块:
|
|
操作安全考虑
Rust会在二进制文件中包含绝对路径(用于调试),因此需在匿名环境中编译以保护操作安全。
结论
Rust是C/C++开发恶意软件的优秀替代方案。虽然Ghidra 11.0在反编译Rust二进制文件方面取得进步,但由于函数内联和编译优化,分析Rust程序仍然困难。更大的二进制文件也增加了分析时间成本。