管理员口令还停在 SHA-256 时,为什么 GPU 离线破解之后你会先被锁在防火墙外面

2026 年 10 月 6 日,FBI 与美国特勤局发出 FortiBleed 联合通报:面向公网的 FortiGate 防火墙和 SSL VPN 上,复用口令与遗留的 SHA-256 口令存储被拿去大规模验证和离线破解。部分单位发现自己登不上,是因为原账号的口令被改掉或账号被删掉。升级到写明支持 PBKDF2 的版本,不会在该管理员登录之前自动完成替换。

先记结论:遗留 SHA-256 回答的是「哈希一旦被拿走,每一次猜测便不便宜」。复用口令回答的是「根本不用猜」。被锁在防火墙外面,是入侵之后有人动了原账号,不是算法会自己把门反锁。升到支持 PBKDF2 的 FortiOS 之后,旧哈希要等对应管理员成功登录,或由超级管理员重设口令,才会换成新方案;为了以后还能降级,旧的 SHA-256 默认还留在隐藏字段里。

一句话先回答搜索意图

搜「FortiBleed」「防火墙管理员被锁在外面」「SHA-256 存密码」的人,要分开的是三件已经叠在同一条新闻里的事。第一件:攻击者拿以前泄露或窃密日志里的口令,直接去撞还暴露在公网上的 FortiGate SSL VPN。第二件:设备上若仍存着厂商称为遗留 SHA-256 的管理员口令材料,哈希被带走之后,可以用 GPU 集群做离线猜测。第三件:进去之后,对方新建账号,并改掉或删掉原来的管理员,于是合法的人打不开门户。

这篇文章写给还在管防火墙或 VPN 账号的运维,以及被要求「今晚把管理员密码全部改掉」的同事。它不代替 密码生成器 的操作页,也不把 密码检测 说成能查询这台设备有没有进 FortiBleed。你要带走的是:快速哈希、慢速密钥派生、口令复用、账号被删,各自挡得住哪一种失败,以及配置备份里哪两个标记能在本机核对。

10 月 6 日的通报实际写了什么

FBI 与美国特勤局 2026 年 10 月 6 日的联合通报(文号 JCSA-20261006-01,标为 TLP:CLEAR)把这场行动称为 FortiBleed。目标是面向互联网的 Fortinet FortiGate 防火墙和 SSL VPN 网关。通报引用 SOCRadar 的核验数字:超过 86644 台设备、194 个国家。它写明攻击利用的是复用或已泄露的口令,以及遗留的 SHA-256 口令存储,从而把认证材料成批拿走并破解。初步发现是:攻击者仍在用先前拿到的口令扫描暴露在公网上的 Fortinet 防火墙。

同一份文件描述了对方自己的后端目录曾经暴露,工具链因此被看见。扫描找到 FortiGate SSL VPN 门户之后,用以前的 Fortinet 泄露库和窃密日志做凭证填充,也做口令喷洒。拖出的口令哈希送进用 Hashcat 与 Hashtopolis 调度的 GPU 集群做离线破解。破解结果被筛选、验证,再在防火墙上新建管理员账号。通报把后续影响写成初始访问转卖,并称这条链路已被观察到交给勒索软件关联方,点名包括 INC/Lynx 与 Payload。这些句子的证据等级是「通报如此写」,不是本文又做了一次取证。

和「改个密码就结束」直接冲突的,是文件里的锁门外一节。根据初期响应,如果对方删掉原账号或改掉原账号口令,单位会发现自己登不上 Fortinet 设备。入侵期间对方会创建原来不存在的账号。有些情况下,删除现有账号是为了挡住单位自己的访问,同时继续在环境里横向移动。因此通报写:处置可能要超出常规补丁和口令重置。文件把这一步映射到 MITRE ATT&CK 的 T1531(Account Access Removal)。

