TOP1 注入
注入的概念
注入通常是指将不受信任的数据作为命令或查询的一部分发送到解析器时,会产生诸如SQL注入、OS注入和LDAP注入的注入缺陷。攻击者的恶意数据可以诱使解析器在没有适当授权的情况下执行非预期命令或访问数据。
注入的分类
基于数据库类型分类:字符串类型注入、整型注入
基于程度和顺序的注入:一阶注射、二阶注射
基于从服务器接收到的响应
基于错误的SQL注入
联合查询的类型
堆查询注射
SQL盲注
基于布尔SQL盲注、基于时间的SQL盲注、基于报错的SQL盲注
SQL注入产生点:
表单注入:post里面的参数
cookie注入
服务器变量注入
注入常见检测字符:
‘ “ - -+ # and or xor
思路:
判断是否存在注入,是字符型还是数字型
猜sql查询的字段数
确定字段的顺序
获取当前数据库
获取数据库的表
猜数据
TOP2 敏感数据泄露
介绍
近年来,敏感数据泄露已经成为了最常见、最具影响力的攻击之一。一般敏感信息包括密码、财务数据、医疗数据等,由于Web应用或API未加密或不正确地保护敏感数据,这些数据极易遭到攻击者利用。攻击者可能使用这些数据进行犯罪行为。因此,未加密的信息极易遭到破坏和利用。不久前,Facebook泄露了用户的大量信息,12306也多次泄露用户的信息。现在信息泄露已经成为了OWASP Top 10中排名前三的漏洞之一,可想而知敏感信息泄露现在已经成为十分严重的问题。
防御
1:对系统处理、存储或传输的数据分类,并根据分类进行访问控制。
2:对重要数据进行加密存放,数据在传输过程中使用密文进行传输。
3:及时清理没有用的敏感数据,只能使用指定用户访问敏感数据。
TOP3 失效的身份认证
介绍
通过错误使用应用程序的身份认证和会话管理功能,攻击者能够破译密码、密钥或会话令牌,或者暂时或永久地冒充其他用户的身份。
身份认证:身份认证最常用于系统登录,形式一般为用户名加密码的登录方式。在安全性要求较高的情况下,还有验证码、客户端证书、Ukey等。
会话管理:HTTP利用会话机制来实现身份认证,HTTP身份认证的结果往往是获得一个令牌并放在cookie中。之后的身份识别只需读取授权令牌。如果授权令牌认证成功,那么就无需再次进行登录认证。
防御
防御失效身份和会话管理的方法:
1:区分公共区域和受限区域:站点的公共区域允许匿名用户访问,但是站点的受限区域只允许指定用户访问。
2:支持密码的有效期:向用户提供可以在一段时间后修改密码的功能。
3:能够禁用账户:在收到攻击后可以禁用账户来避免遭受进一步的损失。
4:要求用户使用强密码。
5:不要在网络上以纯文本方式传输用户名和密码:使用SSL对数据流进行加密,也可以对cookie进行加密。
TOP4 跨站脚本(XSS)
介绍
XSS(Cross Site Scripting)攻击是指恶意攻击者向Web页面中插入恶意Script代码,当用户浏览该页面时,Web中的Script代码会被执行,从而达到攻击用户的目的。XSS攻击针对的是用户层面的攻击。
分类
XSS分为三类:反射型XSS、存储型XSS、DOM型XSS。
原理
- 存储型XSS:持久化,代码是存储在服务器中的,如在个人信息或发表文章等地方,插入代码,如果没有过滤或过滤不严,那么这些代码将储存到服务器中,用户访问该页面的时候触发代码执行。这种XSS比较危险,容易造成蠕虫,盗窃cookie。
- 反射型XSS:非持久化,需要欺骗用户自己去点击链接才能触发XSS代码(服务器中没有这样的页面和内容),一般容易出现在搜索页面。
- DOM型XSS:不经过后端,DOM-XSS漏洞是基于文档对象模型(Document Object Model, DOM)的一种漏洞,攻击者向服务器发送一个带有恶意JS代码的请求,服务器的响应不会以任何形式包含攻击者的脚本。当用户的浏览器处理这个响应时,DOM对象就会处理XSS代码,导致存在XSS漏洞。
防御
- 对于存储型XSS,后台应编写过滤器,对一些HTML标签和特殊的字符进行转义。
- 对于反射型XSS,特殊字符需要进行转义。
- 对于DOM型XSS,需要检查是否包含一些特殊的函数可以造成危害的地方。
- 对于截取cookie的XSS的防御可以在cookie上添加HttpOnly属性。
TOP5 外部实体(XXE)
介绍
XXE(XML External Entity Injection)外部实体注入漏洞,攻击者可以构造恶意的XML代码,在XML引用外部实体时进行注入,从而造成任意文件读取、命令执行甚至服务器中断等安全问题。XML是一种允许用户对自己的标记语言进行定义的源语言,用于标识电子文件使其具有结构性的标识语言。
防御
- 使用开发语言提供的禁用外部实体的方法。
- 过滤用户提交的XML数据。
TOP6 安全配置错误
介绍
安全配置错误是比较常见的漏洞,由于操作者的不当配置(如默认配置、临时配置、开源云存储、HTTP标头配置以及包含敏感信息的详细错误),导致攻击者可以利用这些配置获取到更高的权限,安全配置错误可以发生在各个层面,包含平台、Web服务器、应用服务器、数据库、架构和代码。
防御
- 使用的服务不包含任何不必要的功能、组件、文档和示例,移除或不安装不适用的功能和框架。
- 及时检测系统服务版本,为已发现的漏洞打补丁。
- 在对文件等分配权限时,根据其工作需要采取最小权限原则的方法。
- 自动化安装部署。
- 实施漏洞扫描和安全审计。
TOP7 失效的访问控制
介绍
访问控制是指保护资源不被非法访问和使用,目前应用最多的是基于角色的访问控制机制。失效的访问控制就是攻击者通过各种手段提升自己的权限,越过访问控制,使访问控制失效,这样攻击者就可以冒充用户、管理员或拥有特权的用户,或者创建、访问、更新或删除任何记录。
防御
- 除公有资源外,其他资源默认情况下拒绝访问。
- 使用一次性的访问控制机制,并在整个应用程序中不断重用它们。
- 建立访问控制模型以强制执行所有权记录,而不是接受用户创建、读取、更新或删除的任何记录。
- 当用户注销后,服务器上的JWT令牌应失效。
TOP8 不安全的反序列化
介绍
序列化 (Serialization)是将对象的状态信息转换为可以存储或传输(一般是以二进制的形式保存)的形式的过程。反序列化即是把字节流转变为对象。如果应用对恶意构造的用户输入的数据进行反序列化,这样就会产生非预期的对象,从而有可能产生远程代码执行。或者应用中存在可以在反序列化过程中或者之后被改变行为的类,则攻击者可以通过改变应用逻辑或者实现远程代码执行攻击。这种漏洞被称为对象和数据结构攻击。
原理
在 Java 中,可以使用 ObjectInputStream 类的 readObject 方法来实现反序列化。防御措施包括:
- 最安全的方法是不接受来自不受信源的序列化对象,或使用只允许原始数据类型的序列化媒体。
- 反序列化之前,先进行严格的数据类型校验。由于校验规则容易被攻击者探索出来,进而容易被绕过,因此防御不能仅依赖这一个手段,但可以作为完整性校验防御方案的补充。
- 隔离运行那些在低特权环境中反序列化的代码。
- 对反序列化过程进行详尽的日志记录,监控反序列化过程,在发现疑似反序列化攻击时进行警报。
TOP9 使用含有已知漏洞的组件
介绍
现在的服务器都需要使用很多的组件,组件(例如:库、框架和其他软件模块)运行和应用程序相同的权限。如果使用含有已知漏洞的组件,这样的攻击可以造成严重的数据丢失或服务器接管。使用含有已知漏洞的组件的应用程序和 API,可能会破坏应用程序防御、造成各种攻击并产生严重影响。
防御
- 识别正在使用的组件和版本,包括所有的依赖。
- 更新组件或引用的库文件到最新。
- 建立安全策略来管理组件的使用。
TOP10 不足的日志记录和监控
介绍
不足的日志记录和监控,以及事件响应集成的丢失或无效,使得攻击者能够进一步攻击系统、保持持续性或转向更多系统,以及篡改、提取或销毁数据。大多数缺陷研究显示,缺陷被检测出的时间超过200天,并且通常通过外部检测方检测,而不是通过内部进程或监控检测。
日志记录是一个系统的最重要的功能之一。日志记录包括登录成功记录、登录失败记录、访问控制记录等,用来记录服务器的各种信息。
防御
- 确保所有登录、访问控制失败、输入验证失败能够被记录到日志中去,并保留足够的用户上下文信息,以识别可疑或恶意帐户,并为后期取证预留足够时间。
- 建立有效的监控和告警机制,使可疑活动在可接受的时间内被发现和应对。
- 完善日志系统,使其可以监控各种日志信息。
- 及时对日志系统进行备份,并保存足够长时间。