為了提升訪問質量,許多網(wǎng)站會使用CDN服務。在多達數(shù)人的印象中,CDN不僅能夠降低網(wǎng)絡擁塞、提高用戶訪問響應速度和命中率,而且因為很多用戶的訪問網(wǎng)站內(nèi)容時,不再經(jīng)過源站,因而CDN還具有隱藏源站IP的作用。
既然能隱藏源站IP,黑客要想發(fā)動網(wǎng)絡攻擊,首先必須找到源站IP,攻擊難度上升不少,是不是意味著使用CDN可以提升網(wǎng)站安全性呢?
答案是肯定的,但隨著CDN的發(fā)展,使用CDN的的確確也會帶來一些隱患。
CDN科普
鑒于一些同學可能不了解什么是CDN,我們簡單的回顧一下。
CDN也叫內(nèi)容分發(fā)網(wǎng)絡。CDN服務提供商會在全世界各大城市搭建CDN緩存服務器,當網(wǎng)站使用CDN服務時,網(wǎng)站的文字、圖片等內(nèi)容就會緩存到這些服務器上,訪客訪問網(wǎng)站時,離訪客最近的CDN服務器負責響應用戶的請求,從而達到降低網(wǎng)絡擁塞、提高用戶訪問相應速度和命中率的作用。
舉一個簡單的例子,A公司經(jīng)營自行車銷售業(yè)務,總部位于北京,在各大城市都開設了分店,用戶可以選擇線下購買,也可以選擇線上下單。
位于廣州的自行車愛好者從線上渠道購買某型號山地車,A公司并不會從北京發(fā)貨,因為這樣物流時間太長,運輸途中還可能發(fā)生各種意外。最好的選擇,是通知位于廣州的實體店,直接從廣州發(fā)貨,送到客戶的手里。
這個例子中,A公司總部是源站,廣州分公司是CDN緩存服務器?蛻粝蚓W(wǎng)站發(fā)出訪問請求,源站不負責響應該請求,而是由CDN緩存服務器響應用后的請求。CDN工作過程大抵如此。
CDN可以分為自建和他建。上面的例子屬于自建,如果是他建的CDN,相當于代理商模式,顧客從代理商手中買山地車,A公司的廣州分公司負責發(fā)貨。這時候,A公司相當于CDN服務商,代理商相當于網(wǎng)站。
我們這里討論的是第三方CDN,因為自建CDN成本實在太高,絕大部分企業(yè)使用的都是第三方的CDN,比如蔚可云的CDN就是第三方CDN。
使用CDN存在的安全隱患
說完CDN,進入正題。使用CDN,的確會存在安全隱患,而且這個隱患還可能無法避免。
CND服務主要承載著兩個方面的任務:性能提速和網(wǎng)絡防護。
性能提速方面,第三方CDN會緩存網(wǎng)站數(shù)據(jù),并在訪客訪問時直接而返回緩存,以減輕源站服務器的壓力。
在這個過程中,CDN只能緩存明文數(shù)據(jù),不能緩存密文數(shù)據(jù)。因為如果能緩存密文數(shù)據(jù),就相當于發(fā)動一次重放攻擊。
什么是重放攻擊?
舉一個簡單的例子:A想向B轉賬100萬,一般來說如果黑客C篡改轉賬數(shù)據(jù),將100萬改成轉到自己的名下,銀行系統(tǒng)很容易發(fā)現(xiàn),以為A可以看到轉賬確認單,銀行系統(tǒng)也會進行確認。
但如果C事先收集了其他人給B轉賬100萬留下的密文數(shù)據(jù),再用這份密文數(shù)據(jù),替換掉A轉給B應該收到的數(shù)據(jù),A就會看到假的確認單,欺騙系統(tǒng)。
如果CDN緩存密文數(shù)據(jù),就會出現(xiàn)類似的效果。
以TLS/SSL現(xiàn)行的加密機制,是不會允許重放攻擊發(fā)生的,第三方CDN根本無法繞開這一加密機制。
如果你想要CDN緩存密文數(shù)據(jù),就必須承受CDN發(fā)動中間人攻擊的風險。
網(wǎng)絡防護方面,CDN可能還具有檢測惡意流量的功能,以現(xiàn)有的技術來說,一部分黑客攻擊可以在不解密流量的情況下進行檢測,比如SYN Flood。不過也有一部分需要解密后才能檢測,比如與部分應用層的DoS攻擊。
如果要求CDN防御這類攻擊,必然會將一定量的信息暴露給CDN,因為暴露的信息越多,檢測也會越徹底。但與此同時,CDN發(fā)生攻擊的風險也越大。
不過我們換一個視角看,這種隱患不太可能發(fā)生。
CDN服務商本質上就是中介,獲取用戶和網(wǎng)站兩者的信任,是它存在的基石。就好像銀行不會主動暴露客戶資料一樣。如果CDN服務商發(fā)動這類攻擊,無疑等于自殺。