Antiy Password Mixer - 用于WEB站點密碼存放的安全算法應用范例
Antiy Password Mixer(APM)是安天實驗室針對當前拖庫等安全威脅發布的一套安全算法應用范例,適用于中小規模的BBS、SNS、留言板、網頁游戲等常見的Web 應用,以及其它可能通過網頁進行用戶注冊、認證與密碼管理的網站應用場景。APM面向Web應用的規劃、開發和維護者,可以解決Web后臺大多數身份認證和關鍵信息加密保存的需求。
APM基于GNU GPL v2協議開放源碼,目前已經發布了Python、PHP和Ruby版。我們還為APM提供后續的更新和對應的支持服務。
APM的特色包括:
- 簡單,低代價的集成方案,能夠容易的集成到現有的企業環境中
- 可有效對抗 統計攻擊、普通暴力破解、GPU加速破解、基于云計算的破解
- 具備加密單向不可還原數據和支持解密明文信息兩種使用模式
- 正確的經過嚴格代碼審查的編程實現
在當前0day橫行,幾乎沒有網站和應用可以絕對保證自己數據庫系統的安全的情況下,使用APM能使數據庫遭到竊取后的損失降低到最小程度。即便數據庫被公開,也能將企業的社會壓力和法律責任降低到最小限度。
但這一切是如何做到的呢?APM沒有什么技術含量,也沒有“自有自主知識產權”的國產算法,Python版本的主程序還不足300行。我們站在安全工程師的實踐經驗角度,利用現有的流行開源包,完成了對RSA、HASH+SALT算法的一個外圍封裝,給出了網站開發者應用這些算法的相對合理的范例。當然,這些開源包中的算法實現已經經過了我們的代碼級安全分析。
我們希望用這種辦法,讓目前還在明文保存密碼的網站和使用相關算法策略并不合理(比如那些聯合使用HASH或者加入單一SALT的情況)的網站,能夠了解如何科學使用這些數學方法,降低安全應用的門檻。我們也希望打消那些中小網站試圖自己研究一個算法的努力。放棄這些已經被理論和實踐檢驗過的算法實現,而徒耗心力和人月,是不值得的。
當然,你也許會鄙視我們的代碼,而希望自己去實現更精干和精彩的。我們只希望讓更多的開發者了解安全并不神秘,與其他領域一樣有大量的資源可以借鑒和應用,只要我們合理地去使用它們,就可以獲得更多安全的保障。
背景
從去年的索尼泄露用戶信息的風波,到今年的CSDN、天涯密碼泄露事件,無不引發了用戶的口令恐慌。由于大量用戶一號通用,密碼泄露不僅威脅到其在具體站點的安全,也關聯影響到了其網銀、網游、IM等關聯環節的安全。這導致被“脫褲”攻擊的網站的聲譽受到極大影響,有些網站更因此遭到DDoS 攻擊等情況。
目前相關泄露事件的影響范圍包括:
受害廠商/站點名稱 | 泄露信息涉及用戶賬戶數 |
索尼 | 約1.016億 |
世嘉 | 約130萬 |
花旗銀行 | 約20萬 |
CSDN | 約600萬 |
多玩 | 約800萬 |
天涯 | 約4000萬 |
從事件情況來看,這些站點有的采用明文或者曾經采用明文存放密碼,也有的加密算法使用不當,導致加密形同虛設。
分析
當前,攻守方面已經呈現極大地不平衡性,即使采用傳統的標準HASH算法加密的站點,一旦數據庫失竊,其實已經等于90%以上的密碼泄露。為什么會如此?
讓我們來看看,攻擊者擁有哪些資源:
- 已經泄露的,數以億計用戶的明文密碼。
- 體積以T計的彩虹表,已經覆蓋14位以下數字字母組合的密碼的MD5。
- 成本急劇降低的GPU加速和分布式計算資源
- 可以廉價獲取的合法超算資源、云計算資源
- 數量以十萬計的僵尸網絡
盡管有這些前車之鑒,為什么多數網站都無法自己解決好賬號密碼相關的加密問題呢?
- 企業很難聘到合格的懂安全的程序員。
- 網絡流傳的解決方案 , 大部分是網友自己開發,缺少專業的設計和評估。
- 缺少專業的安全人才, 計算機科班的成才率很低。
- 普通依靠野蠻生長成才的技術牛人,因為缺少基礎的專業知識,常犯低級錯誤.很難正確的實現一個安全方案.不正確的實現提供了虛假的安全結果。虛假的安全危害更大。
- 大部分程序員不可能一直跟蹤最新的安全技術進展。
APM解決了哪些問題
一人一密、一站一密:對于使用了APM的網站來說,即使兩個用戶密碼相同,其加密的結果是不同的。對于使用了APM的不同網站來說,用戶使用完全相同的信息和口令注冊,加密結果也是不同的。
高速低負載加密與驗證:一些網站不加密的原因是擔心加密相關處理消耗服務服務器資源,影響用戶體驗,這是我們首先需要解決的。
抗暴力生成:由于APM*一人一密、一站一密的特點,采用暴力生成密文的方法,對每個站點都需要從頭開始。而如果合理的存放相關參數,在只獲取數據庫的情況下,僅憑Antiy Password Mixer的開源代碼,是無法構造有效生成器的。
抗查表攻擊:同上,由于APM使暴力生成的變得沒有意義,因此也沒有查表資源可以使用。
抗統計分析:對于那些使用自制HASH算法,使用其他HASH算法的站點來說,攻擊者亦無須破解,只要根據HASH值進行排序,然后與高頻密碼表進行比對,就可以使大部分用戶的密碼處于不安全的狀況。但經過APM處理過的口令是空間均勻分布的,完全沒有統計價值。
變成快羊:我們相信您聽過一句格言——狼只咬最慢的羊。APM并不能解決拖庫的問題,但APM讓拖庫的價值變得很小。無論如何,全球采用APM的站點都是少數,因此,當你的庫對攻擊者失去意義,他自然就會去尋找更慢的羊。
APM不能解決哪些問題及我們的建議
威脅 | 說明 | 建議 |
用戶端失密 | 用戶自身因中了木馬流失了密碼,或把密碼告訴其他人,錄入時被偷窺等等。 | 加強用戶安全知識普及。 |
釣魚網站 | 用戶登錄了假冒的網站而被套走了密碼。 | 網站加強搜索,以發現對自身釣魚的網站。 |
一號通 | 通過其他網站流出的用戶名和密碼來嘗試使用了APM的網站。 | 增加一個采用不同ID登陸失敗的頻度控制機制。提升探測難度。 |
通訊竊取 | 通訊過程的被工作者監聽、ICP被ARP欺騙監聽等等。 | 使用HTTPS代替HTTP做登陸驗證,但這樣會增加服務器的負載。 |
我們計劃解決的問題
聯合構造碰撞
在完整的數據庫和加密參數被獲取的情況下,目前的方案依然存在一個聯合構造碰撞的問題,會影響到那些存在一號通情況的用戶。我們已經設計了另一組方案解決這個問題,但其方案比較復雜,對于現有網站的移植有一定難度。
客戶端有限強度加密
我們希望能夠提供一份客戶端進行加密的JS腳本,以增強口令和憑證的傳輸安全性。但受JS能力所限,其加密強度是沒有充分保證的。