TWO DAY | WEB安全之OWASP TOP10漏洞

TWO DAY | WEB安全之OWASP TOP10漏洞

一、OWASP简介

OWASP:开放式Web应用程序安全项目(Open Web Application Security
Project),OWASP是一家国际性组织机构,并且是一个开放的、非盈利组织,它致力于协助政府、企业开发、升级各类应用程序以保证其可信任性。所有OWASP的工具、文档、研讨以及所有分会都对任何就应用安全领域感兴趣的人士自由开放。其最具权威的就是“10项最严重的Web
应用程序安全风险列表”
,总结了Web应用程序最可能、最常见、最危险的十大漏洞,是开发、测试、服务、咨询人员应知应会的知识,不过OWASP每四年发布一次,现在最新的OWASP是2021年公布的。

二、TOP10漏洞详解

TWO DAY | WEB安全之OWASP TOP10漏洞_第1张图片

A1、注入漏洞

注入漏洞在 2013、2017、2021 的三个版本中都是入列,可见此漏洞的引入是多么的容易,同时也证明此漏洞的危害有多么严重。
(1)注入的概念
注入即是指web应用程序对用户输入数据的合法性没有判断或过滤不严,攻击者可以是在web应用程序中事先定义好的查询语句的结尾上添加额外的执行语句,在管理员不知情的情况下实现非法操作,以此来实现欺骗数据库服务器执行非授权的任意查询,从而进一步得到相应的数据信息。

也就是说,我服务器明明想要用户你提交的是一个数据,可是你要么提交的是一个本本分分的数据,要么提交的是一个数据+命令

(2)注入分类

  • sql注入
  • –os-shell
  • LDAP(轻量目录访问协议)
  • xpath(XPath即为XML路径语言,它是一种用来确定XML(标准通用标记语言的子集)文档中某部分位置的语言)
  • HQL注入

(3)实例
TWO DAY | WEB安全之OWASP TOP10漏洞_第2张图片
TWO DAY | WEB安全之OWASP TOP10漏洞_第3张图片
在这里插入图片描述
(4)SQL 注入工具
作为最强大的 SQL 注入工具,这里要介绍下基于 python开发的 SQLmap,SQLmap 支持对 PostgreSql,MySQL,Access,MsSql Server 等数据库的自动化注入。是在检查SQL注入漏洞方面最得力的工具。
(5)SQL 注入防护
关闭 SQL 错误回显
前端输入字符白名单验证(长度、类型等)
对输入的特殊字符使用转义处理
SQL 操作使用 PreParedStatement
SQL 服务运行于专门的账号,并且使用最小权限
限制 SQL 服务的远程访问,只开放给特定开发人员
代码审计,最有效的检测应用程序的注入风险的方法之一
使用成熟的 waf

A2、失效的访问控制

描述
访问控制强制执行策略,使用户不能在其预期权限之外采取行动。故障通常会导致未经授权的信息泄露、修改或破坏所有数据或执行超出用户限制的业务功能。常见的访问控制漏洞包括:

  • 通过修改 URL、内部应用程序状态或 HTML 页面,或仅使用自定义 API 攻击工具来绕过访问控制检查。
  • 允许将主键更改为其他用户的记录,允许查看或编辑其他人的帐户。
  • 特权提升。在未登录的情况下充当用户或以用户身份登录时充当管理员。
  • 元数据操作,例如重放或篡改 JSON Web 令牌 (JWT) 访问控制令牌,或用于提升权限或滥用 JWT 失效的 cookie
    或隐藏字段。
  • CORS 错误配置允许未经授权的 API 访问。
  • 强制以未经身份验证的用户身份浏览经过身份验证的页面或以标准用户身份浏览特权页面。访问 API 时缺少对 POST、PUT 和 DELETE
    的访问控制。

如何预防
访问控制仅在受信任的服务器端代码或无服务器 API 中有效,攻击者无法修改访问控制检查或元数据。

  • 除公共资源外,默认拒绝。
  • 实施一次访问控制机制并在整个应用程序中重复使用它们,包括最大限度地减少 CORS 的使用。
  • 模型访问控制应该强制记录所有权,而不是接受用户可以创建、读取、更新或删除任何记录。
  • 独特的应用程序业务限制要求应由领域模型强制执行。
  • 禁用 Web 服务器目录列表并确保文件元数据(例如 .git)和备份文件不在 Web 根目录中。
  • 记录访问控制失败,在适当时提醒管理员(例如,重复失败)。
  • 速率限制 API 和控制器访问,以最大限度地减少自动攻击工具的危害。
  • 注销后,JWT 令牌应在服务器上失效。
    开发人员和 QA 人员应包括功能访问控制单元和集成测试。

