30条新Semgrep规则:Ansible、Java、Kotlin、Shell脚本等
我们发布了30条自定义Semgrep规则,用于检测Ansible剧本、Java/Kotlin代码、Shell脚本和Docker Compose配置文件中的常见安全漏洞。这些规则已用于审计相关技术栈的安全问题,与我们的公开CodeQL查询和测试手册共同构成技术分享体系。本文简要介绍新规则,并深入探讨创建规则时使用的两项Semgrep高级功能:通用模式(generic mode)和YAML支持。
规则集概览
本次发布的规则聚焦以下安全问题:
- 未加密网络传输(HTTP、FTP等)
- 禁用SSL证书验证
- 常见命令行工具的不安全参数
- 无限制IP地址绑定
- Java/Kotlin相关杂项问题
通用模式规则
| 模式 | 规则ID | 描述 |
|---|---|---|
| Generic | container-privileged | 检测具有扩展权限的容器命令 |
| Generic | container-user-root | 检测以root身份运行的容器命令 |
| Generic | curl-insecure | 检测禁用SSL验证的curl命令 |
| Generic | curl-unencrypted-url | 检测使用未加密URL(如HTTP、FTP)的curl命令 |
| Generic | gpg-insecure-flags | 检测使用不安全参数的gpg命令 |
| Generic | installer-allow-untrusted | 检测允许不可信安装的安装器命令 |
| Generic | openssl-insecure-flags | 检测使用不安全参数的openssl命令 |
| Generic | ssh-disable-host-key-checking | 检测禁用主机密钥检查的ssh命令 |
| Generic | tar-insecure-flags | 检测使用不安全参数的tar命令 |
| Generic | wget-no-check-certificate | 检测禁用SSL验证的wget命令 |
| Generic | wget-unencrypted-url | 检测使用未加密URL(如HTTP、FTP)的wget命令 |
Java/Kotlin规则
| 模式 | 规则ID | 描述 |
|---|---|---|
| Java, Kotlin | gc-call | 调用gc会建议JVM运行垃圾回收器,但无法保证实际执行,依赖此行为属于反模式 |
| Java, Kotlin | mongo-hostname-verification-disabled | 检测禁用SSL主机名验证的MongoDB客户端 |
YAML规则(Ansible)
涵盖apt-key、dnf、yum、zypper等工具未加密URL下载及SSL验证禁用检测,例如:
apt-key-unencrypted-urldnf-validate-certs-disabledyum-unencrypted-url
YAML规则(Docker Compose)
port-all-interfaces:检测服务端口暴露在所有接口
Semgrep 201:进阶功能
Semgrep是用于代码模式匹配的静态分析工具,支持安全漏洞、错误变体、密钥检测等问题发现。虽然提供云端高级功能,但CLI版本可免费本地运行。使用以下命令执行Trail of Bits规则:
|
|
通用模式(Generic Mode)
通用模式提供任意文本搜索能力,虽无编程语言的语法支持,但具备以下特点:
- 优势:搜索范围广,漏报率低
- 劣势:误报率较高(如匹配注释代码)
- 适用场景:Jinja模板、NGINX配置、TOML文件等非标准格式
示例对比:
|
|
- Python模式:仅匹配第6行(语义理解注释)
- 通用模式:匹配第4行和第6行(纯文本匹配)
尽管缺少语义等价性支持,通用模式仍适用于需要广覆盖的场景(如跨语言检测SSH参数配置)。
YAML支持
YAML已成为Kubernetes、Docker Compose、GitHub Actions等技术的标准配置格式。Semgrep的YAML支持允许:
- 统一管理多格式规则(Python/Java/通用/YAML)
- 在CI中集中运行所有规则
- 避免使用多个工具处理不同文件类型
YAML规则示例(检测全接口监听):
|
|
该规则通过正则表达式排除回环地址(127.x.x.x),检测可能暴露到所有接口的端口配置。
扩展Semgrep能力
Semgrep通过支持YAML和通用模式成为更全面的代码审计工具。我们曾将其应用于:
- 保护机器学习管道
- 发现Goroutine泄漏
- 加固Apollo GraphQL服务器
如需为项目定制Semgrep规则,欢迎联系我们。