English/英文

【代码审计】避坑系列:代码审计的四大误区
2018-03-22
[摘要] 企业安全规划建设过程中,往往会涉及到开发的代码安全,而更多可以实现落地的是源代码安全审计中,使用自动化工具代替人工漏洞挖掘,并且可以交付给研发人员直接进行安全自查
企业安全规划建设过程中,往往会涉及到开发的代码安全,而更多可以实现落地的是源代码安全审计中,使用自动化工具代替人工漏洞挖掘,并且可以交付给研发人员直接进行安全自查,同时也更符合SDL的原则,此外可以显著提高审计工作的效率。贯穿于软件生命周期的代码安全审计,大抵多数人还是会有理解上的误区,而造成工作上的困扰,本期时代新威为您科普代码安全审计的四大误区。

代码安全审计的四大误区

误区一、代码安全审计就是漏洞挖掘

误区一、代码安全审计就是漏洞挖掘

一提到代码安全审计,大家首先想到的就是可以从代码中找到各种各样的安全漏洞。所以很多软件开发人员或者管理人员都想用代码安全审计工具这种“神器”,一下子就能挖掘出很多新的、未知的“漏洞”。

这是误区之一。代码安全审计工具虽然它可以发现程序中潜在的安全漏洞,但并不能算作是漏洞挖掘工具,特别是对于没有较强安全知识和渗透攻击知识的开发人员来说,代码安全审计工具就是安全编码的辅助工具。

从字面上就可以理解到“代码审计”——英文“Code Review”,它只是对代码安全性的复查、审查,查看程序编写是否符合相关要求和编程规范,是程序员的一种自查方式。代码安全审计工具也只是用自动化的工具去代替了人工审查而已。而对于那些有较强安全知识和丰富渗透攻击经验的“黑客”们来说,代码安全审计工具又能看作是他们“攻击”的辅助工具。这是因为他们常常可以利用代码安全审计工具查找出来的“蛛丝马迹”来找到那些深藏在代码深处的“0-day”或“获root级权限”的安全漏洞。所以我们可以看到有很多渗透攻击的大牛们,也纷纷编写一些小的、很实用的代码审计工具来查找漏洞的原因。但我还是要说,代码安全审计工具对于开发人员来说,不能作为漏洞挖掘工具来用,不然你就会陷入第二个重大误区。

误区二、代码安全审计工具都会很高的误报率


误区二、代码安全审计工具都会很高的误报率
 
这是一个很大的误区,这个误区就是上文的第一个误区的延伸,很多用户或者开发人员常常抱怨代码安全审计工具的误报率很高,因为检测出来的漏洞大部分都不能被直接利用或者被渗透验证。

当用户把代码安全审计工具作为漏洞挖掘工具时就会产生。原因是代码安全审计工具是以静态的方式在程序中查找所有可能存在的安全漏洞特征,这些特征表面上就是我们不安全的编码方式,或者说是不安全的编程习惯,这些方式是产生安全漏洞的必要条件,但不是绝对条件,不能用渗透的方式来验证和证明。打个形象的比喻就是:“人人都知道吸烟有害健康,吸烟会导致呼吸道疾病或者肺癌,但我们不能证明某人吸烟后就一定会得肺癌。”所以我总结:代码安全审计的主要宗旨就是在编码环节,以(自我)审计的方式去尽量减少和消除这些不安全的编码方式和编码习惯,确保不会有安全漏洞的产生。这个宗旨就告诉开发人员在编码的时候,把所有不好的、不安全的编码方式规避掉,尽量以正确的方式,来编写出安全的程序。

当代码安全审计工具辅助开发人员发现了这些不好的编码方式时,我们不必要去纠结它是否能够被利用或者被渗透验证。而是用最简单、最直接、成本最低的方式把它消除掉就OK了。这也是SDLC开发模式所倡导的“在软件开发每一个环节中来避免安全漏洞的产生”的安全开发理念。当我们以帮助开发人员在代码中查找和消除所有不好的、不安全的编码方式为目标的时候,代码安全审计工具的所谓误报率就变得很小、很小了。 

误区三、代码安全审计应该由专业的人员来干

 
误区三、代码安全审计应该由专业的人员来干
 
这是误区之三。代码安全审计工作并不是仅仅交给“专业的人员”来干。这个误区主要是存在于管理人员对软件安全开发理念上的误区。

代码安全审计是软件安全开发的其中一个环节,代码安全审计如果想要有很好的效果,就一定要开发人员从开发意识上和编码习惯上有所改变,如果只是把代码安全审计交由安全测试人员,甚至是外包的安全测试团队来干的话,效果一定是不好的。而往往管理人员会受到“专业的事由专业的人员干”思想的影响,把代码安全审计工作只交给安全人员来做,甚至以服务的方式将其外包给安全服务团队来做,这样做就真的只是“代码安全审计”了(代码安全审计=代码安全测试+代码安全开发),就把安全编码“最专业”的开发人员给排除在外了,把安全漏洞审计与安全开发相对孤立起来了,效果怎么会好得了呢?

误区四、代码安全审计越全面越好

 
误区四、代码安全审计越全面越好

当代码安全审计工作在企业中执行的时候,管理人员或者安全负责人员又会受“从代码层面杜绝一切安全漏洞的产生”这样的理想主义的影响,而采取较“左”的思想。希望开发人员将全部的不安全编码特征全部解决掉,这样又陷入了一个误区。
代码安全审计也不是越全面越好,也要追求开发与安全的平衡,因为代码安全审计会给开发人员带来知识上的挑战和一定的工作量,开发人员如果一开始就受到太多安全漏洞特征和安全编码的约束时,很可能产生逆反心理,不与配合,甚至以“各种理由”搪塞拒改,这样就很难开展工作,即使在“强行手段”下不得不配合,也会在修改时百般变通,能逃则避。
 
互联网发展迅猛,绝大多数企业的运作都需要网络进行支撑,一旦受到攻击,其遭受的影响很可能是雪崩式的。时代新威提醒各位定期进行代码审计和渗透测试可以让企业的安全风险从“外”到“内”降到最低,使企业不再惧怕漏洞的爆发以及黑客的攻击。