OWASP TOP10 介绍:
OWASP TOP 10漏洞是指由Open Web Application Security Project(OWASP)发布的十大最严重、最普遍的Web应用程序安全漏洞。这些漏洞在当今的Web应用程序中非常普遍,而且具有很高的危害性。因此被视为web应用程序安全领域必须认真防范和修复的关键问题。而且大家去应聘安全测试岗位或有安全技能要求的软件测试岗位,熟悉OWASP TOP 10漏洞是必备要求。
OWASP官网:http://www.owasp.org.cn/
下面对OWASP TOP 10进行逐一介绍
A1:Injection(注入漏洞)
注入漏洞(Injection)指的是攻击者通过向Web页面或应用程序输入恶意数据,从而实现对Web页面或应用程序的攻击和控制。注入漏洞主要是由于没有正确的检验和过滤用户输入的数据,导致恶意代码得以执行,从而导致数据泄露,数据篡改,系统被控等。
注入漏洞包括SQL注入、OS注入、LDAP(轻量级目录访问协议)注入等。
SQL注入基本流程:
危害:
获取敏感数据:获取网站管理员账号、密码等。绕过登陆验证:使用万能密码登陆网站后台等。文件系统操作:列目录、读取或写入文件等。注册表操作:读取、写入、删除注册表等。执行系统命令:远程执行命令。
防御方式:
关闭SQL错误回显。前端输入字符串验证(长度,类型等)。对输入的特殊字符进行转义处理。限制SQL服务的远程访问,只开放给特定开发人员。SQL服务运行于专门的账号,并且使用最小权限。使用成熟的waf。代码审计,最有效检测应用程序注入风险的方法之一。
A2:失效的身份认证
通过错误使用应用程序的身份认证和会话管理功能,攻击者能够破译密码、密钥或会话令牌,或者利用其他开发缺陷来暂时性或永久性冒充其他用户的身份。在开发web应用程序时,开发人员往往只关注Web应用程序所需的功能,所以常常会建立自定义的认证和会话方案。但是要正确的实现这些方案却是很难的。结果就在退出、密码管理、超时、密码找回、账户更新等方面存在漏洞。
危害:
可能导致部分甚至全部账户遭受攻击,一旦攻击成功,攻击者就能执行合法的任何操作,导致账户被劫持或未授权访问。
防御方式:
使用内置的会话管理功能。通过认证的问候。使用单一的入口点。实施强密码策略、多因素认证等。
A3:敏感数据泄露
敏感信息包括密码、财务数据、医疗数据等,由于web应用或者API未加密或不正确的保护敏感数据,这些数据极易遭到攻击者利用,攻击者可能使用这些数据来进行一些犯罪行为,因此,未加密的信息极易遭到破坏和利用,我们应该加强对敏感数据的保护,web应用应该在传输过程中数据、存储的数据以及和浏览器的交互时的数据进行加密,以保证数据安全性。
危害:
个人敏感信息泄露可能会造成受害人收到垃圾短信、垃圾邮件、骚扰电话、冒名办卡消息,甚至可能造成受害人个人名誉受损、遭遇电信诈骗、账户资金遭到盗取等严重情况。机构敏感信息泄露,可能使得该机构经济利益、公众声望等受到损失,甚至面临诉讼等法律指控。泄露国家秘密会严重损害国家的安全和利益。
防御方式:
对系统处理、存储或传输的数据分类,并根据分类进行访问控制。对重要数据进行加密存放,数据在传输过程中使用密文进行传输。及时清理没有用的敏感数据,只能使用指定用户访问敏感数据。对应用网站目录定期扫描。对于github泄露,定期对仓库扫描。
A4:XML外部实体(XXE)
XXE 全称为XML External Entity attack 即XML(可扩展标记语言) 外部实体注入攻击,早期或配置错误的XML处理器评估了XML文件外部实体引用,攻击者可以利用这个漏洞窃取URI(统一资源标识符)文件处理器的内部文件和共享文件、监听内部扫描端口、执行远程代码和实施拒绝服务攻击。
攻击方式:
当应用程序解析 XML文件时包含了对外部实体的引用,攻击者传递恶意包含 XML 代码的文件,读取指定的服务器资源。
危害:
导致可加载恶意外部文件、读取任意未授权文件。恶意消耗内存进行DOS攻击。探测内网信息,比如检测服务、内网端口扫描、攻击内网网站等。命令执行、目录遍历等。由于有些XML解析库支持列目录,攻击者通过列目录、读文件,获取账号密码后进一步攻击,比如读取tomcat-users.xml得到账号密码后登录tomcat的manager部署webshell。
防御方式:
关闭DTD(Date Type Definition)。禁止外部实体引入。过滤用户提交的XML数据。
A5:无效的访问控制(业务逻辑漏洞)
失效的访问控制就是越权访问漏洞,未对通过身份认证的用户实施恰当的访问控制。攻击者可以利用这些缺陷访问未经授权的功能或数据,例如:访问其他用户的账户、查看敏感文件、修改其他用户数据,更改访问权限等。
水平越权:同级别权限用户的权限控制失效,攻击者可以从普通用户A的权限提升到普通用户B的权限访问应用程序。
垂直越权:低权限用户可以访问更高权限才能访问的页面。
危害:
失效的访问控制通常导致未经授权的信息泄露、修改或销毁所有数据、或在用户权限之外执行业务功能。攻击者可以冒充用户、管理员或拥有特权的用户,或者创建、访问、更新或删除任何记录。
防御方式:
对参数的白名单过滤。对权限的管控管理重新设计与限制。限制下载文件的类型。
A6:安全配置错误
安全配置错误是比较常见的漏洞,由于操作者的不当配置(默认配置,临时配置,开源云存储,http标头配置以及包含敏感信息的详细错误),导致攻击者可以利用这些配置获取到更高的权限。因此,我们不仅需要对所有操作系统、框架、库和应用程序等进行安全配置,而且必须及时修补和升级它们。安全配置错误可以发生在各个层面,包含平台、web服务器、应用服务器、数据库、架构和代码。
危害:
未授权访问:可能导致未经授权的用户或者攻击者获得对系统、应用程序或设备的访问权限。攻击者可以利用这个漏洞获取敏感数据、执行恶意操作,甚至完全控制受影响的系统。数据泄露:可能导致敏感数据的泄露。例如,数据库没有正确设置访问权限,攻击者可以非法访问数据库,获取用户个人信息、财务数据等敏感数据,从而造成个人隐私泄露。服务中断:可能导致系统或应用程序遭受拒绝服务攻击(DDoS)或其他形式的恶意攻击,从而导致服务中断或系统崩溃。这会严重影响组织的业务连续性和用户体验。
可能收到攻击的应用程序:
缺少适当的安全加固、云服务的权限配置错误默认账户密码仍然没有更改错误处理机制向用户披露堆栈跟踪或其他大量错误信息应用程序启用或安装了不必要的功能(端口、服务、网页、账户或权限等)应用程序服务器、应用程序框架(如:Struts、Spring、ASP.NET)、库文件、数据库没有进行安全配置
防御方式:
搭建最小化平台,该平台不包含任何不必要的功能、组件、文档和示例。移除或不安装不适用的功能和框架。在所有环境中能够正确安全配置和设置自动化过程。检查和修复安全配置项来适应最新的安全说明、更新和补丁,并将其作为更新管理过程的一部分,在检查过程中应特别注意云存储权限(如:S3桶权限)。实施漏洞扫描和安全审计。
A7:跨站脚本(XSS)
跨站脚本攻击XSS(Cross Site Scripting),为了不和层叠样式表CSS(Cascading Style Sheets)的缩写混淆,故将跨站脚本攻击缩写为XSS。恶意攻击者往Web页面里插入恶意Script代码,当用户浏览该页之时,嵌入其中Web里面的Script代码会被执行,从而达到恶意攻击用户的目的。XSS攻击针对的是用户层面的攻击。
分类:
反射型:非持久化,需要欺骗用户自己去点击链接才能触发XSS代码(服务器中没有这样的页面和内容),一般容易出现在搜索页面。存储型:存储型XSS,持久化,代码是存储在服务器中的,如在个人信息或发表文章等地方,插入代码,如果没有过滤或过滤不严,那么这些代码将储存到服务器中,用户访问该页面的时候触发代码执行。这种XSS比较危险,容易造成蠕虫,盗窃cookie。DOM型: 不经过后端,DOM-XSS漏洞是基于文档对象模型(Document Objeet Model,DOM)的一种漏洞,攻击者向服务器发送一个带有恶意JS代码的请求,服务器的响应不会以任何形式包含攻击者的脚本。当用户的浏览器处理这个响应时,DOM对象就会处理XSS代码,导致存在XSS漏洞。
危害:
窃取用户信息:攻击者可以通过XSS漏洞窃取用户的cookie或其他敏感信息,如账户密码,浏览历史,IP地址等,这些信息的泄露可能导致用户遵守财产损失或隐私被侵犯。会话劫持:通过篡改或窃取应用cookie,攻击者可以进行会话劫持,冒充真实用户访问受保护的资源。钓鱼攻击:XSS漏洞可以用于钓鱼攻击,将用户重定向到恶意网站,诱骗用户提供个人信息或登录凭证。中间人攻击:攻击者可以通过XSS漏洞代理转发流经攻击者的所有web流量,实施中间人攻击,窃取或篡改数据。恶意代码执行:XSS漏洞允许攻击者在受害者的浏览器中执行恶意Javascript代码,这不仅可以导致页面内容被篡改,还可能激活木马程序或其他恶意软件。破坏网站信息:通过在网站上注入恶意内容,XSS攻击可以破坏网站的信誉,导致用户流失。
防御方式:
输入验证:对所有用户输入进行严格的验证,确保他们符合预期的格式和类型。输出编码:对于从服务器传递到客户端的数据,使用适当的编码方法(如HTML编码,Javascript编码或ULR编码)来防止恶意脚本的执行。使用HTTPOnly Cookie:设置cookie属性为HTTPOnly,可以防止JavaScript访问cookie,从而较少XSS攻击的风险。内容安全策略(csp):通过定义一个内容安全策略(CSP),限制网页可以加载和执行的内容来源,可以有效防止XSS攻击,CSP可以帮助阻止恶意脚本的执行,因为它限制了那些外部资源可以加载到页面上。黑名单和白名单过滤:通过黑名单过滤已知的危险元素,如