基本信息
Cobra 是一款源代码安全审计工具,支持检测多种开发语言源代码中的大部分显著的安全问题和漏洞。
官网
1 | https://github.com/FeeiCN/Cobra Github |
介绍
详阅 https://github.com/FeeiCN/Cobra
支持多种开发语言
支持 PHP、Java 等开发语言,并支持数十种类型文件。
支持多种漏洞类型
开放数万条不安全的依赖检查规则和数十条代码安全扫描规则。
命令行模式和 API 模式
提供本地 Web Server 服务,可使用 GUI 可视化操作,也可支持本地 API 接口,方便和其它系统(发布系统、CI 等)对接扩展。
截图
详细介绍
什么是”源代码安全审计(白盒扫描)”?
由于开发人员的技术水平和安全意识各不相同,导致可能开发出一些存在安全漏洞的代码。 攻击者可以通过渗透测试来找到这些漏洞,从而导致应用被攻击、服务器被入侵、数据被下载、业务受到影响等等问题。 “源代码安全审计”是指通过审计发现源代码中的安全隐患和漏洞,而 Cobra 可将这个流程自动化。
Cobra 为什么能从源代码中扫描到漏洞?
对于一些特征较为明显的可以使用正则规则来直接进行匹配出,比如硬编码密码、错误的配置等。 对于 OWASP Top 10 的漏洞,Cobra 通过预先梳理能造成危害的函数,并定位代码中所有出现该危害函数的地方,继而基于 Lex (Lexical Analyzer Generator, 词法分析生成器)和 Yacc (Yet Another Compiler-Compiler, 编译器代码生成器) 将对应源代码解析为 AST (Abstract Syntax Tree, 抽象语法树),分析危害函数的入参是否可控来判断是否存在漏洞(目前仅接入了 PHP-AST,其它语言 AST 接入中)。
Cobra 和其它源代码审计系统有什么区别或优势?
Cobra 定位是自动化发现源代码中大部分显著的安全问题,对于一些隐藏较深或特有的问题建议人工审计。
- 开放源代码(基于开放的 MIT License,可更改源码)
- 支持开发语言多(支持十多种开发语言和文件类型)
- 支持漏洞类型多(支持数十种漏洞类型)
- 支持各种场景集成(提供 API 也可以命令行使用)
- 专业支持,持续维护(由白帽子、开发工程师和安全工程师一起持续维护更新,并在多家企业内部使用)
Cobra 支持哪些开发语言?
目前Cobra主要支持PHP、Java等主要开发语言及其它数十种文件类型,并持续更新规则和引擎以支持更多开发语言,具体见支持的开发语言和文件类型。
Cobra 能发现哪些漏洞?
覆盖大部分 Web 端常见漏洞和一些移动端(Android、iOS)通用漏洞,具体见支持的漏洞类型。
ID | Label | Description(EN) | Description(CN) |
---|---|---|---|
110 | MS | Misconfiguration | 错误的配置 |
120 | SSRF | Server-Side Forge | 服务端伪造 |
130 | HCP | Hard-coded Password | 硬编码密码 |
140 | XSS | Cross-Site Script | 跨站脚本 |
150 | CSRF | Cross-Site Request Forge | 跨站请求伪造 |
160 | SQLI | SQL Injection | SQL注入 |
163 | XI | Xpath Injection | Xpath注入 |
165 | LI | LDAP Injection | LDAP注入 |
167 | XEI | XML External Entity Injection | XML实体注入 |
170 | FI | Local/Remote File Inclusion | 文件包含漏洞 |
180 | CI | Code Injection | 代码注入 |
181 | CI | Command Injection | 命令注入 |
190 | IE | Information Exposure | 信息泄露 |
200 | PPG | Predictable Pseudorandom Generator | 可预测的伪随机数生成器 |
210 | UR | Unvalidated Redirect | 未经验证的任意链接跳转 |
220 | HRS | HTTP Response Splitting | HTTP响应拆分 |
230 | SF | Session Fixation | SESSION固定 |
260 | US | unSerialize | 反序列化漏洞 |
280 | DF | Deprecated Function | 废弃的函数 |
290 | LB | Logic Bug | 逻辑错误 |
320 | VO | Variables Override | 变量覆盖漏洞 |
350 | WF | Weak Function | 不安全的函数 |
355 | WE | Weak Encryption | 不安全的加密 |
360 | WS | WebShell | WebShell |
970 | AV | Android Vulnerabilities | Android漏洞 |
980 | IV | iOS Vulnerabilities | iOS漏洞 |
999 | IC | Insecure Components | 引用了存在漏洞的三方组件(Maven/Pods/PIP/NPM) |
Cobra能应用在哪些场景?
【漏洞出现前】通过内置的扫描规则对公司项目进行日常扫描,并推进解决发现的漏洞。
【漏洞出现后】当出现一种新漏洞,可以立刻编写一条 Cobra 扫描规则对公司全部项目进行扫描来判断受影响的项目。
Cobra 是什么类型应用?
Cobra 提供 Web 服务的同时也提供了命令行服务。
- 【CLI】通过命令行扫描本地源代码,发现其中安全问题。
- 【API&GUI】以 Web Server 形式部署在服务器上,供内部人员通过 GUI 的形式访问使用,并可以通过 API 集成到 CI 或发布系统中。
危害等级定义
等级 | 分值 | 描述 |
---|---|---|
严重 | 9-10 | 1.可获取服务器权限; 2.严重信息泄露; |
高危 | 6-8 | 1.敏感信息泄露; 2.越权; 3.任意文件读取; 4.SQL注入; 5.git/svn泄露; 6.SSRF; |
中危 | 3-5 | 1.XSS; 2.URL跳转; 3.CRLF; 4.LFI; |
低危 | 1-2 | 1.CSRF; 2.JSONP劫持; 3.异常堆栈信息; 3.PHPINFO; 4.路径泄露; 5.硬编码密码; 6.硬编码内网IP域名; 7.不安全的加密方法; 8.不安全的随机数; 9.日志敏感记录; |
安装部署
系统支持
系统 | 支持情况 |
---|---|
mac OS | 支持 |
Linux | 支持 |
Windows | 暂不支持 |
注:不支持 Windows 系统,此处是在 CentOS 7.6 系统上安装。
Python 版本
Cobra可运行在以下Python版本
- 2.6
- 2.7
- 3.3
- 3.4
- 3.5
- 3.6
- 3.6+
注:此处使用 CentOS 7.6 自带 Python2.7 安装。
特殊依赖
以下系统需要单独安装依赖。
macOS 系统依赖
1 | brew install grep findutils flex phantomjs |
Ubuntu 系统依赖
1 | apt-get install flex bison phantomjs |
CentOS 系统依赖
1 | yum install flex bison phantomjs |
安装
1 | git clone https://github.com/WhaleShark-Team/cobra.git && cd cobra |
注:过程中会遇到一些错误,根据具体错误具体解决,可能会涉及到修改代码。
部署完成
如能成功执行 –help 命令,即为部署完成。
1 | # python cobra.py --help |
使用
命令行使用
1 | # cd /data/python/code/Cobra |
命令行代码审计示例:
注:请注意开头的 [10:50:05] [INFO] [REPORT] Report URL: ?sid=af4a64w2p2yo
,访问 Web 服务时,首页加参数 ?sid=af4a64w2p2yo
即可在 Web 端查看命令行执行的报告。
Web服务
推荐命令行 + Web 结合使用,命令行执行后获取报告 sid 值,见 命令行使用 注意项。
准备工作
使用 Web 服务时需先复制创建 config 配置文件,再修改 cobra/dependencies.py
中 find_python_pip(self, file_path):
函数体为 pass ,方可正常使用。
复制创建 config 配置文件
1 | # cp config.template config |
修改 dependencies.py 代码
源代码段:
1 | def find_python_pip(self, file_path): |
修改后:
1 | def find_python_pip(self, file_path): |
启动 Web 服务
启动命令:
1 | # python cobra.py -H 0.0.0.0 -P 8888 |
注:如开防火墙需防火墙放行 8888 端口。
查看 Cobra 所在虚拟机 IP,用同网段其它电脑访问 Cobra IP + 8888 端口号,即可看到 Cobra Web 界面:
可拉取 Github、GitLab、SVN 等仓库代码,需在 config 配置文件中修改所需配置项,也可以上传本地源码进行代码审计,支持 tar.bz2|tar|gz|tgz|tar.gz|rar|zip
文件格式,单次只能上传一个文件。
此处使用本地源码上传的方式进行代码审计。
上传源代码:
查看报告:
查看具体问题:
API
参考资料
- Cobra http://cobra.feei.cn/
- Cobra Github https://github.com/FeeiCN/Cobra
结语
做一个有态度的技术工作者。
Best wishes ~