目录
一、代码审计
1.1、简介:
审查源代码有助于渗透测试员攻击目标Web应用程序,示例:
1、一些应用程序为开源应用程序,或使用开源组件,允许从相关资料库中下载它们的源代码,并从中寻找漏洞
2、如果在提供咨询服务时执行渗透测试,应用程序所有者可能会允许查看应用程序的源代码,以提环审计的效率
3、可能在应用程序中发现允许下载其源代码的文件泄露漏洞
4、大多数应用程序使用某种客户端代码(如JavaScript,不需要任何权限即可访问它)
二、代码审查方法
2.1、简介:
代码审查的方法很多,这些方法有助于提高在有限的时间内发现安全漏洞的效率。此外还可以将代码审查与其他测试方法结合起来充分利用每种方法的优势
2.2、黑盒、白盒测试
简述:
1、白盒代码审查可非常高效地发现应用程序中存在的漏洞,在审查源代码的过程中, 我们常常可以迅速确定仅使用黑盒技巧很难或需要很长时间才能发现的漏洞。例如,通过阅读代码可迅速确定一个可访问任何用户账户的后门密码,但使用密码猜测攻击几乎不可能发现这个密码
2、但代码审查并不能完全替代黑盒测试,从某种程度上讲,应用程序中的全部漏洞都存在于源代码中,理论上,通过代码审查可以确定所有这些漏洞。但使用黑盒”方法可以更迅速、高效地发现许多漏洞。如使用自动化模糊测试技巧,每分钟可以向一个应用程序发送数百个测试字符串,它们将迅速分散到所有相关代码路径中,并立即返回响应。另外通过向每个字段发送常见漏洞的触发器,常常可以在几分钟内确定大量通过代码审查需要数天才能发现的漏洞。且许多企业级应用程序的结构极其复杂,对用户提交的输入进行多层处理。同时应用程序在每一个层面实施不同的控制与检查,一段源代码中的明显漏洞可能会被其他地方的代码完全消除
3、大多数情况下,黑盒与白盒可以相互补充,通过代码审查初步查明一个漏洞后,再在一个正在运行的应用程序中对其进行测试,是确定该漏洞是否真实存在的最简单、最有效的方法。相反在一个正在运行的应用程序中确定某种反常行为后,审查相关源代码往往是确定其根本原因的最佳途径。因此如有可能,应适当结合使用黑盒与白盒,并根据实时测试过程中应用程序的反常行为、源代码的大小与复杂程度调整在每种技巧上投入的时间与精力
2.3、代码审查方法
简述:
1、任何功能比较强大的应用程序都可能包含成千上万行源代码,许多情况下审查代码时间有限,可能仅有几天时间。因此有效代码审查的一个关键目标是,在有限的时间与精力条件下,确定尽可能多的安全漏洞。为了实现这个目标,有必要采用一种结构化的方法,使用各种技巧确保迅速确定源代码中存在的明显漏洞,为探查更微妙、更难发现的漏洞争取更多时间
2、当审查Web应用程序源代码时, 使用三重查找方法可迅速高效地确定其中存在的漏洞。这种方法由以下3个步骤组成
A、从进入点开始追踪用户向应用程序提交的数据,审查负责处理这些数据的代码
B、在代码中搜索表示存在常见漏洞的签名,并审查这些签名,确定某个漏洞是否确实存在
C、对内在危险的代码进行逐行审查,理解应用程序的逻辑,并确定其中存在的所有问题,需要进行仔细审查的功能组件包括:应用程序中的关键安全机制(验证、会话管理、访问控制与任何应用程序范围内的输入确认)、外部组件接口、以及任何使用本地代码(通常为C/C++)的情况
3、首先分析各种常见的Web应用程序漏洞在源代码中的各种表现形式,以及当进行代码审查时如何以最简单的方式确定这些表现形式,这将有助于在代码中搜索漏洞签名[2步]和仔细审查危险的代码[3步]
4、然后依次分析一些最流行的Web开发语言,确定应用程序如何获得用户提交的数据(通过请求参数、cookie值)、它如何与用户进行会话交互、每种语言中存在潜在危险的API以及每种语言的配置与环境对应用程序安全的影响,这将有助于从进入点开始追踪用户向应用程序提交的数据[1步],并为其他步骤提供每种语言的参考