MakFly/ksec
GitHub: MakFly/ksec
一款零依赖的单二进制代码库安全扫描器,整合了密钥检测、依赖漏洞、供应链分析、SAST 和混淆检测五大功能。
Stars: 0 | Forks: 0
# ksec
**专为代码库设计的独立安全扫描器。** 单个二进制文件,零依赖,五个扫描器并行运行。
ksec 可以检测泄露的密钥、存在漏洞的依赖项、供应链攻击、OWASP Top 10 漏洞以及混淆代码 —— 所有这些都不需要安装任何外部工具。
```
$ ksec scan .
═══ ksec scan report ═══
✓ secrets — 0 findings (12ms)
✓ supply-chain — 0 findings (8ms)
✓ sast — 0 findings (6ms)
✓ obfuscation — 0 findings (1ms)
⚠ deps — 2 findings (680ms)
HIGH CVE-2024-1234 — lodash@4.17.20
MEDIUM GHSA-abcd — express@4.18.0
─── summary ───
scanners: 5 run
findings: 2 total, 1 high/critical
```
## 为什么选择 ksec?
| 工具 | 需要安装的内容 | 覆盖范围 |
|---|---|---|
| gitleaks + trivy + osv-scanner + semgrep + socket | 5 个独立的二进制文件 | 密钥、依赖项、SAST、供应链 |
| **ksec** | **1 个二进制文件 (4.6 MB)** | **上述所有内容 + 代码混淆** |
- **无需外部工具** —— 所有功能均内置
- **快速** —— 并行执行,基于正则表达式的扫描,全项目扫描仅需约 3 秒
- **低误报率** —— 针对表单标签、测试文件、注释、配置模式提供智能白名单
- **离线优先** —— 仅依赖项扫描器需要网络(OSV API)
## 安装
### 一键安装 (Linux / macOS)
```
curl -fsSL https://raw.githubusercontent.com/MakFly/ksec/master/install.sh | sh
```
### 从源码构建 (Rust)
```
git clone https://github.com/MakFly/ksec.git
cd ksec
cargo build --release
cp target/release/ksec ~/.local/bin/
```
### 预编译二进制文件
适用于 Linux (x86_64, aarch64) 和 macOS (x86_64, aarch64) 的二进制文件可在 [Releases](https://github.com/MakFly/ksec/releases) 页面获取。
## 用法
```
# 完整扫描(并行运行全部 5 个扫描器)
ksec scan .
# 扫描特定类别
ksec secrets .
ksec deps .
ksec sast .
ksec supply-chain .
ksec obfuscation .
# JSON 输出(可通过管道传递给 jq、CI 等)
ksec scan --json .
# 按严重程度过滤
ksec scan --min-severity high .
# 生成 pre-commit hooks (lefthook)
ksec init
```
## 扫描器
### 密钥 (60+ 规则)
使用内置的正则表达式模式检测泄露的 API key、token、私钥和数据库 URI。
**覆盖的服务商:** AWS、GitHub、GitLab、Slack、Stripe、Google、OpenAI、Anthropic、Discord、Twilio、SendGrid、Firebase、Supabase、NPM、PyPI、Docker Hub、Telegram、Heroku、Shopify、Mailchimp、HashiCorp Vault、Datadog、Sentry、Vercel、Cloudflare 等。
还可以检测:私钥(RSA、DSA、EC、OpenSSH、PGP)、带密码的数据库 URI、URL 中的 basic auth、硬编码的 bearer token、JWT 以及密码赋值。
**智能过滤:** 跳过注释、正则表达式定义、表单标签、验证 schema、测试文件、占位符值和环境变量引用。
### 依赖项
解析 lockfile 并查询 [OSV API](https://osv.dev/)(Google 的开放漏洞数据库)以获取已知的 CVE。
**支持的 lockfile:**
- `package-lock.json`、`bun.lock`、`yarn.lock` (npm)
- `Cargo.lock` (Rust)
- `composer.lock` (PHP)
- `requirements.txt`、`poetry.lock` (Python)
- `go.sum` (Go)
### 供应链
检测 JavaScript 包中表明恶意行为的可疑模式:
- **动态代码执行** —— `eval()`、`Function()`、`vm.runInNewContext()`
- **网络数据外泄** —— HTTP 请求、DNS 查询、WebSocket 连接
- **文件系统访问** —— 读取 `.ssh/`、`.env`、`/etc/passwd`
- **代码混淆** —— 十六进制编码的字符串、`String.fromCharCode()`、`global[]` 访问器
- **恶意安装脚本** —— postinstall 中的 `curl`/`wget`、下载二进制文件
- **环境信息收集** —— 通过网络转储 `process.env`
### SAST (OWASP Top 10)
对常见安全漏洞进行静态分析:
- **SQL 注入** —— 查询中包含带有用户输入的字符串拼接/插值
- **XSS** —— `innerHTML`、`dangerouslySetInnerHTML`、`document.write()`
- **命令注入** —— 带有用户可控输入的 `exec()`/`os.system()`
- **路径穿越** —— 文件路径中包含用户输入
- **SSRF** —— 带有用户可控 URL 的 `fetch()`/`requests.get()`
- **不安全的加密** —— DES、ECB 模式、用于安全用途的 `Math.random()`
- **反序列化** —— `pickle.loads()`、`yaml.load()`、PHP `unserialize()`
- **原型链污染** —— `__proto__` 赋值
- **NoSQL 注入** —— 来源于用户输入的 `$where`/`$gt`/`$ne`
- **开放重定向** —— 未经验证的重定向
- **CORS 配置错误** —— 通配符 `Access-Control-Allow-Origin`
**支持的语言:** JavaScript、TypeScript、Python、PHP、Go、Rust、Ruby。
### 代码混淆
检测配置文件(`.config.js`、`.config.mjs` 等)中的混淆代码:
- 超过 500 个字符的行
- `global[]` 访问器模式
- 大量十六进制编码的内容 (`\x41\x42...`)
## `.ksecignore`
在项目根目录创建一个 `.ksecignore` 文件,以在扫描时排除特定路径。采用 gitignore 语法:
```
# 忽略带有假密钥的测试 fixtures
tests/fixtures/
# 忽略生成的文件
generated/
# 忽略特定文件
scripts/seed-data.sh
# 重新包含特定路径
!tests/fixtures/real-secrets.env
```
## Pre-commit hook
`ksec init` 会生成一个 `lefthook.yml`,用于在 pre-commit(快速检查)和 pre-push(全面扫描)时运行 ksec:
```
ksec init
# 安装 lefthook:go install github.com/evilmartians/lefthook@latest
lefthook install
```
## CI 集成
```
# .github/workflows/security.yml
name: Security Scan
on: [push, pull_request]
jobs:
ksec:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Install ksec
run: |
curl -fsSL https://github.com/MakFly/ksec/releases/latest/download/ksec-linux-x86_64 -o /usr/local/bin/ksec
chmod +x /usr/local/bin/ksec
- name: Run scan
run: ksec scan --min-severity high .
```
## JSON 输出
所有发现的结果均以结构化 JSON 格式提供,便于与其他工具集成:
```
ksec scan --json . | jq '.[] | select(.findings | length > 0)'
```
## 退出码
| 代码 | 含义 |
|---|---|
| `0` | 无高危/严重发现 |
| `1` | 检测到高危或严重问题 |
## 架构
```
ksec (single binary, ~4.6 MB)
├── secrets 60+ regex rules, .gitignore-aware file walker
├── deps lockfile parsers + OSV API batch queries
├── supply-chain pattern detection in JS packages
├── sast OWASP Top 10 rules for JS/TS/Python/PHP/Go/Rust
├── obfuscation long-line + global[] detection in config files
└── .ksecignore gitignore-style exclusion file
```
## License
MIT
标签:Google AI, Rust, SAST, StruQ, 可视化界面, 文档结构分析, 盲注攻击, 网络流量审计, 通知系统, 静态代码扫描