將使用者的個人資料、密碼、信用卡號等敏感資訊,以未經加密的明文形式直接儲存在資料庫、檔案或日誌中,是最嚴重且最不可原諒的安全疏失之一。一旦資料庫或伺服器被入侵,所有使用者的敏感資料將瞬間暴露在陽光下,造成毀滅性的後果。
什麼是明文儲存敏感資訊?
此漏洞指的是,應用程式在「靜態儲存 (Storage at Rest)」時,未能對敏感性資料進行適當的加密保護。即使傳輸過程 (Storage in Transit) 使用了 HTTPS 加密,但只要資料最終以明文形式寫入硬碟,就存在極大的風險。
哪些算是敏感資料?
任何能夠用來識別個人身份、或可能被濫用的資料,都應被視為敏感資料,需要加密保護。例如:
- 個人身份資訊 (PII):姓名、身分證號碼、出生日期、地址、電話、電子郵件。
- 金融資訊:信用卡號、銀行帳號。
- 認證憑證:密碼、API 金鑰、Session Token。
- 醫療健康資訊 (PHI)。
- 其他隱私資訊:社會安全號碼、宗教信仰、性取向等。
攻擊原理與範例
情境:資料庫被駭,人生被盜
- 不安全的儲存:某個電子商務網站在其生產資料庫中,以明文形式儲存了所有使用者的註冊資料,包含姓名、地址、聯絡方式,甚至是為了「方便客服查詢」而儲存的信用卡號。
- 資料庫被入侵:攻擊者利用另一個漏洞(例如 SQL Injection 或伺服器設定不當),成功取得了整個資料庫的存取權限。
- 資料一覽無遺:由於所有資料都是明文,攻擊者不費吹灰之力就下載了數百萬筆客戶的完整個人資料與金融資訊。
- 災難性後果:
- 攻擊者在黑市上販售這些資料。
- 其他犯罪集團利用這些資料進行精準的網路釣魚或電話詐騙。
- 攻擊者使用受害者的身份和信用卡資訊,在其他網站上大肆盜刷,申請貸款,對受害者造成直接的財務損失與信用破產。
風險與影響
- 大規模隱私洩漏:導致使用者對公司信任的徹底崩潰。
- 鉅額法律與合規罰款:嚴重違反 GDPR、PCI-DSS 等資料保護法規。
- 品牌聲譽毀滅:資料洩漏事件是扼殺一個公司的最快方式之一。
- 使用者直接的財務與人身安全威脅。
防禦與預防措施
核心原則:對所有靜態儲存的敏感資料進行加密。
1. 資料分類與盤點
- 首先必須清楚地知道,你的應用程式收集、處理和儲存了哪些資料。
- 根據敏感程度對資料進行分類,並定義每個類別應採取的保護措施。
2. 使用強大的加密演算法
- 對資料庫中的敏感欄位,使用強大的、標準化的加密演算法(如 AES-256)進行加密。
- 絕對不要嘗試自己發明加密演算法。
3. 安全的金鑰管理
- 加密演算法的安全性,取決於加密金鑰的安全性。
- 必須使用安全的金鑰管理系統 (KMS) 來儲存和輪替加密金鑰,確保金鑰本身不會與資料庫一起被洩漏。
4. 最小化資料儲存
- 只收集和儲存業務上絕對必要的資料。
- 如果不再需要,應定期、安全地清除過時的敏感資料。例如,不要儲存完整的信用卡號,可以只儲存後四碼用於顯示,並將實際的支付處理交給符合 PCI-DSS 規範的第三方支付閘道。
程式碼範例 (示意)
錯誤的程式碼:
直接將使用者提交的明文密碼儲存到資料庫。
1 | # 錯誤範例:將密碼以明文儲存 |
問題分析:
這段程式碼將使用者註冊時的密碼,未經任何處理就直接存入資料庫。這是最危險的行為。正確的做法是,在儲存前必須對密碼進行強雜湊處理(如 Argon2 或 PBKDF2)。(注意:密碼雜湊與敏感資料加密的場景不同,但都屬於保護靜態資料的範疇)。
說些什麼吧!