OWASP安全测试指南v4.0 解读

OWASP 测试项目 简介

OWASP 测试项目已经发展了许多年。通过这个项目,我们希望帮助人们了解自己的 Web 应用程序,什么是测试,为什么要测试,什么时间,在哪里 以及 如何测试 WEB 应用程序。这个项目是发布一个完整的测试框架,而不是仅仅提供一个简单的漏洞检查列表或者问题的简单药方。人们可以根据需要建立自己的或符合其它进程的测试程序。测试指南详细的介绍了一般测试框架以及实践中该框架的实施技术。

创作这份测试指南是一项艰巨的任务。要获取大家的一致认可同时发展内容是一个极具挑战的任务。这不仅需要使人们接受这里所描述的概念,同时使他们能够真正将这些概念应用于自己的环境和文化中。同时,这也是对将目前 Web 应用测试重点,将渗透测试转变为测试集成于软件开发生命周期过程中的挑战。

然而,我们已经达到非常满意的结果。许多业内专家和世界上一些大型公司的软件安全负责人共同验证了这个测试框架。这个测试框架帮助各类组织能够有效针对 Web 应用程序进行测试以便建立安全可靠软件,而不是简单地强调脆弱点。虽然后者无疑是许多 OWASP 指南和清单的一个副产品。因此,对于某些测试方法和技术,我们作出了艰难的选择,因为我们都明白并这些方法和技术并不是适用于每一个人。然而,随着时间的推移,OWASP 能够在丰富的经验和协商一致的基础上通过宣传和教育达到更高的层次并进行文化变革。[2]

OWASP 安全测试指南 v4.0 简介

首先我想说的是学习没有捷径,只有花心思和时间去积累,才会有收获。

这本书讲了什么

这本书结构化的介绍了该如何执行 Web 渗透测试,描述了 Web 渗透测试的方法论。

如果你去面试渗透岗位,或者领导让你去执行某个站点的渗透测试,那么这么书可以很好的指导你。全面掌握本书后,你能很清楚自己在做什么,该怎么做,成果该怎么展示,结论该怎么写。

谁适合读这本书

零基础

如果你对 Web 安全是零基础,那我不推荐你一开始就精读本书,虽然本书内容中对漏洞有解释和描述,但毕竟篇幅有限,无法以生动,更易理解的方式解释漏洞。在这种情况下,你看这本书会很迷惑,通篇读过后,却不知道文章讲了什么。

建议你可以泛读本书,了解有哪些漏洞类型,有不懂的,或者感兴趣的漏洞,再去找其他文章看看,理解了以后再回来精读本书。

有基础,但不系统

如果你已经有了一些基础,那这本书非常适合你,很多人可能很不屑,觉得自己经验丰富,SQL 注入信手拈来,但是有个毛病就是容易漏测,同样一个系统这次漏洞 1,2,3, 下次漏洞 2,3,4 好像每次测试都有新漏洞发现。

为什么会出现漏测的现象呢?很简单,要么就是定义的测试范围不一样,导致每次发现的漏洞是不一样的。要么是不知道该怎么系统性,结构化的测试,完全凭借头脑的灵感。这两种漏测是完全不一样的,可以说第一种情况并不是漏测,因为测试范围导致漏洞不一样是可以解释的。第二种就是典型的漏测,而且很危险。换句话说,第二种情况你提交给甲方的报告是零漏洞,甲方会认为自己的产品真的很安全吗?还是会认为这个渗透测试人员不靠谱?

借用大佬 Gary McGraw 的一句话来说

“If you fail a penetration test you know you have a very bad problem indeed. If you pass a penetration test you do not know that you don’t have a very bad problem”.

本书的重点就是这一类的人

有基础,成系统

如果你已经在这个阶段,至少已经是高级渗透测试人员了,那么本书说不定可以给你一个好的参考,对比你已掌握的测试框架和该书介绍的框架有何差异,取长补短。

应该怎么读这本书

书很厚,一头就扎进去读好像不符合这个快节奏的社会,所以我写这篇文章更像是一篇导读,在一头扎进去之前,看看我这篇文章也许能更有效的吸收书里的知识。但是导读归导读,书还是要慢慢看的。

在接下来的章节,我将以总分的结构来讲述本书内容。

OWASP 安全测试指南 v4.0 总章

从老板给你一个测试任务到你交付测试报告,这个过程你应该怎么做。

我们来看一下测试指南教我们怎么做 otg-diagram 上图罗列来从开始到结束的流程。我先不对每个过程展开介绍,我倒更想说说为什么要这么排列,这还是蛮有趣的。

首先接到测试任务,有可能是 黑盒测试 / 灰盒测试 / 白盒测试,假设是资源最少的黑盒测试,给你一个域名/ip,你应该怎么测呢?

第一步:信息收集

通过 OSINT 收集信息,收集子域名,收集应用程序入口,识别 web 服务器,识别应用程序框架,总之就是收集尽可能多的信息。信息收集看似简单,实际上非常关键。

