先記結論:遺留的 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」。
- 對照韌體版本和三個起點:7.2.11、7.4.8、7.6.1。低於對應分支的起點時,廠商說明仍把本地管理員雜湊標成 SHA256。版本已經高於起點,只說明「新登入有機會寫成 PB2」,不說明舊帳號已經寫完。
- 用
super_admin匯出一份組態備份,在本機搜尋SH2、PB2和old-password。某個帳號只有PB2、且沒有old-password,才能把「這份備份裡看不到舊的 SHA-256」寫進紀錄。介面上看不到隱藏欄位,不能當成舊雜湊已經刪除。 - 列出本地管理員,標出升級之後從未登入、也沒有被超級管理員重設過密碼的帳號。說明寫明這些帳號會繼續停在 SHA256,直到登入或重設發生。遠端認證的帳號不要和這組本地雜湊混在同一條結論裡。
- 若考慮打開
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 的井號後面為什麼適合放金鑰,以及什麼時候會失效。