8 个版本
| 0.0.9 | 2022 年 6 月 10 日 | 
|---|---|
| 0.0.8 | 2020 年 11 月 24 日 | 
| 0.0.7 | 2020 年 8 月 20 日 | 
| 0.0.6 | 2020 年 6 月 13 日 | 
| 0.0.2 | 2020 年 3 月 29 日 | 
#2032 在 命令行实用程序
每月 31 次下载
用于  3 crates
80KB
 1.5K  SLoC
用 Rust 编写的快速多平台(ELF/PE/MachO)二进制检查程序。
cargo crate 定期发布
使用 goblin 进行多平台二进制解析支持,使用 ignore 进行快速递归路径迭代,并尊重各种过滤器,如 glob、文件类型以及 .gitignore 文件和 serde 进行序列化/反序列化。
现有技术
此类工具存在大量现有技术。有些是独立的命令行实用程序,有些是框架或调试器的插件,但所有都是特定平台的。
| 项目 | 作者 | 语言 | 活跃 | 
|---|---|---|---|
| checksec.sh (原始) | Tobias Klein | bash | 2009 年 1 月 28 日 - 2011 年 11 月 17 日 | 
| checksec | Dhiru Kholia | python | 2013 年 4 月 18 日 - 2014 年 3 月 19 日 | 
| checksec.sh | Brian Davis | bash | 2014 年 2 月 14 日 - 当前 | 
| pwntools - checksec | Gallopsled | python | 2014 年 11 月 8 日 - 当前 | 
| CheckSec.c | hugsy | c | 2015 年 12 月 7 日 - 2018 年 4 月 24 日 | 
| checksec | klks | c++ | 2017 年 3 月 25 日 | 
| iOS-checksec.py | ChiChou | python | 2017 年 4 月 6 日 | 
| checksec-win | Lucas Leong | c++ | 2017 年 8 月 21 日 | 
| winchecksec | Trail Of Bits | c++ | 2018 年 8 月 17 日 - 当前 | 
| pe_mitigation_check.py | David Cannings | python | 2018 年 9 月 20 日 | 
注意:此列表并不完整
构建/安装
git (HEAD)
git clone https://github.com/etke/checksec.rs && cd checksec.rs
cargo build --release
cargo install --path .
cargo
cargo install checksec
交叉编译
对于想要为目标操作系统或架构编译的实例,请参阅 rust-cross。
用法
USAGE:
    checksec [FLAGS] [OPTIONS]
FLAGS:
    -h, --help           Prints help information
    -j, --json           Output in json format
        --pretty         Human readable json output
    -P, --process-all    Check all running processes
    -V, --version        Prints version information
OPTIONS:
    -d, --directory <DIRECTORY>    Target directory
    -f, --file <FILE>              Target file
    -p, --process <NAME>           Name of running process to check
示例
独立的 checksec
单个二进制文件
$ checksec -f test/binaries/true-x86_64
ELF64: | Canary: true CFI: false SafeStack: false Fortify: true Fortified: 2 NX: true PIE: None Relro: Partial RPATH: None RUNPATH: None | File: test/binaries/true-x86_64
单个二进制文件(JSON 输出)
$ checksec -f test/binaries/true-x86_64 --json
{"binaries":[{"binarytype":"Elf64","file":"test/binaries/true-x86_64","properties":{"Elf":{"canary":true,"clang_cfi":false,"clang_safestack":false,"fortified":2,"fortify":true,"nx":true,"pie":"None","relro":"Partial","rpath":{"paths":["None"]},"runpath":{"paths":["None"]}}}}]}
正在运行的过程
$ checksec -P
-zsh(34)
 ↪ ELF64: | Canary: true CFI: false SafeStack: false Fortify: true Fortified: 8 NX: true PIE: Full Relro: Full RPATH: None RUNPATH: None | File: /bin/zsh
checksec(216)
 ↪ ELF64: | Canary: false CFI: false SafeStack: false Fortify: false Fortified: 0 NX: true PIE: Full Relro: Full RPATH: None RUNPATH: None | File: /home/etke/.cargo/bin/checksec
init(1)
 ↪ ELF64: | Canary: false CFI: false SafeStack: false Fortify: false Fortified: 0 NX: true PIE: None Relro: Partial RPATH: None RUNPATH: None | File: /init
正在运行的过程(JSON 输出)
$ checksec -P --json
{"processes":[{"binary":[{"binarytype":"Elf64","file":"/bin/zsh","properties":{"Elf":{"canary":true,"clang_cfi":false,"clang_safestack":false,"fortified":8,"fortify":true,"nx":true,"pie":"PIE","relro":"Full","rpath":{"paths":["None"]},"runpath":{"paths":["None"]}}}}],"pid":34},{"binary":[{"binarytype":"Elf64","file":"/init","properties":{"Elf":{"canary":false,"clang_cfi":false,"clang_safestack":false,"fortified":0,"fortify":false,"nx":true,"pie":"None","relro":"Partial","rpath":{"paths":["None"]},"runpath":{"paths":["None"]}}}}],"pid":1},{"binary":[{"binarytype":"Elf64","file":"/home/etke/.cargo/bin/checksec","properties":{"Elf":{"canary":false,"clang_cfi":false,"clang_safestack":false,"fortified":0,"fortify":false,"nx":true,"pie":"PIE","relro":"Full","rpath":{"paths":["None"]},"runpath":{"paths":["None"]}}}}],"pid":232}]}
libchecksec
只需将以下内容添加到任何具有goblin依赖项的当前项目中,即可在goblin::Object::{Elf, Mach, PE}对象上启用checksec属性。
将checksec crate依赖项添加到您的项目Cargo.toml中。
[dependencies]
checksec = { version = "0.0.9", features = ["elf", "macho", "pe", "color"] }
现在在您的项目源中,指定对checksec crate的依赖,并导入所需的模块以访问相关的Properties属性。
extern crate checksec;
use checksec::elf;
use checksec::macho;
use checksec::pe;
您现在可以直接从goblin::Object访问所有实现的安全检查函数。
有关库使用示例,请参阅examples/。
待办事项
libchecksec 待办事项
- 平台特定检查- ELF- 可防御的
- Rpath RW
 
- PE- Authenticode验证
 
- MachO- Rpath RW
 
 
- ELF
- 平台无关检查- MachO- @rpath内容到- shared::VecRpath,类似于ELF中的- DT_RPATH/- DT_RUNPATH
- 代码签名验证
 
 
- MachO
checksec 待办事项
- ?
项目 待办事项
- 测试 (cargo test)
贡献
欢迎改进!
- 有关想法,请查看GitHub Issues页面。- 想添加某些内容?请提交问题并标记为improvement
 
- 想添加某些内容?请提交问题并标记为
- 发现了问题?提交问题并包含以下信息- 问题描述
- 预期行为
- 附加bug标签
 
- 为了进行审查的拉取请求;- 必须使用提供的项目rustfmt.toml进行格式化
- 必须没有使用提供的项目clippy.toml的Clippy警告/错误(如果有)
 
- 必须使用提供的项目
依赖关系
~7–18MB
~222K SLoC