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