YS安全源代码审计策略和案例分析
1、前言:
一般来说,白帽子或开发人员都清楚一条安全开发原则:一切外部输入数据都是不可信的!就是说所有的外部输入数据在使用前都应该经过有效性验证。所谓的外来数据包括但不限于:网络数据、文件IO数据、终端输入数据和环境变量等等。本案例并没有特别不一样的地方,同样是由于未对外来数据进行校验导致的问题,但本案例并非在于说明漏洞本身,而在于强调作为甲方公司的白帽子和第三方白帽子在审计源代码时的一些区别,鄙人认为两者之间应当存在如下重要区别:
(1)、第三方白帽子的源码审计活动一般聚焦于寻找真实存在的漏洞。因为一般只有这样子,才会更容易被受审计的公司接受,而且白帽子也更加具有成就感和存在感。
(2)、甲方公司的白帽子则应当更加聚焦于审计开发人员是否按照当初的安全设计来实现,是否遵循安全开发规范来进行开发!
如此进行区分,理由如下:
(1)、通过源代码寻找漏洞本身需要消耗非常大的投入,甚至对审计人员有非常高的要求。比如,某产品对外来数据进行了非常复杂的黑名单过滤,那么,对于水平一般的白帽子可能很难找出一个绕过该黑名单的并证明漏洞存在的方法,但对于高水平白帽子是完全有可能的。
(2)、通过源代码寻找漏洞本身是一种短视的行为。同样地,即便当前高水平白帽也找不到绕过当前黑名单过滤规则的方法,但随着技术更新迭代,产品特性也不断变化,某天就可能出现新的绕过的方法,这相当于留下了一个未知的隐患。
(3)、通过源代码审计安全开发规范消耗则要少很多,只需要审计人员熟悉安全开发规范即可。比如:当审计人员发现未使用白名单的方式过滤外来数据,那么可以直接判定无法通过审计,审计人员也无需耗费脑力去寻找一个明显存在的安全漏洞。
(4)、通过源代码审计安全开发规范是一种长期有效的方式。比如:白名单方式可以预防很多将来未知的黑名单绕过方式,相当于一次性做好。此外,通过检查安全开发规范能够不断提升开发人员遵循安全开发规范的意识,可以让开发人员意识到,只要遵循了规范就不会产生安全问题,也同样减少了开发人员在安全领域的投入精力。
2、案例分析:
2.1、简介
YS使用第三方的IP位置查询系统定位用户的登录地点,当发现用户登录地点异常时,将提示用户登录异常,同时也方便用户查询过去的登录记录,满足用户的安全需求。
2.2、风险分析:
通过对源代码进行审计,我们发现后台处理逻辑并没有对第三方的查询结果进行有效性验证,而后直接将查询结果插入数据库,这里可能存在2个问题:
(1)、第三方系统可能遭受攻击,导致查询数据被嵌入恶意数据。比如,如果查询结果嵌入了恶意的JS代码,那么当用户登录时,YS直接将恶意代码从数据库读取并返回给浏览器,就有可能导致存储型XSS攻击。
(2)、未来新开发的应用面临同样威胁。即便当前存在数据库中的恶意数据并未被任何应用使用而未导致任何安全问题,但我们无法预测未来新开发的应用是否会使用到该数据而导致新的安全问题,因此实际上是存在一种未知的安全隐患。
可以看到,虽然开发人员违反了“外来输入数据必须经过有效性验证”的安全开发原则,但是当前并没有造成任何实际的安全问题,以上2点均只属于一种安全隐患预测,但这种预测往往容易被第三方白帽子忽视掉,或者说被审计的公司并不能接受如此虚而不实的结果,但对于甲方公司来讲,这才是一种长期有效的安全审计策略。