https://www.informationsecurity.com.tw/Seminar/2024_PaloAlto/
https://www.informationsecurity.com.tw/Seminar/2024_PaloAlto/

觀點

金鑰萬能?

2007 / 09 / 10
ERIC COLE
金鑰萬能?

如果您計畫佈署PKI,請留意以下六家五百大企業經過艱難困苦才學到的經驗:花費三倍的預算及雙倍的執行時間。
問題的核心是因為金鑰管理的整合以及佈署所需要花費的資源和精力遠超過企業所認知的,由於金鑰管理的複雜及困難,讓許多的公司對於大規模的使用資料加密感到卻步。
有缺失的金鑰管理會導致加密失效,而這也是為何那些宣稱會針對資料庫進行加密的公司,資料還是會被竊取的原因。失效的加密也可能會讓您必須面對資訊不當洩露的法律,如加州SB 1386聲明就規定企業必須對於非加密資料被洩露的事件進行通報,然而因不當的金鑰管理所造成的資訊洩露,將會迫使您同樣必須遵從這項規定。

任何加密解決方案的安全都是取決於金鑰是否安全,而不是加密演算法或者加密密碼,如果金鑰沒有被適當的控制,攻擊者就有辦法取得它們。

私鑰(Private Encryption Key)就等同於將您的信用卡、驅動程式的授權碼、社會安全碼以及房屋與汽車的鑰匙結合在一起的物品,如果有任何人取得它,加密將會失效,且他們還可以進入您企業的核心。
平衡功能性和安全性是永遠需要面對的問題,絕對安全的金鑰會變成一把無法被存取且使用的金鑰,如果金鑰是內建在資料庫軟體中,就可以被用來自動化的將資料庫欄位進行加密,同樣地,就攻擊者來說也可以很容易的進行存取,就如同您將房屋的鑰匙放在門口的地墊下,這也是許多資料庫不進行加密的主要原因。金鑰管理的難題是必須讓員工、企業夥伴以及顧客基於商業可以合理存取的狀況下,使用越高等的安全性來降低風險。
讓我們一起來檢視金鑰管理的主要元素、潛在威脅以及如何讓您組織的金鑰管理得以運行。

評估金鑰管理的風險與效益
金鑰管理程序的每一個步驟都有著它的風險,在計畫實施的時候您必須平衡安全性和可用性,以及評估可能的風險與效益。
金鑰產生。金鑰必須使用安全的方式來產生,讓管理者在不能存取金鑰的狀況下來負責產生金鑰,私鑰產生的時候必需加入密碼機制,而這個密碼只有使用者自己知道。
指派傳遞金鑰。金鑰必須透過安全的方式或實體交給使用者,並且確保金鑰不會暴露給其他沒有權限擁有的人,可以使用第三方軟體來完成這項工作。傳統上,金鑰對(key pair)是透過使用者點選某個超連結後被產生;只有公開金鑰會被送到中央儲存點,而使用者自己握有私鑰。
可歸責性。每個人都知道保護社會安全碼和簽名是很重要的,但是卻忽略了金鑰擁有同樣的重要性,只要取得或者使用金鑰,使用者就要對該金鑰負起責任並承受金鑰造成的損害。
金鑰交換。公開金鑰必須被交換,人員才能傳送與接收加密的資料,公開金鑰並不需要被安全的保護,但是您必須能夠確定某個公開金鑰確實是屬於特定使用者。金鑰散佈的最佳實務就是使用憑證,任一企業應該只有單一把被全球性憑證管理中心(CA)簽章過的金鑰,該企業才可使用該金鑰來簽署附屬的金鑰,用這樣的方式來簽署使用者金鑰所花費的成本是最少的。
儲存和存取。金鑰必須以擁有者得以存取,而其他人卻難以接觸的方式進行儲存,一般來說,這表示使用者需要經由密碼或暗碼來使用金鑰,而這個密碼或暗碼必須長度夠長、夠複雜,且不是由使用者直接輸入的。因此替代的方式是金鑰被加密後安全的儲存在硬碟中,而使用者只需要記得金鑰被加密的密碼。
我們都很清楚密碼所帶來的問題:設定的太簡單,密碼就很容易被猜測或破解;設定的太難,使用者就容易忘記密碼或是將密碼放在桌面環境中的文字檔中。某個應用方法要求使用者必須使用長度為30個字元但容易記的密碼。
這個密碼必須完全不同於系統中所使用的帳號的密碼,並且不能被儲存於系統中。很多時候,組織會使用使用者的登入密碼來當成私密金鑰的密碼,這樣會導致攻擊者可以很容易就取得金鑰的存取權進而破解加密資料。
許多組織為了能夠在事後進行資訊的加密,錯誤的將私鑰給保存起來,問題是如果有超過一人知道私鑰,金鑰的價值就會大打折扣,這類問題的解決方法應該是使用萬能金鑰(master key),即在所有加密資料中嵌入萬能金鑰。

