代码审计服务技术白皮书v11.docx
《代码审计服务技术白皮书v11.docx》由会员分享,可在线阅读,更多相关《代码审计服务技术白皮书v11.docx(11页珍藏版)》请在冰豆网上搜索。
代码审计服务技术白皮书v11
专业服务技术白皮书
代码审计服务
版本
说明
2012/5/21
V1.0
文档创建、丰富内容
1.概述1
1.1基本概念1
1.2代码审计与模糊测试1
1.3服务的必要性1
1.4客户收益1
2.服务的实施标准和原则2
2.1政策文件或标准2
2.2服务原则2
3.XXXX代码审计服务3
3.1服务范围3
3.2服务分类3
3.2.1整体代码审计和功能点人工代码审计3
3.2.2单次服务和年度服务3
3.3服务流程4
3.4服务特点5
3.5服务报,告6
3.6服务注意事项6
4.代码审计方法论6
4.1代码检查技术6
4.1.1源代码设计7
4.1.2错误处理不当7
4.1.3直接对象引用7
4.1.4资源滥用8
4.1.5API滥用8
4.2应用代码关注要素8
4.2.1跨站脚本漏洞8
4.2.2跨站请求伪装漏洞9
4.2.3SQL注入漏洞9
4.2.4命令执行漏洞9
4.2.5日志伪造漏洞9
4.2.6参数篡改9
4.2.7密码明文存储9
4.2.8配置文件缺陷10
4.2.9路径操作错误10
4.2.10资源管理10
4.2.11不安全的Ajax调用10
4.2.12系统信息泄露10
4.2.13调试程序残留10
5.相关工具11
5.1信息收集工具11
5.2静态分析工具11
5.3源码提取工具11
6.为什么选择XXXX11
概述
1.1基本概念
代码审计(CodeReview)是由具备丰富编码经验并对安全编码原则及应用安全具有深刻理解的安全服务人员对系统的源代码和软件架构的安全性、可靠性进行全面的安全检查。
代码审计服务的目的在于充分挖掘当前代码中存在的安全缺陷以及规范性缺陷,从而让开发人员了解其开发的应用系统可能会面临的威胁,并指导开发人员正确修复程序缺陷。
1.2代码审计与模糊测试
在漏洞挖掘过程中有两种重要的漏洞挖掘技术,分别是代码审计和模糊测试(Fuzzing)。
代码审计是通过静态分析程序源代码,找出代码中存在的安全性问题;而模糊测试则需
要将测试代码执行起来,然后通过构造各种类型的数据来判断代码对数据的处理是否正常,以发现代码中存在的安全性问题。
由于采用的分析方法不同,这两项技术的应用场所也有所不同。
代码审计常用于由安全厂商或企业的安全部门发起的代码安全性检查工作;模糊测试则普遍用于软件开发和测试部门的程序测试。
1.3服务的必要性
实践证明,程序的安全性是否有保障很大程度上取决于程序代码的质量,而保证代码质量最快捷有效的手段就是代码审计。
在风险评估过程中,代码审计是一般脆弱性评估的一种很好的补充,xxxx代码审计服务
的代码覆盖率为100%,能够找到一些安全测试所无法发现的安全漏洞。
同时,由于主持代码审计的安全服务人员一般都具备丰富的安全编码经验和技能,所以其针对性比常见的脆弱性评估手段会更强、粒度也会更为细致。
1.4客户收益
对于客户而言,代码审计可以带来以下收益:
明确安全隐患点
代码审计能够对整个信息系统的所有源代码进行检查,从整套源代码切入最终明至某个威胁点并加以验证,以此明确整体系统中的安全隐患点。
提高安全意识
如上所述,任何的隐患在代码审计服务中都可能造成“千里之堤溃于蚁穴”的效果,
因此代码审计服务可有效督促管理人员杜绝任何一处小的缺陷,从而降低整体风险。
提高开发人员安全技能
在代码审计服务人员与用户开发人员的交互过程中,可提升开发人员的技能。
另外,
通过专业的代码审计报告,能为用户开发人员提供安全问题的解决方案,完善代码安全开发规范。
服务的实施标准和原则
2.1政策文件或标准
xxxx代码审计服务将参考下列规范进行工作。
OWASPTOP10
CWE/SANSTOP25
ASP/ASP.NET/PHP/JSP安全编码规范
xxxx代码审计最佳实践
xxxx安全服务工作规范、代码审计实施规范
2.2服务原则
xxxx在提供代码审计服务中,将遵循下列原则。
保密性原则
保密性原则是代码审计服务中最重要的原则,它是鼓励客户实施代码审计服务的心理基础,同时也是对客户的人格及隐私权的最大尊重。
代码审计的保密范围,包括客户提供源代码和相关技术文档的保密性以及输出成果的保密性。
对服务过程中获知的任何客户系统及源代码的信息均属秘密信息,不得泄露给第三方单位或个人,不得利用这些信息进行任何侵害客户的行为;对服务的报告提交不得扩散给XX的第三方单位或个人。
规范性原则
xxxx代码审计服务将按照安全服务工作规范、代码审计实施规范进行严格落实。
实施必须由专业的安全服务人员依照规范的操作流程进行,对操作过程和结果要有相应的记录,提供完整的服务报告。
3.xxxx代码审计服务
3.1服务范围
xxxx代码审计服务的范围包括使用ASP、ASP.NET(VB/C#)、JSP(JAVA)、PHP等主流语言开发的B/S应用系统、使用C++、JAVA、C#、VB等主流语言开发的C/S应用系统,以及使用XML语言编写的文件、SQL语言和数据库存储过程等。
3.2服务分类
3.2.1整体代码审计和功能点人工代码审计
整体代码审计是指代码审计服务人员对被审计系统的所有源代码进行整体的安全审计,
代码覆盖率为100%,整体代码审计采用源代码扫描和人工分析确认相结合的方式进行分析,发现源代码存在的安全漏洞。
但整体代码审计属于白盒静态分析,仅能发现代码编写存在的安全漏洞,无法发现业务功能存在的缺陷。
功能点人工代码审计是对某个或某几个重要的功能点的源代码进行人工代码审计,发现功能点存在的代码安全问题。
功能点人工代码审计需要收集系统的设计文档、系统开发说明书等技术资料,以便代码审计服务人员能够更好的了解系统业务功能。
由于人工代码审计工作量极大,所以需要分析并选择重要的功能点,有针对性的进行人工代码审计。
3.2.2单次服务和年度服务
单次服务是指xxxx一次性为客户的被审计系统提供代码审计服务,服务完成后提交代码审计报告并指导客户进行问题修复。
单次服务仅能够发现目前源代码中可能存在的各种安全问题,对于系统后续开发产生的安全问题无能为力。
年度服务是指xxxx以一定的时长(可以是半年、年等)为单位向客户提供有限次数(每月/双月/季度/半年)的代码审计服务,每次代码审计均会提供详细的代码审计报告。
年度服务能够持续跟进系统的安全情况,在服务期限内最大限度保证系统的安全。
3.3服务流程
xxxx代码审计服务主要分为四个阶段,包括代码审计前期准备阶段、代码审计阶段实施、复查阶段实施以及成果汇报阶段:
前期准备阶段
在实施代码审计工作前,技术人员会和客户对代码审计服务相关的技术细节进行详细沟通。
由此确认代码审计的方案,方案内容主要包括确认的代码审计范围、最终对象、审计方式、审计要求和时间等内容。
代码审计阶段实施
在代码审计实施过程中,xxxx代码审计服务人员首先使用代码审计的扫描工具对源代码进行扫描,完成初步的信息收集,然后由人工的方式对源代码扫描结果进行人工的分析和确认。
根据收集的各类信息对客户要求的重要功能点进行人工代码审计。
结合自动化源代码扫描和人工代码审计两方的结果,代码审计服务人员需整理代码审计服务的输出结果并编制代码审计报告,最终提交客户和对报告内容进行沟通。
复测阶段实施
经过第一次代码审计报告提交和沟通后,等待客户针对代码审计发现的问题整改或加固。
经整改或加固后,代码审计服务人员进行回归检查,即二次检查。
检查结束后提交给客户复查报告和对复查结果进行沟通。
成果汇报阶段
根据一次代码审计和二次复查结果,整理代码审计服务输出成果,最后汇报项目领导。
3.4服务特点
全程化服务,有效保证服务质量
xxxx可以为客户提供约定期限内的全程化代码审计服务。
服务的过程不仅仅是帮助客户发现问题,也会为客户的问题修补提供专业的建议和指导,做到问题发现、修补、验证的全程跟踪,每一次服务都会在前一次的基础上寻找新的突破口,力求最大程度地保证审计目标的安全。
专家级解决方案,一切以解决问题为目标
xxxx有着专业的安全服务团队,团队成员无论是在风险评估、安全加固、渗透测试,还是在代码审计等领域均有着丰富的经验,所有问题的解决方案均由团队成员根据多年经验总结而来,方案确实可行。
降低成本,节省投资
在xxxx为客户打造的年度服务方案中,服务人员第一次代码审计的结果将会成为后续审计服务的参考依据,避免了单次服务中每次都会为某一特定问题所累,节省了审计时间,同时也降低了客户在每个阶段的投入。
3.5服务报告
在审计工作完成后两个工作日内,xxxx审计人员将出示一份代码审计报告。
在报告中,审计人员将会根据审计结果针对源代码中的每个安全弱点进行详细描述,描述内容至少包括安全弱点所在的代码页名、代码行数、问题代码片段以及弱点可能导致的安全问题等。
除此之外,审计人员还将针对各种具体的安全弱点提供解决方案和相关的安全建议,为管理/开发人员的维护和问题修补工作提供参考。
3.6服务注意事项
为避免风险的产生,代码审计工作通常不会在生产或测试服务器上进行。
客户需要提供源代码或存储源代码的计算机载体。
代码审计服务人员会将一些代码审计工具安装在存储源代码的计算机载体中,在完成代码审计后卸载这些工具,以保护客户资产。
在代码审计过程中,确定代码审计服务人员和客户方配合人员的联系方式,便于及时沟通并解决服务过程中的各类问题。
4.代码审计方法论
4.1代码检查技术
代码检查是代码审计工作中最常使用的一种技术手段。
代码检查可以由人工进行,也可
以借助代码检查工具自动进行。
在实际应用中,通常采用“自动分析+人工验证”的方式进行。
代码检查的目的在于发现代码本身存在的问题,如代码对标准的遵循、可读性,代码的逻辑表达的正确性,代码结构的合理性等方面。
通过分析,可以发现各种违背程序编写标准的问题,主要包括以下几类。
4.1.1源代码设计
源代码设计问题通常来源于程序设计之初,例如代码编写工具的使用等。
在这方面的审计主要是分析代码的系统性和约束范围,主要从下面的几个方面进行:
不安全的域
不安全的方法
不安全的类修饰符
未使用的外部引用
未使用的代码
4.1.2错误处理不当
这类问题的检查主要是通过分析源代码了解程序在管理错误、异常、日志记录以及敏感信息等方面是否存在缺陷。
如果程序处理这类问题不当,最可能的问题是将敏感信息泄露给攻击者,从而可能导致危害性后果。
这类问题主要体现在以下几个方面:
程序异常处理
返回值用法
空指针
日志记录
4.1.3直接对象引用
直接对象引用意指在引用对象时没有进行必要的校验,从而可能导致被攻击者利用。
通过代码检查,审计人员可以分析出程序是否存在直接对象引用以及相应的对象引用是否安全。
直接独享引用问题主要有以下几类:
直接引用数据库中的数据
直接引用文件系统
直接引用内存空间
4.1.4资源滥用
资源滥用是指程序对文件系统对象、CPU、内存、网络带宽等资源的不恰当使用。
资源
使用不当可能导致程序效率降低,遭受拒绝服务攻击的影响。
代码检查中,审计人员将会根据编码规范分析代码中对各种资源的引用方法进行分析,发现其中可能导致资源过度占用方面的问题。
资源占用方面的问题主要有以下几类:
不安全的文件创建、修改和删除
竞争冲突
内存泄露
不安全的过程创建
4.1