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