自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

POODLE漏洞分析

安全 漏洞
10月14號(hào)由Google發(fā)現(xiàn)的POODLE漏洞(Padding Oracle On Downloaded Legacy Encryption vulnerability),可被攻擊者用來(lái)竊取采用SSL3.0版加密通信過(guò)程中的內(nèi)容,又被稱(chēng)為“貴賓犬攻擊”。雖然該攻擊利用有一定的難度,需要完全控制網(wǎng)絡(luò)流量,但在公共wifi遍地都是和強(qiáng)調(diào)國(guó)家之間對(duì)抗的APT背景下,該漏洞仍有不小的影響。

一、漏洞背景

10月14號(hào)由Google發(fā)現(xiàn)的POODLE漏洞(Padding Oracle On Downloaded Legacy Encryption vulnerability),可被攻擊者用來(lái)竊取采用SSL3.0版加密通信過(guò)程中的內(nèi)容,又被稱(chēng)為“貴賓犬攻擊”。雖然該攻擊利用有一定的難度,需要完全控制網(wǎng)絡(luò)流量,但在公共wifi遍地都是和強(qiáng)調(diào)國(guó)家之間對(duì)抗的APT背景下,該漏洞仍有不小的影響,我們的小伙伴也緊急分析了漏洞原理,poc仍在驗(yàn)證中,稍后放出。

[[123643]]

二、SSLv3.0協(xié)議基礎(chǔ)

協(xié)議協(xié)商數(shù)據(jù)

在協(xié)議握手階段,協(xié)商的數(shù)據(jù)包括:

明文/密文分組長(zhǎng)度:長(zhǎng)度一般為16字節(jié)。

初始化向量IV:根據(jù)SSLv3.0協(xié)議定義的算法生成,要求隨機(jī)性較高,與明文/密文分組長(zhǎng)度相同(16字節(jié))。

對(duì)稱(chēng)密鑰Key:即SSLv3.0協(xié)議中定義的主密鑰(the Master Secret),用于數(shù)據(jù)加密。

加密模式:常見(jiàn)的加密模式有多種,本漏洞本質(zhì)就是SSLv3.0協(xié)議推薦的CBC加密模式可能泄露信息。

數(shù)據(jù)填充與分組

明文加密之前和密文解密之前需要分組,每個(gè)分組長(zhǎng)度為128比特,即16字節(jié)。

對(duì)于待加密的明文數(shù)據(jù),分組處理過(guò)程為:

(1)計(jì)算明文簽名MAC(Message Authentication Code,消息驗(yàn)證碼)序列,長(zhǎng)度為20字節(jié)。

(2)將MAC序列附在明文數(shù)據(jù)之后組成平文(Plaintext),將Plaintext的長(zhǎng)度填充至16字節(jié)的整數(shù)倍。

填充方式為:如果原始Plaintext長(zhǎng)度不是16字節(jié)的整數(shù)倍,再其后附加零個(gè)、一個(gè)或多個(gè)Padding字節(jié),再附加1個(gè)字節(jié),其值為Padding長(zhǎng)度;如果原始Plaintext長(zhǎng)度正好是16字節(jié)的整數(shù)倍,則在其后附加15字節(jié)長(zhǎng)度的Padding序列,再附加1個(gè)Padding長(zhǎng)度,其值為15。

(3)將填充后Plaintext每16字節(jié)分為一組,稱(chēng)為平文塊(Plaintext Block),使用符號(hào)P1 , P2 … Pn 表示。

初始化向量IV用于首次加密,此時(shí)使用P0表示。

對(duì)于待解密的密文數(shù)據(jù),由于數(shù)據(jù)長(zhǎng)度肯定為16字節(jié)的整數(shù)倍,所以其直接按照16字節(jié)長(zhǎng)度分組,每個(gè)分組稱(chēng)為密文塊(Cipher Block),使用符號(hào)C1 , C2 … Cn表示。

初始化向量IV用于首次解密,此時(shí)使用C0表示。

CBC模式原理

在CBC模式中,每個(gè)平文塊(Plaintext Block,即明文分組塊)先與前一個(gè)密文塊(Cipher Block)進(jìn)行異或后,再進(jìn)行加密。在這種方法中,每個(gè)密文塊都依賴(lài)于它前面的所有平文塊。同時(shí),為了保證每條消息的唯一性,在加解密過(guò)程初期需要使用初始化向量IV。

基于CBC加密模式的對(duì)稱(chēng)加密流程如下圖:

 

 

即,對(duì)于每一個(gè)平文塊Pi,得到密文塊Ci:

 

 

換個(gè)角度考慮,平文中的微小改變會(huì)導(dǎo)致其后的全部密文塊發(fā)生改變。

基于CBC加密模式的對(duì)稱(chēng)加密流程如下圖:

 

 

