Kate Li (Taiwan)的部落格

首頁

正解https與中間人攻擊

作者 lace 時間 2020-03-23
all

HTTPS介紹

HTTPS(Hypertext Transfer Protocol Secure)安全超文字傳輸協定,它是由Netscape開發並內寘於其瀏覽器中,用於對數據進行加解密操作,並返回網絡上傳送回的結果。簡單講就是是HTTP的安全版,即HTTP下加入SSL層,在SSL層對請求數據進行加密

SSL內容詳解

SSL的體系結構中包含兩個協定子層,其中底層是SSL記錄協定層(SSL RecordProtocol Layer);高層是SSL握手協定層(SSL HandShake Protocol Layer)。SSL的協議棧如圖所示,其中陰影部分即SSL協定

SSL記錄協定(SSL Record Protocol):為高層協定提供基本的安全服務,建立在可靠的傳輸協定(如TCP)之上,封裝各種高層協定、具體實施壓縮解壓縮、加密解密,計算和校驗MAC等與安全有關的操作。

SSL握手協定(SSL Handshake Protocol):包括SSL握手協定(SSL HandShakeProtocol)、SSL密碼參數修改協定(SSL Change Cipher Spec Protocol)、應用數據協定(Application Data Protocol)和SSL告警協定(SSL AlertProtocol)。握手層的這些協定建立於記錄層之上,用於SSL管理資訊的交換,允許應用協定傳送數據之間相互驗證,協商加密演算法和生成金鑰等。SSL握手協定的作用是協調客戶和服務器的狀態,使雙方能够達到狀態的同步。

在OSI七層模型中可以瞭解到SSL工作的地方,OSI模型七個層次的功能:

實體層

為資料連結層提供物理連接,傳輸位元流

資料連結層

將從實體層接收的數據進行MAC地址(網卡地址)的封裝與解封裝,這一層工作的設備是交換機

網路層

將從下層接收到的數據進行IP地址的封裝與解封裝,這一層工作的設備是路由器

傳輸層

主要將從下層接收的數據進行分段和傳輸,到達目的地址後再進行重組

會話層

建立資料傳輸的通路,主要在客戶機系統之間發起會話或者接受會話請求

展示層

主要是進行對接收的數據進行解釋,加密解密,壓縮與解壓縮(也就是把電腦能够識別的東西轉換成人能够識別的東西)

應用層

主要是一些終端的應用,理解其為在荧幕上可以看到的東西

結合https握手圖解,可以知道SSL工作在會話層(負責會話的建立與維持)

SSL協定解析過程

1、用戶使用某應用發起請求(應用層),展示層對請求進行電腦解析(把人想要傳遞的東西轉換成電腦能够識別的東西),在會話層SSL握手協定傳遞本地資訊(協定版本,支持的加密演算法,亂數),SSL記錄協定記錄本地資訊,會話建立請求發送至服務端

2、服務器響應用戶端,回復用戶端資訊(選擇的協定版本,加密演算法,證書,亂數),會話層SSL記錄協定結合之前記錄的資訊對服務端資訊進行驗證,驗證成功後記錄其資訊(選擇的協定版本,解密算灋,證書,亂數)

3、SSL握手協定發送資訊同意採用該算灋(協商成功,用公開金鑰加密亂數上送),SSL記錄協定記錄傳遞的資訊,與服務端建立https會話

4、會話建立,進行對稱加密資料傳輸,在SSL記錄協定處進行數據加解密,再將解密後的數據傳遞至展示層進行轉換

備註:第一個亂數由client生成,第二個亂數由server生成,第三個亂數由client生成,使用server的公開金鑰加密(圖中的EncryptedPreMaster即第三個被加密的亂數),這個過程中,Premastersecret只有client和server知道,不會洩露(需要私密金鑰解密才能知道),然後client和server根據三個亂數生成一個session key,即接下來資料傳輸過程中用到的對稱金鑰。

HTTPS加密了那些內容呢?

利用Burp或者fiddler抓包的數據請求內容大致如下:

POST請求

POST /api/appServer/forgetPasswordHTTP/1.1

User-Agent: Rexxar-Core/0.1.3Content-Type: application/json;charset=utf-8Content-Length: 26Host: www.test.comConnection: closeAccept-Encoding: gzip,deflatetimestamp: 20180814133620

deviceId: F07790428D79FAB68EE6C566094F366A

{“conetcn”:“數據內容”}

GET請求