本文不提供哈希提取、字典或破解命令,也不转抄通报里的地址和账号名清单。那些清单是给已经在做日志排查的防御方用的。下面的核对只使用你有权管理的设备,以及厂商公开文档。不要为了「验证新闻」去下载来路不明的开放目录,也不要把含有口令哈希的配置备份贴进工单或对话窗口。

复用口令和离线破解不是同一条路

新闻标题容易把「密码太弱」收成一个原因。通报里至少有两条彼此独立的路,失败条件不一样。凭证填充和口令喷洒发生在在线登录。对方提交的是已经知道或正在试的明文。这时设备用什么算法存储口令,只影响设备自己怎么比对,不影响对方手里已经有的那串字符。只要这串和某个仍有效的 VPN 或管理员账号相同,登录就成立。

离线破解发生在哈希已经被复制走之后。对方不再敲你的门户,而是在自己的机器上枚举猜测,把猜测变成哈希,再和抄走的材料比较。这一步的成本取决于存储方案每次猜测要做多少工作,以及口令本身的搜索空间有多大。SHA-256 是为完整性设计的快速哈希:同样的输入永远得到同样的输出,计算一次就完成。它适合校验文件,不适合单独承担「让攻击者每次猜口令都付出明显代价」。GPU 集群租来做的,就是把这种一次就完成的运算并行跑起来。Hashtopolis 在通报里的角色是把破解任务分发到多台机器,不是一种新的加密算法。

路径 对方手里有什么 存储算法改成 PBKDF2 之后
凭证填充 / 口令喷洒 明文,或一份很短的常见口令表 明文仍然能直接登录;慢速派生挡不住已经知道的口令
离线破解 从设备上复制走的口令哈希 每一次猜测变贵;短口令和复用口令仍可能被猜中
锁门外 已经登进去的管理会话 算法换不换,都不阻止对方改掉或删掉原账号

表里的第三行是为了拦住一种常见误读:把「我们改用了更慢的哈希」写成「管理员不会再被关在外面」。锁门外发生在认证已经通过之后。它依赖的是对方能改配置,不依赖 SHA-256 算得有多快。反过来,只重置口令、不收起公网管理面、不加抗钓鱼的多因素认证,也只处理了通报列出的一部分。FBI 与特勤局把收紧管理访问、结束现有管理会话和 VPN 会话、重置口令、启用抗钓鱼多因素认证、核对未知账号,和确认 PBKDF2,写在同一组缓解措施里。

SHA-256 和 PBKDF2 各自证明什么

OWASP Password Storage Cheat Sheet 把口令存储从「算一次快速哈希」里拆出来:应使用带唯一盐的慢速密钥派生,例如 Argon2id、bcrypt、scrypt,或迭代次数足够的 PBKDF2。盐的作用是让预先算好的对照表不能从一个人搬到下一个人。迭代或记忆困难的参数,作用是让每一次猜测都重复大量工作。两者回答的问题不同。只有盐、仍然只算一次 SHA-256,彩虹表会失效,GPU 对短口令的穷举依然便宜。只有慢,但所有人共用一个盐,大批哈希仍可以被同一张表覆盖。通报没有把 Fortinet 旧方案写成「完全没有盐」。本文也不补这个细节。能写进句子里的,是厂商后来自己用的对照。

Fortinet 关于管理员口令哈希的技术说明写明:从 FortiOS 7.2.11、7.4.8 和 7.6.1 起,配置里用于保存防火墙管理员凭据的哈希,从 SHA256 改为 PBKDF2。说明里用 SH2 表示 SHA256,用 PB2 表示 PBKDF2。低于这些起点的版本,同一份说明仍把哈希函数标成 SHA256。7.2.11 发行说明把新方案写成带随机盐的 PBKDF2,用来提高本地系统管理员口令的存储安全性。这和「页面上写了已加密」不是同一句话。SHA-256 与 PBKDF2 在这里都是单向派生,都不是用一把对称密钥把口令包成可逆密文。看到 SH2,不能读成「磁盘上是明文」;看到 PB2,也不能读成「明文泄露也没关系」。

