NormalLinuxUser2/sectool

GitHub: NormalLinuxUser2/sectool

sectool 是一款将八项安全审计功能集于一身的模块化 CLI 多功能工具,为安全团队提供从代码到网络的统一检测与报告能力。

Stars: 1 | Forks: 0

# sectool 一款专为安全团队设计的模块化网络安全多功能 CLI 工具。`sectool` 将八个专注的审计工具整合在一个统一且一致的命令行界面中,提供按严重程度排序的、带有颜色的输出,并支持机器可读的 JSON 或 SARIF 格式。 | 命令 | 用途 | | --- | --- | | `sectool scan` | 静态代码扫描,用于检测 SQL injection、XSS、硬编码的 secrets、command injection 和弱加密算法 | | `sectool ssl` | SSL/TLS 证书、协议和加密套件审计工具 | | `sectool deps` | 依赖漏洞检查工具,由 OSV 数据库提供支持 | | `sectool packets` | 网络流量分析工具,用于协议解析和可疑模式检测(教学用途) | | `sectool pass` | 密码强度审计工具,支持 HaveIBeenPwned 泄露检查(k-anonymity) | | `sectool crypto` | 用于检测弱加密原语和不当使用的审计工具 | | `sectool headers` | HTTP 响应安全标头审计工具(HSTS、CSP、cookies、CORS) | | `sectool fuzz` | 多线程 Web 模糊测试工具,用于内容发现和检测意外响应 | ## 负责任的使用 `sectool` 适用于**授权的**安全测试、防御性审查和教育目的。请仅扫描您拥有或获得明确书面授权评估的代码、主机、网络和凭据。网络包分析器会捕获实时流量,可能需要提升的权限;捕获您无权控制的网络可能是违法的。 ## 安装说明 要求 Python 3.9+。 ``` git clone https://github.com/NormalLinuxUser2/sectool.git cd sectool python -m venv .venv # Linux/macOS source .venv/bin/activate # Windows (PowerShell) .\.venv\Scripts\Activate.ps1 pip install -r requirements.txt pip install -e . ``` 网络包分析器依赖于 [scapy](https://scapy.net/),该库已包含在 `requirements.txt` 中。如果您只安装了核心包,可以通过以下命令添加它: ``` pip install -e ".[packets]" ``` 安装后,`sectool` 命令将可在您的 PATH 中使用。您也可以通过 `python -m sectool` 在未安装的情况下直接运行它。 ## 全局选项 这些选项适用于所有子命令,并放置在命令名称**之后**: | 选项 | 描述 | | --- | --- | | `--json` | 以 JSON 格式输出结果,而不是纯文本 | | `--sarif` | 以 SARIF 2.1.0 格式输出结果(用于 GitHub 代码扫描 / CI) | | `--no-color` | 禁用 ANSI 颜色输出 | | `--min-severity LEVEL` | 隐藏低于 `LEVEL` 的结果(`info`、`low`、`medium`、`high`、`critical`) | | `--fail-on LEVEL` | 当存在等于或高于 `LEVEL` 的结果时,以非零状态码退出(默认:`low`) | | `--output FILE` | 将报告写入文件而不是 stdout | | `-v`, `-vv` | 增加日志详细程度(日志输出到 stderr) | ### 退出码 | 状态码 | 含义 | | --- | --- | | `0` | 执行完成;未发现等于或高于 `--fail-on` 的结果 | | `1` | 执行完成;发现了等于或高于 `--fail-on` 的结果 | | `2` | 发生错误(输入错误、主机不可达、缺少依赖) | | `130` | 被中断 | 这使得 `sectool` 能够轻松集成到 CI 中:非零退出码将导致构建失败。 ## 用法 ### 代码漏洞扫描器 ``` # 扫描项目目录 sectool scan ./myapp # 仅显示 medium 及以上级别,限制为 Python 文件 sectool scan ./myapp --min-severity medium --ext .py # 专注于特定 category 并忽略某个目录 sectool scan ./myapp --category secret --category sql-injection --exclude vendor # 用于工具的 JSON 输出 sectool scan ./myapp --json --output report.json ``` 检测类别:`sql-injection`、`xss`、`secret`、`command-injection`、`weak-crypto`。 在源代码行中添加 `sectool:ignore` 标记可以忽略该行的检测结果。 ### SSL/TLS 审计工具 ``` # 审核默认端口 (443) 上的主机 sectool ssl example.com # 自定义端口和更严格的过期警告窗口 sectool ssl mail.example.com --port 993 --expiry-warning-days 45 # 仅显示真正的问题 sectool ssl example.com --min-severity medium ``` 检查证书过期和有效性、信任链和主机名验证、密钥大小、签名算法、自签名证书、启用的协议版本(标记 SSLv3/TLS 1.0/1.1)以及对弱加密套件的接受情况。 ### 依赖检查器 ``` # 检查当前目录的 manifest sectool deps # 检查特定的 manifest sectool deps ./requirements.txt sectool deps ./frontend/package.json # 解析 manifest 而不联系 OSV API sectool deps ./myapp --offline ``` 解析 `requirements.txt` 和 `package.json`,将固定版本与 [OSV](https://osv.dev/) 数据库进行交叉比对,并报告存在漏洞的包以及建议的修复版本。未固定版本的依赖会被标记为代码规范问题。 ### 网络包分析器(教学用途) ``` # 分析 capture 文件 sectool packets --read capture.pcap # 实时 capture(通常需要 admin/root) sectool packets --iface eth0 --count 500 --bpf "tcp port 80" ``` 汇总协议分布和主要通信节点(top talkers),随后标记可疑模式:可能的端口扫描、明文协议、潜在的明文凭据以及可能的 ARP 欺骗。 ### 密码审计工具 ``` # 安全地提示输入(推荐;密码永远不会回显) sectool pass # 从 stdin 输入(不会出现在 shell 历史记录中) echo 'hunter2' | sectool pass --stdin # 跳过在线违规检查 sectool pass --no-hibp ``` 评估熵值,检测可预测的模式(常见密码、序列、重复、键盘平移、年份),并根据 HaveIBeenPwned 泄露数据库检查密码。泄露检查使用 **k-anonymity**:仅发送 SHA-1 哈希值的前 5 个字符,因此密码本身永远不会离开您的设备。 ### 加密审计工具 ``` # 审核 codebase 中的加密使用情况 sectool crypto ./myapp # 限制为特定的 category sectool crypto ./myapp --category weak-hash --category weak-random ``` 检测类别:`weak-hash`、`weak-cipher`、`weak-mode`、`weak-random`、`weak-keysize`、`static-iv`、`weak-protocol`、`cert-validation`。 ### HTTP 安全标头审计工具 ``` # 审核 URL 的 response header sectool headers https://example.com # 发送 HEAD request 并且不遵循 redirect sectool headers example.com --method HEAD --no-redirect # 添加 auth header 并且仅显示真正的问题 sectool headers https://app.example.com --header "Authorization: Bearer $TOKEN" --min-severity medium ``` 检查是否存在缺失或配置不当的 `Strict-Transport-Security`、`Content-Security-Policy`(包括 `unsafe-inline`/`unsafe-eval`)、点击劫持防护(`X-Frame-Options`/`frame-ancestors`)、`X-Content-Type-Options`、`Referrer-Policy` 和 `Permissions-Policy`;不安全的 CORS(带有凭据的通配符源);缺失的 `Secure`/`HttpOnly`/`SameSite` cookie 标志;以及通过 `Server`/`X-Powered-By` 导致的版本泄露。 ### Web 模糊测试工具 ``` # 针对 base URL 进行 content discovery(path 从内置 wordlist 追加) sectool fuzz http://testsite.local/ # 使用 FUZZ keyword 和自定义 wordlist 的显式 injection point sectool fuzz "http://testsite.local/FUZZ" --wordlist paths.txt --ext .php --ext .bak # 调整并发性并根据 status code、response size 或 word count 过滤噪声 sectool fuzz http://testsite.local/ --threads 16 --match-code 200,301,403 --filter-size 0 # 递归进入已发现的目录,最深达到两个层级 sectool fuzz http://testsite.local/ --recursion --recursion-depth 2 ``` 并发请求每个候选路径,并报告引人注目的响应。它会从一个随机路径自动校准基准线,以屏蔽通配符/"soft-404" 服务器,并以适当的严重程度对重要的命中结果进行分类——例如暴露的 `.git` 目录、`.env`、私钥、数据库转储、备份文件、管理面板等。使用 `FUZZ` 关键字来模糊测试 URL 的任何部分(或 `--data` 请求体)。 使用 `--recursion` 时,任何发现的目录(重定向到带有斜杠的路径,或无扩展名的 `200` 响应)都将使用相同的字典列表在最多 `--recursion-depth` 层级内进行递归模糊测试,从而自动发现像 `/admin/.env` 这样的嵌套路径。可以根据状态码(`--match-code`/`--filter-code`)、字节大小(`--match-size`/`--filter-size`)或字数(`--match-word`/`--filter-word`)来包含或排除响应。**请仅对您拥有或获得明确授权的目标进行模糊测试。** ## 输出和严重程度 检测结果分为五个严重等级,并在终端中以颜色标识: `CRITICAL` > `HIGH` > `MEDIUM` > `LOW` > `INFO` 每项结果都包含标题、位置、描述、修复建议,以及(如相关)参考信息(CWE 或安全公告)。使用 `--json` 可以获取包含汇总计数和完整结果数组的结构化文档,或者使用 `--sarif` 输出可供 GitHub 代码扫描和其他 CI 工具直接摄取的 SARIF 2.1.0 格式。 ## 项目结构 ``` sectool/ ├── sectool/ │ ├── cli.py Central argparse entry point and dispatch │ ├── core/ │ │ ├── findings.py Severity levels and the Finding model │ │ ├── output.py Color/JSON reporter │ │ ├── logging.py Structured logging setup │ │ ├── codescan.py Shared regex/rule scanning engine │ │ ├── httpclient.py Shared HTTP session/URL helpers │ │ ├── context.py Reporter + logger container │ │ └── errors.py Exception types │ └── modules/ │ ├── scan.py Code vulnerability scanner │ ├── ssl_audit.py SSL/TLS auditor │ ├── deps.py Dependency checker (OSV) │ ├── packets.py Packet analyzer │ ├── passwords.py Password auditor (HIBP) │ ├── crypto.py Crypto auditor │ ├── headers.py HTTP security-header auditor │ └── fuzz.py Web content-discovery fuzzer ├── tests/ pytest suite ├── requirements.txt ├── pyproject.toml ├── CHANGELOG.md └── LICENSE ``` ## 开发说明 ``` pip install -r requirements-dev.txt pip install -e . pytest ``` 测试套件不依赖网络:HaveIBeenPwned 和 OSV 的集成均已模拟,因此可以快速且离线运行。 ## 更新日志 查看 [CHANGELOG.md](CHANGELOG.md) 了解版本发布历史。 ## 许可证 基于 [MIT License](LICENSE) 发布。
标签:ATT&CK, StruQ, 代码分析, 凭证管理, 插件系统, 网络安全, 逆向工具, 防御绕过, 隐私保护