A3、加密机制失效

描述
首先是确定传输中和静止数据的保护需求。例如,密码、信用卡号、健康记录、个人信息和商业秘密需要额外保护,主要是如果该数据属于隐私法(例如欧盟的通用数据保护条例 (GDPR))或法规(例如金融数据保护)例如 PCI 数据安全标准 (PCI DSS)。对于所有此类数据:

  • 是否有任何数据以明文形式传输?这涉及 HTTP、SMTP 和 FTP
    等协议。外部互联网流量是危险的。验证所有内部流量,例如,负载平衡器、Web 服务器或后端系统之间的流量。
  • 默认情况下或在较旧的代码中是否使用任何旧的或弱的加密算法?
  • 是否正在使用默认加密密钥、生成或重复使用弱加密密钥,或者是否缺少适当的密钥管理或轮换?
  • 用户代理(例如,应用程序、邮件客户端)是否不验证收到的服务器证书是否有效?

请参阅 ASVS 加密 (V7)、数据保护 (V9) 和 SSL/TLS (V10)

如何预防

  • 对应用程序处理、存储或传输的数据进行分类。根据隐私法、监管要求或业务需求确定哪些数据是敏感的。
  • 根据分类应用控制。
  • 不要不必要地存储敏感数据。尽快丢弃它或使用符合 PCI DSS 的标记化甚至截断。未保留的数据不能被窃取。
  • 确保加密所有静态敏感数据。
  • 确保拥有最新且强大的标准算法、协议和密钥;使用适当的密钥管理。
  • 使用安全协议(例如具有完美前向保密 (PFS) 密码的 TLS、服务器的密码优先级和安全参数)加密所有传输中的数据。使用 HTTP
    严格传输安全 (HSTS) 等指令强制加密。
  • 对包含敏感数据的响应禁用缓存。
  • 使用具有工作因子(延迟因子)的强自适应和加盐散列函数存储密码,例如 Argon2、scrypt、bcrypt 或 PBKDF2。
  • 独立验证配置和设置的有效性。

A4、安全配置错误

描述
如果应用程序是:

  • 在应用程序堆栈的任何部分缺少适当的安全强化或对云服务的权限配置不正确。
  • 启用或安装了不必要的功能(例如,不必要的端口、服务、页面、帐户或权限)。
  • 默认帐户及其密码仍处于启用状态且未更改。
  • 错误处理向用户显示堆栈跟踪或其他信息过多的错误消息。
  • 对于升级的系统,最新的安全功能被禁用或未安全配置。
  • 应用程序服务器、应用程序框架(例如,Struts、Spring、ASP.NET)、库、数据库等中的安全设置未设置为安全值。
  • 服务器不发送安全标头或指令,或者它们未设置为安全值。
  • 软件已过时或易受攻击(请参阅 A06:2021-易受攻击和过时的组件)。

如果没有协调一致的、可重复的应用程序安全配置过程,系统将面临更高的风险。

如何预防
应实施安全安装过程,包括:

  • 可重复的强化过程使部署另一个适当锁定的环境变得快速而轻松。开发、QA
    和生产环境都应配置相同,在每个环境中使用不同的凭据。这个过程应该是自动化的,以最大限度地减少设置新安全环境所需的工作。
  • 一个没有任何不必要的功能、组件、文档和示例的最小平台。删除或不安装未使用的功能和框架。
  • 作为补丁管理流程的一部分,审查和更新适用于所有安全说明、更新和补丁的配置的任务(请参阅
    A06:2021-易受攻击和过时的组件)。查看云存储权限(例如,S3 存储桶权限)。
  • 分段应用程序架构通过分段、容器化或云安全组 (ACL) 在组件或租户之间提供有效且安全的分离。
  • 向客户端发送安全指令,例如安全标头。
  • 验证配置和设置在所有环境中的有效性的自动化过程。

A5、易受攻击或过时组件

