SnapChange 正在参加 2021 年度 OSC 中国开源项目评选,请投票支持!
SnapChange 在 2021 年度 OSC 中国开源项目评选 中已获得 {{ projectVoteCount }} 票,请投票支持!
2021 年度 OSC 中国开源项目评选 正在火热进行中,快来投票支持你喜欢的开源项目!
2021 年度 OSC 中国开源项目评选 >>> 中场回顾
SnapChange 获得 2021 年度 OSC 中国开源项目评选「最佳人气项目」 !
授权协议 Apache-2.0
开发语言 Python SHELL Rust
操作系统 跨平台
软件类型 开源软件
所属分类 开发工具测试工具
开源组织
地区 不详
投 递 者 白开水不加糖
适用人群 未知
收录时间 2023-05-12

软件简介

SnapChange 是 AWS 名为 Find & Fix 内部团队开发的一种模糊测试工具,网络安全研究人员可以使用它通过在 KVM 虚拟机中重放物理内存快照来发现漏洞。模糊测试通过监视系统在处理随机数据时的行为方式来发现软件安全问题。

Snapchange 提供了将原始内存转储和注册状态加载到 KVM 虚拟机 (VM) 中以供执行的能力。在执行过程中,可以通过重置 KVM 发现的脏页或模糊器手动弄脏的页面,将此 VM 重置为初始状态。

旨在:

  • 使用 KVM 重放物理内存和注册状态快照
  • 跨多核并行执行
  • 为 guest VM 提供一组内省功能
  • 通过断点覆盖实时覆盖状态
  • 模糊器组件的实时性能指标
  • 提供模糊测试实用程序,例如单步调试跟踪、测试用例最小化和测试用例覆盖
  • 输入抽象以允许自定义变异和生成策略

示例

从模糊器模板创建目标模糊器

$ cp -r -L fuzzer_template your_new_fuzzer

修改your_new_fuzzer/create_snapshot.sh以获取目标的快照

更新src/fuzzer.rs以将变异数据注入 guest VM

#[derive(Default)]
pub struct TemplateFuzzer;

impl Fuzzer for TemplateFuzzer {
    // The type of Input being fuzzed. Used to know how to generate and mutate useful inputs.
    type Input = Vec<u8>;
    // The starting address of the snapshot
    const START_ADDRESS: u64 = 0x402363;
    // The maximum length of mutated input to generate
    const MAX_INPUT_LENGTH: usize = 100;

    fn set_input(&mut self, input: &Self::Input, fuzzvm: &mut FuzzVm<Self>) -> Result<()> {
        // Write the mutated input into the data buffer in the guest VM
        fuzzvm.write_bytes_dirty(VirtAddr(0x402004), CR3, &input)?;
        Ok(())
    }

    fn reset_breakpoints(&self) -> Option<&[BreakpointLookup]> {
        Some(&[
            // Reset when the VM hits example1!main+0x123
            BreakpointLookup::SymbolOffset("example1!main", 0x123)
        ])
    }
}

开始使用 16 个内核进行模糊测试

$ cargo run -r -- fuzz -c 16
展开阅读全文

代码

的 Gitee 指数为
超过 的项目

评论

点击引领话题📣 发布并加入讨论🔥
暂无内容
发表了博客
{{o.pubDate | formatDate}}

{{formatAllHtml(o.title)}}

{{parseInt(o.replyCount) | bigNumberTransform}}
{{parseInt(o.viewCount) | bigNumberTransform}}
没有更多内容
暂无内容
发表了问答
{{o.pubDate | formatDate}}

{{formatAllHtml(o.title)}}

{{parseInt(o.replyCount) | bigNumberTransform}}
{{parseInt(o.viewCount) | bigNumberTransform}}
没有更多内容
暂无内容
暂无内容
0 评论
1 收藏
分享
OSCHINA
登录后可查看更多优质内容
返回顶部
顶部