GET/v1/v2/login?rid=123456&version=0 HTTP/1.1Host: www.test.comConnection: closeAccept-Encoding: gzip,deflateUser-Agent: okhttp/3.9.1

當數據請求從應用到網絡的時候,是被打包成TCP報文進行傳輸,這個過程中數據請求已經經過會話層SSL加密,所以不管是請求的header域還是body域都是處於加密狀態,URL路徑部分也是加密(參攷post/get請求內容都是加密的),功能變數名稱資訊可見,追跡的TCP資料流程資訊如下:

HTTPS安全限制

本節就針對HTTPS攻擊,特別是HTTPS在App這一應用場景下的常見的攻擊手段進行分析討論

由前文我們知道,HTTPS在建立了TCP連接之後,會進行SSL握手(SSLHandshake)來校驗證書,協商加密協定和對稱加密的金鑰,之後就會使用協商好的金鑰來進行傳輸。所以HTTPS攻擊一般分為SSL連接建立前的攻擊,以及HTTPS傳輸過程中的攻擊

常見的HTTPS中間人攻擊,首先需要結合ARP、DNS欺騙等科技,來對會話進行攔截。參攷《計算機網絡設計》附錄:常用網路通信協定結構圖,可以知道ARP中間人攻擊發生在網路層(路由器也位於這一層,所以可以在路由器下的網絡中進行ARP中間人攻擊)

再來看看https協定中間人攻擊,位於會話層,簡單來說,SSL在會話層執行,要劫持SSL必須在會話層去進行,這樣一來,攻擊對象只能是在個人手機,針對的個人,跟傳統中間人攻擊(ARP)針對局域網所有用戶有所區別,但是二者對於服務器都是可達的,都可以對服務器發起攻擊。

對HTTPS的信任,都是基於CA證書以及其强大的加密演算法配寘,一但該信任點被攻破,HTTPS將不再安全

HTTPS證書繞過

漏洞原因

1、Android系統會校驗服務端數位憑證的合法性,用可信CA簽發的數位憑證的網站才可以正常訪問,私有CA簽發的數位憑證的網站無法訪問,如果採用私有CA就必須重寫TrustManger的checkServerTrusted()方法,但很多開發者什麼也沒有做,會導致證書弱校驗

2、採用HTTPS單向校驗,只在用戶端校驗服務端證書,可以在設設備上安裝證書(將中間人服務器的證書放到設備的信任清單中)進行中間人攻擊

SSL降級攻擊(Downgrade)

漏洞原因

1、如果服務器提供有漏洞的舊版本加密協定的支持,而同時攻擊者又能作為中間人控制被攻擊者的瀏覽器發起漏洞版本的HTTPS請求,但因加密協定有漏洞,可以解密這些數據。

2、如果網站沒有啟用SSL site wide(use HTTPS only)或HSTS(HTTP StrictTransport Security)則無法抵禦SSL Strip(HTTPS降級為HTTP)攻擊

針對SSL算灋進行攻擊

漏洞原因

1、Heartbleed(CVE-2014-0160)是一個於2014年4月公佈的OpenSSL加密庫的漏洞,它是一個被廣泛使用的傳輸層安全(TLS)協定的實現。無論是伺服器端還是用戶端在TLS中使用了有缺陷的OpenSSL,都可以被利用該缺陷。由於它是因DTLS心跳擴展(RFC 6520)中的輸入驗證不正確(缺少了邊界檢查)而導致的,所以該漏洞根據“心跳”而命名。這個漏洞是一種緩存區超讀漏洞,它可以讀取到本不應該讀取的數據。如果使用帶缺陷的Openssl版本,無論是服務器還是用戶端,都可能囙此受到攻擊。

2、BEAST(CVE-2011-3389)BEAST是一種明文攻擊,通過從SSL/TLS加密的會話中獲取受害者的COOKIE值(通過進行一次會話劫持攻擊),進而篡改一個加密演算法的CBC(密碼塊鏈)的模式以實現攻擊目錄,其主要針對TLS1.0和更早版本的協定中的對稱加密演算法CBC模式

3、CRIME(CVE-2012-4929),全稱Compression RatioInfo-leak Made Easy,這是一種因SSL壓縮造成的安全隱患,通過它可竊取啟用資料壓縮特性的HTTPS或SPDY協定傳輸的私密Web Cookie。在成功讀取身份驗證Cookie後,攻擊者可以實行會話劫持和發動進一步攻擊。