密码管理

恰当的密码管理是现代网络安全的基本支柱之一, 但由于人类天生倾向于创建弱密码、在多个服务中重复使用密码以及以不安全的方式存储密码, 它在大多数组织中仍然是最薄弱的环节之一。 研究表明,超过 80% 的数据泄露涉及被攻破的凭据,无论是通过 使用从其他服务泄露的密码进行的撞库攻击、直接从用户处窃取 凭据的钓鱼攻击,还是针对弱而可预测密码的暴力破解。在企业环境中, 用户需要为内部系统、SaaS 应用、VPN、服务器和管理 账户管理数十个不同的凭据,问题的复杂性呈指数级增长, 不可避免地导致不安全的做法,例如将密码写在便利贴、 未加保护的电子表格上,或在所有系统中重复使用同一个密码。本文提出了一种 全面的企业和个人密码管理方法,涵盖基于证据的复杂度 和轮换策略、企业级密码管理器的实施与选型、迁移到 多因素认证(MFA)的策略、通过速率限制(rate limiting)和 CAPTCHA 防止自动化攻击、通过威胁情报(threat intelligence)服务监控泄露的凭据, 以及对用户进行持续的密码卫生教育,从而针对对手最常利用的 攻击向量之一构建稳健的防御。

密码管理中的挑战

  • 弱密码:123456、password、姓名+年份仍然极为常见
  • 重复使用:在多个服务中使用同一密码会放大数据泄露的影响
  • 不安全的存储:便利贴、电子表格、电子邮件、没有主密码的浏览器
  • 密码疲劳:用户需要管理 50-100 多个凭据
  • 不安全的共享:通过 Slack、电子邮件、短信共享密码

有效的密码策略

NIST 指南(已更新)

NIST SP 800-63B 建议:

  • [OK] 最少 8 个字符(推荐 12+)
  • [OK] 允许多达 64+ 个字符
  • [OK] 接受包括空格在内的所有字符
  • [OK] 不强制要求复杂度(大写字母、符号)
  • [OK] 不强制定期轮换(仅在被攻破时)
  • [OK] 与泄露密码列表进行核对
  • [OK] 允许粘贴(便于使用密码管理器)
  • [OK] 提供可视化的强度指示器
  • [X] 不使用提示或安全问题
  • [X] 不在没有理由的情况下强制定期更改

熵 vs 复杂度

      # 复杂但弱的密码(低熵):
      P@ssw0rd!   # ~28 比特熵
      # 可预测,常见模式
      # 简单但强的口令短语(高熵):
      correct horse battery staple   # ~44 比特熵
      # 更长,更难预测
      # 更好:口令短语 + 符号
      correct-horse-battery-staple-2024   # ~52 比特熵
      # 易于记忆,难以破解
      

密码管理器

密码管理器是凭据管理最有效的解决方案,无需记忆即可为每个服务 提供唯一且强壮的密码。

企业级解决方案

  • 1Password Business:直观的界面、共享 vault、Travel Mode
  • LastPass Enterprise:SSO 集成、集中式策略
  • Bitwarden:开源、可自托管选项、合规
  • Keeper:Zero-knowledge、合规报告、特权访问
  • Dashlane Business:内置 VPN、暗网监控

关键功能

  • Zero-knowledge 架构:供应商无法访问密码
  • 端到端加密:AES-256 或更高
  • SSO 集成:用于企业登录的 SAML、OAuth
  • 共享 vault:团队之间的安全共享
  • 审计日志:对访问和更改的追踪
  • 紧急访问:用于灾难恢复的授权委派
  • 合规:SOC 2、ISO 27001、GDPR/LGPD

针对攻击的防护

暴力破解防护

      # 按 IP 进行速率限制
      - 每分钟最多 5 次尝试
      - 渐进式锁定:1min、5min、15min、1hora
      - 3 次失败后显示 CAPTCHA
      # 账户锁定
      - 10 次失败尝试后锁定账户
      - 需要重置密码或管理员解锁
      - 通过电子邮件/短信通知用户
      # IP 黑名单
      - 封锁具有攻击模式的 IP
      - 与威胁情报源(threat intelligence feeds)集成
      - 为已知的企业 IP 设置白名单
      

撞库攻击防御

  • 强制 MFA:使没有第二因素的泄露凭据失效
  • 泄露监控:HaveIBeenPwned API、SpyCloud
  • 异常检测:来自异常地理位置的登录、新设备
  • 机器人检测:reCAPTCHA、行为分析
  • 会话管理:登录时使旧会话失效

MFA 的实施

      # 按强度排列的 MFA 方法(从最安全到最不安全)
      1. Hardware tokens (FIDO2/WebAuthn - YubiKey)
      - 抗钓鱼
      - 无 SMS/电子邮件拦截
      2. Authenticator apps (TOTP)
      - Google Authenticator, Microsoft Authenticator
      - 离线,比 SMS 更安全
      3. Push notifications
      - Duo Push, Microsoft Authenticator Push
      - 方便但易受 MFA fatigue 影响
      4. SMS (如可能则避免)
      - SIM swapping attacks
      - 可能被拦截
      - 聊胜于无,但并不理想
      

泄露凭据的监控

      # HaveIBeenPwned API Integration
      import requests
      def check_password_breach(password):
      # SHA-1 hash
      sha1 = hashlib.sha1(password.encode()).hexdigest().upper()
      prefix = sha1[:5]
      suffix = sha1[5:]
      # k-Anonymity: 仅发送前缀
      url = f"https://api.pwnedpasswords.com/range/"
      response = requests.get(url)
      # Check if suffix in results
      for line in response.text.split('\n'):
      hash_suffix, count = line.split(':')
      if hash_suffix == suffix:
      return True, int(count)
      return False, 0
      # 如果密码已被攻破则强制重置
      is_pwned, count = check_password_breach(user_password)
      if is_pwned:
      force_password_reset(user)
      notify_user(f"密码出现在  次泄露中")
      

服务账户与 API 密钥

  • 密钥管理(Secrets management):HashiCorp Vault、AWS Secrets Manager
  • 自动轮换:使用脚本轮换 API 密钥/密码
  • 最小权限:仅授予必要的最小权限
  • 审计轨迹:对密钥访问的日志记录
  • 过期:带 TTL 的密钥,在离职时撤销

用户教育

  • 入职时的强制培训
  • 定期的钓鱼演练
  • 密码管理器推广活动
  • 关于策略的清晰沟通
  • 对良好实践的奖励(游戏化)

最终建议

实施强制性的企业密码管理器(1Password、Bitwarden)并配以 集中式策略。启用通用 MFA——为用户使用 TOTP 应用,为管理员使用 hardware tokens。对照 HaveIBeenPwned 监控凭据并主动强制重置。 采用 NIST 策略:长密码且不强制轮换、对照泄露数据库进行核验。 逐步淘汰 SMS MFA,迁移到 TOTP/FIDO2。