我們日常使用的金融卡、信用卡、健保卡、SIM卡、自然人憑證等都是IC晶片卡,是目前最成熟、最為廣泛接受的產品。 目前業界常見的帳號密碼保護產品有:1.IP鎖、2.OTP動態密碼鎖、3.防盜卡、4.簡訊安全鎖、5.電話鎖、6.IC晶片卡等,有關這些產品的比較在本文後面將會詳細介紹。
IC晶片卡 運用為大宗 基本上IP限定鎖的概念跟防火牆類似,用戶註冊的IP與登入系統的IP必須相符才能通過認證。2、3、4都可以歸類為某種形式的OTP(One Time Password),而OTP的原理是利用系統事件或是時間加上特殊的演算法讓客戶端OTP設備所產生的密碼與伺服端同步。電話鎖則是額外利用通信系統來做第二道防護鎖,一旦需要登入,需先以電話撥入後做暫時性的解鎖。而IC晶片卡的運用是目前最成熟、最為廣泛接受的產品,包含我們日常使用的金融卡、信用卡、健保卡、SIM卡、自然人憑證等都是這一類。
若是單純的帳號密碼系統,那駭客只要偷到帳號密碼就成功了,但如果使用者手上還有另外一個設備,如OTP卡。那駭客還必須知道此時,這個額外設備的狀態,如果雙因素認證中的第二個因素是使用第二通信管道,如電話鎖,那麼理論上駭客也必須能夠偽冒成第二通信管道的合法、正確使用者才能成功。IC卡亦然,理論上駭客要有那一張卡,還要知道PIN Code,由於IC卡在身分認證市場上被廣範的運用,人們相信他的安全性,但大多不了解他為何安全,因此接下來我們來看看IC卡的原理,同時在往後的文章將統一稱為Smart card,我們並將探討使用該產品有何風險及有哪些該注意的部分。
卡片量產金鑰功能需重視 Smart card最簡單的定義為「如信用卡尺寸大小般的晶片卡」,但是就功能與實際運用來說不一定為信用卡的卡片格式,USBToken也廣受歡迎。Smart card中最重要的就是其晶片,以目前的半導體技術來說這個晶片的功能相當於一部8/16/32位元的個人電腦,我們將針對Smart card晶片的內部架構稍作解釋,Smart card其實就是一部具體而微的計算機,所以核心部份在於其中央處理器(CPU),而其記憶體分3個部份,ROM的部份存放Smart card作業系統(COS),RAM則作為運算過程所需要的暫存記憶體,EEPROM存放資料,正式的說法是Smart card的檔案系統儲存位置,一般指的32K記憶容量Smart card指的就是EEPROM有32K大小,由於用於PKI系統的Smart card經常需要作加解密運算,為了提升其運算效能,有些廠商會加入Crypto Co Processor,作為執行加解密運算的輔助處理器。
Smart card中常會儲存敏感性的資料,例如RSA私密金鑰或3DES金鑰等,因此不論是透過COS或是安全邏輯控制都希望能保護敏感資料不會洩露。以RSA卡來說有許多產品都能做到key generation on card(卡片量產金鑰),並且外界僅能輸入資料要求Smart card做RSA運算,並讀取輸出,卻無法要求讀取私密金鑰。另外為了防止敏感性資料被盜取,Smart card也會有tamper-resistant的功能,用來防止硬體逆向工程等暴力資料竊取方法,當Smart card封裝被破壞時資料便會自動銷毀。事實上,Smartcard key generation on card的功能非常重要,因為如果private key是在某部個人電腦或主機上產生再匯入卡片,則安全性即會大減,因為公開金鑰密碼學中最重要基礎就是private key的安全,若private曾經一度暴露於不安全的環境中便有可能被盜取,駭客盜取private key後,可以使用software token偽造與Smart card相同的運算功能,曾經有某一家Smart card的key generation on card被發現過上述的問題,因此在評估Smart card產品時,此問題一定要予以重視。
Smart Card結構 Smart card檔案系統如圖1所示,只有MF、DF與EF幾種檔案,一張卡僅會有一個MF檔,如果MF檔被刪除則該卡片就會完全失效,DF檔可視為一般檔案系統中的目錄,而EF檔則為一般檔案。大部分以檔案系統為主的Smart card都是這種架構,Smart card儲存的各種資料如X.509公鑰憑證、卡片序號、PIN Code、3DES key與RSA私密金鑰等都會以EF的檔案型態儲存,不過由於通過FIPS-140驗証Smart card對資料的保護非常嚴謹,所以PIN碼一般都會經過加密而不會以明碼的方式儲存。
卡片與計算機系統連結必須透過讀卡機,目前在計算機上的Smart card應用已經有許多標準,其中最重要的標準就是PC/SC,PC/SC是1996年由微軟公司帶頭制定的標準,主要是讓讀卡機與卡片製造商可以經由此標準而使他們的產品可以共同運作而不會發生問題,而PC端的開發人員便不必擔心讀卡機無法讀取卡片,而需重新開發應用系統的問題,PC/SC架構一部個人電腦可以同時接上許多不同的讀卡機,每一部讀卡機理論上都可以跟不同的卡片溝通,開發者只需透過Windows作業系統提供的Smart card API就可以用低階的命令來存取Smart card。不過一般都不會直接以低階的命令去跟Smart card溝通,因為那非常繁瑣,而由於認證系統主要是作加解密運算,所以在Windows作業系統下最自然的方式是透過CAPI(Microsoft Crypto API,請參考微軟MSDN及TechNet相關文件)以間接的方式要求Smart card做加解密運算。
Smart card開發應用廣 正所謂條條大路通羅馬,Smart card應用系統開發亦是如此,常用的程式語言都可以直接與Smartcard溝通(視卡廠所提供的API),在Windows作業系統上,卡廠必須提供使用者卡片的CSP(Cryptography Service Provider),而這個CSP(一組DLL檔)要能夠運作,就必須送到微軟公司驗證並經過程式碼的數位簽署才能在Windows系統下正常工作。另外一個常用Smart card應用系統開發標準為RSA公司所制定PKCS#11標準(註1),PKCS#11最重要一點是它不只支援Windows平台,UNIX系統上就必須使用該標準達到類似CAPI的功能。以瀏覽器來說可以跨平台的Firefox就支援PKCS#11 token的SSL加密傳輸,而Microsoft IE就只能依靠CSP。PKCS全名為Public-Key Cryptography Standards,PKCS#11則為Cryptographic Token Interface Standard,P#11對Token的定義較為廣泛,一個Token可能為Smart card、memory card、USB token、硬碟甚至是software token,P#11中的讀卡機稱為SLOT(因為不一定是真的讀卡機),架構有點類似PC/SC,不過由於其著重於加解密運算,如果要比較則可視為是PC/SC加上CAPI。
P#11的物件非常簡單,除了data物件外其餘都與加解密有關,P#11對於檔案系統的存取控制分為public space與private space,public space是不需要經過認證就可以讀取的區域,如公鑰憑證、卡片序號就屬於這一類,private space則受到PIN碼的保護,沒有經過PIN的驗證則無法讀取private space,故針對一些特殊應用我們可以自定data object的方式放在private space中受到Smart card的存取控制保護。
為P#11的有限狀態,從中可以了解P#11對使用者定義了兩種角色,一個是Secure Officer(SO),另一個是一般User,對卡片來說SO等於是卡片的管理者,可以對卡片作重新格式化等管理動作,SO的PIN是不提供給User的,使用者僅擁有User PIN而可以執行數位簽署與解密等動作。
系統佈署考量 在考量佈署Smart card認證系統時,應當仔細規劃以免在日後造成問題,以下有幾項重點:
卡片管理
在卡片管理方面首先是 PIN Code的管理,PIN Code如何交到使用者手中?一般建議為使用密碼印表機列印並隨同卡片交付使用者。卡片鎖卡時由誰解鎖?是否提供工具讓使用者依一定程序解鎖(內政部自然人憑證作法),或一定要送交管理單位解鎖?SO PIN如何管理?所有卡片都用同一組SO PIN嗎?或是採用卡片管理系統?使用者萬一忘了帶卡需不需要發放臨時卡?大規模佈署Smart card系統前這些問題都要仔細評估規劃。
應用系統整合
前文提過目前的網路作業系統大都支援以PKI加Smart card的認證方式,問題會出在應用系統的整合上,一般應用系統都會自行加上一些簡單的認證方式,但是如果要享受PKI的好處就必須仔細選擇一套產品可以整合各式現有的應用系統而不需要大費周章的去修改所有的應用程式,這個部分就必須視需求及預算去選擇一套適合單位環境的Application Layer SSO(Single Sign On)產品,評估的重點包含與各家PKI/CA及卡片的整合性與Web Based及Client/Server應用系統整合的難易度等等。
教育訓練
教育訓練是Smart card系統佈署中非常重要的一環,卡片及讀卡機簡單的故障排除訓練,也可減少MIS部門的許多負擔,若沒有讀卡機當然是最好,而Help Desktop的訓練也相當重要,才不會token一發出去整個支援部門就忙得焦頭爛額。
淺談軟、硬體安全 接下來我們要舉一些案例來談軟、硬體安全,如同先前所提到的,世界上任何的安全系統都是安全等級與成本下的平衡結果,Smart card經過ISO、FIPS等機構的驗證,理論上應該是安全的,但是恩智浦半導體(NXP)的MIFARE非接觸式晶片卡就被逆向工程破解(註2),那麼其他家的Token呢?誰敢保證?至於軟體問題就更多了,像鼎鼎大名的SSH,原本是用來取代老舊Telnet、FTP兩個程式的明碼傳遞協定,但是由於程式設計的缺陷出過的漏洞不下20次(註3),所以不要相信安全軟體能帶給你絕對的安全,往往漏洞都出現在現實的細節中。
舉兩個例子不是要嚇各位讀者,接下來你要仔細想一想,如果真的要佈署強認證系統問題會出在哪?如果你已經仔細的規劃跟評估,最有可能出錯的部分仍然是軟體。Client資料經Smart card運算傳遞給Server,其中只要有資料處理的部分都有可能出現Buffer Overflow等問題,原因是程式設計師的習慣不良,而Buffer Overflow可是大問題,歷史知名弱點造成Worm大流行的絕大部分都跟Buffer Overflow有關。
軟體的問題當然也得考慮客戶端惡意程式的問題,客戶端若存在惡意程式就有可能錄到使用者輸入的PIN Code(至於如何解決就交給廠商吧!),有了PIN Code之後惡意程式可以模擬使用者的動作通過認證,而如果使用者習慣不良,將Token一直插在電腦上,可想而知後果是什麼。
結論 世界上沒有絕對的安全這回事,只有相對的安全,佈署安全認證產品的目的以及必須考量的因素都不同,企業的資安長面對的第一個課題是要評估所要保護的資產以及萬一淪陷的損失為何?當你使用國際認證安全產品時,同時也必須了解負責整合系統的廠商之能力,對於關鍵部分的應用系統尤其更要去質疑,找到經驗豐富的資安公司或白帽駭客實際進行滲透測試(PT)是個不錯的方式,資安人員所面對的問題就是:不要怕找出問題,而是要把問題及早找出來並加以解決,這絕對都會比事後讓惡意駭客來幫你找出問題要好得多。
註1:http://www.rsa.com/rsalabs/node.asp?id=2133註2: http://www.usenix.org/event/sec08/tech/full_papers/nohl/nohl_html/註3:請至www.milw0rm.com搜尋ssh
本文作者為國立中央大學資訊工程研究所先進防禦實驗室博士生