代码安全审计工作之我见

2020-06-10 07:50
科技传播 2020年9期
关键词:漏洞基线代码

在笔者从事软件测评领域工作的15 年里,积累了大量的实践工作经验。在此跟大家分享对代码安全审计工作的一些经验。

1 代码安全审计介绍

说到代码安全审计,首先要了解这项工作的内容和意义。代码安全审计工作就是调查分析软件系统的业务和技术需求,自动或者人工分析软件的代码,发现代码之中的安全漏洞。以避免代码中存在的安全漏洞在系统上线后被黑客或者恶意攻击者所利用,实施诸如数据篡改、信息盗取、身份假冒、拒绝服务、抵赖、权限提升等攻击,给软件系统及用户带来巨大损失。所以代码安全审计工作还是非常重要且必要的。

2 代码安全审计要素

代码安全审计工作主要有5 个关键因素:人、技术、策略、工具和流程[1]。

1)人。人是指具备软件安全开发技术能力和知识的工程师,应具备软件安全知识和分析方法的丰富经验,这样才能准确有效地使用专业工具,排除误报、定位漏洞。

2)技术。技术是指被测目标系统所涉及的技术,包括语言、框架、封装、业务流程等。当然这部分技术也应该是第一关键因素——人所应具备的。

3)策略。策略是指进行代码安全审计时所选择的合适的策略。在实践工作中,我们会利用专业的代码安全审计工具结合有经验的工程师共同排查常见的代码安全隐患,包括:审计和日志(Auditing and Logging)、认证(Authentication)、授权(Authorization)、通讯安全(Communication Security)、数据访问(Data Access)、部署考虑(Deployment Consideration)模拟、错误处理(Error Handling)、委托(Impersonnation and Delegation)、输入和数据验证(Input and Data Validation)、参数操纵(Parameter Manipulation)、敏感数据(Sensitive Data)和会话管理(Session Management)等。如图1 所示:

图1

这里以使用DMSCA 扫描JAVA 开源框架为例:如图2 所示。

图2

通过工具扫描,我们发现此开源框架存在大量各级风险等级的安全漏洞。那么,安全扫描的规则又是如何制定的呢?

既然是“安全审计”,当然要遵循各类安全标准[2],比如,PCI DSS 第三方支付行业数据安全标准、HIPAA 健康保险携带和责任法案、FISMA 联邦信息安全管理法案、BSIMM 软件安全构建成熟度模型等国际通用标准模型,以及GB/T 20945-2013 信息安全技术 信息系统安全审计产品技术要求和测试评价方法、GB/T 34943-2017 CC++语言代码漏洞测试规范、GB/T 34944-2017 Java 语言代码漏洞测试规范、GB/T 34946-2017 C#语言代码漏洞测试规范等国家标准,除此之外还有语言最佳编码实践标准以及架构设计标准等[3]。这些就是我们讲的策略。

4)工具。出于我国近年日益重视的信息系统安全问题和面临的风险考虑,建议选取我国代码安全审计厂商自主研发的国产工具。

5)流程。第一步 确定代码安全审计的目标。使用威胁模型(如果可用)导出目标,再理解架构、技术和需求导出目标。第二步 执行初步扫描并分析安全问题结果。使用静态分析工具或者轻量级的人工审查来寻找应用程序中最应当需要查找的安全问题,如缓冲区溢出、跨站点脚本,SQL 注入等,初始扫描使我们能够优先考虑风险最高的区域[4]。第三步 审查应用程序的架构所特有的代码安全问题。最终审查用于调查本应用程序架构所特有的问题,一般表现为威胁建模或安全特征中出现的威胁,如自定义身份验证或授权程序等。

3 代码安全审计后期活动

完成所有步骤的安全代码审查流程后,应该执行审查后期活动,这样可以提高应用程序的安全性及发现的漏洞的修复成功率。

后期活动包括:

1)已知bug 的优先级排序。应基于该bug 可能对您的客户产生的影响大小确定优先次序,并评估潜在的最大损害以及您的哪些客户可能会受到影响。

2)修复正确bug。众所周知,对一个bug 进行修复后可能会引入一个新的bug。有时,已知bug的危险性比未知bug 要小。所以就要评价是否针对此类bug 进行修复。

3)从错误中学习。与团队保持持续对话,探讨错误是如何被犯下、被发现及被修复的。努力编写清洁代码,力求一次性通过审查。

完成了代码审计工作后,会得到一系列可交付成果。实践中是以代码审计报告作为交付物的。其中代码评估的目标文档描述了这些内容:针对黑客有兴趣的资产、代码实现上的错误,这些错误将危及那些资产的安全,以及那在使用的技术和编程语言中的常见错误;针对每一个已经识别漏洞的报告,包括所发现漏洞的概述、影响和严重性以及再现该漏洞的步骤和可用于修复该漏洞缺限的补救措施建议;安全代码评估报告详细说明风险评估结果、成果和整体印象、审查期间发现的问题、进行额外审查的建议,以及针对已确定漏洞进行补救的建议。

4 几点建议

除此之外,笔者对准备开展代码审计工作的机构或个人有几点建议:

1)组建服务团队。挑选具有软件开发经验的员工组建代码安全审计服务团队。

2)技术学习培训。提高服务团队软件安全开发和编码能力,深入了解软件开发过程中涉及的各种工具、技术、安全知识和安全编码最佳实践及标准。

3)制定标准和基线。参考标准和合规要求,及服务目的,制定测评机构的通用代码安全审计服务标准和基线模版,指导后期具体项目服务测试标准和验收条件。

4)确定服务模式。既实施环境,一般包括现场、在线、离线、按照项目或按照时间等。

5)选择合适的工具或平台。扫描分析工具能最大化满足代码安全审计服务标准和基线要求和服务模式要求,并能够根据需要调整基线和增加安全规则和策略。集成基线和策略到工具平台。

5 结束语

本文针代码安全审计工作如何开展及要素进行了详细介绍,并分享了开展工作的几点建议,希望能够对广大从业者有所参考。

猜你喜欢
漏洞基线代码
漏洞
适用于MAUV的变基线定位系统
航天技术与甚长基线阵的结合探索
创世代码
创世代码
创世代码
创世代码
一种改进的干涉仪测向基线设计方法
三明:“两票制”堵住加价漏洞
漏洞在哪儿