第二步:配置以及部署管理测试

我们知道整个 web 环境涉及到 操作系统,web 服务器,web 容器,开发框架,编程语言等

在管理员配置这些环境时,就有很多测试点,比如是否使用存在漏洞的组件,操作系统是否及时打补丁,先把配置/环境的问题测试了,再进行 web 应用的测试

接下来你面临的是不是登陆的问题,有些产品不登陆就一个 login 页面,能力再强也无能为力。说到登陆,就一定要提到登陆三件套,身份,认证,授权

我记得我准备 Security+认证考试的时候,就有一题模拟题是这样的

Which of the following is the proper order for logging a user into a system from the first step to the last step?
A. Identification,authentication,authorization

Identification,authentication,authorization 也就是身份,认证,授权

题外话

认证方式有多种

- something you know (你知道什么,比如密码,PIN 码)
- something you have (你有什么,比如工卡,智能卡,钥匙)
- something you are (你是什么,比如指纹,虹膜)
- something you do (你做什么,比如签名,步态)

授权方式也有多种

- DAC (自主访问控制)
- MAC (强制访问控制)
- RBAC (基于角色的访问控制)
- ABAC (基于属性的访问控制)

所以,接下来分别是

第三步 身份鉴别管理测试

第四步 认证测试

第五步 授权测试

认证完了以后,授权应该是以会话为中心的,所以进入下一步会话管理。

第六步 会话管理测试

主要测试 CSRF,会话固定,会话退出,会话超时等等会话相关的项目

第七步 输入验证测试

登陆进去了,能输入的点就多了起来,此时做输入验证测试正合适

第八步 错误处理测试

输入异常是不是就会出错,正好在这时做错误处理测试,一般来说报错时不能泄露敏感信息,告知客户异常即可,提示应该模糊化。

接下来,密码学测试,业务逻辑测试,客户端测试 相对来说较独立,可以独立测试。

以上就是我对本书总体结构的认识,我比较喜欢这种系统性的知识,因为这个结构化知识给你一种大局观,不会局限在某个小范围。如前文引用的,这个结构也是普遍被大家所认可的

许多业内专家和世界上一些大型公司的软件安全负责人共同验证了这个测试框架。这个测试框架帮助各类组织能够有效针对 Web 应用程序进行测试以便建立安全可靠软件,而不是简单地强调脆弱点。

下面我们将分章节讲解每一个测试项的细节

第一章 信息收集

owasp-01.png

解读.信息收集

第二章 配置以及部署管理测试

owasp-02.png

解读.配置以及部署管理测试

第三章 身份鉴别管理测试

owasp-03.png

解读.身份鉴别管理测试

书中是没有对最后两条进行展开描述的,这个只在 Checklist 中存在,Checklist 可查看参考文献[7]

题外话,我们经常讲某人很有身份,顶级信用卡,开迈巴赫。其实这里的身份概念也是类似,意思是这个东西能代表你。你会说有可能是仿冒的,奥拓改装的迈巴赫?

没错,这就是下一章认证要说的,怎么证明你的身份是真实的。也就是怎么证实你是你。

第四章 认证测试

owasp-04.png

解读.认证测试

基本上我们上手测一个产品/站点,除了上述一些信息收集,配置管理,身份管理等铺垫工作,认证应该是第一个最重要的模块了。

认证的核心目的是证明你是你,证明你的身份是真实的。比如你知道密码,比有身份证,你有指纹,你的签名字迹等等。
这个认证的过程就可能有很多问题。比如别人虽然不知道你的密码,但知道你密码的 hash,可以通过 pass-the-hash 漏洞进行攻击。
认证过程可能被重复攻击。密码找回机制绕过等等。

在首先进行认证测试之前,应该花时间了解认证机制。什么是认证机制?常见的有 PAP,CHAP,Digest 认证,PAP 是指 Password Authentication Protocol, CHAP 是指 Challenge Handshake Authentication Protocol

比较简单的描述就是 PAP 是直接传密码进行认证, Digest 是把密码进行 hash,后台比对 hash 进行认证。而 CHAP 就会每次认证生成一个挑战值,后台比对加入挑战值后的 hash 很明显,前两种都无法放认证重放,而 CHAP 能较好的防重放。

第五章 授权测试

owasp-05.png

解读.授权测试

再回过头来捋一遍 身份,认证,授权 这三个概念

第六章 会话管理测试

owasp-06.png

解读.会话管理测试

关于会话我暂时没有更多想补充的,不过我觉得有几个概念比较容易混淆,在此我以自己的理解说明一下

Cookie 是一种浏览器机制,服务器可以把一些信息通过 setcookie 让浏览器保存下来,再接下来的请求中,把这个信息带上。

Session 是会话,就像 tcp 的三次握手,在四次挥手之前,就是一次会话。而短连接的会话会抽象一些,就是两个人进行一次交谈,可能中间会被打断,但不影响谈话的开始和结束。会话是记录在服务器的,因为服务器是一对多的关系,它要维护和每一个客户端的会话。

