Cobra 代码审计工具部署使用
2023-10-31 14:15:35 # 安全

基本信息

Cobra 是一款源代码安全审计工具,支持检测多种开发语言源代码中的大部分显著的安全问题和漏洞。

官网

1
2
https://github.com/FeeiCN/Cobra Github
http://cobra.feei.cn/ WiKi,有安装使用说明、规则开发等

介绍

详阅 https://github.com/FeeiCN/Cobra

支持多种开发语言

支持 PHP、Java 等开发语言,并支持数十种类型文件。

支持多种漏洞类型

开放数万条不安全的依赖检查规则和数十条代码安全扫描规则。

命令行模式和 API 模式

提供本地 Web Server 服务,可使用 GUI 可视化操作,也可支持本地 API 接口,方便和其它系统(发布系统、CI 等)对接扩展。

截图

9877f2bef57d9820bcaca8f1198218e2_report_01

4a4ef2f6ff29690172c7b03213db5c1b_report_02

详细介绍

详阅 http://cobra.feei.cn/

什么是”源代码安全审计(白盒扫描)”?

由于开发人员的技术水平和安全意识各不相同,导致可能开发出一些存在安全漏洞的代码。 攻击者可以通过渗透测试来找到这些漏洞,从而导致应用被攻击、服务器被入侵、数据被下载、业务受到影响等等问题。 “源代码安全审计”是指通过审计发现源代码中的安全隐患和漏洞,而 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)通用漏洞,具体见支持的漏洞类型。

详阅:http://cobra.feei.cn/labels

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能应用在哪些场景?

  1. 【漏洞出现前】通过内置的扫描规则对公司项目进行日常扫描,并推进解决发现的漏洞。

  2. 【漏洞出现后】当出现一种新漏洞,可以立刻编写一条 Cobra 扫描规则对公司全部项目进行扫描来判断受影响的项目。

Cobra 是什么类型应用?

Cobra 提供 Web 服务的同时也提供了命令行服务。

  1. 【CLI】通过命令行扫描本地源代码,发现其中安全问题。
  2. 【API&GUI】以 Web Server 形式部署在服务器上,供内部人员通过 GUI 的形式访问使用,并可以通过 API 集成到 CI 或发布系统中。

危害等级定义

详阅:http://cobra.feei.cn/level

等级 分值 描述
严重 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
2
3
git clone https://github.com/WhaleShark-Team/cobra.git && cd cobra
pip install -r requirements.txt
python cobra.py --help

注:过程中会遇到一些错误,根据具体错误具体解决,可能会涉及到修改代码。

部署完成

如能成功执行 –help 命令,即为部署完成。

1
# python cobra.py --help

image-20231031100632385

使用

命令行使用

1
2
3
# cd /data/python/code/Cobra
# python cobra.py -t /data/python/code/Hello-Java-Sec
注:/data/python/code/Hello-Java-Sec 为待审计的源码目录

命令行代码审计示例:

image-20231031105127001

注:请注意开头的 [10:50:05] [INFO] [REPORT] Report URL: ?sid=af4a64w2p2yo ,访问 Web 服务时,首页加参数 ?sid=af4a64w2p2yo 即可在 Web 端查看命令行执行的报告。

Web服务

推荐命令行 + Web 结合使用,命令行执行后获取报告 sid 值,见 命令行使用 注意项。

准备工作

使用 Web 服务时需先复制创建 config 配置文件,再修改 cobra/dependencies.pyfind_python_pip(self, file_path): 函数体为 pass ,方可正常使用。

复制创建 config 配置文件

1
# cp config.template config

修改 dependencies.py 代码

源代码段:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
def find_python_pip(self, file_path):
for requirement in file_path:
if 'requirements.txt' in requirement:
reqs = parse_requirements(filename=requirement, session=False)
for r in reqs:
module_ = r.name
version_ = r.specifier
self._framework.append(module_)
self._result.update(
{
module_: {
'version': str(version_),
'format': 'python',
}
}
)
elif 'package.json' in requirement:
self.find_nodejs_npm([requirement])

修改后:

1
2
def find_python_pip(self, file_path):
pass

启动 Web 服务

启动命令:

1
# python cobra.py -H 0.0.0.0 -P 8888

注:如开防火墙需防火墙放行 8888 端口。

查看 Cobra 所在虚拟机 IP,用同网段其它电脑访问 Cobra IP + 8888 端口号,即可看到 Cobra Web 界面:

image-20231031110201047

可拉取 Github、GitLab、SVN 等仓库代码,需在 config 配置文件中修改所需配置项,也可以上传本地源码进行代码审计,支持 tar.bz2|tar|gz|tgz|tar.gz|rar|zip 文件格式,单次只能上传一个文件。

此处使用本地源码上传的方式进行代码审计。

  1. 上传源代码:

    image-20231031110555945

    image-20231031110738335

  2. 查看报告:

    image-20231031110816023

  3. 查看具体问题:

    image-20231031110854084

API

详阅:http://cobra.feei.cn/api

参考资料

结语

做一个有态度的技术工作者。

Best wishes ~