常見HTTPS攻擊方法解析_第1頁
常見HTTPS攻擊方法解析_第2頁
常見HTTPS攻擊方法解析_第3頁
常見HTTPS攻擊方法解析_第4頁
常見HTTPS攻擊方法解析_第5頁
已閱讀5頁,還剩9頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、常見 HTTPS 攻擊方法解析0 x00 背景研究常見的 https 攻擊方法Beast crime breach,并針對https 的特性提出一些安全部署https 的建議。針對于 HTTPS 的攻擊,多存在于中間人攻擊的環(huán)境中,主要是針對于HTTPS 所使用的壓縮算法和CBC 加密模式,進(jìn)行 side-channel-attack。這幾類攻擊的前置條件都比較苛刻,且都需要受害主機(jī)提交很多次請求來收集破譯關(guān)鍵數(shù)據(jù)的足夠信息。常見的攻擊方法,主要有,BEAST、Lucky-13、RC4 Biases、CRIME、TIME、BREACH 等。主要對其中幾種進(jìn)行介紹。0 x01 CRIMEComp

2、ression Ratio Info-leak Made Easy攻擊原理攻擊者控制受害者發(fā)送大量請求,利用壓縮算法的機(jī)制猜測請求中的關(guān)鍵信息,根據(jù) response 長度判斷請求是否成功。如下面的 https 頭,攻擊這可以控制的部分為get 請求地址,想要猜測的部分為Cookie。那么攻擊者只需要在 GET 地址處,不斷變換猜測字符串,進(jìn)行猜測。GET /sessionid=a HTTP/1.1 Host: User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:16.0) Gecko/20100101 Firefox/16.0Cookie:

3、sessionid=d3b0c44298fc1c149afbf4c8996fb924GET /sessionid=a HTTP/1.1 Host: User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:16.0)Gecko/20100101 Firefox/16.0Cookie: sessionid=d3b0c44298fc1c149afbf4c8996fb924比如上面的情況 Response 長度為 1000byte。GET /sessionid=d HTTP/1.1 Host: User-Agent: Mozilla/5.0 (Window

4、s NT 6.1; WOW64; rv:16.0) Gecko/20100101 Firefox/16.0Cookie: sessionid=d3b0c44298fc1c149afbf4c8996fb924當(dāng)攻擊者猜對了 cookie 的第一個字母,Response 的長度會縮小到 9999byte。當(dāng) Response 被 SSL 加密之后,如果使用RC4 加密模式,長度并不會發(fā)生隨機(jī)改變。使用 BCB 加密模式時, 因為 padding 的原因,長度會有略微的改變。受影響的加密算法Deflate = LZ77 + HuffManGZip = Headers + Data Compresse

5、d using Deflate攻擊前提攻擊者可以獲取受害者的網(wǎng)絡(luò)通信包。(中間人攻擊,ISP 供應(yīng)商)瀏覽器和服務(wù)器支持均支持并使用壓縮算法。攻擊這可以控制受害者發(fā)送大量請求并可以控制請求內(nèi)容。防御方法客戶端可以升級瀏覽器來避免這種攻擊。Chrome: 21.0.1180.89 and aboveFirefox: 15.0.1 and aboveOpera: 12.01 and aboveSafari: 5.1.7 and above服務(wù)器端可以通過禁用一些加密算法來防止此類攻擊。ApacheSSLCompression flag = “SSLCompression off”GnuTLSPri

6、orities flag = “!COMP-DEFLATE禁止過于頻繁的請求。修改壓縮算法流程,用戶輸入的數(shù)據(jù)不進(jìn)行壓縮。隨機(jī)添加長度不定的垃圾數(shù)據(jù)。TLS 1.0.SPDY protocol (Google).Applications that uses TLS compression.Mozilla Firefox (older versions) that support SPDY.Google Chrome (older versions) that supported both TLS and SPDY.POC這個 poc 并不是模擬真實(shí)環(huán)境下的中間人攻擊,只是在python 中利用