SessionID,会话 id,就是上面谈到的会话的一个标记。就像 linux 中 open 一个文件,给你返回 fd 一样,sessionID 和 session 是绑定的

token,是令牌,现实生活中 token 可以理解为智能卡或者工卡类似的东西。在这里 token 就是一串字符串,token 有什么意义完全取决于服务器。

所以可能就会有这样的场景,客户端访问服务器,服务器生成一个会话,把会话 id 加密后设置在 token 中,最终 setcookie 到 cookie 中。最终客户端这边的 http 头部就会是 Cookie: Token=asdf88…88xxyy

第七章 输入验证测试

owasp-07.png

owasp-08.png

输入验证的内容太多了,xss,sql 注入,ldap 注入,xxe,命令注入,文件包含,缓冲区溢出,堆栈溢出,格式化字符串漏洞等等。这里不详细展开阐述(有机会另开一篇文章介绍)。

如果有读者对本章感兴趣,我建议可以阅读参考文献[4], 里面用生动的图文介绍了本章多个漏洞。

第八章 错误处理测试

owasp-09.png

解读.错误处理测试

错误管理放在输入测试之后是因为,经常不确定的输出会出发错误提示。

想起以前一位朋友和我说的,所谓软件安全,就是对所有已知和未知的行为都做了合适的处理。

可能实际执行并没那么简单,但是我想思路应该是对的。

第九章 密码学测试

owasp-10.png

解读.密码学测试

补充说一些密钥套件的知识

Cipher suites are named combinations of:

一个密钥套件可以分成 4 部分,密钥交换算法,认证算法,块加密算法,哈希算法

比如一个套件是 TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256
TLS 是指 tls 协议
ECDHE 是密钥交换算法,EC 是椭圆曲线,DH 是 Diffie Hellman,E 是指 Exchange,基于椭圆曲线的 DH 密钥交换算法
ECDSA 是认证算法,EC 是椭圆曲线,DSA 是 Digital Signature Algorithm, 基于椭圆曲线的数字签名算法
AES_128_GCM,块加密算法采用 AES 128 比特,GCM 模式
SHA256,哈希协议使用 SHA256

如果你对上述概念还是很模糊,建议再去查看一些资料。参考文献[5]写的还不错,建议读一读。

第十章 业务逻辑测试

owasp-11.png

owasp-12.png

本文也暂不对本章做解读,因为我认为这一章如果要讲内容还是非常多的。

笔者有些朋友常年挖 src,曾和我说过,现在一些 src,要挖常规漏洞已经比较困难了,所谓的常规漏洞,也就是本书提到的非本章的大多数漏洞。能挖的就是一些逻辑漏洞。

所谓逻辑漏洞,举例来说,本来后端的业务逻辑是 A->B->C->D, 你作为测试人员也了解这个逻辑,你突发奇想执行了 A->C->B->D, 系统异常了就是一个逻辑漏洞

我们常说程序员的思维是非常缜密的,对于个人可能没错,但如果是多个团队一起开发的项目,可能就存在逻辑缺陷。而测试人员就是要找到这些缺陷并利用这些缺陷进行攻击。

第十一章 客户端测试

owasp-13.png

解读.客户端测试

这类测试均在客户端测,这类的攻击也大多需要被害者的触发,在 CVSS 评分里,也就是 UI(User Interaction)项,用户交互。

有些书籍会专门从这个角度去讲安全。比如《白帽子讲 web 安全》就是从,客户端,服务端来讲解的。

总结

如果你对上面的漏洞有很多都不熟悉,建议你还是多从单个漏洞角度学习,再次推荐参考文献[4]的单个漏洞讲解。不仅有讲解,还有 docker 容器配置好来对应的漏洞供学习研究。

建议初学者还可以多搭建一些练习靶机,比如 dvwa,WebGoat,vulnhub 等拿来练习。
另外还有一些综合性的 Web 安全资源,请查看参考文献[6]

在你对单个漏洞都有比较深入的了解后。就需要学习本书来把你对 Web 安全的认知结构化。

虽然以后不断会有新的漏洞和攻击方法出现,超出本书覆盖的漏洞范围,但是这个结构还是可用的。这就是框架的意义。

学习黑客技术,不去实践是不行的,因为只有不断犯错,你才会加深印象。很多时候你觉得自己理论满分。可动手测试却不知道该如何入手。

本文截取的 Checklist 来自参考文献[7],读者有兴趣可下载查阅。

由于笔者水平有限,文章难免会有错误的,欢迎读者批评指正。笔者个人邮箱:kafroc@gmail.com

由于笔者水平有限,文章难免会有错误的,欢迎读者批评指正。笔者个人邮箱:kafrocyang@gmail.com

参考文档

[1]owasp web security testing guid官网
[2]安全测试指南(第4版)
[3]kbid-250-session-puzzling
[4]owasp-skf
[5]cipher-suites-algorithms-security-settings
[6]web-application-security-tools-resources
[7]owasp-testing_checklist.xlsx

Table of Contents