自歐盟 GDPR (General Data Protection Regulation) 五月起生效,各大小企業大為緊張,紛紛修改條款以期避免觸法。甚至有企業擔心未能符合 GDPR 要求,索性暫停向歐盟用戶提供服務。企業如此小心翼翼,但有關私隱的資安危機還是一再爆發。10 月底國泰航空和港龍航空承認有 940 萬名乘客資料被不當取覽或下載,11 月又出現德國首宗因未符合 GDPR 而開罰的案例,緊隨其後知名開源軟件 Kubernetes 再爆出重大漏洞,讓駭客有機會取得管理員權限盜取資料或植入惡意程式碼;最新就連美國大空總署 (NASA) 的伺服器也被駭客入侵,相信部分現職或前員工的個人資料已被洩露,受影響範圍仍在調查中。
隨著駭客攻擊越來越頻密,攻擊技術也發展迅速,存有大量客戶個人資料的企業都不敢掉以輕心,擔心一不小心資安失守,客戶資料被盜用或利用來進行詐欺不僅讓客戶蒙受重大損失,也會影響公司信譽。如果涉及歐盟公民的個人私隱,企業更有可能因觸犯 GDPR 而需要承擔鉅額罰款,罰款最高可達 2,000 萬歐元或年度全球營業總額之 4%。面對駭客的一波又一波的威脅,企業該如何自保?
資安盲點:不是駭客太厲害,而是工程師太粗心!
根據全球知名的資安組織 OWASP (Open Web Application Security Project) 定期公佈的十大網路資安風險報告,去年最新報告中,「失效的身份認證 (Broken Authentication) 」高踞第二名。另外 IBM 今年四月公佈的《X-Force Threat Intelligence Index 威脅情報指數》報告中則指出,跟雲端基礎建設設置不當相關的資料洩露就比前一年大幅增加四倍,而且絕大多數是人為錯誤。至於資安業者 Palo Alto Networks 年中公佈的《2018 Cloud Security Report》雲端安全報告中亦提到,不當設置雲端平台佔總威脅的 62%,是雲端安全的單一最大威脅成因。綜合以上幾份報告,有沒有發現重點提到的不是駭客有多強大,而都是有關認證或者雲端平台設置不當的人為錯誤?
程式人員犯的低級錯誤
有時候,程式人員的人為錯誤真的會讓人倒吸一口氣。上面提到德國開出首宗基於 GDPR 的罰單,是關於德國聊天平台 Knuddels.de 今年 7 月遭駭客入侵,竊取並洩露了 187.2 萬用戶資料,其中包括了用戶名稱、密碼和電郵地址,還因此被發現 Knuddels 居然犯了以明文儲存密碼這種低級錯誤!回顧過往,Twitter 亦曾發現以明文把用戶密碼儲存於內部伺服器中的資安漏洞,雖然未有證據顯示資料外流,但 Twitter 仍然緊急通知用戶建議更改密碼。對於登入設計不太熟悉的朋友可能會問:什麼是明文儲存密碼?為什麼企業一再栽在這個問題?
密碼學小知識
這牽涉到一點密碼學的小知識。平常為了不讓駭客即使輕易入侵,密碼在儲存前都會先經過處理,確保駭客即使入侵也無法破解密碼。常見被錯誤使用來處理密碼的方法有幾種:
1)字元編碼:透過 base64 之類的編碼方式,把原本的密碼改編成另一串編碼。不過只要猜到編碼方式,很容易就可以把編碼翻譯出原本的密碼。
2)對稱密鑰加密:在加密和解密時使用相同密鑰,或使用兩個可以互相演算的密鑰。常見的演算法有 AES、DES、3DES 等等。
3)非對稱密鑰加密:在加密和解密時使用一套私鑰和一套公鑰,因為加密和解密使用不同的密鑰,所以即使公鑰被公開,缺乏用戶自己保管的私鑰也無法破解密碼。常見的演算法有 RSA、EIGamal 等。
處理方法:雜湊 (Hash)
嚴格來說,密碼是不應該「加密」的,所以上面幾種方法都不是適當的方法。因為只要加密,就有被解密的可能。以安全性來說,雜湊 (Hash) 才是唯一可接受的處理方法。Hashing 利用雜湊演算法(常見的有 SHA 、bcrypt 和 scrypt,另外早期還有 MD5 不過因為不夠安全而漸漸息微)來單向加密密碼。但如果透過大量的對照表,還是有可能可以還原。為了加強安全性,hash 可以加「鹽」,稱為 Salted Hash,即是把密碼加上一串字串再進行雜湊演算,加鹽後的 hash 會增加複雜度,提升安全性。隨著 GPU 的技術發展,有研究指出 brute force 方式有能力快速攻克大部分傳統 hashing,即使無意義的密碼也能在數分鐘甚至數秒內被破解;也越來越多人投入研究是否存在更安全的方法,譬如針對 GPU 運算的雜湊法或者後量子密碼學(Post-quantum cryptography)等。
「明文儲存密碼」是低級錯誤
那剛才提到「明文儲存密碼」是怎樣的處理方式?顧名思義,明文儲存就是完全沒有進行任何加密,直接把密碼明文保存。再簡單一點來說,假設你的密碼是 1234,一般處理方式可能在傳遞儲存時加密成一堆亂碼,而明文就是不做任何處理,直接用原本 1234 的方式來儲存。現在能理解為什麼會說「明文儲存密碼」是低級錯誤了嗎?因為駭客只要成功入侵伺服器,不用破解就已經可以輕易獲得你的完整密碼!也就是說,只要工程師在編寫登入程式時,安全意識稍為強一點,就能想到明文儲存密碼是非常危險的。除了明文儲存密碼,儲存方式設計失當這種人為錯誤也常讓人搖頭嘆息,甚至有工程師把愚蠢提升到一個新的層次將密碼保存於 / 傳回前端,這樣駭客就連伺服器都不用入侵,或只要有一點程式基礎的用戶,都能輕易在前端程式碼中存取所有用戶的密碼。
本篇文章投稿並經 Wepro180 編輯潤飾後刊登於 Wepro180 網站,文章題為《【wepro投稿】資安盲點:不是駭客太厲害,而是工程師太粗心!》。
我們的 BaaS 開發工具 Skygear.io 提供完整後端管理服務,有效加快 app 開發速度,縮短整體開發週期,幫助你快速完成產品,早日實現創業夢想。如果你正在尋找合作夥伴一起建立理想中的數位產品,來跟我們聊聊吧!