描述
你可能很脆弱:

  • 如果您不知道您使用的所有组件的版本(客户端和服务器端)。这包括您直接使用的组件以及嵌套的依赖项。
  • 如果软件易受攻击、不受支持或已过期。这包括操作系统、Web/应用程序服务器、数据库管理系统 (DBMS)、应用程序、API
    和所有组件、运行时环境和库。
  • 如果您不定期扫描漏洞并订阅与您使用的组件相关的安全公告。
  • 如果您没有以基于风险的方式及时修复或升级底层平台、框架和依赖项。这通常发生在修补是变更控制下的每月或每季度任务的环境中,使组织面临数天或数月不必要地暴露于固定漏洞的风险。
  • 如果软件开发人员不测试更新、升级或修补的库的兼容性。
  • 如果您不保护组件的配置(请参阅 A4:2021-安全配置错误)。

如何预防
应该有一个补丁管理流程来:

  • 删除未使用的依赖项、不必要的功能、组件、文件和文档。
  • 使用版本、OWASP Dependency Check、retire.js
    等工具持续清点客户端和服务器端组件(例如框架、库)及其依赖项的版本。成分。使用软件组合分析工具来自动化该过程。订阅与您使用的组件相关的安全漏洞的电子邮件警报。
  • 仅通过安全链接从官方来源获取组件。首选签名包以减少包含修改后的恶意组件的机会(请参阅 A08:2021-软件和数据完整性故障)。
  • 监视未维护或未为旧版本创建安全补丁的库和组件。如果无法打补丁,请考虑部署虚拟补丁来监控、检测或防止发现的问题。

每个组织都必须确保在应用程序或产品组合的生命周期内制定持续的监控、分类和应用更新或配置更改的计划。

A6、身份验证失败

描述
确认用户的身份、身份验证和会话管理对于防止与身份验证相关的攻击至关重要。如果应用程序存在以下情况,则可能存在身份验证漏洞:

  • 允许自动攻击,例如撞库,其中攻击者拥有有效用户名和密码的列表。
  • 允许蛮力或其他自动攻击
  • 允许使用默认密码、弱密码或众所周知的密码,例如“Password1”或“admin/admin”。
  • 使用弱或无效的凭据恢复和忘记密码流程,例如无法确保安全的“基于知识的答案”。
  • 使用纯文本、加密或弱散列密码(请参阅 A3:2017-敏感数据暴露)。
  • 缺少或无效的多因素身份验证。
  • 在 URL 中公开会话 ID(例如,URL 重写)。
  • 成功登录后不要轮换会话 ID。
  • 不会正确地使会话 ID 无效。用户会话或身份验证令牌(主要是单点登录 (SSO) 令牌)在注销或一段时间不活动期间未正确失效。

如何预防

  • 在可能的情况下,实施多因素身份验证以防止自动凭证填充、暴力破解和被盗凭证重用攻击。
  • 不要使用任何默认凭据进行交付或部署,尤其是对于管理员用户。
  • 实施弱密码检查,例如针对前 10,000 个最差密码列表测试新密码或更改的密码。
  • 将密码长度、复杂性和轮换策略与 NIST 800-63b 的第 5.1.1
    节中关于记忆秘密的指南或其他现代的、基于证据的密码策略保持一致。
  • 通过对所有结果使用相同的消息,确保注册、凭据恢复和 API 路径能够抵御帐户枚举攻击。
  • 限制或增加延迟失败的登录尝试。当检测到凭证填充、暴力破解或其他攻击时,记录所有故障并提醒管理员。
  • 使用服务器端、安全、内置的会话管理器,在登录后生成新的高熵随机会话 ID。会话 ID 不应在 URL
    中,安全存储,并在注销、空闲和绝对超时后失效。

A7、软件和数据完整性故障

描述
软件和数据完整性故障与不能防止完整性违规的代码和基础设施有关。例如,在对象或数据被编码或序列化为攻击者可以看到和修改的结构的情况下,很容易受到不安全的反序列化的影响。另一种形式是应用程序依赖来自不受信任的来源、存储库和内容交付网络 (CDN) 的插件、库或模块。不安全的 CI/CD 管道可能会导致未经授权的访问、恶意代码或系统受损。最后,许多应用程序现在包括自动更新功能,其中更新在没有充分完整性验证的情况下被下载并应用于以前受信任的应用程序。攻击者可能会上传自己的更新以分发并在所有安装上运行。

