1 个不稳定版本
使用旧的 Rust 2015
0.0.1 | 2015 年 9 月 17 日 |
---|
#5 in #malicious
在 rust_lldp 中使用
1.5MB
350 行
rshark
,Rusty Shark 库,是一个用于恶意数据包深度检查的库。
Wireshark 是一个非常有用的网络调试工具,但它也有其公平份额的安全漏洞。通常认为,在参加 Capture the Flag 竞赛之前,应该花一些时间模糊测试 Wireshark,以找到一些新的漏洞(别担心,它们在那里,你一定会找到的),并利用这些漏洞进攻性地使对手失去视野。这既说明了数据包捕获/分析工具的不可或缺性,也说明了“仅仅使 Wireshark 安全”的根本困难。潜艇的比喻不言而喻。
更多详细信息可在 Rustdoc 中找到。
lib.rs
:
rshark
,Rusty Shark 库,是一个用于恶意数据包深度检查的库。
背景
Wireshark 是一个非常有用的网络调试工具,但它也有其公平份额的安全漏洞。通常认为,在参加 Capture the Flag 竞赛之前,应该花一些时间模糊测试 Wireshark,以找到一些新的漏洞(别担心,它们在那里,你一定会找到的),并利用这些漏洞进攻性地使对手失去视野。这既说明了数据包捕获/分析工具的不可或缺性,也说明了“仅仅使 Wireshark 安全”的根本困难。Wireshark 有很多分析器,这些分析器使用了一个复杂的 C API(尽管一些现在是使用 Lua 编写的)。
rshark
使用 Rust 的类型安全性,使得恶意数据包的解析无需担心缓冲区溢出或其他常见的内存错误。Rusty Shark 的分析器可能会犯错误,但那些逻辑错误只会影响对当前数据的解释,而不是所有数据。也就是说,Rusty Shark 是模块化的,以最小化成功攻击者可能造成的损害。潜艇的比喻不言而喻。
使用方法
注意:有关 rshark
命令行客户端的帮助,请运行 man rshark
或 rshark --help
。
rshark
库提供了数据包解析函数,例如 rshark::ethernet::dissect()
。每个这样的解析函数都应遵循 rshark::Dissector
函数类型,它接收一个字节数组切片作为输入,并返回一个 rshark::Result
(默认为 Result<rshark::Val, rshark::Error>
)。使用方法非常简单
let data = vec![];
match rshark::ethernet::dissect(&data) {
Err(e) => println!["Error: {}", e],
Ok(val) => print!["{}", val.pretty_print(0)],
}
Val
可以表示任意结构的树形数据(在图形显示中很有用),并且可以通过缩进来进行美化打印。
依赖项
~4.5MB
~90K SLoC