1、专业服务技术白皮书代码审计服务版本变更记录时间 版本 说明 修改人2012/5/21 V1.0 文档创建、丰富内容 专业服务部- I -目录一. 概述 .11.1 基本概念 .11.2 代码审计与模糊测试 .11.3 服务的必要性 .11.4 客户收益 .2二. 服务的实施标准和原则 .22.1 政策文件或标准 .22.2 服务原则 .2三. XXXX 代码审计服务 .33.1 服务范围 .33.2 服务分类 .33.2.1 整体代码审计和功能点人工代码审计 33.2.2 单次服务和年度服务 43.3 服务流程 .43.4 服务特点 .53.5 服务报告 .63.6 服务注意事项 .6四. 代
2、码审计方法论 .74.1 代码检查技术 .74.1.1 源代码设计 74.1.2 错误处理不当 74.1.3 直接对象引用 84.1.4 资源滥用 84.1.5 API 滥用 84.2 应用代码关注要素 .94.2.1 跨站脚本漏洞 94.2.2 跨站请求伪装漏洞 94.2.3 SQL 注入漏洞 94.2.4 命令执行漏洞 94.2.5 日志伪造漏洞 94.2.6 参数篡改 104.2.7 密码明文存储 104.2.8 配置文件缺陷 104.2.9 路径操作错误 104.2.10 资源管理 104.2.11 不安全的 Ajax 调用 .104.2.12 系统信息泄露 11- II -4.2.1
3、3 调试程序残留 11五. 相关工具 .115.1 信息收集工具 .115.2 静态分析工具 .115.3 源码提取工具 .12六. 为什么选择 XXXX12- 1 -一. 概述1.1 基本概念代码审计(Code Review)是由具备丰富编码经验并对安全编码原则及应用安全具有深刻理解的安全服务人员对系统的源代码和软件架构的安全性、可靠性进行全面的安全检查。代码审计服务的目的在于充分挖掘当前代码中存在的安全缺陷以及规范性缺陷,从而让开发人员了解其开发的应用系统可能会面临的威胁,并指导开发人员正确修复程序缺陷。1.2 代码审计与模糊测试在漏洞挖掘过程中有两种重要的漏洞挖掘技术,分别是代码审计和模
4、糊测试(Fuzzing)。代码审计是通过静态分析程序源代码,找出代码中存在的安全性问题;而模糊测试则需要将测试代码执行起来,然后通过构造各种类型的数据来判断代码对数据的处理是否正常,以发现代码中存在的安全性问题。由于采用的分析方法不同,这两项技术的应用场所也有所不同。代码审计常用于由安全厂商或企业的安全部门发起的代码安全性检查工作;模糊测试则普遍用于软件开发和测试部门的程序测试。1.3 服务的必要性实践证明,程序的安全性是否有保障很大程度上取决于程序代码的质量,而保证代码质量最快捷有效的手段就是代码审计。在风险评估过程中,代码审计是一般脆弱性评估的一种很好的补充,xxxx 代码审计服务的代码覆
5、盖率为 100%,能够找到一些安全测试所无法发现的安全漏洞。同时,由于主持代码审计的安全服务人员一般都具备丰富的安全编码经验和技能,所以其针对性比常见的脆弱性评估手段会更强、粒度也会更为细致。- 2 -1.4 客户收益对于客户而言,代码审计可以带来以下收益: 明确安全隐患点代码审计能够对整个信息系统的所有源代码进行检查,从整套源代码切入最终明至某个威胁点并加以验证,以此明确整体系统中的安全隐患点。 提高安全意识如上所述,任何的隐患在代码审计服务中都可能造成“千里之堤溃于蚁穴”的效果,因此代码审计服务可有效督促管理人员杜绝任何一处小的缺陷,从而降低整体风险。 提高开发人员安全技能在代码审计服务人
6、员与用户开发人员的交互过程中,可提升开发人员的技能。另外,通过专业的代码审计报告,能为用户开发人员提供安全问题的解决方案,完善代码安全开发规范。二. 服务的实施标准和原则2.1 政策文件或标准xxxx 代码审计服务将参考下列规范进行工作。 OWASP TOP 10 CWE/SANS TOP 25 ASP/ASP.NET/PHP/JSP 安全编码规范 xxxx 代码审计最佳实践 xxxx 安全服务工作规范、代码审计实施规范 2.2 服务原则xxxx 在提供代码审计服务中,将遵循下列原则。 保密性原则保密性原则是代码审计服务中最重要的原则,它是鼓励客户实施代码审计服务的心理基础,同时也是对客户的人
7、格及隐私权的最大尊重。代码审计的保密范围,包括客户提供源代- 3 -码和相关技术文档的保密性以及输出成果的保密性。对服务过程中获知的任何客户系统及源代码的信息均属秘密信息,不得泄露给第三方单位或个人,不得利用这些信息进行任何侵害客户的行为;对服务的报告提交不得扩散给未经授权的第三方单位或个人。 规范性原则xxxx 代码审计服务将按照安全服务工作规范、代码审计实施规范进行严格落实。实施必须由专业的安全服务人员依照规范的操作流程进行,对操作过程和结果要有相应的记录,提供完整的服务报告。三. xxxx 代码审计服务3.1 服务范围xxxx 代码审计服务的范围包括使用 ASP、ASP.NET(VB/C
8、#)、JSP (JAVA )、PHP等主流语言开发的 B/S 应用系统、使用 C+、JAVA、C#、VB 等主流语言开发的 C/S 应用系统,以及使用 XML 语言编写的文件、SQL 语言和数据库存储过程等。3.2 服务分类3.2.1 整体代码审计和 功能点人工代码审计整体代码审计是指代码审计服务人员对被审计系统的所有源代码进行整体的安全审计,代码覆盖率为 100%,整体代码审计采用源代码扫描和人工分析确认相结合的方式进行分析,发现源代码存在的安全漏洞。但整体代码审计属于白盒静态分析,仅能发现代码编写存在的安全漏洞,无法发现业务功能存在的缺陷。功能点人工代码审计是对某个或某几个重要的功能点的源
9、代码进行人工代码审计,发现功能点存在的代码安全问题。功能点人工代码审计需要收集系统的设计文档、系统开发说明书等技术资料,以便代码审计服务人员能够更好的了解系统业务功能。由于人工代码审计工作量极大,所以需要分析并选择重要的功能点,有针对性的进行人工代码审计。- 4 -3.2.2 单次服务和年度服务单次服务是指 xxxx 一次性为客户的被审计系统提供代码审计服务,服务完成后提交代码审计报告并指导客户进行问题修复。单次服务仅能够发现目前源代码中可能存在的各种安全问题,对于系统后续开发产生的安全问题无能为力。年度服务是指 xxxx 以一定的时长(可以是半年、年等)为单位向客户提供有限次数(每月/双月/
10、季度/半年)的代码审计服务,每次代码审计均会提供详细的代码审计报告。年度服务能够持续跟进系统的安全情况,在服务期限内最大限度保证系统的安全。3.3 服务流程xxxx 代码审计服务主要分为四个阶段,包括代码审计前期准备阶段、代码审计阶段实施、复查阶段实施以及成果汇报阶段: 前期准备阶段在实施代码审计工作前,技术人员会和客户对代码审计服务相关的技术细节进行详细沟通。由此确认代码审计的方案,方案内容主要包括确认的代码审计范围、最终对象、审计方式、审计要求和时间等内容。 代码审计阶段实施在代码审计实施过程中,xxxx 代码审计服务人员首先使用代码审计的扫描工具对源代码进行扫描,完成初步的信息收集,然后
11、由人工的方式对源代码扫描结果进行人工的分析和确认。根据收集的各类信息对客户要求的重要功能点进行人工代码审计。结合自动化源代码扫描和人工代码审计两方的结果,代码审计服务人员需整理代码审计服务的输出结果并编制代码审计报告,最终提交客户和对报告内容进行沟通。 复测阶段实施经过第一次代码审计报告提交和沟通后,等待客户针对代码审计发现的问题整改或加固。经整改或加固后,代码审计服务人员进行回归检查,即二次检查。检查结束后提交给客户复查报告和对复查结果进行沟通。 成果汇报阶段根据一次代码审计和二次复查结果,整理代码审计服务输出成果,最后汇报项目领导。- 5 -图 3.1 代码审计服务流程3.4 服务特点 全
12、程化服务,有效保证服务质量xxxx 可以为客户提供约定期限内的全程化代码审计服务。服务的过程不仅仅是帮助客户发现问题,也会为客户的问题修补提供专业的建议和指导,做到问题发现、修补、验证的全- 6 -程跟踪,每一次服务都会在前一次的基础上寻找新的突破口,力求最大程度地保证审计目标的安全。 专家级解决方案,一切以解决问题为目标xxxx 有着专业的安全服务团队,团队成员无论是在风险评估、安全加固、渗透测试,还是在代码审计等领域均有着丰富的经验,所有问题的解决方案均由团队成员根据多年经验总结而来,方案确实可行。 降低成本,节省投资在 xxxx 为客户打造的年度服务方案中,服务人员第一次代码审计的结果将
13、会成为后续审计服务的参考依据,避免了单次服务中每次都会为某一特定问题所累,节省了审计时间,同时也降低了客户在每个阶段的投入。3.5 服务报告在审计工作完成后两个工作日内,xxxx 审计人员将出示一份代码审计报告。在报告中,审计人员将会根据审计结果针对源代码中的每个安全弱点进行详细描述,描述内容至少包括安全弱点所在的代码页名、代码行数、问题代码片段以及弱点可能导致的安全问题等。除此之外,审计人员还将针对各种具体的安全弱点提供解决方案和相关的安全建议,为管理/ 开发人员的维护和问题修补工作提供参考。3.6 服务注意事项为避免风险的产生,代码审计工作通常不会在生产或测试服务器上进行。客户需要提供源代
14、码或存储源代码的计算机载体。代码审计服务人员会将一些代码审计工具安装在存储源代码的计算机载体中,在完成代码审计后卸载这些工具,以保护客户资产。在代码审计过程中,确定代码审计服务人员和客户方配合人员的联系方式,便于及时沟通并解决服务过程中的各类问题。- 7 -四. 代码审计方法论4.1 代码检查技术代码检查是代码审计工作中最常使用的一种技术手段。代码检查可以由人工进行,也可以借助代码检查工具自动进行。在实际应用中,通常采用“自动分析+人工验证”的方式进行。代码检查的目的在于发现代码本身存在的问题,如代码对标准的遵循、可读性,代码的逻辑表达的正确性,代码结构的合理性等方面。通过分析,可以发现各种违
15、背程序编写标准的问题,主要包括以下几类。4.1.1 源代码设计源代码设计问题通常来源于程序设计之初,例如代码编写工具的使用等。在这方面的审计主要是分析代码的系统性和约束范围,主要从下面的几个方面进行: 不安全的域 不安全的方法 不安全的类修饰符 未使用的外部引用 未使用的代码4.1.2 错误处理不当这类问题的检查主要是通过分析源代码了解程序在管理错误、异常、日志记录以及敏感信息等方面是否存在缺陷。如果程序处理这类问题不当,最可能的问题是将敏感信息泄露给攻击者,从而可能导致危害性后果。这类问题主要体现在以下几个方面: 程序异常处理 返回值用法 空指针 日志记录- 8 -4.1.3 直接对象引用直
16、接对象引用意指在引用对象时没有进行必要的校验,从而可能导致被攻击者利用。通过代码检查,审计人员可以分析出程序是否存在直接对象引用以及相应的对象引用是否安全。直接独享引用问题主要有以下几类: 直接引用数据库中的数据 直接引用文件系统 直接引用内存空间4.1.4 资源滥用资源滥用是指程序对文件系统对象、CPU、内存、网络带宽等资源的不恰当使用。资源使用不当可能导致程序效率降低,遭受拒绝服务攻击的影响。代码检查中,审计人员将会根据编码规范分析代码中对各种资源的引用方法进行分析,发现其中可能导致资源过度占用方面的问题。资源占用方面的问题主要有以下几类: 不安全的文件创建、修改和删除 竞争冲突 内存泄露
17、 不安全的过程创建4.1.5 API 滥用API 滥用是指由系统或程序开发框架提供的 API 被恶意使用,导致出现无法预知的安全问题。检查过程中,审计人员将会针对此类问题来对源代码进行分析以发现此类问题。API滥用主要有下面几种类型: 不安全的数据库调用 不安全的随机数创建 不恰当的内存管理调用 不全的字符串操作 危险的系统方法调用 对于 Web 应用来说不安全的 HTTP 会话句柄也是 API 滥用的一种。- 9 -4.2 应用代码关注要素4.2.1 跨站脚本漏洞漏洞:对用户的输入没有采用有效的安全控制手段就将用户输入插入到返回页面中。影响:攻击者可以利用存在 XSS 漏洞的 Web 网站攻
18、击浏览相关网页的用户,窃取用户会话中诸如用户名和口令(可能包含在 Cookie 里)等敏感信息、通过插入恶意代码对用户执行挂马攻击、XSS 漏洞还可能被攻击者用于网页篡改。4.2.2 跨站请求伪装漏洞漏洞:提交表单中没有用户特有的标识。影响:攻击者可利用跨站请求伪装 (CSRF) 漏洞假冒另一用户发出未经授权的请求,即恶意用户盗用其他用户的身份使用特定资源。4.2.3 SQL 注入漏洞漏洞:对访问数据库的 SQL 语句没有进行任何过滤,可能导致 SQL 注入。影响:如果 SQL 注入成功,攻击者可以获取网站数据库的信息,可以修改删除数据库,还可能获取执行命令的权限,进而完全控制服务器。4.2.
19、4 命令执行漏洞漏洞:系统中使用了一些调用操作系统函数的命令,在调用过程中,如果命令的来源不可信,系统可能执行恶意命令。影响:攻击者有可能把要执行的命令替换成恶意命令,如删除系统文件。4.2.5 日志伪造漏洞漏洞:将未经验证的用户输入写入日志。影响:攻击者可以利用该漏洞伪造日志条目或将恶意内容注入日志。- 10 -4.2.6 参数篡改漏洞:一些重要参数可能会被篡改。影响:攻击者能够通过篡改重要参数或方法对系统进行攻击。4.2.7 密码明文存储漏洞:配置文件中存储明文密码。影响:在配置文件中存储明文密码可能会危及系统安全,攻击者可以轻易获取到系统密码。4.2.8 配置文件缺陷漏洞:配置文件内容存
20、在缺陷,例如未设置统一的错误响应页面。影响:攻击者能够利用配置文件的缺陷对系统进行攻击。4.2.9 路径操作错误漏洞:用户输入没有有效的安全控制手段就直接对文件进行操作。影响:攻击者可以控制路径参数,访问或修改其他受保护的文件。4.2.10 资源管理漏洞:使用完资源后没有关闭,或者可能关闭不成功。影响:攻击者有可能通过耗尽资源池的方式发起拒绝服务攻击,导致服务器性能降低,甚至宕机。4.2.11 不安全的 Ajax 调用漏洞:系统存在不安全的 Ajax 调用。影响:攻击者能够利用该漏洞绕过验证程序或直接编写脚本调用 Ajax 方法实现越权操作。- 11 -4.2.12 系统信息泄露漏洞:异常捕获
21、泄露系统信息。影响:攻击者可以从泄露的信息中找到有用信息,发起有针对性的攻击。4.2.13 调试程序残留漏洞:代码包含调试程序,如:主函数。影响:调试程序会在应用程序中建立一些意想不到的入口点被攻击者利用。五. 相关工具本章节列出部分常见的代码审计工具,但并不能完整包括真实环境下的全部审计工具。5.1 信息收集工具工具名称 官方地址TextCrawler http:/www.digitalvolcano.co.uk表 5.1 信息收集工具5.2 静态分析工具工具名称 官方地址RSM http:/ SCA https:/ Code Auditor http:/.auFindBugs http:/ CAT.NETFxCopMSScasihttp:/ http:/ 12 -表 5.2 静态分析工具5.3 源码提取工具工具名称 官方地址Reflector http:/reflector.red-Java Decompiler http:/ java.decompiler.free.fr六. 为什么选择 xxxx