如何预防

  • 确保未签名或未加密的序列化数据不会在没有某种形式的完整性检查或数字签名的情况下发送到不受信任的客户端,以检测序列化数据的篡改或重放
  • 通过签名或类似机制验证软件或数据来自预期来源
  • 确保库和依赖项(例如 npm 或 Maven)使用受信任的存储库
  • 确保使用软件供应链安全工具(例如 OWASP Dependency Check 或 OWASP
    CycloneDX)来验证组件不包含已知漏洞
  • 确保您的 CI/CD 管道具有正确的配置和访问控制,以确保流经构建和部署过程的代码的完整性。

A8、安全日志记录和监控失败

描述
回到 2021 年 OWASP 前 10 名,该类别旨在帮助检测、升级和响应主动违规行为。如果没有日志记录和监控,就无法检测到漏洞。任何时候都会发生日志记录、检测、监控和主动响应不足的情况:

  • 不记录可审计的事件,例如登录、失败登录和高价值交易。
  • 警告和错误不会生成、不充分或不清楚的日志消息。
  • 不会监控应用程序和 API 的日志是否存在可疑活动。
  • 日志仅存储在本地。
  • 适当的警报阈值和响应升级流程没有到位或有效。
  • DAST 工具(例如 OWASP ZAP)的渗透测试和扫描不会触发警报。
  • 应用程序无法实时或接近实时地检测、升级或警告主动攻击。

通过使用户或攻击者可以看到日志记录和警报事件,您很容易受到信息泄漏的影响(请参阅 A01:2021 – 损坏的访问控制)。

如何预防
开发人员应实施以下部分或全部控制措施,具体取决于应用程序的风险:

  • 确保所有登录、访问控制和服务器端输入验证失败都可以用足够的用户上下文来记录,以识别可疑或恶意帐户,并保留足够的时间以允许延迟取证分析。
  • 确保以日志管理解决方案可以轻松使用的格式生成日志。
  • 确保日志数据编码正确,以防止对日志或监控系统的注入或攻击。
  • 确保高价值交易具有带有完整性控制的审计跟踪,以防止篡改或删除,例如仅追加数据库表或类似的。
  • DevSecOps 团队应该建立有效的监控和警报,以便快速检测和响应可疑活动。
  • 制定或采用事件响应和恢复计划,例如 NIST 800-61r2 或更高版本。

有商业和开源应用程序保护框架(例如 OWASP ModSecurity 核心规则集)和开源日志关联软件(例如 ELK堆栈)具有自定义仪表板和警报功能。

A9、服务器端求伪造(SSRF)

描述
每当 Web 应用程序在未验证用户提供的 URL 的情况下获取远程资源时,就会出现 SSRF 缺陷。它允许攻击者强制应用程序将精心设计的请求发送到意外目的地,即使受到防火墙、VPN 或其他类型的网络 ACL 的保护也是如此。

随着现代 Web 应用程序为最终用户提供方便的功能,获取 URL 成为一种常见情况。因此,SSRF 的发病率正在增加。此外,由于云服务和架构的复杂性,SSRF 的严重性越来越高。

SSRF漏洞利用方式

  • 能扫描内部网络,获取端口,服务信息
  • 攻击运行在内网或本地的应用程序
  • 对内网web进行指纹识别
  • 对内部主机和端口发送请求包进行攻击
  • file协议读取本地文件

如何预防
开发人员可以通过实施以下部分或全部深度防御控制来防止 SSRF:

从网络层:
在单独的网络中分段远程资源访问功能以减少 SSRF 的影响

强制执行“默认拒绝”防火墙策略或网络访问控制规则,以阻止除基本 Intranet 流量之外的所有流量

从应用层:

  • 清理和验证所有客户端提供的输入数据
  • 使用肯定的允许列表强制执行 URL 架构、端口和目标
  • 不要向客户端发送原始响应
  • 禁用 HTTP 重定向
  • 注意 URL 一致性,以避免 DNS 重新绑定和“检查时间、使用时间”(TOCTOU) 竞争条件等攻击

不要通过使用拒绝列表或正则表达式来缓解 SSRF。攻击者拥有有效负载列表、工具和技能来绕过拒绝列表。

A10、不安全的设计

描述
不安全设计是一个广泛的类别,代表许多不同的弱点,表现为“缺失或无效的控制设计”。缺少不安全的设计是缺少控制的地方。例如,想象一下应该加密敏感数据的代码,但没有方法。无效的不安全设计是可以实现威胁的地方,但域(业务)逻辑验证不足会阻止该操作。例如,假设域逻辑应该根据收入等级处理流行病税收减免,但不验证所有输入都已正确签名并提供比应授予的更重要的减免收益。