PBKDF2 没有一个全世界统一的「已经够慢」的迭代次数。厂商文档公开的是算法名称、盐,以及配置里的 SH2 / PB2 标记,没有在上述说明里给出一个可以抄进工单的迭代整数。核对时写「备份里这个账号已经是 PB2」,比写「所以 GPU 破解不了」更接近文档实际支持的句子。短口令、从旧泄露里抄来的口令,在有限迭代下仍然是低成本猜测。长的、各账号不同的随机口令,提高的是搜索空间;它不把公网管理接口关掉。

升级不会在登录前把旧哈希换掉

技术说明里最容易被漏掉的一句是:从更早版本升级上来时,管理员口令仍然以 SHA256 存放,直到对应的那位管理员在新固件上成功登录。要让所有本地管理员都变成 PBKDF2,需要每个人至少登录一次;还没登录的,由 super_admin 手动更新口令。只把固件版本号写进变更单,证明不了配置里已经没有 SH2。

即便当前口令字段已经变成 PBKDF2,旧哈希也不自动消失。说明写明:为了向后兼容,先前的 SHA256 默认仍留在隐藏的 old-password 设置里。普通登录后的管理界面看不到这项;super_admin 导出的配置备份里可以看见。只要这份旧材料还在备份里,离线破解的对象就还在。攻击者不必等到你把固件升完才拿走它。备份文件本身如果进了网盘、工单或聊天记录,等于把 SH2 再复制一份。

清掉 old-password 里的 SH2,走的是另一条开关,不是升级的副作用。在 FortiOS 7.2.x 和 7.4.x 上,对应设置是 login-lockout-upon-downgrade;后续文档里的另一名称是 login-lockout-upon-weaker-encryption。打开时会有确认警告。发行说明写明:PBKDF2 从 7.2.11、7.4.8、7.6.1 开始提供;若之后降到不支持这套哈希的版本,本地管理员会登不上。7.2.11 升到 7.4.7 这种「版本号更大、却还没有 PBKDF2」的路径,也会被算进这道锁。通过 LDAP、RADIUS 或 SAML 认证的管理员不使用这组本地哈希,不受这条降级锁影响。本地账号才是 SH2 / PB2 这套标记的对象。

因此「打开清除旧哈希」和「今晚可能还要回退固件」是冲突的。事故当天如果还没决定固件落在哪一个支持 PBKDF2 的版本上,先不要为了消掉 SH2 去打开这道锁。先保留还能进入设备的路径,再在确认不再回退之后清掉旧材料。通报建议的「确认使用 PBKDF2 并移除更弱的遗留哈希」,指的就是这一段厂商说明,不是在门户上改一次口令的同义词。

被锁在外面发生在登录成功之后

很多人接到新闻的第一反应是:把所有管理员口令重置一遍。重置能作废「对方还没来得及用」的那串旧明文,也能在你仍然进得去的前提下,促使存储从 SH2 转向 PB2。它处理不了「对方已经用你的账号登进去,并把这个账号本身改掉了」。通报写的是删除或更改原账号口令,使合法管理员无法登录;同时新建原来没有的账号,用来保持自己的访问。你在 VPN 门户上看到的认证失败,此时证明的是「这组凭据不再被设备接受」,证明不了「对方还没有新账号」。

所以工单里应拆成两列。一列是口令与哈希:每个本地管理员现在是 SH2 还是 PB2,备份里还有没有 old-password,新口令是否与邮箱、云控制台、其他 VPN 复用。另一列是账号清单:有没有通报之前不存在的本地管理员,现有会话有没有全部结束,公网管理接口是否仍对任意地址开放。抗钓鱼的多因素认证能让「只有口令」不足以打开远程管理和 VPN。它不能把已经写进配置的新账号删掉,也不能把已经抄走的旧哈希从对方的 GPU 队列里撤回。

