OWASP 十大信息安全主题

  1. 注入攻击 (Injection)
  2. 无效身份认证(Broken Authentication)
  3. 敏感信息泄漏(Sensitive Data Exposure)
  4. XML外部处理器漏洞(XML External Entities (XXE))
  5. 无效存取控管(Broken Access Control)
  6. 错误设置安全系统(Security Misconfiguration)
  7. 跨站攻击(Cross-Site Scripting (XSS))
  8. 不安全的反序列化漏洞(Insecure Deserialization)
  9. 使用已有漏洞元件(Using Components with Known Vulnerabilities)
  10. 日志和监控不足风险(Insufficient Logging and Monitoring)

无效身份认证

程序开发中,既要保证安全,又要有好的用户体验,身份认证,授权,和session管理很容易出现错误漏洞,攻击者可以利用这些漏洞来穿透认证检查,从而可以临时或者永久的使用其他人的账户。

了解无效身份认证

对于需要保存状态的应用程序,身份认证,授权,session管理等的设计和执行很容易出现漏洞。尤其是session管理,它是身份认证,授权等的基石,攻击者大多 会对过期令牌进行攻击。

攻击者有海量的有效用户名和密码组合,这些数据可以使用在

  • 撞库攻击(credential stuffing attack)

  • 默认管理员账户列表

  • 自动暴力破解

  • 字典攻击工具

攻击者能通过以上手段发现无效身份认证漏洞, 一般来说,攻击者只需要几个账户,或者一个管理员账户,就能侵入,破坏系统,这样可能会造成很严重的后果,例如 洗钱,盗窃身份,重要敏感信息泄漏 等等。

什么情况容易被攻击

  • 允许撞库攻击

  • 允许暴力破解

  • 允许默认或者非常弱的密码,例如 “Password1” 和 “admin/admin”

  • 在密码恢复时,使用没有保护力的问题认证, 例如使用常识知识类的问题

  • 使用简单,弱的加密密码,例如Base64

  • 没有使用多重要素认证(MFA)

  • 在URL中暴露session IDs

  • 登陆成功后没有更新session令牌

  • 在退出登陆后,或者用户一段时间没有活动时,没有及时使session或者授权令牌失效,尤其是单点登陆系统

案例

案例一 撞库攻击(来自百度百科)

很多用户在不同网站使用的是相同的帐号密码,因此黑客可以通过获取用户在A网站的账户从而尝试登录B网址,这就可以理解为撞库攻击。 撞库可采用大数据安全技术来防护,比如:用数据资产梳理发现敏感数据,使用数据库加密保护核心数据,使用数据库安全运维防运维人员撞库攻击等。

案例二 授权认证攻击

曾经流行的密码最佳实践是定期更换密码,并且要求一定的复杂度。这个实践导致一些用户重复使用,或者使用固定模式的弱密码。NIST 800-63建议 停止使用上面的最佳实践,改用多重要素授权认证。

案例三 session攻击

应用程序的session timeouts设置不合理. 例如,一个用户在公共计算机上登陆一个系统,使用后,没有退出,而是关闭了浏览器然后离开了。 这样攻击者可以在这位用户之后使用这台计算机中的同一个浏览器,用户的授权仍然是有效的。

预防

首先要避免上面容易被攻击的情况。下面是一些具体措施

  • 尽量使用多重要素认证(multi-factor authentication), 它可以预防

    • 机器登陆
    • 撞库攻击
    • 暴力破解
    • 重用丢失密码攻击
  • 在部署过程中不要使用默认密码,尤其是管理员用户

  • 对密码进行强弱验证,例如测试最差的一万个密码列表

  • 遵循NIST 800-63指导原则,对密码长度,复杂度,更新频率制定计划

  • 在注册,密码登陆,密码恢复等功能中要防止枚举攻击,保证对所有错误尝试返回同样的错误信息

  • 限制登陆尝试次数,监控短时间内密集登陆错误,及时警报给管理员

  • 使用服务器端的session管理,用户登陆后,产生一个高熵的随机数作为session ID,这个ID不能出现在URL里面,应该被安全的保存,并且在用户退出登陆, 空闲无活动, 或者超时的时候,注销session ID