什么是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/…