1. 程式人生 > >代理技術安全分析

代理技術安全分析

提到代理,普通人最容易想到的就是網頁代理,當然大多數人瞭解它是因為用它觸及了邪惡資本主義後花園那充滿了桃色誘惑的世界。

事實上網頁代理只是代理的具體應用場景之一,代理伺服器有多種應用場景,如:防火牆穿透,隱藏源IP,遠端管理,爬蟲提速與防封等 。他們應用的思想是基本一致的,掌握這種思想才能更好地理解代理。

由於網上關於代理部署的文章已經多如牛毛了,因此本博文不會具體在介紹一般代理的部署問題,我注意到關於代理在安全分析與網路安全方面的應用的文章不多。故打算結合一段時間的使用經驗與觀察從這兩個方面說代理。本文主要包括以下幾部分:

  1. 何為代理,不同代理的特點
  2. 內容安全(可信代理,流量的加密,流量特徵檢測)
  3. 身份安全(可信代理,可追蹤性,配置不當,鏈路層安全,路由記錄)
  4. 其他
  5. 代理使用的經典場景

何為代理,不同代理的特點

計算機代理:計算機領域內代理往往特指代理伺服器,它的作用是代理網路使用者去取得網路資訊,作為資訊傳遞的中轉站。這與現實生活中的二手車中間商,海外商品代購商,公司祕書的作用是相似的。下圖中a、b分別代表直接通訊與一個典型的有代理參與的通訊流程圖。代理作為流量轉發者的角色可見一斑。

在上圖b中,ProxServer看上去承擔流量轉發功能,實際上代理服務的具體結構比上圖要複雜一些,我們將從全域性代理與區域性代理的角度展開解釋方便大家理解。

區域性代理(單服務代理):

區域性代理描述的是一臺電腦中某一程式通過代理伺服器訪問外部服務,其他程式則不通過代理伺服器連線。以經典的瀏覽器的http代理為例,如下圖所示。

瀏覽器自身提供了一個代理介面,填入代理伺服器地址(ip:port)後,原本發向網際網路網站80埠的流量將被重定向到代理伺服器,代理伺服器收到流量包後,解包分析,再更改包頭重新發往目標網站。目標網站發回資料後,再依照資料包編號等資訊決定資料包該轉發給誰,再解包更改資訊後重新封包轉發給電腦。

這種代理的特點是,“應用層-程序級”的代理。

 舉個例子,如果您的火狐僅開啟區域性http代理,如下圖所示:在網頁上獲取一下你的ip會顯示為代理伺服器所在的公網ip。如果您再開啟Chrome獲取ip會注意到顯示的是本地所在的公網ip。當然僅僅從這個角度去說,您可能還不能完全理解區域性代理的特點。

事實上如果這麼做,DNS流量並不會代理走,這一點我想絕對不符合您的預期,但是合情合理。在訪問某個網站前要先執行域名解析,域名解析服務並不由瀏覽器承擔,實際上瀏覽器將DNS請求交給作業系統後臺中的域名解析守護程式執行,如果本地(host,reslov.conf,瀏覽器快取中沒有條目)它會逐級向上級DNS伺服器請求,獲得ip後交給瀏覽器。抓包檔案中您也可以清楚的看到HTTP代理流量(忽略TCP握手)前的相關DNS流量。我想到目前為止您應當看出來了,區域性代理的問題比較大,我們將會在後面進一步介紹它會帶來什麼樣的安全性問題。

特別地,全部勾選瀏覽器代理項實現的代理,本質上仍為區域性代理。但在這種模式下,網頁流量基本不會洩露出來了。

全域性代理:與區域性代理對應,全域性代理提供系統全域性的服務代理,作業系統上所有的應用流量都會把資料傳送到全域性代理指定的伺服器地址上。從電腦的網口出口來看(不考慮2層協議與部分3層協議),目標地址均為代理伺服器地址。

內容安全

讓我們重新回到一開始的看過的這張代理結構圖,網路環境永遠是非常複雜的,不安全的網路通道往往存在嗅探,中間人等多種潛在攻擊威脅。

內容安全關注兩點:

  • 代理伺服器自身必須是可信的,否則使用者將把自己完全置於暴露中。
  • 代理伺服器與電腦(即代理客戶端)之間是屬於代理服務可控的範疇,代理服務要做好一件事就是實現端到端的加密。多個協議公用一個鏈條,從流量的統計學特徵來講,想要檢測其實是比較容易的。如果判斷出伺服器的流量存在異常,如果未實現流量未加密,那麼被解密的風險很高。

身份安全

這裡大概從兩方面定義身份,流量的身份與客戶端的身份。

流量特徵檢測相對而言比較成熟。如果你的代理流量的加密演算法實現的不夠好,流量也比較大,那麼想要檢測出來比較容易。流量身份的暴露極易引起代理伺服器暴露,特別是在公網上。

