dustinsilveri/Jericho

GitHub: dustinsilveri/Jericho

结合启发式规则与本地大语言模型的轻量级静态安全扫描器,用于快速发现代码中的 XSS、SQL 注入和命令注入等高风险漏洞模式。

Stars: 0 | Forks: 0

# Project Jericho Project Jericho 是一个小型 Python 静态安全扫描器,用于扫描代码库和目录。 第一套规则集侧重于: - XSS - SQL 注入 - 命令注入 - 针对 Python 命令和 SQL 发现的基本请求/输入到 sink 的流追踪 该扫描器是有意设计为启发式的。其目的是快速捕获高风险模式并提供有用的审查线索,而不是证明代码库没有漏洞。 ## 使用方法 ``` python -m jericho_security . python -m jericho_security path\to\repo --format json python -m jericho_security path\to\repo --format table python -m jericho_security path\to\repo --llm-review python -m jericho_security path\to\repo --ollama-review --ollama-model llama3.1 python -m jericho_security path\to\repo --ollama-scan --ollama-model llama3.1 python -m jericho_security path\to\repo --sink-map python -m jericho_security path\to\repo --sink-map --format json python -m jericho_security . --fail-on high python -m jericho_security . --color always ``` 发现结果包括规则 ID、严重程度、文件、行号、证据和修复提示。人类可读的输出以按类别分组的发现结果摘要表结束,这在比较启发式和 `--ollama-scan` 运行结果时非常有用。 当 stdout 是终端时,人类可读的文本输出会为严重程度标签着色。使用 `--color always` 强制着色,或使用 `--color never` 禁用着色。 表格格式仅输出 `rule_id`、`category`、`file`、`line` 和 `evidence`。 使用 `--llm-review` 为每个发现结果输出一个 JSON 审查任务。每个任务包含发现结果、附近的源代码、可用的扫描器流追踪,以及一个 prompt,该 prompt 要求 LLM 判断用户输入是否会到达 sink,并为已确认的缺陷提供一个最小的非破坏性攻击 payload。 使用 `--ollama-review` 将这些审查任务发送到位于 `http://localhost:11434` 的本地 Ollama 服务器。该命令输出附加了 `llm_review` 的增强型 JSON。使用 `--ollama-model`、`--ollama-host` 和 `--ollama-timeout` 覆盖模型、主机或每个发现结果的超时时间。 使用 `--ollama-scan` 跳过启发式规则,并要求本地 Ollama 模型直接检查源文件。它会输出正常的 Jericho 发现结果,因此 `--format`、`--fail-on` 和着色文本输出仍然有效。此模式扫描 Python、Go、C#、Java/JVM、JavaScript/TypeScript、HTML/template、PHP 和 Ruby 风格的源文件。 sink 映射报告已识别的 Python sink 调用以及包含每个调用的函数。它是一个清单视图,因此即使当前的启发式方法未将该调用归类为漏洞,它也会包含 sink。 当您需要审查上下文时,请使用 `--sink-map --format json`。JSON sink 映射条目包括: - imports - 包含函数的参数 - sink 之前的局部赋值 - source 候选者,例如参数和请求/输入访问 - 识别出简单函数内流时的 source 到 sink 的流 - 包含函数的代码块 ## 当前规则 ### XSS - JavaScript `innerHTML` 赋值 - `document.write(...)` - React `dangerouslySetInnerHTML` - Jinja/Django 风格的 `{{ value|safe }}` - Flask `render_template_string(...)` - C# ASP.NET 动态组装的 `Content(..., "text/html")` 响应 ### SQL 注入 - Python SQL 执行调用,例如 `execute`、`executemany`、`executescript` 和 `raw`,其中查询是使用 f-strings、拼接、百分号格式化、`.format(...)` 构建的,或者是动态分配的查询变量。 - Go 的 `database/sql` 调用,例如 `Query`、`QueryRow` 和 `Exec`,其中 SQL 字符串是通过拼接组装的。 - C# 的 `SqlCommand(...)` 调用,其中 SQL 字符串是动态组装的。 ### 命令注入 - 当使用 `shell=True` 或命令字符串是动态构建时,通过 `os.system`、`os.popen` 和常见的 `subprocess` 调用执行 Python 命令。 - 调用 shell 模式或拼接命令字符串的 Go `exec.Command(...)` 调用。 - 带有动态组装命令值的 C# `Process.Start(...)` 调用。 当扫描器能够将请求/输入 source 连接到 sink 时,Python 命令和 SQL 发现结果会在 JSON 输出中包含 `context.flows`。 ## 测试 ``` python -m unittest discover -s tests ``` ## 手动测试用例 `testcases/` 目录包含用于手动扫描器检查的故意包含漏洞的 Python、Go、JavaScript 和 C# 示例: ``` python -m jericho_security testcases python -m jericho_security testcases --format json python -m jericho_security testcases --ollama-review --ollama-model llama3.1 python -m jericho_security testcases --ollama-scan --ollama-model llama3.1 ```
标签:AI风险缓解, C2, CISA项目, DLL 劫持, IPv6支持, Python, SAST, 大语言模型, 无后门, 盲注攻击, 逆向工具, 静态代码扫描