Rust 与 安全 | Rust 让恶意软件也变强了
作者:张汉东
技术 是一把锋利的双刃剑。 —— 鲁迅。
背景
今天看到 proofpoint 发表了一篇题为Buer Loader 用 Rust 创造了新的变种 (New Variant of Buer Loader Written in Rust)的文章。
Proofpoint是一家位于加利福尼亚州桑尼维尔的企业安全公司,为入站电子邮件安全,出站数据丢失防护,社交媒体,移动设备,数字风险,电子邮件加密,电子发现和电子邮件归档提供软件即服务和产品。
Buer 是在地下市场上出售的下载程序,以分发包括勒索软件在内的其他恶意软件。 Proofpoint于 2019年 首次观察到 Buer。
Proofpoint研究人员确定了4月初通过伪装成(快递公司 DHL)发货通知的电子邮件分发的 Buer 恶意软件加载程序的新变种。 邮件中包含指向恶意 Microsoft Word 或 Excel 文档下载的链接,这些链接使用宏来投放新的恶意软件变体。
Proofpoint 把新的变种称为 RustyBuer,因为它们用 Rust的语言完全重写,这与以前的C编程语言有所不同。常见的恶意软件以完全不同的方式编写是很少见的。用 Rust 重写恶意软件可以使威胁者更好地逃避现有的 Buer 检测功能,并且通过使用不同的诱饵技术,提升链接的点击率。这一切都表明威胁者正在以多种方式发展技术,从而逃避检测并试图提高成功的点击率。
RustyBuer 直接嵌入到文档宏中,需要用户交互才能启动感染。此宏利用应用程序绕过(通过 LOLBAS 的 Windows Shell DLL)逃避了端点安全性机制的检测。
尚不清楚威胁者为何花时间和精力用新的编程语言重写恶意软件,但是Proofpoint研究人员指出了两个可能的原因:
-
Rust 是一种越来越流行的编程语言,它比 C 语言更高效且具有更广泛的功能集。(例如,Microsoft越来越多地在其产品中使用它,并于2021年2月加入了Rust 基金会)。
-
用 Rust 重写恶意软件可以使威胁参与者逃避基于 C 语言编写的恶意软件功能的现有 Buer 检测。恶意软件作者对其进行了编程,使其应与现有 Buer 后端 C2 服务器和面板保持兼容。
乱炖
其实用 Rust 写恶意软件,这个案例并不是第一个。早在 2016 年 Dr.Web(俄罗斯杀毒软件公司 大蜘蛛)公司就发现了一款用 Rust 实现的 针对 Linux 的特洛伊木马 Linux.BackDoor.Irc.16
。Doctor Web的分析师认为,Linux.BackDoor.Irc.16
实际上是一个原型(概念验证),因为它无法自我复制。然而 RustyBuer 就是一款完全黑产化的软件了。
随着目前 Rust 知名度越来越高,Rust 在安全/黑产领域可能会越来越流行。抛开黑产软件的伦理道德不谈,单从技术以及 Rust 自身而言,在这种「攻与防」的觥筹交错中,也许会促进各种针对 Rust 的检测工具诞生,进一步丰富生态,促进 Rust 发展。
因此,我对目前安全领域生态中有多少用 Rust 实现的工具产生了好奇。接下来盘点一下 GitHub/GitLab 上发现的一些用 Rust 实现的安全工具。欢迎补充。
渗透测试工具 Metasploit (无)Rust 重写计划
2017 年有人在 Metasploit issue 留言,请求 Metasploit 用 Rust 重写。当然,这个 issue 被无情关闭了。因为 Metasploit 当年是从 Python 转为 Ruby 重写,是看中了 Ruby 强大的 DSL 能力。作为渗透测试工具的扛把子,Metasploit 目前没有使用 Rust 重写的理由。除非,有人直接提交 PR,用 Rust 完成了大部分功能,不过我想这件事不会发生。
不过还有个曲线救国的办法,就是用 Rust 重写 Ruby。这个还是有希望的:artichoke/artichoke。Artichoke 就是用 Rust 实现 Ruby 的项目,目前维护也很活跃,已经兼容 MIR(Ruby 2.6.3) 规格。
Metasploit 还有一个功能,叫「Metasploit's Hardware Bridge」,提供了一系列Hardware REST API,可以让 Metasploit 拥有对硬件(IoT领域)操作的能力。对于 REST Api,用任何语言都可以包装它,Rust 也可以。不过这个相关文档有五年没有更新了,不知道发展如何。
扫描
RustScan 是一个现代化的端口扫描器,并且提供脚本引擎来支持运行 Python,Lua,Shell。
该工具的特色是:
- 高性能。
3
秒内可以扫描65,000
个端口。 - 全面的脚本引擎支持。自动将结果传送到 Nmap,并支持自定义脚本。
- 支持 自适应学习(Adaptive learning)。用的越多,RustScan 越智能,不是基于臃肿的机器学习,主要是基于基本数学。
一款高性能的内容发现工具,用于渗透测试。feroxbuster 使用蛮力结合单词列表在目标目录中搜索未链接的内容,这是一种攻击行为。这些资源可能存储有关 Web 应用程序和操作系统的敏感信息,例如源代码,凭据,内部网络寻址等。此攻击也称为可预测资源位置,文件枚举,目录枚举和资源枚举。
隐身匿名
Tor 和 Rust
一个概念验证的 Tor 客户端。不过有两年没有维护了。
免杀
Rust 写 Shell Code 也是可以的。
- Writing shellcode in Rust
- writeonly.rs
- rust-windows-shellcode
- SassyKitdi: Kernel Mode TCP Sockets + LSASS Dump
- zerosum0x0/SassyKitdi
- Crab-Runner,shellcode Runner.
- rs_shellcode,shellcode Runner.
重点介绍:
amber。号称首款 反射式 PE 打包器,目前开发很活跃。
Amber是位置无关(反射)的 PE 加载器,可在内存中执行本机PE文件(EXE,DLL,SYS ...)。 它实现了秘密的的内存有效负载部署,可用于绕过防病毒,防火墙,IDS,IPS产品和应用程序白名单缓解措施。 由Amber生成的反射性有效负载可以从远程服务器上演,也可以像在通用Shellcode中一样直接在内存中执行。
amber 提供的打包方法,可以改变将恶意软件传送到系统的方式。 通过尝试通过无文件代码注入将有效负载传递到系统,可以直接绕过大多数安全机制,而不是尝试寻找提供机器学习数据集的新的反检测技术。 使用这种新的打包方法,可以将已编译的PE文件转换为可与常见软件漏洞(例如缓冲区溢出)一起使用的多阶段感染有效负载。
更多介绍:Introducing New Packing Method: First Reflective PE Packer Amber
Exploits/ payloads / hacking
这个开发者 kpcyrd,编写了一系列安全工具。
-
sn0int, 半自动高级公开资源情报(OSINT)框架和程序包管理器,用于扫描目标IP地址、电子邮件、网站和组织信息,并从不同消息源收集各种情报信息。
-
sniffglue,多线程网络嗅探器。Kpcyrd 经常使用tcpdump,但他认为输出更友好的话会更好,并且 wireshark 也经常存在漏洞,tcpdump 有时也有漏洞,所以他用 Rust 实现了这个工具。
-
badtouch, 可编写脚本的网络身份验证破解程序。
-
rshijack,用 Rust 重写了 shijack,实现 TCP 会话劫持。
Fuzz 工具
- Cargo Fuzz,Rust 官方开发的 Fuzz 工具。
- honggfuzz-rs,Google 开发的 Fuzz 工具。
- Sidefuzz, 侧信道漏洞检测工具。
其他工具
- RustSec/advisory-db,通过crates.io发布的Rust Crate 的安全咨询数据库。
- cargo-audit,
Cargo.lock
中依赖审查工具。 - cargo-crev,代码 Review 工具。
- ripasso,一款密码管理工具。
- libinjection-rs, 对 libinjection 的 Rust 绑定,libinjection 是一款 SQL 注入工具。
- lethe,安全,免费,跨平台和开源的驱动擦除工具。