代码审计服务技术白皮书v1.docx
《代码审计服务技术白皮书v1.docx》由会员分享,可在线阅读,更多相关《代码审计服务技术白皮书v1.docx(11页珍藏版)》请在冰豆网上搜索。
代码审计服务技术白皮书v1
专业效劳技术白皮书
代码审计效劳
■版本变更记录
时间
版本
说明
修改人
2012/5/21
V1.0
文档创立、丰富容
专业效劳部
一.概述
一.1根本概念
代码审计〔CodeReview〕是由具备丰富编码经历并对平安编码原则及应用平安具有深刻理解的平安效劳人员对系统的源代码和软件架构的平安性、可靠性进展全面的平安检查。
代码审计效劳的目的在于充分挖掘当前代码中存在的平安缺陷以及规性缺陷,从而让开发人员了解其开发的应用系统可能会面临的威胁,并指导开发人员正确修复程序缺陷。
一.2代码审计与模糊测试
在漏洞挖掘过程中有两种重要的漏洞挖掘技术,分别是代码审计和模糊测试〔Fuzzing〕。
代码审计是通过静态分析程序源代码,找出代码中存在的平安性问题;而模糊测试则需要将测试代码执行起来,然后通过构造各种类型的数据来判断代码对数据的处理是否正常,以发现代码中存在的平安性问题。
由于采用的分析方法不同,这两项技术的应用场所也有所不同。
代码审计常用于由平安厂商或企业的平安部门发起的代码平安性检查工作;模糊测试则普遍用于软件开发和测试部门的程序测试。
一.3效劳的必要性
实践证明,程序的平安性是否有保障很大程度上取决于程序代码的质量,而保证代码质量最快捷有效的手段就是代码审计。
在风险评估过程中,代码审计是一般脆弱性评估的一种很好的补充,****代码审计效劳的代码覆盖率为100%,能够找到一些平安测试所无法发现的平安漏洞。
同时,由于主持代码审计的平安效劳人员一般都具备丰富的平安编码经历和技能,所以其针对性比常见的脆弱性评估手段会更强、粒度也会更为细致。
一.4客户收益
对于客户而言,代码审计可以带来以下收益:
◆明确平安隐患点
代码审计能够对整个信息系统的所有源代码进展检查,从整套源代码切入最终明至*个威胁点并加以验证,以此明确整体系统中的平安隐患点。
◆提高平安意识
如上所述,任何的隐患在代码审计效劳中都可能造成“千里之堤溃于蚁穴〞的效果,因此代码审计效劳可有效催促管理人员杜绝任何一处小的缺陷,从而降低整体风险。
◆提高开发人员平安技能
在代码审计效劳人员与用户开发人员的交互过程中,可提升开发人员的技能。
另外,通过专业的代码审计报告,能为用户开发人员提供平安问题的解决方案,完善代码平安开发规。
二.效劳的实施标准和原则
二.1政策文件或标准
****代码审计效劳将参考以下规进展工作。
◆OWASPTOP10
◆CWE/SANSTOP25
◆ASP/ASP.NET/PHP/JSP平安编码规
◆****代码审计最正确实践
◆****平安效劳工作规、代码审计实施规
◆……
二.2效劳原则
****在提供代码审计效劳中,将遵循以下原则。
◆性原则
性原则是代码审计效劳中最重要的原则,它是鼓励客户实施代码审计效劳的心理根底,同时也是对客户的人格及隐私权的最大尊重。
代码审计的围,包括客户提供源代码和相关技术文档的性以及输出成果的性。
对效劳过程中获知的任何客户系统及源代码的信息均属秘密信息,不得泄露给第三方单位或个人,不得利用这些信息进展任何侵害客户的行为;对效劳的报告提交不得扩散给XX的第三方单位或个人。
◆规性原则
****代码审计效劳将按照平安效劳工作规、代码审计实施规进展严格落实。
实施必须由专业的平安效劳人员依照规的操作流程进展,对操作过程和结果要有相应的记录,提供完整的效劳报告。
三.****代码审计效劳
三.1效劳围
****代码审计效劳的围包括使用ASP、ASP.NET〔VB/C*〕、JSP〔JAVA〕、PHP等主流语言开发的B/S应用系统、使用C++、JAVA、C*、VB等主流语言开发的C/S应用系统,以及使用*ML语言编写的文件、SQL语言和数据库存储过程等。
三.2效劳分类
三.2.1整体代码审计和功能点人工代码审计
整体代码审计是指代码审计效劳人员对被审计系统的所有源代码进展整体的平安审计,代码覆盖率为100%,整体代码审计采用源代码扫描和人工分析确认相结合的方式进展分析,发现源代码存在的平安漏洞。
但整体代码审计属于白盒静态分析,仅能发现代码编写存在的平安漏洞,无法发现业务功能存在的缺陷。
功能点人工代码审计是对*个或*几个重要的功能点的源代码进展人工代码审计,发现功能点存在的代码平安问题。
功能点人工代码审计需要收集系统的设计文档、系统开发说明书等技术资料,以便代码审计效劳人员能够更好的了解系统业务功能。
由于人工代码审计工作量极大,所以需要分析并选择重要的功能点,有针对性的进展人工代码审计。
三.2.2单次效劳和年度效劳
单次效劳是指****一次性为客户的被审计系统提供代码审计效劳,效劳完成后提交代码审计报告并指导客户进展问题修复。
单次效劳仅能够发现目前源代码中可能存在的各种平安问题,对于系统后续开发产生的平安问题无能为力。
年度效劳是指****以一定的时长〔可以是半年、年等〕为单位向客户提供有限次数〔每月/双月/季度/半年〕的代码审计效劳,每次代码审计均会提供详细的代码审计报告。
年度效劳能够持续跟进系统的平安情况,在效劳期限最大限度保证系统的平安。
三.3效劳流程
****代码审计效劳主要分为四个阶段,包括代码审计前期准备阶段、代码审计阶段实施、复查阶段实施以及成果汇报阶段:
◆前期准备阶段
在实施代码审计工作前,技术人员会和客户对代码审计效劳相关的技术细节进展详细沟通。
由此确认代码审计的方案,方案容主要包括确认的代码审计围、最终对象、审计方式、审计要求和时间等容。
◆代码审计阶段实施
在代码审计实施过程中,****代码审计效劳人员首先使用代码审计的扫描工具对源代码进展扫描,完成初步的信息收集,然后由人工的方式对源代码扫描结果进展人工的分析和确认。
根据收集的各类信息对客户要求的重要功能点进展人工代码审计。
结合自动化源代码扫描和人工代码审计两方的结果,代码审计效劳人员需整理代码审计效劳的输出结果并编制代码审计报告,最终提交客户和对报告容进展沟通。
◆复测阶段实施
经过第一次代码审计报告提交和沟通后,等待客户针对代码审计发现的问题整改或加固。
经整改或加固后,代码审计效劳人员进展回归检查,即二次检查。
检查完毕后提交给客户复查报告和对复查结果进展沟通。
◆成果汇报阶段
根据一次代码审计和二次复查结果,整理代码审计效劳输出成果,最后汇报工程领导。
图三.1代码审计效劳流程
三.4效劳特点
◆全程化效劳,有效保证效劳质量
****可以为客户提供约定期限的全程化代码审计效劳。
效劳的过程不仅仅是帮助客户发现问题,也会为客户的问题修补提供专业的建议和指导,做到问题发现、修补、验证的全程跟踪,每一次效劳都会在前一次的根底上寻找新的突破口,力求最大程度地保证审计目标的平安。
◆专家级解决方案,一切以解决问题为目标
****有着专业的平安效劳团队,团队成员无论是在风险评估、平安加固、渗透测试,还是在代码审计等领域均有着丰富的经历,所有问题的解决方案均由团队成员根据多年经历总结而来,方案确实可行。
◆降低本钱,节省投资
在****为客户打造的年度效劳方案中,效劳人员第一次代码审计的结果将会成为后续审计效劳的参考依据,防止了单次效劳中每次都会为*一特定问题所累,节省了审计时间,同时也降低了客户在每个阶段的投入。
三.5效劳报告
在审计工作完成后两个工作日,****审计人员将出示一份代码审计报告。
在报告中,审计人员将会根据审计结果针对源代码中的每个平安弱点进展详细描述,描述容至少包括平安弱点所在的代码页名、代码行数、问题代码片段以及弱点可能导致的平安问题等。
除此之外,审计人员还将针对各种具体的平安弱点提供解决方案和相关的平安建议,为管理/开发人员的维护和问题修补工作提供参考。
三.6效劳考前须知
为防止风险的产生,代码审计工作通常不会在生产或测试效劳器上进展。
客户需要提供源代码或存储源代码的计算机载体。
代码审计效劳人员会将一些代码审计工具安装在存储源代码的计算机载体中,在完成代码审计后卸载这些工具,以保护客户资产。
在代码审计过程中,确定代码审计效劳人员和客户方配合人员的联系方式,便于及时沟通并解决效劳过程中的各类问题。
四.代码审计方法论
四.1代码检查技术
代码检查是代码审计工作中最常使用的一种技术手段。
代码检查可以由人工进展,也可以借助代码检查工具自动进展。
在实际应用中,通常采用“自动分析+人工验证〞的方式进展。
代码检查的目的在于发现代码本身存在的问题,如代码对标准的遵循、可读性,代码的逻辑表达的正确性,代码构造的合理性等方面。
通过分析,可以发现各种违背程序编写标准的问题,主要包括以下几类。
四.1.1源代码设计
源代码设计问题通常来源于程序设计之初,例如代码编写工具的使用等。
在这方面的审计主要是分析代码的系统性和约束围,主要从下面的几个方面进展:
◆不平安的域
◆不平安的方法
◆不平安的类修饰符
◆未使用的外部引用
◆未使用的代码
四.1.2错误处理不当
这类问题的检查主要是通过分析源代码了解程序在管理错误、异常、日志记录以及敏感信息等方面是否存在缺陷。
如果程序处理这类问题不当,最可能的问题是将敏感信息泄露给攻击者,从而可能导致危害性后果。
这类问题主要表达在以下几个方面:
◆程序异常处理
◆返回值用法
◆空指针
◆日志记录
四.1.3直接对象引用
直接对象引用意指在引用对象时没有进展必要的校验,从而可能导致被攻击者利用。
通过代码检查,审计人员可以分析出程序是否存在直接对象引用以及相应的对象引用是否平安。
直接独享引用问题主要有以下几类:
◆直接引用数据库中的数据
◆直接引用文件系统
◆直接引用存空间
四.1.4资源滥用
资源滥用是指程序对文件系统对象、CPU、存、网络带宽等资源的不恰当使用。
资源使用不当可能导致程序效率降低,遭受拒绝效劳攻击的影响。
代码检查中,审计人员将会根据编码规分析代码中对各种资源的引用方法进展分析,发现其中可能导致资源过度占用方面的问题。
资源占用方面的问题主要有以下几类:
◆不平安的文件创立、修改和删除
◆竞争冲突
◆存泄露
◆不平安的过程创立
四.1.5API滥用
API滥用是指由系统或程序开发框架提供的API被恶意使用,导致出现无法预知的平安问题。
检查过程中,审计人员将会针对此类问题来对源代码进展分析以发现此类问题。
API滥用主要有下面几种类型:
◆不平安的数据库调用
◆不平安的随机数创立
◆不恰当的存管理调用
◆不全的字符串操作
◆危险的系统方法调用
◆对于Web应用来说不平安的会话句柄也是API滥用的一种。
四.2应用代码关注要素
四.2.1跨站脚本漏洞
漏洞:
对用户的输入没有采用有效的平安控制手段就将用户输入插入到返回页面中。
影响:
攻击者可以利用存在*SS漏洞的Web攻击浏览相关网页的用户,窃取用户会话中诸如用户名和口令〔可能包含在Cookie里〕等敏感信息、通过插入恶意代码对用户执行挂马攻击、*SS漏洞还可能被攻击者用于网页篡改。
四.2.2跨站请求伪装漏洞
漏洞:
提交表单中没有用户特有的标识。
影响:
攻击者可利用跨站请求伪装(CSRF)漏洞假冒另一用户发出XX的请求,即恶意用户盗用其他用户的身份使用特定资源。
四.2.3SQL注入漏洞
漏洞:
对访问数据库的SQL语句没有进展任何过滤,可能导致SQL注入。
影响:
如果SQL注入成功,攻击者可以获取数据库的信息,可以修改删除数据库,还可能获取执行命令的权限,进而完全控制效劳器。
四.2.4命令执行漏洞
漏洞:
系统中使用了一些调用操作系统函数的命令,在调用过程中,如果命令的来源不可信,系统可能执行恶意命令。
影响:
攻击者有可能把要执行的命令替换成恶意命令,如删除系统文件。
四.2.5日志伪造漏洞
漏洞:
将未经历证的用户输入写入日志。
影响:
攻击者可以利用该漏洞伪造日志条目或将恶意容注入日志。
四.2.6参数篡改
漏洞:
一些重要参数可能会被篡改。
影响:
攻击者能够通过篡改重要参数或方法对系统进展攻击。
四.2.7密码明文存储
漏洞:
配置文件中存储明文密码。
影响:
在配置文件中存储明文密码可能会危及系统平安,攻击者可以轻易获取到系统密码。
四.2.8配置文件缺陷
漏洞:
配置文件容存在缺陷,例如未设置统一的错误响应页面。
影响:
攻击者能够利用配置文件的缺陷对系统进展攻击。
四.2.9路径操作错误
漏洞:
用户输入没有有效的平安控制手段就直接对文件进展操作。
影响:
攻击者可以控制路径参数,访问或修改其他受保护的文件。
四.2.10资源管理
漏洞:
使用完资源后没有关闭,或者可能关闭不成功。
影响:
攻击者有可能通过耗尽资源池的方式发起拒绝效劳攻击,导致效劳器性能降低,甚至宕机。
四.2.11不平安的Aja*调用
漏洞:
系统存在不平安的Aja*调用。
影响:
攻击者能够利用该漏洞绕过验证程序或直接编写脚本调用Aja*方法实现越权操作。
四.2.12系统信息泄露
漏洞:
异常捕获泄露系统信息。
影响:
攻击者可以从泄露的信息中找到有用信息,发起有针对性的攻击。
四.2.13调试程序残留
漏洞:
代码包含调试程序,如:
主函数。
影响:
调试程序会在应用程序中建立一些意想不到的入口点被攻击者利用。
五.相关工具
本章节列出局部常见的代码审计工具,但并不能完整包括真实环境下的全部审计工具。
五.1信息收集工具
工具名称
官方地址
Te*tCrawler
表五.1信息收集工具
五.2静态分析工具
工具名称
官方地址
RSM
msquaredtechnologies./m2rsm/
FortifySCA
s:
//.fortify./products/
SSWCodeAuditor
.ssw..au
FindBugs
CAT.NET
.microsoft./downloads/en/details.asp*
F*Cop
MSScasi
PMD
表五.1静态分析工具
五.3源码提取工具
工具名称
官方地址
Reflector
reflector.red-gate.
JavaDepiler
为什么选择****