“攻击面就是漏洞。在那里找到漏洞只是一个细节。”
—— Mark Dowd
“有些细节比其他细节更重要。”
—— Fedor G. Pikus
我的 Semgrep 规则集,用于促进漏洞研究。
# 高优先级扫描(快速见效)
semgrep --severity ERROR --config "p/0xdea"
# 高优先级和中优先级扫描(推荐)
semgrep --severity ERROR --severity WARNING --config "p/0xdea"
# 完整扫描(可能包含边缘发现和更多误报)
semgrep --config "p/0xdea"
或者,你可以克隆此 GitHub 仓库并在本地运行:
# 完整扫描
semgrep --config semgrep-rules/rules /path/to/source
# 特定规则扫描
semgrep --config semgrep-rules/rules/c/command-injection.yaml /path/to/source
[!TIP] 指定
--no-git-ignore开关以扫描文件,无论其 git 跟踪状态或.gitignore规则如何。
为了获得更流畅的体验,我建议将 Semgrep 扫描输出保存为 SARIF 格式,并在 VS Code 中使用 SARIF Explorer:
semgrep --sarif --sarif-output=/path/to/source/SEMGREP.sarif --config semgrep-rules/rules /path/to/source
code /path/to/source # 然后在 VS Code 中使用 SARIF Explorer 打开 SEMGREP.sarif 文件
另请参阅附带的 SARIF 输出示例。
已使用 Semgrep CLI 1.169.0 测试。
经过实战检验的 C(有时也包含 C++)规则集。
gets。strcpy、stpcpy、strcat。sprintf 和 vsprintf。scanf 系列中可能不安全的 API 函数。strncat 的大小参数错误。strncpy、memcpy、snprintf 及其变体的大小参数错误。sizeof 运算符。strncpy 和 stpncpy 后未显式添加 NUL 终止符。snprintf 和 vsnprintf 的返回值。strlcpy 和 strlcat 的返回值。strlen 的返回值转换为 short 可能很危险。alloca。free 后潜在的 use-after-free。free。free。malloc、calloc、realloc 等的返回值。putenv。system 或 popen 潜在的 OS 命令注入。access、stat、lstat 等。mktemp、tmpnam、tempnam。signal。