如何使用CodeQL检测YAML配置敏感信息及数据库查询方法?
使用CodeQL检测YAML配置文件敏感信息及数据库查询指南
一、多语言数据库创建的可行性
直接用--language=go,yaml创建数据库完全可行,CodeQL支持同时为多种语言生成数据库,这样你能在同一个数据库里同时查询Go代码和YAML配置文件的内容。
二、检测YAML中的明文敏感信息
1. 编写CodeQL查询(基于YAML语言模型)
CodeQL对YAML有专门的AST解析模型,可通过遍历键值对匹配敏感关键词和明文值,示例查询如下:
import yaml from YAMLMapping mapping, YAMLNode key, YAMLNode value where // 匹配敏感关键词(不区分大小写) key.getText().toLowerCase() matches "%password%" or key.getText().toLowerCase() matches "%secret%" or key.getText().toLowerCase() matches "%api_key%" or key.getText().toLowerCase() matches "%token%" // 排除空值和明显占位符(可按需调整) and value.getText() != "" and not value.getText().matches "%placeholder%" select mapping, key, value, "疑似明文敏感信息"
2. 自定义规则优化
- 扩展敏感关键词:比如加上
access_key、passphrase等业务相关的敏感字段 - 强化值校验:可添加正则匹配,比如筛选符合密码复杂度的字符串,或排除测试用假值(如
test123)
三、查询YAML数据库的具体步骤
- 确认数据库生成完成:执行
codeql database create --language=go,yaml <数据库路径>后,等待生成完毕,指定路径下会出现完整数据库文件。 - 运行查询的两种方式:
- CLI方式:
codeql database analyze <数据库路径> <你的查询文件>.ql --format=csv --output=results.csv - VS Code插件方式:
- 安装CodeQL插件,导入已创建的数据库(通过侧边栏"Databases"选项添加)
- 打开编写好的QL文件,点击右上角"Run Query",即可在面板查看结果
- CLI方式:
四、注意事项
- 加密后的敏感值无法通过静态检测识别,需结合动态分析或解密逻辑
- 上述查询会自动遍历YAML的嵌套层级,无需额外处理子映射
- 可将常用敏感检测规则封装成CodeQL库,方便跨项目复用
内容的提问来源于stack exchange,提问作者expl0it
相关产品推荐
相关产品推荐

