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, 可视化界面, 文档结构分析, 盲注攻击, 网络流量审计, 通知系统, 静态代码扫描