手機客戶端開發中的“惡意代理”攻擊分析
設計HTTP安全的時候,惡意代理是需要考慮到的很重要的一環,尤其在這個“Wifi橫行”的年代。一個酒店、商廈中不懷好意的免費Wifi節點,可能就會讓用戶在使用客戶端的過程中,泄漏密碼、資金等重要信息。
本文從常見惡意代理的幾種攻擊方式出發,談一談如何在安全設計上避免被惡意代理攻擊。
一、報文纂改
這個是攻擊力比較小的方式,只要稍有一些安全意識,就容易防范。典型的攻擊方式是通過惡意代理截取到一段明文請求,分析請求格式,然后對其中的一些參數進行修改,再向模擬用戶向服務器請求。通過這種方式,可以很容易地破壞用戶在服務器上的私有數據。比如,用戶本意是發送一個刪除某條信息的命令,惡意代理把用戶發送的命令修改為清除所有信息。
對這種報文纂改的攻擊,我們可以通過對請求報文進行摘要即可防范。
二、重放攻擊
這個主要是針對服務器的攻擊。服務器中總有那么一些API是性能消耗比較大的,或是為了安全,或是業務比較復雜。惡意代理很可能會截取到用戶的一個請求之后,向服務器不停地發送該請求,進行“拒絕服務”攻擊,如果服務器對請求無法簽別,就會影響對正常用戶的服務。對于這種重放攻擊,我們可以通過在請求中添加隨機數驗證來設置請求時效性的方式來解決。有幾種具體的手段可以借鑒:
1、服務器與客戶端在第一次請求時進行一次時間同步,客戶請求時隨機數取請求的當前時間,服務器根據客戶端的時間是否與服務器的時間相差太多來判斷是否重放攻擊。這種方式很容易實現,但由于客戶端與服務器的網絡交互存在時間差,時效性會稍差。
2、每次請求服務器在響應時帶回下一次請求的隨機數,服務器把隨機數和正常請求數據一起進行摘要。服務器對每個請求進行驗證,如果隨機數不正常,則屬于重放攻擊,判定該請求無效。但這種方式對付比較簡單的惡意代理還可以,更強大的惡意代理可以攔截到這個隨機數。這種方式最大的問題是無法進行并發請求的驗證。
3、客戶端和服務器利用共享密鑰來為每次請求生成隨機數。比如安全硬件等,服務器還可以為每個客戶端生成一個對應密鑰,客戶端在發送請求時利用密鑰生成隨機數,并在請求中包含自己的AppKey。服務器接收到請求時,根據該客戶端的AppKey查詢到該客戶端的密鑰,再利用密鑰生成對應的隨機數,如果該隨機數與客戶端發送過來的相同,則請求正常,否則,可判斷該請求為重放攻擊。這種方式的缺點是一旦客戶端的AppSecret被破解,則安全蕩然無存。
三、密碼破解
這種攻擊主要以獲取用戶的密碼等身份認證信息為主。可能有以下幾種方式:
1、對HTTPS連接,通過惡意代理對安全證書做替換。如果設計上太多依賴HTTPS安全性,利用HTTP發送的信息不加密的話,很容易被惡意代理截獲并分析出用戶的原始密碼。
2、對于簡單的密碼摘要信息認證方式,惡意代理可以在攔截到摘要后利用詞典進行暴力破解。對于請求中有隨機數的摘要,惡意代理可以模擬服務器向客戶端響應一個隨機數,然后對攔截到的客戶端請求進行暴力破解。
惡意代理在無線互聯網上的破壞性要遠大于傳統互聯網,而安全問題從來也不是一蹴而就的,我們需要在設計時盡量在安全、便捷、性能之間做更慎重的權衡,從多方面一起下手來保護我們的用戶。