一、写在前边
临近毕业,最近在找实习单位,看到好多招聘要求熟悉owasp top 10 安全漏洞,于是在经过一番查资料,终于有了大致的了解,为了加深印象,特意通过博客记录一下,也希望为有同样需求的同学提供一个参考,不足之处还请各位指出。
二、介绍
OWASP:开放式Web应用程序安全项目(Open Web Application Security Project),OWASP是一家国际性组织机构,并且是一个开放的、非盈利组织,它致力于协助政府、企业开发、升级各类应用程序以保证其可信任性。所有OWASP的工具、文档、研讨以及所有分会都对任何就应用安全领域感兴趣的人士自由开放。其最具权威的就是“10项最严重的Web 应用程序安全风险列表” ,总结了Web应用程序最可能、最常见、最危险的十大漏洞,是开发、测试、服务、咨询人员应知应会的知识,不过OWASP每四年发布一次,现在最新的OWASP是2017年的,在2021年会更新最新的OWASP top 10。
三、漏洞详解
1、注入
(1)注入的概念
注入通常是指:将不受信任的数据作为命令或查询的一部分发送到解析器时,会产生诸如SQL注入、OS注入和LDAP注入的注入缺陷。攻击者的恶意数据可以诱使解析器在没有适当授权的情况下执行非预期命令或访问数据。
(2)注入的分类
通常注入有sql注入和os(Operating System)注入
- SQL注入:就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。具体来说,它是利用现有应用程序,将(恶意)的SQL命令注入到后台数据库引擎执行的能力,它可以通过在Web表单中输入(恶意)SQL语句得到一个存在安全漏洞的网站上的数据库,而不是按照设计者意图去执行SQL语句。
sql注入的防御
1:对输入进行严格的转义和过滤。
2:数据类型进行严格定义,数据长度进行严格规定。
3:通过waf设备启用防止sql注入的策略。
4:严格限制网站访问数据库的权限。
- os注入:Web开发所使用的编程语言中,大多数都能通过Shell执行OS(操作系统)命令。通过Shell执行OS命令时,或者开发中用到的某个方法其内部利用了Shell时,就有可能出现OS命令被任意执行的情况。这种现象被称为OS命令注入。
os注入的防御
1:使用安全的函数对传递给OS命令参数进行转义。
2:不将外界输入的字符串传递给命令行参数。
3:选择不调用OS命令的实现方法。
不调用利用shell的功能,既能杜绝了OS命令注入漏 洞混入的可能性,又消除了调用OS命令的而系统开销,能够从多方面提高应用的性能。
2、敏感数据泄露
(1)介绍
近年来,敏感数据泄露已经成为了一最常见、最具影响力的攻击,一般我们的敏感信息包括密码、财务数据、医疗数据等,由于web应用或者API未加密或不正确的保护敏感数据,这些数据极易遭到攻击者利用,攻击者可能使用这些数据来进行一些犯罪行为,因此,未加密的信息极易遭到破坏和利用,不久前就爆出过Facebook泄露了用户的大量信息,以及12306也多次泄露用户的信息。现在信息泄露已经成为了owasp top 10中排名前三的漏洞之一,可想而知敏感信息泄露现在已经成为十分严重的问题。
(2)防御
1:对系统处理、存储或传输的数据分类,并根据分类进行访问控制。
2:对重要数据进行加密存放,数据在传输过程中使用密文进行传输。
3:及时清理没有用的敏感数据,只能使用指定用户访问敏感数据。
3、失效的身份认证
(1)介绍
通过错误使用应用程序的身份认证和会话管理功能,攻击者能够破译密码、密钥或会话令牌,或者暂时或永久的冒充其他用户的身份。
身份认证:身份认证最常用于系统登录,形式一般为用户名加密码的登录方式,在安全性要求较高的情况下,还有验证码、客户端证书、Ukey等。
会话管理:HTTP利用会话机制来实现身份认证,HTTP身份认证的结果往往是获得一个令牌并放在cookie中,之后的身份识别只需读取授权令牌,如果授权令牌认证成功,那么就无需再次进行登录认证。
(2)防御
防御失效身份和会话管理的方法
1:区分公共区域和受限区域:站点的公共区域允许匿名用户访问,但是站点的受限区域只允许指定用户访问。
2:支持密码的有效期:向用户提供可以在一段时间后修改密码的功能。
3:能够禁用账户:在收到攻击后可以禁用账户来避免遭受进一步的损失。
4:要求用户使用强密码。
5:不要在网络上以纯文本方式传输用户名和密码:使用SSL对数据流进行加密,也可以对cookie进行加密。
4、跨站脚本(xss)
(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:存储型: 后台编写过滤器,对一些html标签和特殊的字符进行转义。
2:反射型:特殊字符的转义。
3:DOM型:检查是否包含一些特殊的函数可以造成危害的地方。
4:对于截取cookie的XSS的防御可以在cookie上添加HttpOnly。
5、外部实体(XXE)
(1)介绍
XXE(XML External Entity Injection)外部实体注入漏洞,XML在引用外部实体是的时候,攻击者可以构造恶意的XML代码,以造成任意文件读取、命令执行甚至是中断服务器。
XML用于标识电子文件使其具有结构性的标识语言,可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言。XML文档结构包括XML声名、DTD文档类型定义、文档元素。
(2)防御
1:使用开发语言提供的禁用外部实体的方法。
2:过滤用户提交的XML数据。
6、安全配置错误
(1)介绍
安全配置错误是比较常见的漏洞,由于操作者的不当配置(默认配置,临时配置,开源云存储,http标头配置,以及包含敏感信息的详细错误),导致攻击者可以利用这些配置获取到更高的权限,安全配置错误可以发生在各个层面,包含平台、web服务器、应用服务器、数据库、架构和代码。
(2)防御
1:使用的服务不包含任何不必要的功能、组件、文档和示例,移除或不安装不适用的功能和框架。
2:及时检测系统服务版本,为已发现的漏洞打补丁。
3:在对文件等分配权限时,根据其工作需要采取最小权限原则的方法。
4:自动化安装部署。
5:实施漏洞扫描和安全审计。
7、失效的访问控制
(1)介绍
访问控制:即保护资源不被非法访问和使用,目前应用最多的是基于角色的访问控制机制。失效的访问控制就是攻击者通过各种手段提升自己的权限,越过访问控制,使访问控制失效,这样攻击者就可以冒充用户、管理员或拥有特权的用户,或者创建、访问、更新或删除任何记录。
(2)防御
1:除公有资源外,其他资源默认情况下拒绝访问。
2:使用一次性的访问控制机制,并在整个应用程序中不断重用它们。
3:建立访问控制模型以强制执行所有权记录,而不是接受用户创建、读取、更新或删除的任何记录。
4:当用户注销后,服务器上的JWT令牌应失效。
8、不安全的反序列化
(1)介绍
序列化:序列化 (Serialization)是将对象的状态信息转换为可以存储或传输(一般是以二进制的形式保存)的形式的过程。
反序列化: 与序列化的过程刚好相反。
(2)原理
序列化即是把对象转变为字节流,存放在内存、文件数据库中,而反序列化即是把字节流转变为对象。在java中有一个ObjectOutputStream类的writeobject方法可以实现序列化,而ObjectInputStream类的Readobject方法可以实现反序列化。该漏洞的原因出自于如果应用对恶意构造的用户输入的数据进行反序列化,这样就会产生非预期的对象,从而有可能产生远程代码执行。或者应用中存在可以在反序列化过程中或者之后被改变行为的类,则攻击者可以通过改变应用逻辑或者实现远程代码执行攻击。我们将其称为对象和数据结构攻击。
(3)防御
1:最安全的方法是不接受来自不受信源的序列化对象,或使用只允许原始数据类型的序列化媒体。
2:反序列化之前,先进行严格的数据类型校验。由于校验规则容易被攻击者探索出来,进而容易被绕过,因此防御不能仅依赖这一个手段,但可以作为完整性校验防御方案的补充。
3:隔离运行那些在低特权环境中反序列化的代码。
4:对反序列化过程进行详尽的日志记录,监控反序列化过程,在发现疑似反序列化攻击时进行警报。
9、使用含有已知漏洞的组件
(1)介绍
由于现在的服务器都需要使用很多的组件,组件(例如:库、框架和其他软件模块)运行和应用程序相同的权限。如果使用含有已知漏洞的组件,这样的攻击可以造成严重的数据丢失或服务器接管。使用含有已知漏洞的组件的应用程序和API,可能会破坏应用程序防御、造成各种攻击并产生严重影响。
(2)防御
1:识别正在使用的组件和版本,包括所有的依赖。
2:更新组件或引用的库文件到最新。
3:建立安全策略来管理组件的使用。
10、不足的日志记录和监控
(1)介绍
不足的日志记录和监控,以及事件响应集成的丢失或无效,使得攻击者能够进一步攻击系统、保持持续性或转向更多系统,以及篡改、提取或销毁数据。大多数缺陷研究显示,缺陷被检测出的时间超过200天,并且通常通过外部检测方检测,而不是通过内部进程或监控检测。
日志记录:日志记录是一个系统的最重要的功能之一。日志记录包括登录成功记录、登录失败记录、访问控制记录等,用来记录服务器的各种信息。
(2)防御
1:确保所有登录、访问控制失败、输入验证失败能够被记录到日志中去,并保留足够的用户上下文信息,以识别可疑或恶意帐户,并为后期取证预留足够时间。
2:建立有效的监控和告警机制,使可疑活动在可接受的时间内被发现和应对。
3:完善日志系统,使其可以监控各种日志信息。
4:及时对日志系统进行备份,并保存足够长时间。
四、意义
OWASP Top 10是一个高度提炼的输出,现实的意义在于帮助和指导开发者、安全测试人员、web应用安全管理团队,提高风险意识。其对于安全厂商的产品能力提升也有指导意义。对于web安全风险管理以及企业安全建设,建议企业对照列表(需注意,OWASP历年来一直强调“不要停滞于OWASP Top 10”)结合自身环境、梳理影响自身应用安全的主要风险因素,并采取有重点的保护防范措施,在人员、流程以及技术层面进行提升。
五、结语
经过对owasp top 10的简单认识,接下来可以通过复现部分漏洞来加深印象,这样也有助于大家更好的理解漏洞的原理,刚入门网安的小白一个,大家共勉!