勒索软件那一句同样不要提前。通报说的是初始访问被转交,不是「每台仍在使用 SHA-256 的防火墙今天都会被加密」。已经登不上的设备,按无法确认完整性来处理:隔离、核对配置和账号、再谈恢复。还登得上的设备,优先收起公网管理面、结束会话、把仍是 SH2 的本地管理员换到 PB2,并单独保管新口令。两条都不要做成「把同一串新口令写进群公告」。

当场核对:看备份标记,不跑破解

版本号、新闻标题和「已升级」三个字,都代替不了这份配置里的哈希标记。下面四步假定你已经是这台设备的授权管理员。不要在不可信的电脑上打开备份,不要把备份上传到生成式对话里「帮我看看有没有 SH2」。

  1. 对照固件版本和三个起点:7.2.11、7.4.8、7.6.1。低于对应分支的起点时,厂商说明仍把本地管理员哈希标成 SHA256。版本已经高于起点,只说明「新登录有机会写成 PB2」,不说明旧账号已经写完。
  2. 用 super_admin 导出一份配置备份,在本机搜索 SH2、PB2 和 old-password。某个账号只有 PB2、且没有 old-password,才能把「这份备份里看不到旧的 SHA-256」写进记录。界面上看不到隐藏字段,不能当成旧哈希已经删除。
  3. 列出本地管理员,标出升级之后从未登录、也没有被超级管理员重设过口令的账号。说明写明这些账号会继续停在 SHA256,直到登录或重设发生。远程认证的账号不要和这组本地哈希混在同一条结论里。
  4. 若考虑打开 login-lockout-upon-downgrade(或文档中的 login-lockout-upon-weaker-encryption),先读发行说明里的降级锁警告,并确认短期内不会回退到不支持 PBKDF2 的版本。打开之后,已经只剩 PBKDF2 的本地管理员,在那种回退上会登不上。

这四步回答的是「这份配置现在把管理员口令存成哪一种」。它们不回答「对方的 GPU 队列里有没有一份更早的拷贝」。哈希一旦离开设备,你在本机改存储,作废不了已经复制走的那一份。作废的办法是换掉口令本身,并确认新口令对应的材料不再以 SH2 留在 old-password 里。公网管理面是否关闭,要看接口策略,不看哈希前缀。

四种把通报读过头的情况

第一,把「固件已是 7.2.11 或更高」读成「SHA-256 已经不在配置里」。说明把转换绑在该管理员的成功登录或口令重设上,并把旧哈希默认留在隐藏字段。版本号只能当起点,不能当完成标记。

第二,把 PBKDF2 读成「复用口令失效了」。慢速派生提高的是离线猜测的单价。从别的站点、旧泄露或窃密日志里已经拿到的明文,登录时原样提交即可。各处使用不同口令,挡的是这一条;它不代替收起管理接口。

第三,把「我改了密码」读成「锁门外不会发生」或「已经锁住也能用同一次重置解开」。改密的前提是你还能提交这次修改。对方若已删除账号或换掉口令,门户上的失败只说明旧凭据不被接受。新口令也不会自动删掉对方新建的管理员。

第四,把「这串口令没有出现在本机弱口令名单里」读成「FortiBleed 的哈希队列里没有它」或「这台防火墙已经是 PBKDF2」。名单对照发生在浏览器标签页,设备哈希标记发生在配置备份。两份证据不能互相盖章。未命中名单,仍然可能是一条被复用的长口令;命中名单,只说明太常见,并不能单独证明这台 FortiGate 已被入侵。

常见问题

升级到 FortiOS 7.2.11 之后,SHA-256 是不是立刻没了?

不是。厂商说明写明:从 7.2.11、7.4.8、7.6.1 起,本地管理员口令改为 PBKDF2,但升级后仍保持 SHA256,直到对应管理员成功登录,或由 super_admin 重设该口令。旧哈希默认还在隐藏的 old-password 里。super_admin 的配置备份能看见,普通管理界面看不见。清掉旧哈希要另开降级锁一类的策略,并接受降到不支持 PBKDF2 的版本时,本地管理员会登不上。

