💡 今日學習目標:學會在開發與架構設計中,落地 NIST CSF 的「識別 (Identify)」資產盤點與「保護 (Protect)」防衛防線,並看懂「分類寫在政策裡」跟「分類被真的落實」是兩件不同的事。
2014 年 7 月,攻擊者潛入了喜達屋(Starwood)飯店集團的訂房系統,開始竊取資料。
2016 年 9 月,萬豪(Marriott)併購喜達屋,把喜達屋的整套 IT 系統一併接手過來。
問題是:萬豪接手的不只是系統,還有系統裡那個已經潛伏兩年多的攻擊者,而萬豪完全不知道。
2018 年 9 月 8 日,一套新部署的資安工具偵測到異常的資料庫查詢,這才把整件事挖出來。2018 年 11 月 30 日,萬豪首次對外公告,當時估計最多約 5 億筆房客資料外洩。
調查繼續進行,2019 年 1 月 4 日萬豪更新了數字:實際約 3.83 億筆,其中包含 525 萬筆完全未加密的護照號碼,以及另外 2,030 萬筆已加密的護照號碼。對後者,萬豪的官方說法是「尚未找到證據顯示攻擊者取得了解密所需的主金鑰」,但也沒能證明沒有。
從最初被入侵,到被發現,中間隔了超過四年。
📖 資料來源:萬豪國際向美國證交會申報的官方聲明(2019-01-04,SEC Form 8-K 附件),3.83 億/525 萬/2,030 萬三個數字皆出自此份一手文件;Breachsense — Marriott Data Breach Case Study
這個案例剛好同時踩中今天要講的兩個核心功能:萬豪從一開始就不知道自己「識別(Identify)」到了什麼:併購時沒有完整盤點喜達屋的資產與風險,甚至後來還裁撤了大部分喜達屋原有的 IT 與資安人力,等於把原本可能還記得系統細節的人都送走了;而就算後來想「保護(Protect)」,同樣被列為機密等級的護照號碼,落實起來卻是兩種待遇。
在開發生命週期中,Identify 代表對系統的所有組件進行徹底的「資產盤點」。這聽起來像是基本功,但萬豪的案例告訴我們:最容易被忽略的資產缺口,往往發生在組織邊界變動的時候:併購、部門重組、廠商交接,任何一次「系統換了主人」,都是資產清冊最容易出現斷層的時刻。
npm audit、OWASP Dependency-Check)盤點專案 import 的所有第三方函式庫,確保沒有高風險已知漏洞。這一項我們會在 Day 29 談 DevSecOps 與供應鏈安全時再深入。Day 15 提過,軟體供應鏈失效(Software Supply Chain Failures)也是 OWASP Top 10:2025 新增的類別,跟資產盤點做不做得完整直接相關。光有資產清冊還不夠,每一筆資料還要有明確的機密等級,而且分級寫進政策,不等於分級被真的執行,這正是萬豪案例第二個教訓:

525 萬筆護照號碼完全沒加密,另外 2,030 萬筆雖然加密了,事後卻也無法完全排除金鑰一併外洩的可能。同一個「機密」等級,實際的防護程度卻不是均一的,這跟 Day 22 講的「Security by Design 不是一次性審查」是同一個道理:分類要覆蓋到全部資料,不能有漏網的那一批。
當資產盤點清楚後,接著進入 Protect(保護) 階段:
providesConfidentiality、isEncryptedAtRest 這類控制被列進檢查項目的原因。🧭 順便澄清一個關於萬豪案的常見誤讀。 你可能會看到「萬豪用的是 AES-128」這個細節,然後推論「所以它加密強度不夠」。
不是這樣。AES-128 到今天都沒有被攻破,NIST 與 OWASP 也都仍然認可它,本文建議 AES-256-GCM 是「更保守」而不是「AES-128 不安全」。
萬豪真正的問題是另外兩件事:有 525 萬筆護照號碼根本沒加密,以及已加密的那 2,030 萬筆,官方無法排除金鑰跟密文一起被拿走。
金鑰長度從來不是這起事件的破口,覆蓋率與金鑰管理才是。 這個區別很重要,因為「把 128 換成 256」是一個很容易做、做完會很有成就感、但完全沒有解到問題的動作。
這句話在資安檢討會議上很常聽到,但萬豪的案例正好戳破它:「有加密」跟「加密有覆蓋到全部該保護的資料」,是兩件不同的事。
實務上常見的漏網情況包括:
資料分類與加密不是「做了就等於做完」的一次性動作,而是需要定期稽核「覆蓋率」的持續工作。
💬 明日預告:【Day 26】NIST CSF 實務落地:偵測 (Detect)、回應 (Respond) 與復原 (Recover) — Log 與應變
明天我們將探討 NIST CSF 的後三棒:當攻擊發生時,如何即時偵測、回應與備份復原!萬豪案例裡「潛伏四年才被發現」的破口,正是明天要處理的問題。