#00x1 – 注入
将不受信任的数据作为命令或查询的一部分发送到解析器时,会产生诸如SQL注入,NoSQL注入,OS注入和LDAP注入的注入缺陷.攻击者的恶意数据可以诱使解析器在没有适当授权的情况下执行非预期命令或访问数据.
产生原因:
- 用户提供的数据没有经过应用程序的验证,过滤或净化.
- 动态查询语句或非参数化的调用,在没有上下文感知转义的情况下,被用于解释器.
如何解决:
- 添加验证,过滤用户提供的数据
- 对动态查询进行转译
#00x2 – 失效的身份认证
通过错误使用应用程序的身份认证和会话管理功能,攻击者能够破译密码,密钥或会话令牌,或者利用其它开发缺陷来暂时性或永久性冒充其他用户的身份.
产生原因:
- 允许暴力破解
- 允许弱口令密码
- 用户不活跃时,没有正确注销或失效
如何解决:
- 尽量使用多因素认证
- 强制限制密码的强度
- 记录所有失败信息并在凭据填充,暴力破解或其他攻击被检测时提醒管理员
- 使用服务器端安全的内置会话管理器,在登录后生成高度复杂的新随机会话ID会话ID不能在URL中,可以安全地存储和当登出,闲置,绝对超时后使其失效.
#00x3 -- 敏感数据泄露
许多Web应用程序和API都无法正确保护敏感数据,这些数据包括:传输过程中的数据,存储的数据以及浏览器的交互数据
产生原因:
- 数据未加密
- 是用明文传输
如何解决:
- 使用加密传输
- 使用专用算法加密数据
#00x4 -- XML外部实体(XXE)
许多较早的或配置错误的XML处理器评估了XML文件中的外部实体引用.攻击者可以利用外部实体窃取使用URI文件处理器的内部文件和共享文件,监听内部扫描端口,执行远程代码和实施拒绝服务攻击.
产生原因:
- 应用程序直接接受XML文件或者接受XML文件上传
- 应用程序使用第1.2版之前的SOAP,并将XML实体传递到SOAP框架,那么它可能受到XXE攻击
- 如果为了实现安全性或单点登录(SSO),您的应用程序使用SAML进行身份认证。而SAML使用XML进行身份确认,那么您的应用程序就容易受到XXE攻击
如何解决:
- 尽量使用简单的数据格式(如json),避免对敏感数据进行序列化
- 及时更新XML处理器和库
#00x5 -- 失效的访问控制
未对通过身份验证的用户实施恰当的访问控制.攻击者可以利用这些缺陷访问未经授权的功能或数据,例如:访问其他用户的帐户,查看敏感文件,修改其他用户的数据,更改访问权限等
产生原因:
- 允许将主键更改为其他用户的记录,例如查看或编辑他人的帐户
- 以未通过身份验证的用户身份强制浏览的通过身份验证时才能看到的页面,或作为标准用户访问具有相关权限的页面,或API没有对POST,PUT和DELETE强制执行访问控制.
如何解决:
- 除公有资源外,默认情况下拒绝访问
- 使用一次性的访问控制机制,并在整个应用程序中不断重用它们,包括最小化CORS使用
- 建立访问控制模型以强制执行所有权记录,而不是接受用户创建,读取,更新或删除的任何记录
- 当用户注销后,服务器上的JWT令牌应失效
#00x6 -- 安全配置错误
通常是由于不安全的默认配置,不完整的临时配置,开源云存储,错误的HTTP 标头配置以及包含敏感信息的详细错误信息所造成的.
产生原因:
- 应用程序栈堆的任何部分都缺少适当的安全加固,或者云服务的权限配置错误
- 应用程序启用或安装了不必要的功能(如端口,权限等)
- 默认帐户的密码仍然可用且没有更改
如何解决:
- 搭建最小化平台,不包含任何不必要的功能
- 检查更新安全补丁
- 生产环境不使用默认密码并且使用不同密码
#00x7 -- 跨站脚本(XSS)
XSS 让攻击者能够在受害者的浏览器中执行脚本,并劫持用户会话,破坏网站或将用户重定向到恶意站点.
XSS种类:
- 反射型:应用程序或API包括未经验证和未经转义的用户输入,作为HTML输出的一部分
- 存储式XSS:你的应用或者API将未净化的用户输入存储下来了,并在后期在其他用户或者管理员的页面展示出来
- 基于DOM的XSS:会动态的将攻击者可控的内容加入页面的JavaScript框架,单页面程序或API存在这种类型的漏洞
XSS攻击可导致盗取session、账户、绕过MFA、DIV替换、对用户浏览器的攻击(例如:恶意软件下载、键盘记录)以及其他用户侧的攻击
解决方法:
- 使用设计上就会自动编码来解决XSS问题的框架
- 对所有不可信的HTTP请求数据进行转义
#00x8 -- 不安全的反序列化
不安全的反序列化会导致远程代码执行.即使反序列化缺陷不会导致远程代码执行,攻击者也可以利用它们来执行攻击,包括:重播攻击,注入攻击和特权升级攻击
序列化可能被用于:
- 远程和进程间通信(RPC / IPC)
- 连线协议、Web服务、消息代理
- 缓存/持久性
- 数据库、缓存服务器、文件系统
- HTTP cookie、HTML表单参数、API身份验证令牌
产生原因:
- 如果应用中存在可以在反序列化过程中或者之后被改变行为的类,则攻击者可以通过改变应用逻辑或者实现远程代码执行攻击。我们将其称为对象和数据结构攻击
- 典型的数据篡改攻击,如访问控制相关的攻击,其中使用了现有的数据结构,但内容发生了变化
解决方法:
- 执行完整性检查,如:任何序列化对象的数字签名,以防止恶意对象创建或数据篡改
- 尽量隔离运行那些在低特权环境中反序列化的代码限制或监视来自于容器或服务器传入和传出的反序列化网络连接
#00x9 -- 使用含有已知漏洞的组件
应用程序中含有已知漏洞的组件被攻击者利用,可能会造成严重的数据丢失或服务器接管.同时,使用含有已知漏洞的组件的应用程序和API可能会破坏应用程序防御,造成各种攻击并产生严重影响.
产生原因:
- 你不知道所有使用的组件版本信息
- 软件易受攻击,不再支持或者过时
- 不会定期做漏洞扫描和订阅你使用组件的安全公告
如何解决:
- 移除不使用的依赖、不需要的功能、组件、文件和文档
- 仅从官方渠道安全的获取组件
- 监控那些不再维护或者不发布安全补丁的库和组件
#00x10 -- 不足的日志记录和监控
不足的日志记录和监控,以及事件响应缺失或无效的集成,使攻击者能够进一步攻击系统,保持持续性或转向更多系统,以及篡改,提取或销毁数据.
产生原因:
- 未记录可审计性事件,如:登录、登录失败和高额交易
- 告警和错误事件未能产生或产生不足的和不清晰的日志信息
- 没有利用应用系统和API的日志信息来监控可疑活动
- 日志信息仅在本地存储
- 没有定义合理的告警阈值和制定响应处理流程
- 对于实时或准实时的攻击,应用程序无法检测、处理和告警
如何解决:
- 确保所有登录、访问控制失败、输入验证失败能够被记录到日志中去,并保留足够的用户上下文信息,以识别可疑或恶意帐户,并为后期取证预留足够时间
- 确保日志以一种能被集中日志管理解决方案使用的形式生成
- 确保高额交易有完整性控制的审计信息,以防止篡改或删除,例如审计信息保存在只能进行记录增加的数据库表中
- 建立有效的监控和告警机制,使可疑活动在可接受的时间内被发现和应对
参考自OWASP Top 10 2017 ,如有侵权,请联系及时删除
http://www.owasp.org.cn/owasp-project/OWASPTop102017v1.3.pdf