OWASP Top 10十大漏洞

329 阅读6分钟

什么是OWASPTop10

OWASPTop10是由非营利组织 OWASP基金会支持的社区发布的10项最严重的Web 应用程序安全风险列表,总结并更新Web应用程序中最可能、最常见、最危险的十大漏洞,是开发、测试、服务、咨询人员应知应会的知识

注入漏洞

利用应用程序薄弱点或漏洞,将恶意代码通过恶意字符写入数据库,获取敏感数据或进一步在服务器执行命令,如cookie注入、SQL注入和反射型XSS、储存型XSS等

漏洞原因

  • 未审计的数据输入框
  • 使用网址直接传递参数
  • 未过滤的特殊字符
  • SQL错误回显

修复建议

  • 对数据库进行严格监控
  • 对用户提交数据进行过滤筛选
  • 用户内数据内容进行加密
  • 代码内采用sql语句预编译和绑定变量

失效的身份认证漏洞

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

漏洞原因

  • 弱验证

弱口令、弱验证码、登录绕过(逻辑、cookie)、密码找回

  • 弱会话

明文传输、URL中暴露会话ID、会话ID不更新

修复建议

  • 加强密码策略
  • 登录失败处理
  • 引入超时注销机制
  • 定期执行弱密码检查
  • 少用默认配置
  • 多因素身份验证

敏感数据泄露

主要是扫描应用程序获取到敏感数据

漏洞原因

  • 应用维护或者开发人员无意间上传敏感数据,如 github 文件泄露
  • 网络协议、算法本身的弱点,如 telent、ftp、md5 等
  • 敏感数据文件的权限设置错误,如网站目录下的数据库备份文件泄露

修复建议

  • 定期对github仓库进行扫描
  • 对应用网站目录进行扫描
  • 使用强壮的网络协议和算法
  • 禁止带有敏感数据的Web页面缓存
  • 禁止在日志中记录明文的敏感数据
  • 禁止在cookie 中以明文形式存储敏感数据
  • 禁止在代码中存储如数据库连接字符串、口令和密钥之类的敏感数据

XML外部实体注入漏洞(XXE)

XML 外部实体注入是一个 Web 安全漏洞,允许攻击者干扰应用程序对 XML 数据的处理。它通常允许攻击者查看应用程序服务器文件系统上的文件,并与应用程序本身可以访问的任何后端或外部系统进行交互,方式主要有:

  • 利用 XXE 检索文件,其中定义了包含文件内容的外部实体,并在应用程序的响应中返回。
  • 利用 XXE 执行 SSRF 攻击,其中外部实体是根据后端系统的 URL 定义的。
  • 利用盲 XXE 会泄露带外数据,其中敏感数据从应用程序服务器传输到攻击者控制的系统。
  • 利用盲 XXE 通过错误消息检索数据,攻击者可以触发包含敏感数据的解析错误消息。

漏洞原因

  • XML 协议文档本身的设计特性,可以引入外部的资源
  • 定义 XML 文件时使用的外部实体引入功能

修复建议

  • 关闭 DTD (Data Type Definition)
  • 禁止外部实体引入

无效的访问控制

没有检查身份,直接导致攻击者绕过权限直接访问,从普通的用户权限提升到管理员的权限访问应用程序(垂直越权)或从普通用户A的权限提升到普通用户B的权限访问应用程序(水平越权)

漏洞原因

  • 未对读取的参数做检查,导致路径绕过读取到敏感文件
  • 未对权限做检查,导致攻击者变更权限

修复建议

  • 限制下载文件的类型
  • 对权限的控制管理重新设计与限制

基于角色的访问控制(RBAC)
自由访问控制(DAC)
强访问控制(MAC)

  • 对参数的白名单过滤

安全配置错误

攻击者利用错误配置攻击,获取敏感数据或者提升权限

漏洞原因

  • 开发或者维护人员设置了错误的配置,如 python 开发中对于 Django 框架在生产环境启用了 Debug 模式
  • 使用了有安全缺陷的版本、没有修改默认的帐户密码、给了某些帐户过高的权限、对敏感资源没有做访问控制

修复建议

  • 每个环境都应该使用相同的配置,使用不同的凭证。每个环境的配置应该做到自动化,以减少设置新环境产生的安全风险
  • 安装系统时做到最小化安装,不安装非必要的功能;使用一个应用程序时,删除示例代码和文档
  • 使用强壮的网络协议和算法
  • 作为补丁管理流程的一部分,需要及时更新安全说明和更新说明文档
  • 使用自动化工具和流程来验证所有环境中的配置
  • 在配置权限时,应当使用”最小权限原则”并使用”默认拒绝“的策略
  • 秘钥禁止硬编码在代码中,禁止生产环境和非生产环境使用相同的密钥

跨站脚本攻击

攻击者使用恶意字符嵌入应用程序代码中并运行,盗取应用程序数据

漏洞原因

  • 未对应用输入做过滤与检查,导致用户数据被当作代码执行

修复建议

  • 验证输入/接收的字符,过滤或者替换非法字符
  • 使用白名单机制

不安全的反序列化漏洞

攻击者利用应用程序反序列化功能,反序列化恶意对象攻击应用程序

漏洞原因

  • 应用程序在反序列化数据对象时,执行了攻击者传递的恶意数据对象

修复建议

  • 反序列化之前,先进行严格的数据类型校验。由于校验规则容易被攻击者探索出来,进而容易被绕过,因此防御不能仅依赖这一个手段,但可以作为完整性校验防御方案的补充
  • 对反序列化过程进行详尽的日志记录,用以安全审计或调查
  • 监控反序列化过程,在发现疑似反序列化攻击时进行警报

使用含有已知漏洞的组件

利用应用程序技术栈中的框架、库、工具等的已知漏洞进行攻击,获取高权限或者敏感数据

漏洞原因

  • 应用程序在反序列化数据对象时,执行了攻击者传递的恶意数据对象

修复建议

  • 及时更新、修复组件漏洞
  • 移除不再使用的依赖组件

日志记录和监控不足导致的风险

漏洞原因

  • 对于日志记录的监控不足,造成攻击者攻击系统、应用、盗取数据等操作无法被发现和追查

修复建议

  • 启用日志监控、告警机制
  • 启用异地监控,C/S架构的监制机制
  • 尽可能的完整记录所有日志

参考文档

owasp.org/www-project…
zhuanlan.zhihu.com/p/374512917 blog.csdn.net/qq_39682037… cloud.tencent.com/developer/a… www.jianshu.com/p/fa912ce04… zhuanlan.zhihu.com/p/603686014 blog.csdn.net/Breeze_CAT/…