客戶端身份安全主要關注以下幾方面:

  • 一方面如果走區域性代理,那麼未被代理的服務會暴露客戶端身份,同時被代理的應用依然可能產生不走代理的流量可能(如下面總結-1);
  • 另一方面,即便走了全域性代理,在某些情況下仍會暴露使用者的真實身份。有的全域性代理方案自身實現有缺陷(故現在全域性代理有人推薦sstap);
  • 鏈路層安全,不要忘記基本所有的代理從TCP/IP協議簇或OSI參考協議來看都是工作於高層的。底層的身份並未被保護,換句話來說,從MAC地址這裡可以對應到客戶端,如果網際網路電子裝置實名制管控繼續變嚴,裝置到人的鎖定將變得更加容易。然而,這是對普通人而言的,每一個linux使用者應該都很清楚,網絡卡MAC是非常容易更改的。
  • 代理客戶端必須是可信的。
  • 通過路由記錄溯源到客戶端及代理伺服器從技術上是可行的,工作量很大,要執行這樣任務,必須有政府企業的參與,甚至要跨國。

總結

  1. 瀏覽器追蹤--代理安全問題。我們開啟的是HTTP代理,針對HTTP網站,如果網站內嵌入了其他域的內容(這幾乎很普遍,現在隨手一個頁面都嵌入了廣告),那我們不得不去獲取它們的內容,如果對方不走HTTP流量,那你兩之間的通訊也不會走代理。故身份暴露。您可能覺得這也沒啥大不了的,畢竟現在HTTP網站已經很少了(畢竟HTTPS的覆蓋率已經很高了),而且把瀏覽器的全部選項勾選上不久OK了?這只是一方面,請看下一部分。
  2. 瀏覽器追蹤--瀏覽器指紋問題。實際上目標網站也可能對瀏覽器進行追蹤,一般人可能並不關注這個問題而已。前端能向網站回傳很多瀏覽器的資訊,有些人將其稱為瀏覽器指紋,惡意收集瀏覽器指紋也算對隱私安全的破壞。這一點很容易被忽略,關於這一點我曾一度比較困惑,偶然間突然想明白了。因此全域性不全域性此時並無意義。有2個網站可以檢測瀏覽器指紋的洩露情況。您可以對比測試一下結果。這也是為什麼要講NoScript的原因。 http://panopticlick.eff.org
    http://www.whoer.net
  3. 隱患依舊存在。即便代理服務在伺服器與客戶端之間做好了他該做的事,也不代表一切資料是絕對安全。代理客戶端與伺服器之間擁有一層加密隧道,但是代理伺服器與客戶端想要傳送的真實目的地址之間並沒有隧道,這部分的流量仍有一定的安全隱患。在明網部分這問題倒也不大,明網的後半部分基本是在公網上,只有國家與ISP有嗅探收集這部分的能力(只是說有能力,一般人人家才沒功夫去嗅探你的資料呢,沒意義),並不會想我們區域網逐漸向上接入廣域網到骨幹網時路況辣麼複雜。但是仍要記住,這是隱患哈,特別如果資料傳輸沒用TLS加密的話。

代理使用的經典場景

  1. HTTP&HTTPS代理。最傳統,最常用。此區域性代理包括兩部分,對現代的大多數瀏覽器而言類似於瀏覽器設定中同時勾選http代理與TLS代理。比較好的一點是目前DNS-over-TLS(T-DNS)已經發展起來了,DNS流量會預設也被代理。如果選中這兩項,Wireshark將抓不到DNS的流量。這可能也是瀏覽器廠家注意到以往的問題所在吧。
  2. 多級代理技術。多級代理極大的增加了溯源的難度,作為代理的伺服器,往往跨越不同的國家,雲服務提供商(這些提供商往往不受目標所在區域法律的約束),甚至部分黑客直接使用公網肉雞。多級代理本身並沒什麼技術難度,無非是代理服務時,代理伺服器依次填入下一級代理伺服器的地址罷了,最終可以得到一個代理鏈條就像連結串列一樣。多級代理在規避攻擊溯源與洋蔥中應用非常廣泛(關於洋蔥,這一網路可理解為一個三級代理系統,符合文中提到的多項特點與問題,它的不同之處在於二級代理伺服器隨機且難以追蹤。雖然網路內部看上去很安全,但該網路邊緣也存在一些問題:洋蔥的出口節點並不一定都可信除了志願者還有很多科研組織,攻擊者,國家機構懷揣各自目的加入了自己的出口節點。由於目前大多數洋蔥網站未開啟https,因此有嗅探資料,或對瀏覽器HTTPS實施證書攻擊的情況。)。
  3. 防火牆穿透。如果防火牆定義了埠進出規則時,那使用代理穿透防火牆是個不錯的方法。在過去,部分員工為了在企業網上網頁掛QQ用了這種手段。
  4. C&C伺服器。我們前面有寫過校外如何訪問校內網論壇,這也是種變向的代理,在這種場景下公網的代理伺服器也叫作C&C伺服器。
  5. 爬蟲代理池與防封。使用代理池可以大大的提升爬蟲的爬取速度,同時也避免了因爬取速率過高導致伺服器被封,爬取失敗的情況。擁有了代理池後,我們就可以把注意力好好放在資料庫任務派發與資料的正則提取上了。
  6. VPN代理。VPN自然也是一種代理技術,但是本文不探討這一話題,一方面小菜鳥只會用,裡面體系比較複雜目前還沒時間研究,另一方面國內對VPN的態度比VPS要更敏感。本文探討的是VPS技術。

                                                                                                                                   歡迎來訪我的小站。--kal1c2er