一、什么是OWASP?
在 开放Web应用基金会致力于创造一个更安全的网络应用环境。它免费提供文章、工具、技术和论坛,让每个开发人员都能创建安全的代码。其最著名的项目之一是 OWASP Top 10。
OWASP 前 10 名榜单
OWASP项目最具权威的就是其“十大安全漏洞列表”(OWASP Top 10),OWASP Top 10不是官方文档或标准,而只是一个被广泛采用的意识文档,被用来分类网络安全漏洞的严重程度,目前被许多漏洞奖励平台和企业安全团队评估错误报告。这个列表总结了Web应用程序最可能、最常见、最危险的十大漏洞,可以帮助IT公司和开发团队规范应用程序开发流程和测试流程,提高Web产品的安全性。
根据 OWASP,漏洞是应用程序中的一个弱点,它允许恶意方对应用程序的利益相关者(所有者、用户等)造成伤害。 OWASP Top 10 列表由全球 Web 应用程序安全专家开发并4年更新一次。它旨在教育公司了解他们需要缓解以保护其 Web 应用程序的漏洞和关键安全风险。
此列表也正在为移动应用程序开发 。
在 Top 10 列表旁边,OWASP 还发布和维护以下资源:
上一次,该榜单的调整时间是在2017年11月,2021年发布的榜单与以往完全不同,且榜首也易主。
OWASP基金会解释了2017年和2021年漏洞排名的变化∶
(1)A01∶2021-访问控制崩溃(Broken Access Control)∶从原来的排名第5上升至排名第1;94%的所测应用程序中均存在某种形式的访问控制崩溃情况。应用程序中映射到访问控制崩溃的34个CWE漏洞,比其它类别的漏洞更多。
(2)A02∶2021-加密失败(Cryptographic Failure)∶排名上升了2位,升至第2名。此前被称为“敏感数据暴露”,但它只是宽泛的表现而非根本原因。更名后的“加密失败”强调的是和加密相关的失败,通常会导致敏感数据暴露或系统失陷。
(3)A03∶2021-注入∶下滑至第3名,94%的所测应用程序中存在某种形式的注入漏洞,该类型映射33个CWE漏洞,是应用程序中存在的第二大漏洞。在新版本中,跨站点脚本(XSS)成为注入类型的组成部分。
(4)A04∶2021-不安全的设计,是2021年版本的新增类型,关注的是和设计缺陷相关的风险。如果行业真正想要“左移”,那么就需要更多地使用威胁建模、安全的设计模式和原则、以及引用架构。
(5)A05∶2021-安全配置不当,从第6名上升至当前的第5名;90%的所测应用程序中存在某种形式的配置不当问题。随着向高度可配置软件的转变,该类漏洞的排名上升也属正常。此前的“XML外部实体(XEE)”漏洞类型现在属于该类型的组成部分。
(6)A06∶2021-易受攻击和过时的组件,此前该类型名为“使用含有已知漏洞的组件”,不仅在行业调查中排名第2,而且数据分析表明有足够数据在Top 10中占据一席之地。该类型在2017年时排名第9,是我们竭力测试并评估风险的已知问题。这是唯一一个不存在可映射到已有CWE的CVE漏洞的类型,因此分数中的默认利用和影响权重为5.0。
(7)A07∶2021-识别和认证失败,该类型此前名为“认证崩溃”且原先排名为第2名,当前包括和识别失败更具有相关性的CWE。该类别仍然是Top 10榜单的组成部分,不过标准化框架的可用性不断增强,似乎起到更大的作用。
(8)A07∶2021-软件和数据完整性失败是2021年的新增类型,专注于和软件更新、关键数据和 CI/CD 管道相关的假设设置且不设计完整性验证。在这个类型中,从CVE/CVSS数据映射到10个CWE的权重最高的影响之一。2017年的“不安全的反序列化”类型如今成为更大类型的组成部分。
(9)A08∶2021-安全日志记录和监控失败,此前名为“日志记录和监控不充分”,在行业调查中名列第3,原先名列第10。该类型涵盖的失败类型增多,测试难度增强,也并未在CVE/CVSS 数据中得到很好的表示。然而,这种失败类型可直接影响可见性、时间警报和取证。
(10)A10∶2021-服务器端请求伪造为新增,在行业调查中排名第1。它的测试覆盖率的事件比率高于平均水平,“利用”和“影响”的可能性比率也高于平均水平。该类型代表的是这样一种场景∶行业专业人士一直在指出该类型的重要性,即使目前并未得到数据证实。
2021年的榜单是继2007年以来,“注入”漏洞类型第一次未列榜首。原因在于web应用程序变得愈加复杂,而且它们经常是API的合集,当结合配置选项时,可引发配置不当、终端不受保护或交互无法预知的情况。
(1)注入的概念
注入通常是指:将不受信任的数据作为命令或查询的一部分发送到解析器时,会产生诸如SQL注入、OS注入和LDAP注入的注入缺陷。攻击者的恶意数据可以诱使解析器在没有适当授权的情况下执行非预期命令或访问数据。
(2)注入的分类
通常注入有sql注入和os(Operating System)注入
SQL注入:就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。具体来说,它是利用现有应用程序,将(恶意)的SQL命令注入到后台数据库引擎执行的能力,它可以通过在Web表单中输入(恶意)SQL语句得到一个存在安全漏洞的网站上的数据库,而不是按照设计者意图去执行SQL语句。
SQL注入的防御:
os注入:Web开发所使用的编程语言中,大多数都能通过Shell执行OS(操作系统)命令。通过Shell执行OS命令时,或者开发中用到的某个方法其内部利用了Shell时,就有可能出现OS命令被任意执行的情况。这种现象被称为OS命令注入。
os注入的防御:
不调用利用shell的功能,既能杜绝了OS命令注入漏 洞混入的可能性,又消除了调用OS命令的而系统开销,能够从多方面提高应用的性能。
(1)介绍
近年来,敏感数据泄露已经成为了一最常见、最具影响力的攻击,一般我们的敏感信息包括密码、财务数据、医疗数据等,由于web应用或者API未加密或不正确的保护敏感数据,这些数据极易遭到攻击者利用,攻击者可能使用这些数据来进行一些犯罪行为,因此,未加密的信息极易遭到破坏和利用,不久前就爆出过Facebook泄露了用户的大量信息,以及12306也多次泄露用户的信息。现在信息泄露已经成为了owasp top 10中排名前三的漏洞之一,可想而知敏感信息泄露现在已经成为十分严重的问题。
(2)防御
(1)介绍
通过错误使用应用程序的身份认证和会话管理功能,攻击者能够破译密码、密钥或会话令牌,或者暂时或永久的冒充其他用户的身份。
身份认证:身份认证最常用于系统登录,形式一般为用户名加密码的登录方式,在安全性要求较高的情况下,还有验证码、客户端证书、Ukey等。
会话管理:HTTP利用会话机制来实现身份认证,HTTP身份认证的结果往往是获得一个令牌并放在cookie中,之后的身份识别只需读取授权令牌,如果授权令牌认证成功,那么就无需再次进行登录认证。
(2)防御
防御失效身份和会话管理的方法:
(1)介绍
跨站脚本攻击XSS(Cross Site Scripting),为了不和层叠样式表CSS(Cascading Style Sheets)的缩写混淆,故将跨站脚本攻击缩写为XSS。恶意攻击者往Web页面里插入恶意Script代码,当用户浏览该页之时,嵌入其中Web里面的Script代码会被执行,从而达到恶意攻击用户的目的。XSS攻击针对的是用户层面的攻击!
(2)分类
XSS分为三类:反射型XSS、存储型XSS、DOM型XSS
(3)原理
存储型XSS:存储型XSS,持久化,代码是存储在服务器中的,如在个人信息或发表文章等地方,插入代码,如果没有过滤或过滤不严,那么这些代码将储存到服务器中,用户访问该页面的时候触发代码执行。这种XSS比较危险,容易造成蠕虫,盗窃cookie。
反射型XSS:非持久化,需要欺骗用户自己去点击链接才能触发XSS代码(服务器中没有这样的页面和内容),一般容易出现在搜索页面。
DOM型XSS:不经过后端,DOM-XSS漏洞是基于文档对象模型(Document Objeet Model,DOM)的一种漏洞,攻击者向服务器发送一个带有恶意JS代码的请求,服务器的响应不会以任何形式包含攻击者的脚本。当用户的浏览器处理这个响应时,DOM对象就会处理XSS代码,导致存在XSS漏洞。
(4)防御
(1)介绍
XXE(XML External Entity Injection)外部实体注入漏洞,XML在引用外部实体是的时候,攻击者可以构造恶意的XML代码,以造成任意文件读取、命令执行甚至是中断服务器。
XML用于标识电子文件使其具有结构性的标识语言,可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言。XML文档结构包括XML声名、DTD文档类型定义、文档元素。
(2)防御
(1)介绍
安全配置错误是比较常见的漏洞,由于操作者的不当配置(默认配置,临时配置,开源云存储,http标头配置,以及包含敏感信息的详细错误),导致攻击者可以利用这些配置获取到更高的权限,安全配置错误可以发生在各个层面,包含平台、web服务器、应用服务器、数据库、架构和代码。
(2)防御
(1)介绍
访问控制:即保护资源不被非法访问和使用,目前应用最多的是基于角色的访问控制机制。失效的访问控制就是攻击者通过各种手段提升自己的权限,越过访问控制,使访问控制失效,这样攻击者就可以冒充用户、管理员或拥有特权的用户,或者创建、访问、更新或删除任何记录。
(2)防御
(1)介绍
序列化:序列化 (Serialization)是将对象的状态信息转换为可以存储或传输(一般是以二进制的形式保存)的形式的过程。
反序列化: 与序列化的过程刚好相反。
(2)原理
序列化即是把对象转变为字节流,存放在内存、文件数据库中,而反序列化即是把字节流转变为对象。在java中有一个 ObjectOutputStream 类的writeobject方法可以实现序列化,而 ObjectInputStream 类的Readobject方法可以实现反序列化。该漏洞的原因出自于如果应用对恶意构造的用户输入的数据进行反序列化,这样就会产生非预期的对象,从而有可能产生远程代码执行。或者应用中存在可以在反序列化过程中或者之后被改变行为的类,则攻击者可以通过改变应用逻辑或者实现远程代码执行攻击。我们将其称为对象和数据结构攻击。
(3)防御
(1)介绍
意指一个已经授权的用户通过更改访问时的一个参数,从而访问到原本其并没有得到授权的对象,这种漏洞可以损坏参数所引用的所有数据。
(2)防御
(1)介绍
由于现在的服务器都需要使用很多的组件,组件(例如:库、框架和其他软件模块)运行和应用程序相同的权限。如果使用含有已知漏洞的组件,这样的攻击可以造成严重的数据丢失或服务器接管。使用含有已知漏洞的组件的应用程序和API,可能会破坏应用程序防御、造成各种攻击并产生严重影响。
(2)防御
(1)介绍
不足的日志记录和监控,以及事件响应集成的丢失或无效,使得攻击者能够进一步攻击系统、保持持续性或转向更多系统,以及篡改、提取或销毁数据。大多数缺陷研究显示,缺陷被检测出的时间超过200天,并且通常通过外部检测方检测,而不是通过内部进程或监控检测。
日志记录:日志记录是一个系统的最重要的功能之一。日志记录包括登录成功记录、登录失败记录、访问控制记录等,用来记录服务器的各种信息。
(2)防御
(1)介绍
与身份验证和会话管理相关的应用程序功能 经常被错误地实现,允许攻击者破坏密码、密钥或会话令牌或利用其他实现缺陷来临时或永久地假设用户的身份。
攻击者可以利用该漏洞劫持用户会话,访问或修改其无权访问的信息。
(2)防御
为避免利用损坏的身份验证进行攻击,OWASP 建议采取以下措施:
(1)介绍
跨站请求伪造,利用了网站允许攻击者预测特定操作所有细节这一特点。由于浏览器自动发送会话cookie等认证凭证,导致攻击者可以创建恶意的web页面来产生伪造请求。这些伪造的请求很难和合法的请求区分开。
攻击者可以让受害者用户修改任何允许修改的数据,执行任何用户允许的操作,例如修改密码,登录注销等。
(2)防御
(1)介绍
这个漏洞也是与认证相关的,这种漏洞具体是指在系统已经对url的访问做了限制的情况下,但这种限制并没有生效。常见的例子是系统没有对用户进行角色的检查,以及用户通过修改URL的action并指向未被授权页面就能访问该页面同样是个漏洞。
攻击者很容易就能把网址改成享有特权的网页,这样就可以使用匿名或普通用户访问未授保护的私人页面,从而提升未授权功能和相关数据信息。
(2)防御
(1)介绍
在Web应用中重定向是极为普通的,并且通常重定向所引发的目的是带有用户输入参数的目的url,而如果这些重定向未被验证,那么攻击者就可以引导用户访问他们想要用户访问的站点
同样,转发也是极为普遍的,本质上转发是在同一个应用中对一个新页面发送请求,并且有时是用参数来定义目标页面的。同样,如果参数未被验证,那么攻击者就可以利用其来绕过认证或是授权检查。
攻击者通过重定向可以试图安装恶意软件或诱使受害人泄露密码等铭感信息,通过转发可以绕过访问限制。
(2)防御