#memory #bit #modification #detect #flip

process_consistency

将可执行内存哈希以保持其不变

1个不稳定版本

0.5.0 2022年9月5日

#725 in 操作系统

MIT/Apache

28KB
444

process_consistency

一个小型的后台检查器,以确保您的可执行代码不会更改,例如由于宇宙射线、rowhammer攻击等。为此,它定期计算内存中所有可执行页面的校验和。

仅兼容Windows和Linux

Crates.io Documentation Lines of code Crates.io

基本用法

  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在以下许可证下双授权

依赖

~131MB
~2M SLoC