换成 PBKDF2 之后,已经偷到的明文口令还有没有用?

还有用。PBKDF2 提高的是「只有哈希、需要逐次猜测」的成本。对方若已从旧泄露或本机窃密日志里拿到明文,登录时直接提交这串字符,不必再破解哈希。口令在邮箱、VPN 和管理员账号之间复用,慢速派生不会把这串明文变成错的。

已经被锁在外面,再改一次密码有没有用?

门户上那一次改密,前提是你还能登录。通报写明:对方可能删掉或改掉原账号口令,让合法管理员登不上,同时新建原来不存在的账号。这种情况要按进不去设备来做隔离和配置核对,不能理解成「再执行一次口令重置就结束」。改密也换不掉固件里尚未转换、或仍留在 old-password 里的旧哈希。

本机弱口令名单能不能证明这台防火墙的哈希没有被破解?

不能。本地名单只回答:这串字符在当前标签页的公开高频列表及其少数变形里有没有对上。它不查询 FortiBleed,也不读取防火墙配置。未命中不能证明这串口令从未泄露,更不能证明设备上的哈希已经换成 PBKDF2。命中只说明这串太常见,应该换掉,并且不要继续复用。

新口令留在本机,不要写进群公告

存储从 SH2 换成 PB2 之后,你仍要有一串没有在别处用过的管理员口令。这一步可以用 FastPwd 的密码生成器在当前标签页完成。无需注册,站内也没有密码库。随机模式使用 crypto.getRandomValues,长度 6–128 位,默认 16 位;低于 8 位会提示安全性较低。生成结果默认不上传。它不会登录你的防火墙,不会把 SH2 改成 PB2,也不会关闭公网管理接口。它提供的是一串不必从「管理员 / 公司名 / 季节」里现编的字符,用来替换你仍然进得去的那个本地账号。

打开开发者工具的 Network,勾选保留日志,用整串新口令搜索请求行和请求体。业务请求里不应出现这串。这一步证明的是「这次没有作为 HTTP 正文离开标签页」,证明不了你随后把它粘进了聊天软件。浏览器若询问是否保存密码,选择不保存。保存进浏览器的已存口令清单,是另一道门,和 FortiOS 的 PB2 无关。默认 16 位、从大小写字母、数字和符号里抽取的随机口令,搜索空间远大于喷洒常用的短词;不要把这句话写成「因此 SHA-256 绝对算不出来」或「因此管理接口可以继续对公网开放」。

若还想看这串像不像公开高频名单里的弱口令,另取一串可丢弃的测试字符,在密码检测里对照。待测密码不上传,对照的是随页面下载的公开名单,不是 Have I Been Pwned,也不是 FortiBleed 的哈希库。未命中不能证明全网没见过。不要把刚要启用的防火墙口令贴进检测框,也不要把配置备份拿去检测。

新口令若必须交给另一位值班同事一次,不要写进会留在服务器上的群消息或工单正文。改走阅后即焚:服务端只暂存密文,密钥放在链接的 # 后面,创建和阅读都无需账号。链接形态是 s.html?id={id}#{key}。这条通道回答的是「怎样交一次」,不是「怎样修复防火墙」。配置备份里如果含有 SH2 或 old-password,不要整份放进焚链或网盘;备份应留在你已经信任的机器上,用完按你们自己的配置保管规则处理。对方截图、转发完整链接,都会让「阅后」覆盖不到那一份副本。

延伸阅读

本地弱口令名单能抓住常见弱密码、不能当成全网撞库或某次事件的哈希库,见 本地弱口令名单能证明什么,为什么它不是全网撞库。生成口令时应使用密码学安全随机数,而不是 Math.random,见 Math.random 生成的密码看起来够乱,为什么它不是密码学安全随机数。把一次性密钥放在链接井号后面时,服务器默认收不到片段,见 URL 的井号后面为什么适合放密钥,以及什么时候会失效。