Cobra - 代码安全审计系统
为什么我们需要一款代码审计系统?
公司越来越大,开发人员也越来越多。每个研发人员的安全素质都不一样,虽然在公司核心项目上可以采取 框架层安全防护 ,但各类新项目太多,无法做到每个项目都使用相同框架,都去集成安全组件。
所以对于公司所有的项目必须有一道防护来保障基本安全,代码安全审计即可作为这一道安全手段。
业内调研
目前业内已经有很多款代码审计工具了
名称是否开源
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:
目前无需人工干预能稳定扫描公司内所有项目并输出审计报告,同时保持低误报率。