工具简介
今天给各位上点干货,介绍一个代码审计的利器,彻底颠覆传统的代码审计方法。
OWASP迎来了新成员Noir,Noir通过静态分析源代码来识别系统的真实API,不仅能发现显式API,还能发现影子API、已弃用但仍可访问的API以及隐藏API。影子API指的是存在于系统里,但不在官方接口文档中的API,这些API也不能轻易地被DAST工具发现。
Noir以源代码为输入,Noir可以生成完整的API数据,并可无缝集成到DAST工具中,帮助DevSecOps团队消除传统动态扫描中的盲区,实现更全面的安全检测。
Noir的主要能力
API发现 :识别完整的API,包括后门API和影子API。
AI驱动分析 :使用LLM检测源码中的API。
打通SAST到DAST的堵点 :为DAST工具提供已发现的API数据,以进行全面的安全扫描。
无缝集成到DevSecOps工具链 :可与CI/CD流水线、ZAP、Burp Suite、Caido等工具集成。
多格式输出 :支持导出JSON、YAML、OpenAPI及其他格式的报告。
安装Noir
1、下载最新的.deb软件包:
wget https://github.com/owasp-noir/noir/releases/download/v0.27.1/noir_0.27.1_amd64.deb
2、安装软件包:
dpkg -i noir_0.27.1_amd64.deb
3、验证安装情况:
4、查看所有可用命令和标志:
5、列出支持的语言和框架:
指定输出报告格式
使用-b标志分析代码仓,使用-f指定输出格式。
1、JSON输出
2、YAML输出
3、OpenAPI规范
4、html输出:
noir -b . -f html -o report.html
指定日志格式
1、不输出日志信息:
2、输出日志详细信息:
输出自定义
1、在结果中显示源文件路径:
2、显示每个API检测到的技术/框架:
noir -b . --include-techs
3、这两个标志可以组合使用:
noir -b . --include-path --include-techs
接入大语言模型
1、将Noir连接到大语言模型(云端或本地),以进行更深入的代码分析。
noir -b . --ai-provider <PROVIDER> --ai-model <MODEL_NAME> --ai-key <YOUR_API_KEY>
2、命令行标志:
--ai-provider :AI 提供商(例如openai、ollama)或自定义API URL--ai-model :模型名称(例如gpt-4o)--ai-key :API密钥(或使用NOIR_AI_KEY环境变量)--ai-max-token :AI请求的最大令牌数(可选)--cache-disable :禁用LLM缓存--cache-clear :运行前清除LLM缓存
Noir内置了多个主流大模型:
ai-provider | 接入API |
openai | https://api.openai.com |
xai | https://api.x.ai |
github | https://models.github.ai |
azure | https://models.inference.ai.azure.com |
vllm | http://localhost:8000 |
ollama | http://localhost:11434 |
lmstudio | http://localhost:1234 |
| --ai-provider=http://my-custom-api:9000 |
与DAST工具集成
您可以使用Noir将所有发现的API发送到OWASP ZAP、 Burp Suite或Caido,然后您的DAST工具可以扫描这些API。这将把应用程序的所有API添加到DAST工具中,使您可以轻松地对API进行主动扫描。
noir -b . -u http://localhost:3000 --send-proxy "http://localhost:8080"
被动安全扫描
Noir的被动扫描功能用来识别代码中潜在的安全漏洞,而无需主动利用它们。采用正则表达式和字符串匹配来识别常见的安全风险。Noir的被动扫描功能自带一套默认规则。这些规则由Noir团队精心设计,用于检测常见的安全漏洞。启用被动扫描(-P)后,Noir会在首次运行时自动初始化规则,并在启动时检查更新。
1、运行被动扫描:
2、使用自定义规则:
noir -b <BASE_PATH> --passive-scan --passive-scan-path /path/to/your/rules.yml
使用--passive-scan-severity按问题严重级别筛选:
critical :严重high :高、严重(默认)medium :中、高、严重low :所有级别
example:
# 严重noir -b <BASE_PATH> -P --passive-scan-severity critical# 中、高、严重noir -b <BASE_PATH> -P --passive-scan-severity medium# 所有级别noir -b <BASE_PATH> -P --passive-scan-severity low
输出:
★ Passive Results:[critical][hahwul-test][secret] use x-api-key ├── extract: env.request.headers["x-api-key"].as(String) └── file: ./spec/functional_test/fixtures/crystal_kemal/src/testapp.c r:4
[critical][hahwul-test][secret] :问题严重性、规则名称、问题类型extract :匹配的代码行file :文件路径和行号
更新CLI规则:
--passive-scan-auto-update:启动时自动从存储库更新规则--passive-scan-no-update-check:完全跳过更新检查(适用于物理隔离环境)
用法示例:
noir -b /app -Pnoir -b /app -P --passive-scan-auto-updatenoir -b /app -P --passive-scan-no-update-check
自定义规则:
虽然默认规则是一个很好的起点,但您可能希望添加自己的规则来查找您的应用程序的安全问题。为此,您可以创建一个新的YAML规则文件,并将其放在与默认规则相同的目录中。
默认规则路径:
~/.config/noir/passive_rules/
添加到此目录的任何.yml 或.yaml文件都将在下次运行被动扫描器时自动加载和使用。这样,您可以轻松扩展和自定义Noir的被动扫描功能,以满足您的特定需求,而无需修改默认规则集。
提示:文章中的命令直接粘贴到Kali Linux终端无法执行,主要是因为复制的内容包含了不可见的格式符号(如HTML标签、特殊空格)。建议将命令先粘贴至文本编辑器清除格式,再粘贴到终端执行。
如果您想了解完整的网络安全治理体系和代码审计的相关知识,请阅读《网络安全治理:基于DevSecOps的理论与实践》,该书由本人联合网络安全领域顶尖专家倾心打造,机械工业出版社重磅出版!
无论你是安全从业者、CTO、渗透测试工程师,还是对网络安全治理充满好奇的技术爱好者,都可以从本书学到你想要的知识。
想购买的朋友可以在京东网、淘宝网、当当网等平台购买。