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