安全-流量劫持能有多大危害?

  上一篇文章(安全-流量劫持造成的緣由),介紹了常見的流量劫持途徑。然而不管用何種方式得到流量,只有加以利用才能發揮做用。html

  不一樣的劫持方式,得到的流量也有所差別。DNS 劫持,只能截獲經過域名發起的流量,直接使用 IP 地址的通訊則不受影響;CDN 入侵,只有瀏覽網頁或下載時纔有風險,其餘場合則毫無問題;而網關被劫持,用戶全部流量都難逃魔掌。小程序

  在本文中,咱們經過技術原理,講解以下問題:瀏覽器

  - 爲何喜歡劫持網頁?- 只瀏覽不登錄就沒事嗎?- 自動填寫表單有風險嗎?- 離開劫持環境還受影響嗎?- 使用 HTTPS 可否避免劫持?- 流量劫持可否控制我電腦?緩存

  爲何喜歡劫持網頁?安全

  理論上說,劫持到用戶的流量數據,也就得到相應程序的網絡通訊。但在現實中,數據並不表明真實內容。一些重要的網絡程序,都是私有的二進制協議,以及各類加密方式。想經過流量來還原出用戶的聊天信息、支付密碼,幾乎是不可能的。即便花費各類手段,破解出某個程序的通訊協議,然而一旦程序升級改變了協議格式,或許就前功盡棄了。所以,很難找到種一勞永逸的客戶端劫持方案。網絡

  然而,並不是全部程序都是客戶端的。一種新興的應用模式 —— WebApp,發展是如此之快,以致於超越客戶端之勢。在現在這個講究跨平臺、體驗好,並有雲端支持的年代,WebApp 愈來愈火熱。各類應用紛紛移植成網頁版,一些甚至替代了客戶端。同時,也造就了流量劫持史無前例的勢頭。app

  WebApp,其本質還是普通的網頁而已。儘管網頁技術在近些年裏有了很大的發展,各類新功能一再增長,但其底層協議始終沒有太大的改進 —— HTTP,一種使用了 20 多年古老協議。框架

  在 HTTP 裏,一切都是明文傳輸的,流量在途中可爲所欲爲的被控制。傳統程序事先已下至本地,運行時只有通訊流量;而在線使用的 WebApp,流量裏既有通訊數據,又有程序的界面和代碼,劫持簡直垂手可得。網站

  上一篇也提到,若是在戶外沒有 3G 信號的地方釣魚,沒法將得到的流量轉發到外網。然而,使用網頁這一切就迎刃而解。咱們徹底能夠在本身的設備上搭建一個站點,留住用戶發起離線攻擊。對於那些連上 WiFi 能自動彈網頁的設備,那就更容易入侵了。搜索引擎

  所以,劫持網頁流量成了各路黑客們的鐘愛,一種可在任意網頁發起 XSS 的入侵方式。

  下面,開始咱們的攻防之旅。

  只瀏覽不登錄就沒事嗎?

  每當磚家出來提醒時,總免不了這麼一句:公共場合儘可能不登陸帳號。因而,你們就認爲只看網頁不登錄就平安無事了。

  若是是公共的電腦,那也就無所謂;不然,本身的一些帳號可能就倒黴了。

  在本身的設備上,你們都會記住各類帳號的登陸狀態,反正只有本身用,也沒什麼大不了的。然而,在被劫持的網絡裏,一切皆有可能發生。即便瀏覽再日常不過的網頁,或許一個悄無聲息的間諜腳本已暗藏其中,正偷偷訪問你那登陸着的網頁,操控起你的帳號了。

  聽起來彷佛很玄乎吧,磚家彷佛也沒說已登陸的帳號會怎麼樣。難道隨便一個網頁,就能讓各類帳號被控制嗎?

  你們都知道,HTTP 是無狀態的,不像傳統協議有個『會話』之類的概念。各類帳號的登陸狀態,只能依靠瀏覽器的 Cookie 來實現。所以,只要有了的 Cookie 也就得到了用戶帳號的使用權。

  和傳統 XSS 攻擊不一樣,流量劫持能夠獲得任何通訊數據,固然也包括那些受 HttpOnly 保護的 Cookie。攻擊腳本只需對某個站點發起請求,黑客便可在中途劫持到傳輸的 Cookie 數據。若是同時發起衆多站點,就能覆蓋至關一部分目標了。

  這種請求未必要真正訪問一次頁面,僅僅將 URL 做爲圖片加載,將目標站點的 Cookie 送出便可。

  黑客獲得 Cookie,便可在本身瀏覽器裏還原出登陸狀態。儘管你確實沒有登陸操做,但那些已登陸的卻能出賣你。

  防範措施:

  訪問一些重要的網站,儘可能不要記住登陸狀態,以避免 Cookie 被泄露。不過,只要網站綁定了 Cookie 和 IP 段,這招的危害程度就大幅下降了,僅憑 HttpOnly 仍是很不靠譜的。

  自動填寫表單有風險嗎?

  使用上面的方法得到 Cookie,即便能控制帳號,但其密碼仍沒法得知,隨時都有可能失去控制權。

  不過,一些用戶有讓瀏覽器自動保存密碼的習慣。經過這點,咱們是否能套出記住的密碼來呢?

  分析下瀏覽器是如何自動填寫頁面表單的。其實很簡單,瀏覽器發現頁面 URL 和表單名匹配記錄裏的,就自動填上了。

  要是在流量可控的網絡裏,剝離頁面全部內容只剩表單,又會如何?

  保存着的密碼仍能自動填上,而且可被腳本訪問到!

  若是咱們在用戶訪問的頁面裏,建立大量的隱藏框架頁,便可嘗試獲取各類網站保存着的帳號了。(不過現在 Chrome 框架頁已經不會自動填寫了。具體實現和瀏覽器有關)。

  不過,即便框架頁不自動填寫,但主頁面總得保留該功能吧。若是發現用戶某個打開着的網頁好久沒有交互了,可悄悄跳轉到如上那樣的純表單頁,不管可否獲取數據,都將繼續跳轉,一個接一個的嘗試。。。直到用戶切回窗口,再恢復到原先那個頁面。

  因爲泄露的是明文的帳號和密碼,即便數量很少,也能經過社工獲取到用戶的更多信息,最終致使更嚴重的泄露。

  防範措施:

  因此不管是 Cookie 記住登陸,仍是瀏覽器自動填表,重要的帳號都應慎用。

  瀏覽器的自動填表也應增長些安全策略,例如必須有用戶的交互纔開始填寫,規定的時間裏只能填有限次。

  離開劫持環境還受影響嗎?

  或許你在想,網絡再怎麼不安全,離開以後就應該沒事了吧。

  有時在公共場合遇上免費的 WiFi,打開網頁看一會新聞,是常有的事。這麼短的時間裏能有多大的事。不過在入侵腳本面前,一小會和長久並沒太大區別。機會只要出現了,不管多麼短暫都能滲透。

  若是隻看重眼前利益,這種短暫的入侵併沒多少利用價值;但若放遠目光,能讓攻擊在從此發起,那就再也不侷限於時間和空間了。所以,咱們須要一個時光機,讓入侵腳本穿越到用戶將來的時空運行。

  若用傳統 XSS 的思惟,這幾乎沒法實現。但在流量劫持面前,一切皆有可能 —— 由於咱們能控制任意流量!

  HTTP 緩存投毒

  上一篇文章提到,但凡是有緩存的地方都是大有可爲的。顯然,對於有着複雜的 HTTP 緩存系統來講,存在缺陷是在所不免了。這種簡單的純文本協議,幾乎沒有一種簽名機制,來驗證內容的真實性。即便頁面被篡改了,瀏覽器也徹底沒法得知,甚至連同注入的腳本也一塊緩存起來。

  因而,咱們能夠將『緩存投毒』的概念,引入 HTTP 協議裏。但凡具有可執行的資源,均可以經過預加載帶毒的版本,將其提早緩存起來。

  爲了將緩存的有效期發揮到極致,咱們事先在各大網站上,找出一些過時時間長、好久沒有修改的資源,評估其將來變化不大的可能。

  當用戶打開任意一個 HTTP 網頁時,注入的 XSS 代碼開始預加載這些資源。因爲一切流量都在控制之中,咱們能夠徹底不走代理,而是返回本身的攻擊腳本。

  用戶瀏覽器收到回覆後,就將其一一緩存起來了。咱們能夠事先收集大量的資源地址,讓用戶在線的時間裏,儘量多的緩存受到感染。

  將來,用戶訪問引用了這些資源的網站時,入侵腳本將穿越時空,從沉睡中喚醒。

  只要用戶不清空緩存,這些被感染的腳本始終附着在瀏覽器緩存裏,直到用戶強制刷新頁面時或許才能解脫。更多細節可參考這裏。

  離線儲存投毒

  不過,有些網站使用的都是很短的緩存,上述的入侵方式彷佛就無能爲力了。不過,HTML5 時代帶來了一項新的緩存技術 —— 離線儲存。因爲它沒有過時時間,所以適用於任意網頁的投毒!

  相似的,當用戶觸發了咱們的注入腳本以後,咱們建立一個隱形的框架頁,加載被感染的網頁。一樣,經過流量劫持,咱們返回一個簡單的頁面,裏面包含一個帶有 manifest 屬性的 HTML 文檔,以及後期運行的腳本。

  因爲經過隱藏框架訪問了這個頁面,用戶並不知情,但盡職的瀏覽器卻將其緩存起來。

  將來,用戶打開被感染的網頁時,瀏覽器直接從離線儲存裏取出,其中佈置的腳本所以觸發。

  因爲是個空白頁面,所以須要填充上真實的網站內容。最簡單的方法,就是嵌套一個原頁面的框架,並在 URL 里加上隨機數,確保是最新的在線內容。

  由於嵌套的是同域框架,最終仍能被入侵腳本所控制。

  不過,離線存儲投毒的後期影響會小一些。將來用戶在安全的網絡裏打開頁面時,瀏覽器會再次請求 .appcache 文件。因爲這個文件並不必定存在,所以瀏覽器極可能刪除掉離線數據。

  理論上說只有一次的觸發機會,但它沒有過時時間,適用於任意 HTTP 頁面投毒。

  防範措施:

  在不安全的場合,儘可能使用『隱身模式』瀏覽網頁。例如 Chrome 裏按 Ctrl+Shift+N 就能調出,可將本身處於隔離的沙盒裏。

  FireFox 瀏覽器存儲離線文件時,會有用戶交互提示,提醒用戶是否有這必要。

  也許不久後,框架頁面再也不被離線儲存所接受,新標準隨時都有可能改變。但 HTTP 緩存投毒是協議棧的缺陷,所以很難防範,下一篇會發現實際入侵效果很是理想。

  使用HTTPS可否避免劫持?

  若是從密碼學的角度來講,使用了 SSL 加密的數據確實難以破解,更不用談修改了。

  然而,惹不起但總躲得起吧。雖然沒法破解,但流量仍掌握在本身手中,走哪條路仍是由我說的算,徹底能夠繞過你。

  偷換證書

  不一樣於簡單的 HTTP 代理,HTTPS 服務須要一個權威機構認定的證書纔算有效。本身隨便籤發的證書,顯然是沒有說服力的,HTTPS 客戶端所以會質疑。

  在過去,這並不怎麼影響使用過程,無非彈出一個無效的證書之類的提示框。大多用戶並不明白是什麼狀況,就點了繼續,致使容許了黑客的僞證書,HTTPS 流量所以遭到劫持。

  在經歷愈來愈多的入侵事件以後,人們逐漸意識到,不能再輕易的讓用戶接受不信任的證書了。現在,主流瀏覽器對此都會給予嚴重的警告提示,避免用戶進入僞安全站點。

  若是重要的帳戶網站遇到這種狀況,不管如何都不應繼續,不然大門鑰匙或許就落入黑客之手。

  所以,這種偷換證書的劫持,在安全意識愈來愈高的今天,很難再發揮實效了。咱們須要一個更隱蔽的方式來躲開加密數據。

  過濾 HTTPS 跳轉

  事實上,在 PC 端上網不多有直接進入 HTTPS 網站的。例如支付寶網站,大可能是從淘寶跳轉過來,而淘寶使用的還是不安全的 HTTP 協議。若是在淘寶網的頁面裏注入 XSS,屏蔽對 HTTPS 的頁面訪問,用 HTTP 取而代之,那麼用戶也就永遠沒法進入安全站點了。

  儘管地址欄裏沒有出現 HTTPS 的字樣,但域名看起來也是正確的,大多用戶都會認爲不是釣魚網站,所以也就忽視了。

  所以,只要入口頁是不安全的,那麼以後的頁面再安全也無濟於事。

  固然也有一些用戶經過輸網址訪問的,他們輸入了 www.alipaly.com 就敲回車進入了。然而,瀏覽器並不知道這是一個 HTTPS 的站點,因而使用默認的 HTTP 去訪問。不過這個 HTTP 版的支付寶的確也存在,其惟一功能就是重定向到本身HTTPS站點上。

  劫持流量的中間人一旦發現有重定向到 HTTPS 站點的,顯然不肯意讓用戶走這條不受本身控制的路。因而攔下重定向的命令,本身去獲取重定向後的站點內容,而後再回復給用戶。因而,用戶始終都是在 HTTP 站點上訪問,天然就能夠無限劫持了。

  搜索引擎劫持

  事實上,HTTPS 站點還有個很大的來源 —— 搜索引擎。遺憾的是,國產搜索引擎幾乎都不提供 HTTPS 服務。所以在不安全的網絡裏,搜索結果是不具有任何權威的。

  防範措施:

  重要的網站一定使用 HTTPS 協議,登錄時需格外留意。

  國外的大型網站幾乎都提供 HTTPS 服務,甚至是默認的標準。相比國內只有少數重要的服務才使用,絕大多數的信息都是在明文傳輸。這是爲了方便什麼來着,你猜。

  流量劫持可否控制我電腦?

  若是不考慮一些瀏覽器安全漏洞,理論上說網頁與系統是徹底隔離的,所以無需擔憂系統受到影響。

  釣魚插件

  有時爲了能讓網頁得到更多的在線能力,安裝插件必不可少,例如支付控件、在線播放器等等。在方便使用的同時,也埋下了安全隱患。

  若是是一些小網站強迫用戶安裝插件的,你們幾乎都是置之不理。但若一些正規的大網站,提示用戶缺乏某些插件,而且配上一些專業的提示,相信大多都會選擇安裝。而這一切,經過被注入的攻擊腳本徹底能辦到。

  不過,正規的插件都是有完整的數字簽名的,而僞造的很難躲過瀏覽器的驗證,會出現各類安全提示。所以,攻擊者每每使用直接下載的方式,提示用戶保存並打開安裝包。

  頁面提權

  如今愈來愈多的應用程序,選擇使用內嵌網頁來簡化界面的開發,在移動設備上更是廣泛。

  一般爲了能讓頁面和客戶端交互,賦予一些本地程序的接口供調用,所以具備了較高的權限。不過,正常狀況下嵌入的都是受白名單限制的可信頁面,所以不存在安全隱患。

  然而在被劫持的網絡裏,一切明文傳輸的數據都再也不具有可信度。一樣的腳本注入,就能得到額外的權限了。

  一些帶有缺陷的系統,攻擊腳本甚至能得到出乎意料的能力。經過以前提到的網頁緩存投毒,這顆埋下的地雷隨時都有可能觸發。

  下載程序

  即便上網從不安裝插件,可是下載程序仍是常常須要的。因爲大多數的下載網站,使用的都是 HTTP 流量,所以劫持者能輕易的修改可執行文件,將其感染上病毒或木馬,甚至徹底替換成另外一個程序。

  用戶總認爲從官網上下載的確定沒問題,因而就毫無顧慮的打開了。這時,入侵的再也不是瀏覽器環境,而是能控制整個系統了。

  防範措施:

  若是是從瀏覽器裏下載的程序,留意是否具備數字簽名,正規的廠商幾乎都會提供。若是想試用一些來路不明的小程序,保存到虛擬機裏使用就放心多了。

  將來 SPDY 技術普及的時候,就再不用擔憂網頁劫持這些事。它將 HTTP 協議封裝在加密的流量裏傳輸,想劫持一個普通網頁都很困難了。

  結尾

  暫時就說到這。事實上相似 XSS 的攻擊方式還有不少,這裏只談了一些能和流量劫持配合使用的。利用上一篇講述的各類劫持途徑,配合本文提到的入侵方式,能夠劫持很多用戶了。下一篇,將演示如何利用這些原理,發起實戰攻擊。

相關文章
相關標籤/搜索