即,對(duì)于每一個(gè)密文塊Ci,得到平文塊Pi:

 

 

因此,如果密文塊Ci被修改,不會(huì)影響對(duì)密文塊Ci-1的解密結(jié)果,而Ci及Ci之后的解密結(jié)果Pi’,Pi+1’ … Pn’ 將與原始的Pi,Pi+1 … Pn不同。

從密文得到平文后,服務(wù)端會(huì)立即驗(yàn)證明文的MAC以確保數(shù)據(jù)有效性,根據(jù)前述的平文填充方式,SSLv3.0協(xié)議定義的驗(yàn)證原理為:

(1)根據(jù)平文數(shù)據(jù)最后一個(gè)字節(jié)的得到Padding序列長(zhǎng)度,移除該字節(jié)以及Padding序列后,平文的最后20字節(jié)數(shù)據(jù)是客戶(hù)端計(jì)算得到的MAC序列。

(2)移除該MAC序列得到的數(shù)據(jù)是明文數(shù)據(jù),服務(wù)端重新計(jì)算該段數(shù)據(jù)的MAC序列并與客戶(hù)端MAC序列對(duì)比,即可確定數(shù)據(jù)是否有效。

三、POODLE漏洞分析

根據(jù)之前所述,如果明文數(shù)據(jù)的長(zhǎng)度加20字節(jié)的MAC序列長(zhǎng)度正好為16字節(jié)的整數(shù)倍,平文Padding算法會(huì)在Plaintext的最后附加15字節(jié)的Padding序列和1字節(jié)的Padding序列長(zhǎng)度(值15),即最終的平文的最后16字節(jié)屬于附加部分,加密后對(duì)應(yīng)密文分組的最后一個(gè)密文塊Cn。該在這種情況下,如果使用密文中的某一個(gè)密文塊Ci替換密文塊Cn并發(fā)送給服務(wù)端,服務(wù)端有可能認(rèn)為數(shù)據(jù)是有效的,滿(mǎn)足這種可能性必須要求解密后的數(shù)據(jù)最后一個(gè)字節(jié)值是15,這樣恰好既不影響原始明文序列,也不影響MAC序列,從而通過(guò)服務(wù)端對(duì)MAC序列的驗(yàn)證。

定義密鑰為k的對(duì)稱(chēng)加密算法的加密過(guò)程和解密過(guò)程分別為Dk( )和Ek( )。

此時(shí):

Pn’= Dk(Cn’)⊕Cn-1 = Dk(Ci)⊕Cn-1

Pn’[15] = 15

即:

Dk(Ci)[15]⊕Cn-1 [15]= 15

由于:

Pi[15] = Dk(Ci)[15]⊕Ci-1[15]

所以:

Pi[15] = 15⊕Cn-1 [15]⊕Ci-1[15]

很明顯,此時(shí)密文塊Ci對(duì)應(yīng)的平文塊Pi的最后一個(gè)字節(jié)可以通過(guò)計(jì)算得到。

四、POODLE漏洞利用

到此,在前述假定的條件下僅僅解密一個(gè)字節(jié)的數(shù)據(jù)并無(wú)任何實(shí)際意義,然而,Google安全研究員在其發(fā)布的分析報(bào)告This POODLE Bites: Exploiting The SSL 3.0 Fallback 中考慮了這樣一個(gè)針對(duì)HTTPS協(xié)議的攻擊場(chǎng)景:

(1)攻擊者可以實(shí)施中間人攻擊,控制用戶(hù)流量以及控制客戶(hù)端發(fā)送AJAX請(qǐng)求;

(2)攻擊者的目標(biāo)是獲取用戶(hù)的cookies;

(3)攻擊者已經(jīng)知道cookies數(shù)據(jù)長(zhǎng)度。

對(duì)于(3)條假設(shè)并不一定完全成立,這里首先假定在其成立的條件下考慮POODLE漏洞的利用方式。

假設(shè)請(qǐng)求明文的Plaintext如下:

POST /path Cookie:…\r\n\r\nbody ‖ 20­bytes-MAC ‖ 15-bytes-padding || 15

攻擊者可以控制path和body的長(zhǎng)度使上述Plaintext的長(zhǎng)度為16字節(jié)的整數(shù)倍,并且,由于已知cookies的長(zhǎng)度,控制欲解密的cookies字節(jié)位于某個(gè)平文塊Pi的最后一個(gè)字節(jié)上。

首先,設(shè)置客戶(hù)端請(qǐng)求使P5[15] = ‘e’,請(qǐng)求加密前的Plaintext為:

 

 

圖 計(jì)算第一個(gè)數(shù)據(jù)