金鑰保護。一但金鑰使用密碼解鎖之後就可以被用來解密資料,所以應該被存放在受保護的RAM空間上,禁止任意程式的存取。這個空間應該只有需要金鑰來進行解密時才存在—通常不會超過數分鐘,且RAM空間必須是加密軟體的一個功能。
金鑰註銷。實際上這是金鑰管理上最主要的安全問題之一,當金鑰不再被需要或者被破壞的風險太高時,金鑰就必須以能確保不再有人可以使用它的方式進行撤回,聽起來這件事好像會自然而然地發生,但事實上卻不然,當金鑰不再有效,憑證管理中心會將金鑰加入憑證註銷清單中(CRL, Certificate Revocation List),問題在於,信任金鑰之前,網站會負責抓取最新的憑證註銷清單來驗證金鑰是否持續有效。可以想像成交通警察會攔下某個駕駛,並且檢查他的駕照是否有效一樣。
可是許多網站會忽略這個步驟,因此造成已經被廢止的金鑰還是被信任,這個問題可能是因為加密軟體造成的,但是大部分都是因為實作不良的關係,大部分的組織會自行運作加密,但是卻不了解加密的概念而配置錯誤。


成功安全的關鍵
對於金鑰管理並不存在仙丹妙藥,組織是否了解風險是很重要的,瞭解哪些地方可能會造成危害,並且進行全面性的防護才能對抗潛在的危機,不要忘了,金鑰管理人員的問題和技術的問題一樣多,在發展您的加密基礎建設時,應該將人員和技術問題一起考慮進來。
良好的規劃。進行金鑰管理就好像在建房子,如果做對了,所有主要的問題都會在設計階段被辨識出來。太多的組織急急忙忙地進行專案導致在發展完成之後,或者是發生危害之後才發現問題。
清楚的責任區分。如果金鑰沒有被適當的保護而且任意人就可以存取資訊,那麼誰要負責來決定安全事件是因為金鑰保護失當的失竊,還是詐欺?一旦政策清楚的指示使用者必須使用不同於其他密碼的強健密碼,使用者就必須了解他們也需要為金鑰造成的資安事件負上連帶責任,應當考慮要求使用者簽署同意書,且須告知他們的責任與義務。
人員訓練。千萬不要低估這項工作,金鑰管理並不像某些廠商所宣稱的不需要使用者的參與,除了承擔風險與責任、及建立並保護強健密碼的要求,使用者還是經常要處理技術性的問題,像是清除他們可能用來存放沒有密碼保護的金鑰的快取,如果您認為無法讓所有的使用者都來進行這樣的工作,那麼您正處於某種人際困難,就算有軟體被設計會進行這樣的工作,可是經常會有類似「在以效能為主的環境中執行」這樣的選項來關閉清除快取的功能。

實行堅固的安全政策。所有加密金鑰可能的弱點都應該清楚的在安全政策中被說明,例如,政策中應該說明密碼的複雜度和程度並且明文禁止在沒有適當的保護下,金鑰不得存放在任何可攜式裝置中。
強制密碼符合複雜性。您的系統應該在密碼第一次被輸入的時候就自動的進行檢查,並且在發現密碼很弱時,強制使用者進行密碼重置,您也應該使用密碼破解工具來檢視現存的密碼,但是請檢視備份系統中的密碼而不是對主要系統進行破解。
使用雙因素認證。只使用密碼是不夠的。使用加密來保護你的資產,需要付出昂貴的代價,但是資料遺失的話一樣要付出昂貴的代價。
保護主機。金鑰的安全程度和負責儲存主機上作業系統的安全程式息息相關。使用強健的端點安全解決方案,像是個人防火牆、主機型入侵防禦系統、修補程式管理以及防毒/防間諜軟體。
整合性的金鑰管理。以資料庫加密來說,由資料庫本身所運行的金鑰管理才是最強健的,而不是事後添加的。Oracle在這一方面算是領導者,當您使用它們的安全選項就可以把金鑰管理整合進資料庫。
在上線前先驗證是否有效。針對解決方案進行點對點的滲透測試,確保沒有任何弱點被遺漏。許多組織對功能面會進行嚴謹的測試,但是對安全卻沒有進行同樣的嚴謹測試,透過獨立的第三方來找出在程式開發時可能遺漏的問題,例如,滲透測試人員可能會在沒有金鑰的狀況下利用像是SQL Injection攻擊來嘗試找出存取資料的方法。
本文並不是要輕視加密,如果您無法適當的管理金鑰,實行加密並不會替您帶來好處,針對金鑰進行控管與安全的派送通道才能降低風險,尤其是您在進行即時資料庫加密時更是要特別注意,如果資料庫廠商沒有提供內建的金鑰管理解決方案,這可能表示您該放棄資料庫加密而使用其他方式來進行資料的保護。

Eric Cole, CISSP, GIAC, Sytex Group的首席科學家. 著有《Hackers Beware》一書,同時是《Network Security Bible》的共同作者。