OWASP-TOP10
青 叶

思来想去还是觉得应该整理一下。

0x1 Injection - 注入

将不受信任的数据作为命令或查询的一部分发送到解析器时,会产生诸如SQL注入、NoSQL注入、OS注入和LDAP注入的注入缺陷。攻击者的恶意数据可以诱使解析器在没有适当授权的情况下执行非预期命令或访问数据。

其可能造成的危害:注入可以导致数据丢失或被破坏,缺乏可审计性或拒绝服务。注入漏洞有时甚至可导致完全接管主机

常见的注入类型如下:

  • sql注入
  • LDAP(轻量目录访问协议)
  • xpath
  • HQL注入

如何防御:

  1. 使用安全API,避免直接拼接语句
  2. 对输入的特殊字符进行ESCAPE转义处理
  3. 严格白名单

0x2 失效的身份认证

通常,通过错误使用应用程序的身份认证和会话管理功能,攻击者能够破译密码、密钥或会话令牌,或者利用其它开发缺陷来暂时性或永久性冒充其他用户的身份。

其可能造成的危害:这些漏洞可能导致部分甚至全部账户遭受攻击,一旦攻击成功,攻击者就能执行合法的任何操作

如何防御:

  1. 使用内置的会话管理模块(前提是该模块足够安全)
  2. 单一入口点
  3. 使用SSL加密双方数据

0x3 敏感数据泄露

许多Web应用程序和API都无法正确保护敏感数据,例如:财务数据、医疗数据和PII数据。攻击者可以通过窃取或修改未加密的数据来实施信用卡诈骗、身份盗窃或其他犯罪行为。未加密的敏感数据容易受到破坏,因此,我们需要对敏感数据加密,这些数据包括:传输过程中的数据、存储的数据以及浏览器的交互数据。

其可能造成的危害:一旦出现敏感数据泄露,就有可能让客户遭受到钓鱼攻击等。

如何防御:

  1. 规范化API请求,禁止未授权请求
  2. 严格配置htaccess,禁止未授权访问敏感系统以及路径
  3. 加密敏感数据

0x4 XXE - XML外部实体注入

XXE 全称为XML External Entity attack 即XML(可扩展标记语言) 外部实体注入攻击,

许多较早的或配置错误的XML处理器评估了XML文件中的外部实体引用。攻击者可以利用外部实体窃取使用URI文件处理器的内部文件和共享文件、监听内部扫描端口、执行远程代码和实施拒绝服务攻击。

其可能造成的危害:存在XXE漏洞的系统可能遭受Dos攻击,攻击者还可以利用XXE下载服务器的文件,更甚至攻击者可以执行任意命令从而GetShell或精心构造SSRF进而漫游内网。

如何防御:

  1. 禁用外部实体
  2. 关键字黑名单,检测ENTITY等关键词

0x5 失效的访问控制

未对通过身份验证的用户实施恰当的访问控制。攻击者可以利用这些缺陷访问未经授权的功能或数据,例如:访问其他用户的帐户、查看敏感文件、修改其他用户的数据、更改访问权限等。

其可能造成的危害:这种漏洞可以损坏参数所引用的所有数据

如何防御:

  1. 使用基于用户或会话的间接对象访问,这样可以防止攻击者直接攻击未授权资源
  2. 访问检查:对任何来自不受信源所使用对象进行访问控制检查
  3. 避免在URL或网页连接中直接引用内部文件名或数据库关键字
  4. 验证用户输入和URL请求,禁止目录穿梭

0x6 安全配置错误

安全配置错误是最常见的安全问题,这通常是由于不安全的默认配置、不完整的临时配置、开源云存储、错误的HTTP 标头配置以及包含敏感信息的详细错误信息所造成的。因此,我们不仅需要对所有的操作系统、框架、库和应用程序进行安全配置,而且必须及时修补和升级它们。

其可能造成的危害:系统可能在未知的情况下被完全攻破,用户数据可能随着时间被全部盗走或篡改。甚至导致整个系统被完全破坏

如何防御:

  1. 如果使用成熟的框架或软件,请执行自动化安装部署程序
  2. 持续关注软件部署的每个环节、注意官方是否发布安全补丁
  3. 安装或更新后及时对系统进行漏洞扫描以及安全审计,及时发现配置错误

0x7 跨站脚本 - XSS

xss攻击全称为跨站脚本攻击,

当应用程序的新网页中包含不受信任的、未经恰当验证或转义的数据时,或者使用可以创建HTML或JavaScript 的浏览器API 更新现有的网页时,就会出现XSS 缺陷。XSS 让攻击者能够在受害者的浏览器中执行脚本,并劫持用户会话、破坏网站或将用户重定向到恶意站点。

其可能造成的危害:攻击者在受害者浏览器中执行脚本以劫持用户会话,插入恶意内容,重定向用户,使用恶意软件劫持用户浏览器等

XSS的种类:

  • 存储型 (危害巨大)
  • 反射型
  • DOM型

如何防御:

  1. 验证用户的输入
  2. 实体化转义后输出,确保用户的输入作为了数据而不是HTML代码
  3. 使用成熟的前端UI框架,如ElementUI

0x8 不安全的反序列化

不安全的反序列化会导致远程代码执行。即使反序列化缺陷不会导致远程代码执行,攻击者也可以利用它们来执行攻击,包括:重播攻击、注入攻击和特权升级攻击。

其可能造成的危害:攻击者恶意构造的数据在服务端反序列化时引起的远程代码执行。

如何防御:

  1. 不反序列化不可信的数据
  2. 签名反序列化数据,在反序列化前验签
  3. 反序列化接口进行访问控制
  4. 及时安装项目依赖的安全更新

0x9 使用含有已知漏洞的组件

组件(例如:库、框架和其他软件模块)拥有和应用程序相同的权限。如果应用程序中含有已知漏洞的组件被攻击者利用,可能会造成严重的数据丢失或服务器接管。同时,使用含有已知漏洞的组件的应用程序和API可能会破坏应用程序防御、造成各种攻击并产生严重影响。

可能造成的危害:包含但不限于数据泄露、数据丢失、系统瘫痪、RCE等等

如何防御:

  1. 明确正在使用的组件或依赖的版本
  2. 使用LTS频道的组件或依赖并及时关注其安全更新
  3. 建立完善的安全策略管理组件

PS:尤其是Java的生态,有许多网站都使用的旧版本的依赖组件等,很容易产生安全问题。

0xA 不足的日志记录和监控

对不足的日志记录及监控的利用几乎是每一个重大安全事件的温床。系统应该具有足够的监控策略在攻击者试图进行渗透测试之后留下足够的日志记录,能够反映攻击者进行了什么样的攻击行为。

可能造成的危害:系统被攻破后一无所知,被攻击者持续控制等等

对于这点,没有防御措施,但是一个良好的日志记录和监控,应该具备以下要点:

  1. 确保对所有的登录失败,访问控制失败,输入验证失败留下足够的上下文信息,并为后期的数字取证留下足够的时间保存。
  2. 建立有效的检测和告警机制,保留足够的反应处理时间。

注意,没有系统可以真正的安全,因此,你还应:

  • 建立和采取一个应急响应机制和灾后恢复方案