中間人截獲密文Ciphertext之后使用C5代替C11后傳遞請(qǐng)求,如果發(fā)現(xiàn)服務(wù)端解密后驗(yàn)證失敗,控制客戶(hù)端變換請(qǐng)求的path內(nèi)容再發(fā)送,一般經(jīng)過(guò)不超過(guò)256次變換,可能會(huì)有一次使服務(wù)器解密后驗(yàn)證成功,即中間人可以根據(jù)上面介紹過(guò)的方式計(jì)算得出該處明文字節(jié)數(shù)據(jù)。

然后,控制客戶(hù)端請(qǐng)求的path長(zhǎng)度和body長(zhǎng)度,比如path長(zhǎng)度加1同時(shí)body長(zhǎng)度減1:

 

 

圖 計(jì)算第二個(gè)數(shù)據(jù)

繼續(xù)發(fā)送請(qǐng)求、中間人攔截替換再發(fā)送等操作,依次可以分析出整個(gè)cookies數(shù)據(jù)。

在cookies長(zhǎng)度不確定的情況下,可以通過(guò)控制增加客戶(hù)端的path長(zhǎng)度并對(duì)比密文Ciphertext長(zhǎng)度,基本在16個(gè)請(qǐng)求以?xún)?nèi)就可以確定其實(shí)際長(zhǎng)度。比如:

第一次請(qǐng)求的Plaintext為:

GET /\r\nCookie: n1=v1\r\n\r\n || 20­bytes-MAC ‖ padding

即:

 

 

圖 計(jì)算cookies長(zhǎng)度的第一次Plaintext

此時(shí),Ciphertext的總長(zhǎng)度為48字節(jié)。

第二次請(qǐng)求的Plaintext為:

GET /A\r\nCookie: n1=v1\r\n\r\n || 20­bytes-MAC ‖ padding

 

 

圖 計(jì)算cookies長(zhǎng)度的第二次Plaintext

此時(shí),Ciphertext的總長(zhǎng)度為48字節(jié)。

第三次請(qǐng)求的Plaintext為:

GET /AA\r\nCookie: n1=v1\r\n\r\n || 20­bytes-MAC ‖ padding

 

 

圖 計(jì)算cookies長(zhǎng)度的第三次Plaintext

此時(shí),Ciphertext的總長(zhǎng)度為48字節(jié)。

第四次請(qǐng)求的Plaintext為:

GET /AAA\r\nCookie: n1=v1\r\n\r\n || 20­bytes-MAC ‖ padding

 

 

圖 計(jì)算cookies長(zhǎng)度的第四次Plaintext

此時(shí),Ciphertext的總長(zhǎng)度為48字節(jié)。

第五次請(qǐng)求的Plaintext為:

GET /AAAA\r\nCookie: n1=v1\r\n\r\n || 20­bytes-MAC ‖ padding

 

 

圖 計(jì)算cookies長(zhǎng)度的第五次Plaintext

此時(shí),Ciphertext的總長(zhǎng)度為64字節(jié),從而知道第一次的Ciphertext的總Padding長(zhǎng)度為4字節(jié)(3字節(jié)Padding序列和1字節(jié)的Padding序列長(zhǎng)度),而Ciphertext總長(zhǎng)度為48字節(jié),“GET /\r\n”序列長(zhǎng)度7字節(jié),MAC序列長(zhǎng)度為20字節(jié),所以“Cookie: n=v\r\n\r\n”長(zhǎng)度為15字節(jié)。

參考:

[1] RFC6101: http://tools.ietf.org/html/rfc6101

[2] Google分析報(bào)告:https://www.openssl.org/~bodo/ssl-poodle.pdf

[3] 塊密碼的工作模式:

http://zh.wikipedia.org/wiki/%E5%9D%97%E5%AF%86%E7%A0%81%E7%9A%84%E5%B7%A5%E4%BD%9C%E6%A8%A1%E5%BC%8F

責(zé)任編輯:藍(lán)雨淚 來(lái)源: 南京翰海源
相關(guān)推薦

2015-02-06 15:51:11

2010-06-18 15:34:49

2018-11-04 11:33:37

Safari信息泄露漏洞

2010-07-26 15:37:12

telnet安全漏洞

2015-01-06 14:09:00

2014-10-22 09:33:10

2020-10-14 09:44:52

漏洞

2017-07-11 09:42:22

漏洞

2020-10-09 09:52:00

漏洞分析

2021-05-01 20:52:30

漏洞網(wǎng)絡(luò)安全網(wǎng)絡(luò)攻擊

2021-05-12 10:46:23

漏洞BINDDNS服務(wù)器

2022-06-14 09:00:21

漏洞補(bǔ)丁

2009-01-16 16:26:19

2015-09-25 16:18:36

2013-03-22 10:00:14

2013-11-29 15:34:00

2017-04-19 12:20:22

漏洞函數(shù)架構(gòu)

2014-04-08 16:23:36

2010-09-15 09:24:55

2019-03-25 07:27:14

XSS漏洞Ecshop
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)