Pocket Readings

个人阅读清单记录博客

0%

Rust 乱炖 | Rust 让恶意软件也变强了

功能介绍 一个面向终身学习者的付费式学习社区。内容包括但不限于:编程、学习方法、认知提升、思维训练等。



Tags:



via Pocket https://ift.tt/3vF5ALi original site



May 06, 2021 at 09:10AM

Comments


from: github-actions[bot] on: 5/6/2021

Rust 乱炖 | Rust 让恶意软件也变强了 by 觉学社

2021-05-05
本文同步发布于 GitHub 仓库 talking_about_rust[1]。

技术 是一把锋利的双刃剑。—— 鲁迅。

背景

今天看到 proofpoint 发表了一篇题为Buer Loader 用 Rust 创造了新的变种 (New Variant of Buer Loader Written in Rust)[2]的文章。

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`[3]。Doctor Web的分析师认为,Linux.BackDoor.Irc.16 实际上是一个原型(概念验证),因为它无法自我复制。然而 RustyBuer 就是一款完全黑产化的软件了。

随着目前 Rust 知名度越来越高,Rust 在安全/黑产领域可能会越来越流行。抛开黑产软件的伦理道德不谈,单从技术以及 Rust 自身而言,在这种「攻与防」的觥筹交错中,也许会促进各种针对 Rust 的检测工具诞生,进一步丰富生态,促进 Rust 发展。

因此,我对目前安全领域生态中有多少用 Rust 实现的工具产生了好奇。接下来盘点一下 GitHub/GitLab 上发现的一些用 Rust 实现的安全工具。欢迎补充。

渗透测试工具 Metasploit (无)Rust 重写计划

2017 年有人在 Metasploit issue 留言[4],请求 Metasploit 用 Rust 重写。当然,这个 issue 被无情关闭了。因为 Metasploit 当年是从 Python 转为 Ruby 重写,是看中了 Ruby 强大的 DSL 能力。作为渗透测试工具的扛把子,Metasploit 目前没有使用 Rust 重写的理由。除非,有人直接提交 PR,用 Rust 完成了大部分功能,不过我想这件事不会发生。

不过还有个曲线救国的办法,就是用 Rust 重写 Ruby。这个还是有希望的:artichoke/artichoke[5]。Artichoke 就是用 Rust 实现 Ruby 的项目,目前维护也很活跃,已经兼容 MIR(Ruby 2.6.3) 规格。

Metasploit 还有一个功能,叫「Metasploit’s Hardware Bridge」,提供了一系列Hardware REST API[6],可以让 Metasploit 拥有对硬件(IoT领域)操作的能力。对于 REST Api,用任何语言都可以包装它,Rust 也可以。不过这个相关文档有五年没有更新了,不知道发展如何。

扫描

rustscan/rustscan[7]

RustScan 是一个现代化的端口扫描器,并且提供脚本引擎来支持运行 Python,Lua,Shell。

该工具的特色是:

  • 高性能。3 秒内可以扫描 65,000 个端口。

  • 全面的脚本引擎支持。自动将结果传送到 Nmap,并支持自定义脚本。

  • 支持 自适应学习(Adaptive learning)。用的越多,RustScan 越智能,不是基于臃肿的机器学习,主要是基于基本数学。

feroxbuster[8]

一款高性能的内容发现工具,用于渗透测试。feroxbuster 使用蛮力结合单词列表在目标目录中搜索未链接的内容,这是一种攻击行为。这些资源可能存储有关 Web 应用程序和操作系统的敏感信息,例如源代码,凭据,内部网络寻址等。此攻击也称为可预测资源位置,文件枚举,目录枚举和资源枚举。

隐身匿名

Tor 和 Rust

  • 在 2020 年 Tor 浏览器用 Rust 实现部分模块: Rust in Tor[9]

  • Arti: 纯 Rust 实现的 Tor 协议[10],目前维护非常频繁。详细看这里[11]。

zero-gear/rusty-tor[12]

一个概念验证的 Tor 客户端。不过有两年没有维护了。

免杀

Rust 写 Shell Code 也是可以的。

  • Writing shellcode in Rust[13]

  • writeonly.rs[14]

  • rust-windows-shellcode[15]

  • SassyKitdi: Kernel Mode TCP Sockets + LSASS Dump[16]

  • zerosum0x0/SassyKitdi[17]

  • Crab-Runner[18],shellcode Runner.

  • rs_shellcode[19],shellcode Runner.

重点介绍:

amber[20]。号称首款 反射式 PE 打包器,目前开发很活跃。

Amber是位置无关(反射)的 PE 加载器,可在内存中执行本机PE文件(EXE,DLL,SYS …)。它实现了秘密的的内存有效负载部署,可用于绕过防病毒,防火墙,IDS,IPS产品和应用程序白名单缓解措施。由Amber生成的反射性有效负载可以从远程服务器上演,也可以像在通用Shellcode中一样直接在内存中执行。

amber 提供的打包方法,可以改变将恶意软件传送到系统的方式。通过尝试通过无文件代码注入将有效负载传递到系统,可以直接绕过大多数安全机制,而不是尝试寻找提供机器学习数据集的新的反检测技术。使用这种新的打包方法,可以将已编译的PE文件转换为可与常见软件漏洞(例如缓冲区溢出)一起使用的多阶段感染有效负载。

更多介绍:Introducing New Packing Method: First Reflective PE Packer Amber[21]

Exploits/ payloads / hacking

这个开发者 kpcyrd[22],编写了一系列安全工具。

  • sn0int[23], 半自动高级公开资源情报(OSINT)框架和程序包管理器,用于扫描目标IP地址、电子邮件、网站和组织信息,并从不同消息源收集各种情报信息。

  • sniffglue[24],多线程网络嗅探器。Kpcyrd 经常使用tcpdump,但他认为输出更友好的话会更好,并且 wireshark 也经常存在漏洞,tcpdump 有时也有漏洞,所以他用 Rust 实现了这个工具。

  • badtouch[25], 可编写脚本的网络身份验证破解程序。

  • rshijack[26],用 Rust 重写了 shijack,实现 TCP 会话劫持。

Fuzz 工具

  • Cargo Fuzz[27],Rust 官方开发的 Fuzz 工具。

  • honggfuzz-rs[28],Google 开发的 Fuzz 工具。

  • Sidefuzz[29], 侧信道漏洞检测工具。

其他工具

  • RustSec/advisory-db[30],通过crates.io[31]发布的Rust Crate 的安全咨询数据库。

  • cargo-audit[32],Cargo.lock中依赖审查工具。

  • cargo-crev[33],代码 Review 工具。

  • ripasso[34],一款密码管理工具。

  • libinjection-rs[35], 对 libinjection 的 Rust 绑定,libinjection 是一款 SQL 注入工具。

  • lethe[36],安全,免费,跨平台和开源的驱动擦除工具。

参考资料

[1]

talking_about_rust: https://github.com/ChaosStudyGroup/talking\_about\_rust

[2]

Buer Loader 用 Rust 创造了新的变种 (New Variant of Buer Loader Written in Rust): https://www.proofpoint.com/us/blog/threat-insight/new-variant-buer-loader-written-rust

[3]

用 Rust 实现的 针对 Linux 的特洛伊木马 Linux.BackDoor.Irc.16: https://news.drweb.com/show/?i=10193&lng=en

[4]

Metasploit issue 留言: https://github.com/rapid7/metasploit-framework/issues/9092

[5]

artichoke/artichoke: https://github.com/artichoke/artichoke

[6]

Hardware REST API: https://www.rapid7.com/about/press-releases/rapid7-enables-iot-hardware-security-testing-with-metasploit/

[7]

rustscan/rustscan: https://github.com/rustscan/rustscan

[8]

feroxbuster: https://github.com/epi052/feroxbuster

[9]

在 2020 年 Tor 浏览器用 Rust 实现部分模块: Rust in Tor: https://gitlab.torproject.org/legacy/trac/-/wikis/RustInTor

[10]

Arti: 纯 Rust 实现的 Tor 协议: https://gitlab.torproject.org/tpo/core/arti/

[11]

这里: https://forum.zcashcommunity.com/t/arti-a-pure-rust-tor-implementation-for-zcash-and-beyond/38776

[12]

zero-gear/rusty-tor: https://github.com/zero-gear/rusty-tor

[13]

Writing shellcode in Rust: https://jade.fyi/blog/writeonly-in-rust/

[14]

writeonly.rs: https://github.com/lf-/ctf/tree/main/writeonly.rs

[15]

rust-windows-shellcode: https://github.com/b1tg/rust-windows-shellcode

[16]

SassyKitdi: Kernel Mode TCP Sockets + LSASS Dump: https://zerosum0x0.blogspot.com/2020/08/sassykitdi-kernel-mode-tcp-sockets.html#sassy\_rust

[17]

zerosum0x0/SassyKitdi: https://github.com/zerosum0x0/SassyKitdi

[18]

Crab-Runner: https://github.com/cdong1012/Crab-Runner

[19]

rs_shellcode: https://github.com/b1tg/rs\_shellcode

[20]

amber: https://github.com/EgeBalci/amber

[21]

Introducing New Packing Method: First Reflective PE Packer Amber: https://pentest.blog/introducing-new-packing-method-first-reflective-pe-packer/

[22]

kpcyrd: https://github.com/kpcyrd

[23]

sn0int: https://github.com/kpcyrd/sn0int

[24]

sniffglue: https://github.com/kpcyrd/sniffglue

[25]

badtouch: https://github.com/kpcyrd/badtouch

[26]

rshijack: https://github.com/kpcyrd/rshijack

[27]

Cargo Fuzz: https://github.com/rust-fuzz/cargo-fuzz

[28]

honggfuzz-rs: https://github.com/rust-fuzz/honggfuzz-rs

[29]

Sidefuzz: https://github.com/phayes/sidefuzz

[30]

RustSec/advisory-db: https://github.com/RustSec/advisory-db/

[31]

crates.io: crates.io

[32]

cargo-audit: https://github.com/RustSec/cargo-audit

[33]

cargo-crev: https://github.com/crev-dev/cargo-crev

[34]

ripasso: https://github.com/cortex/ripasso/

[35]

libinjection-rs: https://github.com/arvancloud/libinjection-rs

[36]

lethe: https://github.com/kostassoid/lethe