7、CRIME 的思想驗證了攻擊的可行性。import stringimport zlibimport sysimport random 5.6. charset = string.letters + string.digits 7.8. COOKIE = .join(random.choice(charset) for x in range(30) 9.HEADERS = (POST / HTTP/1.1rnHost: rnConnection: keep-alivernUser-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKi t/53

8、7.1 (KHTML, like Gecko) Chrome/22.0.1207.1 Safari/537.1rnAccept: */*rnReferer: /rnCookie: secret=+COOKIE+rnAccept-Encoding: gzip,deflate,sdchrnAccept-Language: en-US,en;q=0.8rn19.Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3rn20.rn)BODY =(POST / HTTP/1.1rnHost: rnConnection: keep-alivernUser-Agent:

9、 Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKi t/537.1 (KHTML, like Gecko) Chrome/22.0.1207.1 Safari/537.1rnAccept: */*rnReferer: /rnCookie: secret=)cookie = 29.30. def compress(data):31.c = pressobj()return press(data) + c.flush(zlib.Z_SYNC_FLUSH)def getposset(perchar,chars):posset = baselen = len

10、(compress(HEADERS+perchar)for i in chars:t = len(compress(HEADERS+ perchar+i)if (t=baselen):posset += ireturn possetdef doguess():global cookiewhile len(cookie)30:posset = getposset(BODY+cookie,charset)trun = 1tem_posset = possetwhile 1=0:if not doguess():print (-)ChangebodyBODY = BODYBODY.find(rn)

11、+ 2:print (+)origncookie+COOKIEprint (+)Gotten cookie+cookie0 x02 TIMETiming Info-leak Made Easy攻擊原理Unable to render embedded object: File (1.jpg) not found.攻擊者控制受害者發(fā)送大量請求,利用壓縮算法的機(jī)制猜測請求中的關(guān)鍵信息,根據(jù) response 響應(yīng)時間判斷請求是否成功。其實(shí) TIME 和CRIME 一樣都利用了壓縮算法,只不過 CRIME 是通過長度信息作為輔助,而TIME 是通過時間信息作為輔助。如上圖當(dāng)數(shù)據(jù)長度,大于 MTU 時

12、會截斷為兩個包發(fā)送,這樣就會產(chǎn)生較大的相應(yīng)時間差異。攻擊者吧包長控制在 MTU 左右,不斷嘗試猜測COOKIE。 Unable to render embedded object: File (QQ 圖片20140724174303.jpg) not found.如上圖所示,我們通過添加 Padding 來吧數(shù)據(jù)包大小增加到和MTU 相等,Case 1 中我們添加的extraByte 和需要猜測的數(shù)據(jù)重合,因為壓縮算法的原因,并不會增加包的長度,而Case 2 中extraByte 和需要猜測的數(shù)據(jù)并不一致,導(dǎo)致了分包。攻擊這可以通過響應(yīng)時間的不同來區(qū)分 Case1 Case2 兩種情況。攻擊

13、前提攻擊這可以控制受害者發(fā)送大量請求并可以控制請求內(nèi)容。穩(wěn)定的網(wǎng)絡(luò)環(huán)境。防御方法在解密 Response 過程中加入隨機(jī)的短時間延遲。阻止短時間內(nèi)的頻繁請求。0 x03 BEASTBrowser Exploit Against SSL/TLS攻擊原理攻擊者控制受害者發(fā)送大量請求,利用 CBC 加密模式猜測關(guān)鍵信息。CBC 模式工作的方法是當(dāng)加密第i 塊的時候,和第i-1 塊的密文異或。更正式地表達(dá)如下:Ci= E(Key, Ci-1 Mi)很顯然,當(dāng)你加密第一塊的時候,沒有前一塊的密文和它異或,因此,標(biāo)準(zhǔn)的做法是產(chǎn)生一個隨機(jī)的初始化向量(IV),并且用它和第一塊明文異或。第一塊M0 的加密如下

14、:C0= E(Key, IV M0).然后,接著第一塊 M1 加密如下:C1= E(Key, C0 M1).現(xiàn)在,除非 C0 碰巧和 IV 一樣(這是非常不可能的),那么,即使M0 = M1,對于加密函數(shù)來說,兩個輸入是不同的,因此,C0 C1。 CBC 有兩種的基本的使用方法:對于每條記錄都認(rèn)為是獨(dú)立的;為每一個記錄產(chǎn)生一個 IV把所有的記錄當(dāng)作一個鏈接在一起的大對象,并且在記錄之間繼續(xù)使用 CBC 的狀態(tài)。這意味著最后一條記錄 n 的IV 是 n-1 條記錄的密文。SSLV3 和 TLS1.0 選擇的是第二個用法。這好像本來就是個錯誤CBC 有兩種的基本的使用方法:對于每條記錄都認(rèn)為是獨(dú)立

15、的;為每一個記錄產(chǎn)生一個 IV把所有的記錄當(dāng)作一個鏈接在一起的大對象,并且在記錄之間繼續(xù)使用 CBC 的狀態(tài)。這意味著最后一條記錄 n 的IV 是 n-1 條記錄的密文。SSL 3.0 和 TLS1.0 選擇的是第二個用法。因此產(chǎn)生了加密算法的安全問題。攻擊者可以把想要猜測的數(shù)據(jù)段替換掉成:X Ci-1 P當(dāng)這個注入的內(nèi)容被加密,X 會被異或,結(jié)果傳給加密算法的明文塊如下:Ci-1 P如果 P=Mi , 新的密文塊將和Ci 一樣,這意味著,你的猜測是正確的。攻擊前提攻擊者可以獲取受害者的網(wǎng)絡(luò)通信包。(中間人攻擊,ISP 供應(yīng)商)攻擊者需要能得到發(fā)送敏感數(shù)據(jù)端的一部分權(quán)限。以便將自己的信息插入

16、SSL/TLS 會話中。攻擊者需要準(zhǔn)確的找出敏感數(shù)據(jù)的密文段。攻擊這可以控制受害者發(fā)送大量請求并可以控制請求內(nèi)容。防御方法使用 RC4 加密模式代替BCB 加密模式。部署 TLS 1.1 或者更高級的版本,來避免SSL 3.0/TLS 1.0 帶來的安全問題。在服務(wù)端設(shè)置每傳輸固定字節(jié),就改變一次加密秘鑰。影響范圍TLS 1.0.SPDY protocol (Google).Applications that uses TLS compression.Mozilla Firefox (older versions) that support SPDY.Google Chrome (older

17、versions) that supported both TLS and SPDY.POC僅在 python 上模擬了攻擊思想的實(shí)現(xiàn),編碼中只實(shí)現(xiàn)了第一個字母的猜測。import sysimport stringimport randomfrom Crypto.Cipher import AES 5.key = lyp62/22Sh2RlXJFmode = AES.MODE_CBC8. vi = 1234567812345678charset = string.letters + string.digitscookie = .join(random.choice(charset) for x

18、 in range(30)HEADERS = (POST / HTTP/1.1rnHost: rnConnection: keep-alivernUser-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKi t/537.1 (KHTML, like Gecko) Chrome/22.0.1207.1 Safari/537.1rnAccept: */*rnReferer: /rnCookie: secret=+cookie+rnAccept-Encoding: gzip,deflate,sdchrnAccept-Language: en-U

19、S,en;q=0.8rn20.Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3rn21.rn)global pad_numdef add_padding(plaintext):global pad_numpad_num = 16 - len(plaintext) % 16for i in range(0,pad_num):plaintext += chr(pad_num)return plaintextdef check_padding(plaintext):global pad_numfor i in range(1,pad_num+1):if (

20、plaintext-i!=chr(pad_num):return Falsereturn True 35.def encrypto(plaintext):global pad_numobj = AES.new(key,mode,vi)if (len(plaintext) % 16):plaintext = add_padding(plaintext)else:pad_num=0ciphertext = obj.encrypt(plaintext)if (check_padding(ciphertext):return ciphertextelse:return 0 48.def decrypt

21、o(ciphertext):obj = AES.new(key,mode,vi)plaintext = obj.decrypt(ciphertext)return plaintext 53.def findcookie():global HEADERSreturn HEADERS.find(secret=)+7 57.guess_cookie=pos_cookie=findcookie()pos_block_s = pos_cookie + 16 - pos_cookie%16HEADERS = HEADERS:pos_cookie + (16 - pos_cookie % 16 + 15)*

22、a +HEAD ERSpos_cookie:encry_head = encrypto(add_padding(HEADERS)per_per_block = encry_headpos_block_s - 16:pos_block_s#Ci-1per_block = encry_headpos_block_s:pos_block_s+16#xaft_block = encry_headpos_block_s+16:pos_block_s+32#Ci+1for i in charset:guess_block = a * 15 + iinsert_block = .join(chr(ord(a

23、) ord(b) ord(c) for a,b,c inzip(per_block,per_per_block,guess_block)temp_header = HEADERS:pos_block_s+16 + insert_block + HEADERSpo s_block_s+16:encry_temp_header = encrypto(add_padding(temp_header)if (aft_block = encry_temp_headerpos_block_s+32:pos_block_s+48):print (+)first byte is:+iprint(+)orign

24、 cookie:+cookie攻擊者首先使用降級攻擊,來讓瀏覽器使用 ssl v3.0,再通過ssl v3.0 CBC-mode 存在的缺陷,竊取到用戶傳輸?shù)拿魑摹? x04 POODLE降級攻擊ssl v3.0 是一個存在了很久的協(xié)議了,現(xiàn)在大多數(shù)瀏覽器為了兼容性都會支持這個協(xié)議,但是并不會首先使用這個協(xié)議,中間人攻擊者可以駁回瀏覽器協(xié)商高版本協(xié)議的請求,只放行 ssl v3.0 協(xié)議。Padding Oracle 攻擊針對于 CBC 的攻擊之前已經(jīng)有一些了,比如,Beast,Lucky17 之類的,詳細(xì)可以看這里首先來看 CBC-mod 的加解密流程。解密流程加密流程校驗流程MAC1 =

25、hash(明文)密文 = Encode(明文+MAC1+Padding,K) 明文 = Decode(密文,k) - MAC1-Padding(padding 的長度由最后一個字節(jié)標(biāo)識)MAC2 = hash(明文) 如果 MAC1 = MAC2 則校驗成功 否則失敗知二求三Padding Oracle 攻擊一般都會滿足一個知二求三的規(guī)律,如下圖VI解密后的數(shù)據(jù),叫它 midText 把Plaintext這三個值我們得到其中兩個就可以推出另外一個,因為他們在一起 Xor 了嘛。 HYPERLINK /wp-content/uploads/2014/12/file0004.jpg /wp-con

26、tent/uploads/2014/12/file0004.jpg在 Poodle 攻擊中,我們會把最后一個數(shù)據(jù)塊替換成我們想要猜測的數(shù)據(jù)塊。如下圖所示。這樣導(dǎo)致的直接后果就是,CBC 完整性驗證失敗,數(shù)據(jù)包被駁回。我們假設(shè)最后一個數(shù)據(jù)塊均為padding組成(其實(shí)我們可以通過控制包的長度來達(dá)到這一目的,比如增加 path 的長度)那么當(dāng)且僅當(dāng) Plaintext7 = 7(block 為 16 為時為 15) 的時候CBC 完整性校驗才會通過。如果不為 7, 多刪或者少刪的 padding,都會影響到MAC 的正確取值,從而導(dǎo)致校驗失敗。那么,我們只需要不斷地更改(1) IV 最后一位的值 ,直到(3) Plaintext 最后一位為 7 (CBC 驗證通過) 的時候,我們就可以推出 (2) mid text 的最后一位。0 x05 安全配置建議此處的安全配置以 nginx 為例,主要在Nginx.conf 中配置。使用較為安全的 SSL 加密協(xié)議。ssl_protocols TLSv1 TLSv1.1 TLSv1.2;使用嚴(yán)格的加密方法設(shè)置。ssl_ciphersECD

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論