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