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