1个不稳定版本
0.5.0 | 2022年9月5日 |
---|
#725 in 操作系统
28KB
444 行
process_consistency
一个小型的后台检查器,以确保您的可执行代码不会更改,例如由于宇宙射线、rowhammer攻击等。为此,它定期计算内存中所有可执行页面的校验和。
仅兼容Windows和Linux
基本用法
use process_consistency::ProcessConsistencyChecker;
std::thread::spawn(|| {ProcessConsistencyChecker::new().run(|error| {panic!("Memory Error: {:#?}", &error)}).unwrap()});
当遇到(非内存)错误时,对run()的调用才会返回。如果发现哈希值不同,则会调用提供的回调,并附带附加信息,包括受影响的库/二进制文件。
安全性
这个crate从操作系统提供的地址读取指针。只有在这些内存区域保留在进程映射中时才安全。通常这不会有问题,但如果您卸载共享库(例如在Windows上调用FreeLibrary或在Linux上调用dlclose),这会导致竞态条件,这可能导致这个库读取未映射的内存
使用skip_libs(true)
运行应该是安全的,即使在FreeLibrary/dlclose调用存在的情况下
高级用法
您可以减小搜索半径,例如,如果您不关心共享库(包括操作系统的库),您可以使用
use process_consistency::ProcessConsistencyChecker;
std::thread::spawn(|| {ProcessConsistencyChecker::new().skip_libs(true).search_once(true).run(|error| {panic!("Memory Error: {:#?}", &error)}).unwrap()});
另一方面,如果您非常谨慎,您可能会发现一些情况,在这些情况下,考虑标记为可执行但可写的页面也是有用的
use process_consistency::ProcessConsistencyChecker;
std::thread::spawn(|| {ProcessConsistencyChecker::new().include_writable_code(true).run(|error| {panic!("Memory Error: {:#?}", &error)}).unwrap()});
您还可以更改检查应该运行的频率
use std::time::Duration;
use process_consistency::ProcessConsistencyChecker;
std::thread::spawn(|| {ProcessConsistencyChecker::new().check_period(Duration::from_secs(60)).run(|error| {panic!("Memory Error: {:#?}", &error)}).unwrap()});
要了解所选参数的影响或确定加载的共享库(提示:比您想象的要多),可以使用基准测试调用
use std::time::Duration;
use process_consistency::ProcessConsistencyChecker;
println!("{:#?}", ProcessConsistencyChecker::new().benchmark().unwrap());
哈希算法
使用的哈希算法由功能标志确定。Blake3是默认值。
要使用blake3哈希,请使用
[dependencies]
process_consistency = "0.1.0"
要使用crc64哈希,请使用
[dependencies]
process_consistency = { version = "0.1.0", default-features = false, features = ["crc64"] }
Blake3是一个加密强度哈希,但如果您只是担心宇宙射线,使用crc64(在发布模式下!在调试模式下blake3更快)可以获得大约2倍的速度提升。Crc64还具有略少的依赖项
许可证
process_consistency在以下许可证下双授权
- Apache 2.0 许可证(《LICENSE-Apache》或http://www.apache.org/licenses/LICENSE-2.0)
- MIT 许可证(《LICENSE-MIT》或https://opensource.org/licenses/MIT)
依赖
~131MB
~2M SLoC