web漏洞类型概述(owasp top10笔记)
Posted whatever`
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了web漏洞类型概述(owasp top10笔记)相关的知识,希望对你有一定的参考价值。
一、owasp top10是什么
OWASP,开放式Web应用程序安全项目(OWASP,Open Web Application Security Project)是一个非营利组织,不附属于任何企业或财团,它提供有关计算机和互联网应用程序的公正、实际、有成本效益的信息。其目的是协助个人、企业和机构来发现和使用可信赖软件。
OWASP项目最具权威的就是其“十大安全漏洞列表”(OWASPTop 10),OWASP Top 10不是官方文档或标准,而只是一个被广泛采用的意识文档,被用来分类网络安全漏洞的严重程度,目前被许多漏洞奖励平台和企业安全团队评估错误报告。这个列表总结了Web应用程序最可能、最常见、最危险的十大漏洞,可以帮助IT公司和开发团队规范应用程序开发流程和测试流程,提高Web产品的安全性。
二、owasp top10变迁
owasp top10每4年更新一次,所以选取了2017和2021年的top10进行比较。
相较于2017年,失效的访问控制,加密机制失效,安全配置错误,自带缺陷和过时的组件,安全日志和监控故障的排名上升,而注入,身份识别和身份验证错误排名下降,同时新增了不安全设计,软件和数据完整性故障,服务端请求伪造的漏洞。
图片来自:OWASP—Top10(2021知识总结)_1erkeU的博客-CSDN博客_owasp top10
三、owasp top10详解
A01失效的访问控制(从2017年的第五上升到2021的第一):
攻击方式
没有检查身份,直接导致攻击者绕过权限直接访问
漏洞原因
在未对通过身份验证的用户,实施恰当的访问控制。攻击者可以利用这一漏洞,访问未经授权的功能或数据。
漏洞影响
1、绕过路径,如未读取的参数做检查,导致路径绕过读取到敏感文件
eg:CVE-2020-5410 (以下示例为vulfocus靶场)
2、权限提升,如未对权限做检查,导致攻击者变更权限
eg:CVE-2021-21389 垂直越权 (详情可见WordPress BuddyPress 存在越权漏洞RCE(CVE-2021-21389)_whatever`的博客-CSDN博客,靶场为虚拟机自主搭建)
ps:越权包括垂直越权和水平越权:
垂直越权:攻击者可以从普通的用户权限提升到管理员的权限访问应用程序
水平越权:攻击者可以从普通用户A的权限提升到普通用户B的权限访问应用程序
漏洞防护
1、对参数的白名单过滤
2、对权限的控制管理重新设计与限制
3、限制下载文件的类型
A02加密机制失效:
攻击方式
常见的攻击方式主要是扫描应用程序获取到敏感数据
漏洞原因
对数据加密存在有机可乘的漏洞(比如弱密码或者加密后很容易破解),或者网络协议、算法本身的弱点,如 telent、ftp、md5 等
漏洞影响
1、应用程序、网站被修改
2、个人资料、公司资料泄露,被用于售卖获利等
漏洞防护
1、对应用程序处理、存储或者传输的数据分类,并根据相关要求确认哪些数据敏感
2、对于没有必要存储的敏感数据,应当尽快清除
3、确保加密存储所有的敏感数据
4、确保使用了最新的,强大的标准算法、协议和密钥,并且密钥管理到位
5、禁用缓存对包含敏感数据的响应
6、不要使用传统协议HTTP、FTP等来传输敏感数据
A03注入:
攻击方式
恶意代码的输入攻击者到应用程序迫使其执行命令妥协数据或整个应用程序。最常见的注入攻击类型是 SQL 注入和XSS,但也有代码注入,命令注入、CSS注入等。。
漏洞原因
注⼊可以导致数据丢失或被破坏,缺乏可审计性或拒绝服务。注⼊漏洞有时甚⾄可导致攻击者的恶意数据可以诱使解析器在没有适当授权的情况下执行非预 期命令或访问数据
漏洞影响
注⼊可以导致数据丢失或被破坏,缺乏可审计性或拒绝服务。注⼊漏洞有时甚⾄可导致完全接管主机。
漏洞防护
防止注入需要将数据与命令和查询分开:
1、推荐的选择是使用安全的API
2、使用肯定或者白名单服务器端输入验证
3、对于任何残余的动态查询,使用该解释器的特定转义语法转义特殊字符
4、在查询中使用LIMIT和其他SQL控件,以防止在SQL注入的情况下大量披露记录
A04不安全设计
攻击方式
2021 年的新类别侧重于与设计和架构缺陷相关的风险,并呼吁更多地使⽤威胁建模、安全设计模式和参考架构。主要包括:未受保护的凭证存储,信任边界违规,受保护的凭证不足。
漏洞原因
不安全设计是⼀个⼴泛的类别,代表许多不同的弱点,表现为“缺失或⽆效的控制设计”。缺少不安全的设计是缺少控制的地⽅。
漏洞影响
广泛
漏洞防护
1、与 AppSec 专业⼈员建⽴并使⽤安全的开发⽣命周期,以帮助评估和设计与安全和隐私相关的控制
2、建⽴和使⽤安全设计模式库或准备使⽤组件的铺好的道路
3、将威胁建模⽤于关键⾝份验证、访问控制、业务逻辑和关键流
4、编写单元和集成测试以验证所有关键流都能抵抗威胁模型
A05安全配置错误
攻击方式
攻击者利用错误配置攻击,获取敏感数据或者提升权限
漏洞原因
开发或者维护人员设置了错误的配置
漏洞影响
- 在应用程序堆栈的任何部分缺少适当的安全强化或对云服务的权限配置不正确(eg:python 开发中对于 Django 框架在生产环境启用了 Debug 模式)。
- 启用或安装了不必要的功能(例如,不必要的端口、服务、页面、帐户或权限)。
- 默认帐户及其密码仍处于启用状态且未更改。
- 错误处理向用户显示堆栈跟踪或其他信息过多的错误消息。
- 对于升级的系统,最新的安全功能被禁用或未安全配置。
- 应用程序服务器、应用程序框架(例如,Struts、Spring、ASP.NET)、库、数据库等中的安全设置未设置为安全值。
- 服务器不发送安全标头或指令,或者它们未设置为安全值。
- 软件已过时或易受攻击(请参阅 A06:2021-易受攻击和过时的组件)
漏洞防护
1、可重复的强化过程使部署另⼀个适当锁定的环境变得快速⽽轻松。开发、QA 和⽣产环境都应配置相同,在每个环境中使⽤不同的凭据。这个过程应该是⾃动化的,以最⼤限度地
减少设置新安全环境所需的⼯作。
2、⼀个没有任何不必要的功能、组件、⽂档和⽰例的最⼩平台。删除或不安装未使⽤的功能和框架。
3、作为补丁管理流程的⼀部分,审查和更新适⽤于所有安全说明、更新和补丁的配置的任务(请参阅 A06:2021-易受攻击和过时的组件)。查看云存储权限(例如,S3 存储桶权
限)。
3、分段应⽤程序架构通过分段、容器化或云安全组 (ACL) 在组件或租户之间提供有效且安全的分离。
4、向客户端发送安全指令,例如安全标头
5、验证配置和设置在所有环境中的有效性的⾃动化过程
A06自带缺陷和过时的组件
攻击方式
利用应用程序技术栈中的框架、库、工具等的已知漏洞进行攻击,获取高权限或者敏感数据
漏洞原因
应用程序技术栈中使用的框架、库、工具爆出了漏洞,应用程序未能及时更新与修复
漏洞影响
1、敏感数据泄露
2、提升权限
3、远程代码执行
漏洞防护
1、及时更新、修复组件漏洞
2、移除不再使用的依赖组件
A07身份识别和身份验证错误
攻击方式
攻击者利用网站应用程序中的身份认证缺陷获取高权限并进行攻击应用服务
漏洞原因
应用程序身份认证系统认证缺陷
漏洞影响
- 允许自动攻击,例如撞库,其中攻击者拥有有效用户名和密码的列表。
- 允许蛮力或其他自动攻击。
- 允许使用默认密码、弱密码或众所周知的密码,例如“Password1”或“admin/admin”。
- 使用弱或无效的凭据恢复和忘记密码流程,例如无法确保安全的“基于知识的答案”。
- 使用纯文本、加密或弱散列密码(请参阅 A3:2017-敏感数据泄露)。
- 缺少或无效的多因素身份验证。
- 在 URL 中公开会话 ID(例如,URL 重写)。
- 成功登录后不要轮换会话 ID。
- 不会正确地使会话 ID 无效。用户会话或身份验证令牌(主要是单点登录 (SSO) 令牌)在注销或一段时间不活动期间未正确失效
漏洞防护
1、要使⽤任何默认凭据进⾏交付或部署,尤其是对于管理员⽤户。
2、实施弱密码检查,例如针对前 10,000 个最差密码列表测试新密码或更改的密码。
3、将密码长度、复杂性和轮换策略与 NIST 800-63b 的第 5.1.1 节中关于记忆秘密的指南或其他现代的、基于证据的密码策略保持⼀致。
4、通过对所有结果使⽤相同的消息,确保注册、凭据恢复和 API 路径能够抵御帐户枚举攻击。
5、限制或增加延迟失败的登录尝试。当检测到凭证填充、暴⼒破解或其他攻击时,记录所有故障并提醒管理员。
6、使⽤服务器端、安全、内置的会话管理器,在登录后⽣成新的⾼熵随机会话 ID。会话 ID 不应在 URL 中,安全存储,并在注销、空闲和绝对超时后失效。
A08软件和数据完整性故障
攻击方式
在不验证完整性的情况下做出与软件更新、关键数据和CI/CD管道相关的假设。
漏洞原因
在对象或数据被编码或序列化为攻击者可以看到和修改的结构的情况下,很容易受到不安全的反序列化的影响。另⼀种形式是应⽤程序依赖来⾃不受信任的来源、存储库和内容交付⽹络 (CDN) 的插件、库或模块。不安全的 CI/CD 管道可能会导致未经授权的访问、恶意代码或系统受损。许多应⽤程序现在包括⾃动更新功能,其中更新在没有充分完整性验证的情况下被下载并应⽤于以前受信任的应⽤程序。攻击者可能会上传⾃⼰的更新以分发并在所有安装上运⾏。
漏洞影响
1、序列化,反序列化漏洞
eg:Fastjson1.2.47和1.2.24 反序列化漏洞(Fastjson命令执行漏洞复现(1.2.47和1.2.24)_whatever`的博客-CSDN博客)
2、⽆需签名即可更新
eg:许多家⽤路由器、机顶盒、设备固件和其他固件不通过签名固件验证更新。未签名固件是攻击者越来越多的⽬标,预计只会变得更糟。这是⼀个主要问题,因为很多时候除了在未来版本中修复并等待以前的版本过时之外,没有任何补救机制。
3、恶意更新
eg:众所周知,国家会攻击更新机制,最近的⼀次著名攻击是 SolarWinds Orion 攻击。开发该软件的公司拥有安全的构建和更新完整性流程。该公司向 18,000 多个组织分发了⼀个⾼度针对性的恶意更新,其中⼤约 100 个组织受到了影响。这是历史上此类性质最深远、最重⼤的违规⾏为之⼀。
漏洞防护
1、确保未签名或未加密的序列化数据不会在没有某种形式的完整性检查或数字签名的情况下 2、发送到不受信任的客户端,以检测序列化数据的篡改或重放
3、通过签名或类似机制验证软件或数据来⾃预期来源
4、确保库和依赖项(例如 npm 或 Maven)使⽤受信任的存储库
5、确保使⽤软件供应链安全⼯具(例如 OWASP Dependency Check 或 OWASP CycloneDX)来验证组件不包含已知漏洞
6、确保您的 CI/CD 管道具有正确的配置和访问控制,以确保流经构建和部署过程的代码的完整性。
A09安全日志记录和监控失败:
攻击方式
对于日志记录的监控不足,造成攻击者攻击系统、应用、盗取数据等操作无法被发现和追查。
漏洞原因
运维或者开发人员并未进行足够的日志记录,或者日志记录被恶意删除
漏洞影响
- 不记录可审计的事件,例如登录、失败登录和高价值交易。
- 警告和错误不会生成、不充分或不清楚的日志消息。
- 不会监控应用程序和 API 的日志是否存在可疑活动。
- 日志仅存储在本地。
- 适当的警报阈值和响应升级流程没有到位或有效。
- DAST 工具(例如 OWASP ZAP)的渗透测试和扫描不会触发警报。
- 应用程序无法实时或接近实时地检测、升级或警告主动攻击
eg:⼀家主要的欧洲航空公司遭遇了 GDPR 可报告的违规⾏为。据报道,该漏洞是由攻击者利⽤的⽀付应⽤程序安全漏洞引起的,他们收集了超过 400,000 条客户⽀付记录。该航空公司因此被隐私监管机构罚款 2000 万英镑。
漏洞防护
1、启用日志监控、告警机制
2、启用异地监控,C/S架构的监制机制
3、确保以⽇志管理解决⽅案可以轻松使⽤的格式⽣成⽇志
4、确保⽇志数据编码正确,以防⽌对⽇志或监控系统的注⼊或攻击。
5、确保⾼价值交易具有带有完整性控制的审计跟踪,以防⽌篡改或删除,例如仅追加数据库表或类似的。
6、尽可能的完整记录所有日志
A10服务器端请求伪造 (SSRF) 概述:
攻击方式
对于日志记录的监控不足,造成攻击者攻击系统、应用、盗取数据等操作无法被发现和追查。
漏洞原因
由于服务端提供了从其他服务器获取数据的功能但没有对目标地址做过滤与限制。攻击者可以利用改漏洞获取内部系统的一些信息(因为它是由服务端发起的,所以它能够请求到与它相连而与外网隔离的内网系统。即使是在有防火墙,VPN获其他类型的网络访问控制列表保护的情况下)。
漏洞影响
1、对外网、服务器所在内网、本地进行端口扫描(如果⽹络架构是未分段的,攻击者可以绘制内部⽹络,并根据连接结果或连接或拒绝 SSRF 负载连接所⽤的时间来确定内部服务器上的端⼝是打开还是关闭。)
2、向内部任意主机的任意端口发送payload来攻击内网服务
3、DOS攻击(请求大文件,始终保持连接Keep-Alive Always)
4、攻击内网的web应用,如直接SQL注入、XSS攻击等
5、利用file、gopher、dict协议读取本地文件、执行命令等
6、可以无视网站CDN
7、远程代码执⾏ (RCE) 。
eg:CVE-2021-21287(vulfocus靶场,详情MiniO未授权SSRF漏洞(CVE-2021-21287)_whatever`的博客-CSDN博客)
修改host头为vps地址;借用vps起一个nc服务,监听811端口,即可获取到该主机的权限。
漏洞防护
1、禁止跳转
2、禁用除http和https外的协议,如:file://、gopher://、dict://等。
3、限制请求的端口为http常用的端口,如 80、443、8080。
4、统一错误信息,避免用户可以根据错误信息来判断远程服务器的端口状态。
5、对请求地址设置白名单或者限制内网IP,以防止对内网进行攻击。
6、 强制执⾏“默认拒绝”防⽕墙策略或⽹络访问控制规则,以阻⽌除基本 Intranet 流量之外的所有流量
7、清理和验证所有客户端提供的输⼊数据
8、不要向客户端发送原始响应
9、注意 URL ⼀致性,以避免 DNS 重新绑定和“检查时间、使⽤时间”(TOCTOU) 竞争条件等攻击。
10、不要通过使⽤拒绝列表或正则表达式来缓解 SSRF。攻击者拥有有效负载列表、⼯具和技能来绕过拒绝列表。
参考文献:
【OWASPTOP10】2021年常见web安全漏洞TOP10排行 - 百度文库
SSRF漏洞原理解析_未完成的歌~的博客-CSDN博客_ssrf漏洞原理
网络安全入门之owasp top10漏洞详解
TOP1-注入
简单来说,注入往往是应用程序缺少对输入进行安全性检查所引起的,攻击者把一些包含指令的数据发送给解释器,解释器会把收到的数据转换成指令执行。常见的注入包括sql注入,--os-shell,LDAP(轻量目录访问协议),xpath(XPath即为XML路径语言,它是一种用来确定XML(标准通用标记语言的子集)文档中某部分位置的语言),HQL注入等。
危害如下:
注入可以导致数据丢失或被破坏,缺乏可审计性或拒绝服务。注入漏洞有时甚至可导致完全接管主机
如何防范:
1.使用安全的API,避免使用解释器
2.对输入的特殊的字符进行ESCAPE转义处理
例子:LIKE '%M%' ESCAPE ‘M’
使用ESCAPE关键字定义了转义字符“M”,告诉DBMS将搜索字符串“%M%”中的第二个百分符(%)作为实际值,而不是通配符
3.使用白名单来规范化的输入验证方法
TOP2-失效的身份认证和会话管理
与认证和会话管理相关的应用程序功能往往得不到正确实施,导致了攻击者可以破坏密码,密钥,会话令牌或实施漏洞冒充其他用户身份
危害如下:
这些漏洞可能导致部分甚至全部账户遭受攻击,一旦攻击成功,攻击者就能执行合法的任何操作
如何防范:
1.使用内置的会话管理功能
2.通过认证的问候
3.使用单一的入口点
4.确保在一开始登录SSL保护的网页
TOP3-跨站XSS
跨站脚本是最普遍的web应用安全漏洞。当应用程序在发送给浏览器的页面中包含用户提供的数据,但没有经过适当验证和转义,就会导致跨站
危害如下:
攻击者在受害者浏览器中执行脚本以劫持用户会话,插入恶意内容,重定向用户,使用恶意软件劫持用户浏览器等
种类:
存储型,反射型,DOM型
如何防范:
1.验证输入
2.编码输出(用来确保输入的字符被视为数据,而不是作为html被浏览器所解析)
TOP4-不安全的对象直接引用
意指一个已经授权的用户通过更改访问时的一个参数,从而访问到原本其并没有得到授权的对象
危害如下:
这种漏洞可以损坏参数所引用的所有数据
如何防范:
1.使用基于用户或会话的间接对象访问,这样可防止攻击者直接攻击为授权资源
2.访问检查:对任何来自不受信源所使用的所有对象进行访问控制检查
3.避免在url或网页中直接引用内部文件名或数据库关键字
4.验证用户输入和url请求,拒绝包含./ ../的请求
TOP5-伪造跨站请求(CSRF)
跨站请求伪造,利用了网站允许攻击者预测特定操作所有细节这一特点。由于浏览器自动发送会话cookie等认证凭证,导致攻击者可以创建恶意的web页面来产生伪造请求。这些伪造的请求很难和合法的请求区分开
危害如下:
攻击者可以让受害者用户修改任何允许修改的数据,执行任何用户允许的操作,例如修改密码,登录注销等
如何防范:
1.给每个HTTP请求添加一个不可预测的令牌,并保证该令牌对每个用户会话来说是唯一的。
最好的办法就是将独有的令牌包含在隐藏字段中,通过HTTP请求发送,避免在URL中暴露出来
2.要求用户重新认证或判断他们是一个真实的用户
TOP6-安全配置错误
安全配置错误可以发生在一个应用程序堆栈的任何层面,包括平台,web服务器,应用服务器,数据库,架构和自定义的代码。攻击者通过访问默认账户,未使用的网页,未安装的补丁的漏洞,未被保护的文件和目录等,以获得对系统为授权的访问
危害如下;
系统可能在未知的情况下被完全攻破,用户数据可能随着时间被全部盗走或篡改。甚至导致整个系统被完全破坏
如何防范:
1.自动化安装部署
2.及时了解并部署每个环节的软件更新和补丁信息
3.实施漏洞扫描和安全审计
TOP7-限制URL访问失败(缺少功能级访问控制)
这个漏洞也是与认证相关的,这种漏洞具体是指在系统已经对url的访问做了限制的情况下,但这种限制并没有生效。常见的例子是系统没有对用户进行角色的检查,以及用户通过修改URL的action并指向未被授权页面就能访问该页面同样是个漏洞
危害如下:
攻击者很容易就能把网址改成享有特权的网页,这样就可以使用匿名或普通用户访问未授保护的私人页面,从而提升未授权功能和相关数据信息
如何防范:
1.检查管理权限的过程并确保能够容易进行升级和审计
2.默认缺省情况下,应该拒绝所有访问的执行权限。对于每个功能的访问,需要明确的角色授权
3.检查每个功能分配的权限合理有效
TOP8-未验证的重定向和转发
在Web应用中重定向是极为普通的,并且通常重定向所引发的目的是带有用户输入参数的目的url,而如果这些重定向未被验证,那么攻击者就可以引导用户访问他们想要用户访问的站点
同样,转发也是极为普遍的,本质上转发是在同一个应用中对一个新页面发送请求,并且有时是用参数来定义目标页面的。同样,如果参数未被验证,那么攻击者就可以利用其来绕过认证或是授权检查
危害如下:
攻击者通过重定向可以试图安装恶意软件或诱使受害人泄露密码等敏感信息,通过转发可以绕过访问限制
如何防范:
1.避免使用重定向和转发
2.如果使用了,不要在确定目标时涉及到用户参数
3.如果无法避免使用用户参数,则应确保目标参数值对于当前用户是有效的并已授权
如果是需要登录的,可以从session当中获取登录信息,然后判断
TOP9-应用已知脆弱性的组件
应用程序使用带有已知漏洞的组件会破坏应用程序防御系统,可能导致严重的数据丢失或服务器接管
如何防范:
1.识别正在使用的组件和版本,包括所有的依赖
2.更新组件或引用的库文件到最新
3.建立安全策略来管理组件的使用
TOP10-敏感信息暴露 这个好像没什么可说的,就注重对敏感数据的保护即可
以上是关于web漏洞类型概述(owasp top10笔记)的主要内容,如果未能解决你的问题,请参考以下文章