欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  网络运营

Cobra - 代码安全审计系统

程序员文章站 2022-06-28 09:35:39
为什么我们需要一款代码审计系统? 公司越来越大,开发人员也越来越多。每个研发人员的安全素质都不一样,虽然在公司核心项目上可以采取 框架层安全防护 ,但各类新项目太多,无法做到每个项目都使用相...

为什么我们需要一款代码审计系统?

公司越来越大,开发人员也越来越多。每个研发人员的安全素质都不一样,虽然在公司核心项目上可以采取 框架层安全防护 ,但各类新项目太多,无法做到每个项目都使用相同框架,都去集成安全组件。

所以对于公司所有的项目必须有一道防护来保障基本安全,代码安全审计即可作为这一道安全手段。

业内调研

目前业内已经有很多款代码审计工具了

名称是否开源

w3af

Android Scan

CMS Scan

GrepBugs

Pixy

RIPS

SWAAT

CodeSecure Verifier

PHP-SAT

Yasca

Seay

这些项目专注的点都不一样,极少数商用的是定位于企业内代码审计的,但都是闭源的。

还没有一款开源的,并且定位于企业级使用的。

作为甲方企业,我们所需要的:

能快速扫描新型漏洞(Web应用每天都会有新的漏洞/攻击手法出现,一定要能快速响应新型漏洞的扫描) 能够扫描多种开发语言(大公司肯定不会只有一种开发语言,这就涉及到需要支持多种语言) 能够自动扫描、自动报告(人工参与每个项目成本太大)

根据我们的目的筛选比较后发现,没有一款符合我们的需求。

于是我们选择了做一套符合企业级的代码审计系统。

代码审计思路

代码审计大体方式可以分为两种:静态和动态,

1. 静态审计

通过静态分析源码,发现源码中的逻辑、数据处理、函数使用不当来确认源码中可能存在的漏洞。

同时静态分析技术目前也分为几种。

1.1 规则匹配

说白了就是根据指定的规则扫描代码中的问题。

比如在PHP Kohana框架内,是有封装好统一的取参数的方法,并且经过安全过滤的。而可能出现的情况是新来的研发人员不熟悉导致使用了PHP内置的 $_GET / $_POST ,从而导致XSS,这时就可以使用 $_GET / $_POST 作为规则,找出源码中所有出现这些函数的地方。

这种方式也是很多白帽审计代码时用到的,虽然很直接了当,但是误报会比较多。

1.2 代码解析法

通过解析代码的语法,分析出代码执行流程。

1.3 数据流转分析

通过Fuzz输入数据,跟踪数据流转,来判断是否存在风险。

2. 动态审计

通过运行需要审计的代码,跟踪数据的流转来判断系统中是否存在漏洞。

我们一开始只打算扫我们关心的漏洞类型:高危文件、高危函数以及常规Web漏洞。

所以我们第一个版本只做静态审计中的 规则匹配法 ,关于误报问题我们在实际扫描中采用了多种方式进行改进,确保误报率在5%以下。

企业应该在什么环节加入代码审计?1. 代码提交时

代码提交时检测问题是最忌时机,具体可以通过hook svn或git的commit来扫描提交的代码。

优点:及时

缺点:影响提交效率

2. 代码提交后

通过设置定时任务在凌晨进行有规律的代码审计,结果通过邮件或BUG系统同步给提交人。

优点:不影响代码提交

缺点:可能代码已经上线才扫到问题

3. 代码发布时

代码发布前的测试环境进行扫描,上线前必须已经扫描完毕并且没有高危漏洞。

优点:不会出现代码已经上线才扫到问题,确保所有上线代码都经过扫描

缺点:发现的不及时

企业可以先接入在 代码发布时 ,通过设置 定时任务扫描 来保证及时性和线上代码的覆盖率。

通过我们实际使用感受,发现还有更多用法:

1. 用来判断新漏洞的影响

比如用来判断ImageMagick在公司所有项目中的影响,我们就可以通过设置扫描规则来扫描公司所有项目,看哪些项目有调用ImageMagick并且没有可以利用的。

2. 用来检测明显代码逻辑问题

开发人员不小心将==写成=,造成逻辑问题,甚至可能引发安全问题。

或者是少些了结束的分号,但测试没有覆盖到,导致线上5xx。

这些问题也可以通过代码审计发掘出来。

还有其它更多的使用技巧,后续再慢慢补充...

目前项目进展

目前第一个版本已经上线运行,人工核查后发现扫描结果还是很不错的。

为了填补这块的空白,也为了让更多企业用上并减少安全问题,所以将代码开源到Github上,所有企业可以免费试用。

项目名称:Cobra(眼镜蛇)

项目地址: https://github.com/wufeifei/cobra (Github Wiki内有详细项目介绍)

项目状态:

2016-08-06:

目前无需人工干预能稳定扫描公司内所有项目并输出审计报告,同时保持低误报率。