安全设计是一种文化和方法,它不断评估威胁并确保代码经过稳健设计和测试,以防止已知的攻击方法。安全设计需要安全的开发生命周期、某种形式的安全设计模式或铺砌道路组件库或工具,以及威胁建模。

如何预防

  • 与 AppSec 专业人员建立并使用安全的开发生命周期,以帮助评估和设计与安全和隐私相关的控制
  • 建立和使用安全设计模式库或准备使用组件的铺好的道路
  • 将威胁建模用于关键身份验证、访问控制、业务逻辑和关键流
  • 编写单元和集成测试以验证所有关键流都能抵抗威胁模型

个人防范安全漏洞的办法!

如何保护自己免受安全漏洞影响
尽管没有人能幸免于数据泄露,但是良好的计算机安全习惯可以让您不那么容易受到攻击,并帮助您在破坏较少的情况下渡过数据泄露的难关。这些提示应有助于防止黑客在计算机和其他设备上侵害您的人身安全。

使用强密码,其中包含随机的大小写字母、数字和符号字符串。它们比简单的密码更难破解。不要使用容易猜到的密码,例如姓氏或生日。使用密码管理器来保护密码安全。
对不同的账户使用不同的密码。如果使用相同的密码,则获取了一个账户的访问权限的黑客将能够进入您的所有其他账户。如果使用不同的密码,则只有一个账户处于风险之中。
关闭不使用的账户,而不是让它们处于休眠状态。这样可以减少安全漏洞。如果不使用某个账户,则可能永远不会意识到它已遭到入侵,并且它可能成为其他账户的后门。
定期更改密码。许多公开报告的安全漏洞的一个特征是它们发生的时间很长,有些漏洞直到发生数年后才被报告出来。定期更改密码可以降低未公告的数据泄露带来的风险。
如果要淘汰计算机,请正常擦除旧硬盘。不要只是删除文件;请使用数据销毁程序彻底擦除驱动器,覆盖磁盘上的所有数据。全新安装操作系统也会成功擦除驱动器。
备份文件。一些数据泄露导致文件被加密,用户必须满足勒索软件的要求才能重新访问这些文件。如果可移动驱动器上有单独的备份,则万一发生数据泄露,您的数据也是安全的。
保护手机。使用屏幕锁并定期更新手机的软件。不要破解手机的 root 权限或将手机越狱。破解设备的 root 权限会使黑客有机会安装他们的软件并更改手机的设置。
使用反病毒和反恶意软件保护计算机和其他设备。卡巴斯基反病毒软件是一个不错的选择,它可以让您的计算机不受感染,确保黑客无法在系统中立足。
小心点击。未经请求的包含网站链接的电子邮件可能是网络钓鱼尝试。有些可能声称来自您的联系人。如果它们包含附件或链接,请确保它们是真实的之后再打开,并对附件使用反病毒程序。
访问账户时,尽量使用安全的HTTPS 协议,而不仅仅是 HTTP
监视银行对账单和信用报告有助于保持安全。被盗的数据可能会在数据泄露发生多年后在暗网上出现。这可能意味着,在您忘记了损害该账户的数据泄露发生很久后,才出现身份盗窃企图。
清楚个人信息的价值,除非必要,否则不要提供。太多的网站想知道您的信息;例如,为什么商业杂志需要您的准确出生日期? 或者拍卖网站需要您的 SSN?


声明

  1. 本着知识自由免费的原则分享,博客内容以空间网络安全和开发相关内容为主;
  2. 如果文章内容如有涉及侵犯您的知识产权和版权问题,请通知本人,本人会及时删除相关博文内容;
  3. 本人致力于中国企业网络安全建设,同时希望自己的分享可帮助更多的网络安全人员更好的为企业服务;
  4. 告诫读者,请勿将所学所得用于非法用途,否则与本人无关;
  5. 学习本博客内容您需要学习了解《中华人民共和国网络安全法》,《互联网信息服务管理办法》,《中华人民共和国计算机信息系统安全保护条例》,《关于维护互联网安全的决定》,《中华人民共和国保守国家秘密法》,《中华人民共和国刑法》等内容,请勿从事违法犯罪活动

你可能感兴趣的:(数据库,服务器,安全)