mehedi-hasan-sami98/credential-attacks-explained
GitHub: mehedi-hasan-sami98/credential-attacks-explained
一份以防御为导向的教育资料,系统讲解凭据填充与密码喷射攻击的概念、检测逻辑,并附带日志异常检测脚本。
Stars: 0 | Forks: 0
# 凭据填充与密码喷射 — 概念、检测与防御
[](https://attack.mitre.org/techniques/T1110/)
[](LICENSE)
[](#)
## ⚠️ 法律与道德声明
本仓库**严格用于教育目的**。它仅记录攻击*概念*,供防御、蓝队和经授权的红队学习使用。它**不**包含可直接使用的攻击工具、绕过速率限制/CAPTCHA 的技术或有效的漏洞利用代码。
- 仅测试您**拥有**或获得**明确书面授权**的身份验证系统。
- 未经授权访问计算机系统在孟加拉国的 **Digital Security Act / Cyber Security Act** 及全球同等法律(美国的 CFAA、英国的 Computer Misuse Act 等)下均属违法行为。
- 作者 (Mehedi Hasan Sami) 和本仓库不对任何滥用行为负责。
## 📖 目录
1. [它们是什么?](#-what-are-they)
2. [攻击者为何使用它们](#-why-attackers-use-them)
3. [它们的工作原理(概念上)](#-how-they-work-conceptually)
4. [关键区别](#-key-differences)
5. [现实世界的影响](#-real-world-impact)
6. [MITRE ATT&CK 映射](#-mitre-attck-mapping)
7. [检测策略](#-detection-strategies)
8. [防御与缓解](#-defense--mitigation)
9. [检测工具包(本仓库)](#-detection-toolkit-this-repo)
10. [参考资料](#-references)
## 🔑 它们是什么?
### Credential Stuffing (凭据填充)
一种攻击方式,将之前**泄露的用户名/密码对**(从过去无关服务的数据泄露中流出的)自动尝试用于*不同的*目标应用程序,利用了许多用户在多个网站上重复使用相同密码这一事实。
### Password Spraying (密码喷射)
一种攻击方式,将**一小部分常用密码**(例如 `Summer2026!`、`Welcome123`)尝试用于**大量用户名列表**,每次在所有账户中尝试一个密码,以避免触发单账户锁定阈值。
| | Credential Stuffing | Password Spraying |
|---|---|---|
| **输入** | 已知从数据泄露中获取的(用户,密码)对 | 已知的用户名 + 猜测的常见密码 |
| **目标** | 在其他地方重复使用泄露的凭据 | 在整个组织内找到至少一个弱密码 |
| **量级模式** | 多个密码,每个账户尝试次数少 | 一个密码,多个账户 |
| **规避检测** | 分布式 IP / 僵尸网络 | 低速慢速,分散在不同时间 |
## 🎯 攻击者为何使用它们
- **密码重用极为普遍** — 研究一致表明,很大一部分用户在不同服务间重复使用密码,因此从站点 A 泄露的数据通常可以解锁站点 B 上的账户。
- **低成本,高规模** — 无需破坏加密或查找软件漏洞;这两种攻击都滥用了合法的登录功能。
- **易于自动化** — 可以轻松编写脚本并针对 API、登录表单、VPN、O365/Azure AD、RDP 网关等进行扩展。
- **绕过账户锁定策略** — 密码喷射专门设计为保持在单账户失败尝试阈值之下。
- **初始访问的高投资回报率 (ROI)** — 一次成功的登录可能导致账户接管、商业电子邮件妥协 (BEC),或为进一步的横向移动建立立足点。
## ⚙️ 它们的工作原理(概念上)
### Credential Stuffing — 一般流程
1. 攻击者获取包含 `email:password` 组合的泄露数据(来自泄露论坛、粘贴网站或泄露数据库)。
2. 编译列表并进行去重,通常会与目标已知的用户格式(例如 `firstname.lastname@company.com`)进行交叉比对。
3. 自动化工具向目标的身份验证 endpoint 提交登录尝试。
4. 请求分布在代理/住宅 IP 池和随机 user-agent 中,以规避基于 IP 的速率限制和机器人检测。
5. 成功的登录("命中")将被记录下来,用于后续的账户接管。
### Password Spraying — 一般流程
1. 攻击者枚举或猜测有效的用户名(例如,通过 OSINT、LinkedIn 命名约定或用户名枚举漏洞)。
2. 选择一小部分常见/季节性密码列表(基于密码策略模式,例如,“必须包含大写字母 + 数字” → `Companyname2026!`)。
3. 将**一个密码**尝试用于**所有用户名**,然后攻击者会等待(通常为 30 分钟以上,遵守锁定重置窗口),然后再尝试下一个密码。
4. 这种“低速慢速”的节奏使每个单独账户的失败尝试次数保持在锁定阈值之下。
5. 单次有效的命中提供了初始访问权限,通常针对 VPN、O365/Azure AD 或 VDI 门户。
## 📊 现实世界的影响
- 在事件响应报告(Verizon DBIR、Microsoft 数字防御报告)中,这两种技术一直位居顶级初始访问向量之列。
- 密码喷射被归咎于许多针对 VPN 网关和云身份提供商的民族国家和网络犯罪活动。
- 凭据填充推动了针对银行、电子商务和流媒体平台的大规模账户接管活动,通常通过账户转售或欺诈来变现。
## 🗺️ MITRE ATT&CK 映射
| 技术 | ID | 战术 |
|---|---|---|
| Brute Force: Password Spraying | [T1110.003](https://attack.mitre.org/techniques/T1110/003/) | Credential Access |
| Brute Force: Credential Stuffing | [T1110.004](https://attack.mitre.org/techniques/T1110/004/) | Credential Access |
| Valid Accounts | [T1078](https://attack.mitre.org/techniques/T1078/) | Initial Access, Persistence |
## 🔍 检测策略
表明任一攻击正在进行的蓝队指标:
- **不可能的旅行 / 地理速度异常** — 在短时间窗口内从地理位置相距甚远的地方登录。
- **高失败登录与唯一用户名比例** — 单个 IP/user-agent 在许多不同账户上失败(喷射特征)。
- **每个账户的低失败登录与唯一密码比例** — 许多用户名,尝试相同或非常少的密码(喷射)。
- **来自不熟悉的 ASN/IP 范围的失败登录激增**,尤其是数据中心或住宅代理范围。
- **使用不存在的用户名进行身份验证尝试**,随后是有效的用户名 — 喷射前枚举的迹象。
- **时间集中的失败,随后是单次成功** — 典型的凭据填充“命中”模式。
- **在非工作时间出现身份验证高峰**,相对于组织的正常工作时间/时区。
## 🛡️ 防御与缓解
| 控制 | 有效性 |
|---|---|
| 到处使用**多因素身份验证 (MFA)** | 影响最大 — 即使密码正确,也能中和大多数基于凭据的攻击 |
| 在注册/重置时进行**泄露密码筛查**(例如 HaveIBeenPwned Pwned Passwords API) | 阻止重用已知的泄露密码 |
| **智能/自适应账户锁定**(基于风险,而不是简单的单账户计数器) | 降低喷射的可行性 |
| 在登录 endpoint 上进行**速率限制和 CAPTCHA** | 减慢自动化尝试 |
| **基于地理/IP 异常的条件访问**(例如 Azure AD Conditional Access) | 阻止不可能的旅行登录 |
| **无密码 / FIDO2 安全密钥** | 完全移除密码攻击面 |
| **集中式登录监控和 SIEM 关联**(Wazuh、Splunk、Sentinel) | 实现整个组织的早期检测 |
| **关于密码重用的用户教育** | 减少根本原因 |
| 在密码策略中**列入常见/季节性密码黑名单** | 降低喷射成功率 |
## 🧰 检测工具包(本仓库)
`scripts/log_anomaly_detector.py` — 一个防御性的 Python 脚本,它解析标准的 Web 服务器/身份验证日志(Apache/Nginx 风格或 JSON 身份验证日志),并标记符合凭据填充或密码喷射特征的模式:
- 每个唯一 IP 的高唯一用户名比率(喷射信号)
- 每个唯一用户名的高唯一 IP 比率(填充/分布式攻击信号)
- 短时间窗口内的失败登录爆发
有关用法,请参见 [`scripts/README.md`](scripts/log_anomaly_detector.py)。
## 📚 参考资料
- OWASP — [Credential Stuffing](https://owasp.org/www-community/attacks/Credential_stuffing)
- MITRE ATT&CK — [T1110 Brute Force](https://attack.mitre.org/techniques/T1110/)
- NIST SP 800-63B — Digital Identity Guidelines (Authentication)
- Microsoft — [Azure AD Password Spray Investigation Guidance](https://learn.microsoft.com/en-us/security/operations/incident-response-playbook-password-spray)
- Have I Been Pwned — [Pwned Passwords API](https://haveibeenpwned.com/Passwords)
## 👤 作者
**Mehedi Hasan Sami**
初级渗透测试员 | BlackHawk & BlackVault 安全团队 | 孟加拉国达卡
- GitHub: [@mehedi-hasan-sami98](https://github.com/mehedi-hasan-sami98)
*属于进攻/防御安全研究和检测工程项目的持续作品集的一部分。*
标签:凭据填充, 安全, 密码喷洒, 漏洞靶场, 超时处理, 逆向工具, 防御检测