本节摘要:本节讲内网回合的王牌技法:哈希传递——攻击者拿到口令哈希后无需还原明文,直接用哈希通过旧认证协议完成身份证明,从一台主机滑向下一台。蓝队的拆桥手段是禁用可传递哈希的旧协议、凭据隔离(不落地、不缓存)与网络分段。这一节解释了为什么"拖走哈希"在内网语境下几乎等于"拖走密码"。
口令回合讲过:系统存哈希不存明文,是为了拖库后攻击者还原不了口令。但内网里有个尴尬的例外:一些历史悠久的认证协议在握手时,接受"口令哈希"本身作为身份证明材料。也就是说,服务器验的不是"你知不知道明文",而是"你手里有没有那份哈希"。攻击者拖走哈希后根本不需要暴破——直接拿它向下一台主机发起认证,一路绿灯。
这就是哈希传递(Pass-the-Hash):单向哈希函数的单向性完好无损,坏的是协议设计把哈希当成了秘密本身。同一原理的家族还有票据传递(缓存的域票据直接复用)与密钥传递,机理一致:认证材料被缓存、被复用、被跨机接受。
用一段简化时序看懂它(示意,协议名做泛化处理):
正常登录:客户端持有明文口令 客户端 → 服务器:请求认证 服务器 → 客户端:随机挑战值 客户端:用 hash(口令) 加密挑战值,回传 服务器:用存储的 hash 校验 —— 通过 哈希传递:攻击者只持有 hash(口令) 攻击者 → 服务器:请求认证 服务器 → 攻击者:随机挑战值 攻击者:直接用偷来的 hash 加密挑战值,回传 服务器:校验通过 —— 因为协议本来就只验证"持有 hash"
问题一目了然:服务器无法区分"用明文算出哈希的人"与"直接偷到哈希的人"。设计前提(哈希不会离开安全存储)一旦被打破——内存缓存、进程凭据、配置文件——整个认证体系就跟着塌。旧协议族因为兼容性在无数内网里超期服役,成为这类攻击的温床。
红队拿到第一台主机的权限后,典型的雪球是这样滚的:读取本机缓存的域账号凭据(内存中的哈希与票据)→ 用哈希传递登录第二台主机 → 在第二台上读到管理员组的更多信息 → 触及域控或关键服务器。每一步都在"凭据收集 → 传递 → 再收集"的循环里,环环相扣。

三道断桥的落地配置(语义示例):
# 断桥一:协议治理 # 域环境组策略:禁用旧协议族认证(哈希可传递的协议全线关闭) # 网络层:旧端口之间的东西向流量一律拒绝,只放行现代加密管理通道 # 新协议:强制的扩展认证与通道绑定,哈希不再作为证明材料 # 断桥二:凭据治理 # 本地管理员:每台主机独立随机口令(分层管理方案自动轮换),杜绝"一个本地号走全网" # 服务账号:改用托管身份 / 工作负载身份,不落静态密码;密钥表定期轮换 # 终端:开启凭据保护能力(内存中的哈希被硬件级隔离,进程读不到) # 堡垒机:运维必经跳板,凭据由堡垒机注入而非告知个人 # 断桥三:分段(防火墙策略语义) # 办公段 → 服务器段:仅放行业务端口 # 服务器段内部:主机间默认拒绝,按应用拓扑逐条放行 # 所有段 → 域控:仅放行必要的目录与认证端口,域控自身禁止出网
哈希传递的检测信号:一台主机用另一个账号的身份突然登录多台主机(机器与账号的配对关系突变)、旧协议端口上的认证流量(本该全网消失的协议出现了)、异常时间的批量登录尝试、单账号短时间内的多主机登录轨迹。检测查询的思路示例:
-- 账号-主机配对突变:近一天该账号登录过的主机数 vs 历史基线 SELECT account, count(DISTINCT host) AS hosts_today, b.hosts_base FROM login_events e JOIN account_host_baseline b USING (account) WHERE e.ts::date = current_date GROUP BY account, b.hosts_base HAVING count(DISTINCT host) > b.hosts_base + 2 ORDER BY hosts_today DESC LIMIT 50;
应急动作按"断环"执行:立即吊销失陷账号与同哈希族账号、重置本地管理员密码(全网轮换)、封锁旧协议端口、隔离失陷主机取证。复盘时要回答"第一台怎么丢的"与"雪球滚了几台",后者直接决定凭证轮换的范围与通知面。
横向移动的防御哲学浓缩成一句:让每个身份只在它该在的地方有效。哈希偷到手却发现哪扇门都不认,雪球自然停在线起点。
把本节内容压缩成一份团队可以现场打分的自评表,四个层级逐级抬升。一级(裸奔):平坦网络,主机间互通无限制,本地管理员账号全网复用,旧认证协议在跑——具备任何一项即在此级。二级(有墙):完成基础分段,服务器段与办公段隔离,域控访问收敛到必要端口;但主机之间仍以信任为主。三级(有闸):本地账号每机独立并自动轮换,运维必经堡垒机,旧协议全网禁用,凭据保护能力在终端铺开。四级(有眼有闸):三级基础上,账号-主机配对异常检测上线,出网受控且偏离基线即告警,紫队演练能常态化验证防线。多数组织诚实地自评会落在二级到三级之间——这个位置恰好是投入产出曲线最陡的区间,往上每走一级,横向移动的成本都翻着倍地涨。
自评的价值不在分数在差距:把"卡在二级的原因"逐条列出来,通常就是下一年的内网安全预算清单。评审时让基础设施团队与安全团队各自独立打分再对照,分歧最大的条目往往就是认知盲区本身。
自评之外,日常运营里两个常被漏配的检测点值得单列。其一,离岗账号的登录:员工离职后其账号在任何主机上的认证成功都应立即告警——这不是误报率问题,是配置有没有的问题,很多环境压根没做。其二,管理员组的成员变更:横向移动的高潮常以"给自己加个管理员"收尾,组变更事件要进高优先级告警流,而不是躺在系统日志里等人翻。两个信号的配置成本都在小时级,检出价值却覆盖了整条横移链的后半段——投入产出比在这个科目里无出其右。把它们与前文的账号-主机配对突变检测放进同一张告警看板,横移回合的检测面就基本闭合了:谁在用不该用的身份、谁进了不该进的组、谁动了不该动的账号,三条线昼夜有人盯。