常见HTTPS攻击方法解析.docx

上传人:b****3 文档编号:5440272 上传时间:2023-05-08 格式:DOCX 页数:15 大小:262.76KB
下载 相关 举报
常见HTTPS攻击方法解析.docx_第1页
第1页 / 共15页
常见HTTPS攻击方法解析.docx_第2页
第2页 / 共15页
常见HTTPS攻击方法解析.docx_第3页
第3页 / 共15页
常见HTTPS攻击方法解析.docx_第4页
第4页 / 共15页
常见HTTPS攻击方法解析.docx_第5页
第5页 / 共15页
常见HTTPS攻击方法解析.docx_第6页
第6页 / 共15页
常见HTTPS攻击方法解析.docx_第7页
第7页 / 共15页
常见HTTPS攻击方法解析.docx_第8页
第8页 / 共15页
常见HTTPS攻击方法解析.docx_第9页
第9页 / 共15页
常见HTTPS攻击方法解析.docx_第10页
第10页 / 共15页
常见HTTPS攻击方法解析.docx_第11页
第11页 / 共15页
常见HTTPS攻击方法解析.docx_第12页
第12页 / 共15页
常见HTTPS攻击方法解析.docx_第13页
第13页 / 共15页
常见HTTPS攻击方法解析.docx_第14页
第14页 / 共15页
常见HTTPS攻击方法解析.docx_第15页
第15页 / 共15页
亲,该文档总共15页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

常见HTTPS攻击方法解析.docx

《常见HTTPS攻击方法解析.docx》由会员分享,可在线阅读,更多相关《常见HTTPS攻击方法解析.docx(15页珍藏版)》请在冰点文库上搜索。

常见HTTPS攻击方法解析.docx

常见HTTPS攻击方法解析

常见HTTPS攻击方法解析

0x00背景

研究常见的https攻击方法

Beastcrimebreach,并针对https的特性提出一些安全部署https的建议。

针对于HTTPS的攻击,多存在于中间人攻击的环境中,主要是针对于HTTPS所使用的压缩算法和CBC加密模式,进行side-channel-attack。

这几类攻击的前置条件都比较苛刻,且都需要受害主机提交很多次请求来收集破译关键数据的足够信息。

常见的攻击方法,主要有,BEAST、Lucky-13、RC4Biases、CRIME、TIME、BREACH等。

主要对其中几种进行介绍。

0x01CRIME

CompressionRatioInfo-leakMadeEasy

攻击原理

攻击者控制受害者发送大量请求,利用压缩算法的机制猜测请求中的关键信息,根据response长度判断请求是否成功。

如下面的https头,攻击这可以控制的部分为get请求地址,想要猜测的部分为Cookie。

那么攻击者只需要在GET地址处,不断变换猜测字符串,进行猜测。

GET/sessionid=aHTTP/1.1

Host:

User-Agent:

Mozilla/5.0(WindowsNT6.1;WOW64;rv:

16.0)

Gecko/20100101Firefox/16.0

Cookie:

sessionid=d3b0c44298fc1c149afbf4c8996fb924

GET/sessionid=aHTTP/1.1

Host:

User-Agent:

Mozilla/5.0(WindowsNT6.1;WOW64;rv:

16.0)

Gecko/20100101Firefox/16.0

Cookie:

sessionid=d3b0c44298fc1c149afbf4c8996fb924

比如上面的情况Response长度为1000byte。

GET/sessionid=dHTTP/1.1

Host:

User-Agent:

Mozilla/5.0(WindowsNT6.1;WOW64;rv:

16.0)

Gecko/20100101Firefox/16.0

Cookie:

sessionid=d3b0c44298fc1c149afbf4c8996fb924

当攻击者猜对了cookie的第一个字母,Response的长度会缩小到9999byte。

当Response被SSL加密之后,如果使用RC4加密模式,长度并不会发生随机改变。

使用BCB加密模式时,因为padding的原因,长度会有略微的改变。

受影响的加密算法

Deflate=LZ77+HuffMan

GZip=Headers+DataCompressedusingDeflate

攻击前提

攻击者可以获取受害者的网络通信包。

(中间人攻击,ISP供应商)

浏览器和服务器支持均支持并使用压缩算法。

攻击这可以控制受害者发送大量请求并可以控制请求内容。

防御方法

客户端可以升级浏览器来避免这种攻击。

▪Chrome:

21.0.1180.89andabove

▪Firefox:

15.0.1andabove

▪Opera:

12.01andabove

▪Safari:

5.1.7andabove

服务器端可以通过禁用一些加密算法来防止此类攻击。

Apache

•SSLCompressionflag=“SSLCompressionoff”

•GnuTLSPrioritiesflag=“!

COMP-DEFLATE"

禁止过于频繁的请求。

修改压缩算法流程,用户输入的数据不进行压缩。

随机添加长度不定的垃圾数据。

TLS1.0.

SPDYprotocol(Google).

ApplicationsthatusesTLScompression.

MozillaFirefox(olderversions)thatsupportSPDY.

GoogleChrome(olderversions)thatsupportedbothTLSandSPDY.

POC

这个poc并不是模拟真实环境下的中间人攻击,只是在python中利用CRIME的思想验证了攻击的可行性。

1.import string 

2.import zlib 

3.import sys 

4.import random 

5.   

6.charset = string.letters + string.digits 

7.   

8.COOKIE = ''.join(random.choice(charset) for x in range(30)) 

9.   

10.HEADERS = ("POST / HTTP/1.1\r\n" 

11.           "Host:

 \r\n" 

12.           "Connection:

 keep-alive\r\n" 

13.           "User-Agent:

 Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/22.0.1207.1 Safari/537.1\r\n" 

14.           "Accept:

 */*\r\n" 

15.           "Referer:

  

16.           "Cookie:

 secret="+COOKIE+"\r\n" 

17.           "Accept-Encoding:

 gzip,deflate,sdch\r\n" 

18.           "Accept-Language:

 en-US,en;q=0.8\r\n" 

19.           "Accept-Charset:

 ISO-8859-1,utf-8;q=0.7,*;q=0.3\r\n" 

20.           "\r\n") 

21.BODY =    ("POST / HTTP/1.1\r\n" 

22.           "Host:

 \r\n" 

23.           "Connection:

 keep-alive\r\n" 

24.           "User-Agent:

 Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/22.0.1207.1 Safari/537.1\r\n" 

25.           "Accept:

 */*\r\n" 

26.           "Referer:

  

27.           "Cookie:

 secret=") 

28.cookie = "" 

29.   

30.def compress(data):

 

31.   

32.    c = pressobj() 

33.    return press(data) + c.flush(zlib.Z_SYNC_FLUSH) 

34.def getposset(perchar,chars):

 

35.    posset = [] 

36.    baselen = len(compress(HEADERS+perchar)) 

37.    for i in chars:

 

38.        t = len(compress(HEADERS+ perchar+i)) 

39.        if (t<=baselen):

 

40.            posset += i 

41.    return posset 

42.def doguess():

 

43.    global cookie 

44.    while len(cookie)<30:

 

45.        posset = getposset(BODY+cookie,charset) 

46.        trun = 1 

47.        tem_posset = posset 

48.        while 1

 

49.            tem_body = BODY[trun:

50.            posset = getposset(tem_body+cookie,tem_posset) 

51.            trun = trun +1 

52.        if len(posset)==0:

 

53.            return False 

54.        cookie += posset[0] 

55.        print posset[0] 

56.        return True 

57.   

58.while BODY.find("\r\n")>=0:

 

59.    if not doguess():

 

60.        print "(-)Changebody" 

61.        BODY = BODY[BODY.find("\r\n") + 2:

62.print "(+)orign  cookie"+COOKIE 

63.print "(+)Gotten cookie"+cookie 

0x02TIME

TimingInfo-leakMadeEasy

攻击原理 

攻击者控制受害者发送大量请求,利用压缩算法的机制猜测请求中的关键信息,根据response响应时间判断请求是否成功。

其实TIME和CRIME一样都利用了压缩算法,只不过CRIME是通过长度信息作为辅助,而TIME是通过时间信息作为辅助。

 

Unabletorenderembeddedobject:

File(1.jpg)notfound.

如上图当数据长度,大于MTU时会截断为两个包发送,这样就会产生较大的相应时间差异。

攻击者吧包长控制在MTU左右,不断尝试猜测COOKIE。

Unabletorenderembeddedobject:

File(QQ图片20140724174303.jpg)notfound.

如上图所示,我们通过添加Padding来吧数据包大小增加到和MTU相等,Case1中我们添加的extraByte和需要猜测的数据重合,因为压缩算法的原因,并不会增加包的长度,而Case2中extraByte和需要猜测的数据并不一致,导致了分包。

攻击这可以通过响应时间的不同来区分Case1Case2两种情况。

 

攻击前提 

攻击这可以控制受害者发送大量请求并可以控制请求内容。

稳定的网络环境。

 

防御方法 

在解密Response过程中加入随机的短时间延迟。

阻止短时间内的频繁请求。

 

0x03BEAST 

BrowserExploitAgainstSSL/TLS 

攻击原理 

攻击者控制受害者发送大量请求,利用CBC加密模式猜测关键信息。

CBC模式工作的方法是当加密第i块的时候,和第i-1块的密文异或。

更正式地表达如下:

Ci=E(Key,Ci-1⊕Mi)

很显然,当你加密第一块的时候,没有前一块的密文和它异或,因此,标准的做法是产生一个随机的初始化向量(IV),并且用它和第一块明文异或。

第一块M0的加密如下:

C0=E(Key,IV⊕M0).

然后,接着第一块M1加密如下:

C1=E(Key,C0⊕M1).

现在,除非C0碰巧和IV一样(这是非常不可能的),那么,即使M0=M1,对于加密函数来说,两个输入是不同的,因此,C0≠C1。

CBC有两种的基本的使用方法:

1.对于每条记录都认为是独立的;为每一个记录产生一个IV

2.把所有的记录当作一个链接在一起的大对象,并且在记录之间继续使用CBC的状态。

这意味着最后一条记录n的IV是n-1条记录的密文。

SSLV3和TLS1.0选择的是第二个用法。

这好像本来就是个错误

CBC有两种的基本的使用方法:

1.对于每条记录都认为是独立的;为每一个记录产生一个IV

2.把所有的记录当作一个链接在一起的大对象,并且在记录之间继续使用CBC的状态。

这意味着最后一条记录n的IV是n-1条记录的密文。

SSL3.0和TLS1.0选择的是第二个用法。

因此产生了加密算法的安全问题。

攻击者可以把想要猜测的数据段替换掉成:

X⊕Ci-1⊕P

当这个注入的内容被加密,X会被异或,结果传给加密算法的明文块如下:

Ci-1⊕P

如果P==Mi,新的密文块将和Ci一样,这意味着,你的猜测是正确的。

攻击前提

攻击者可以获取受害者的网络通信包。

(中间人攻击,ISP供应商)

攻击者需要能得到发送敏感数据端的一部分权限。

以便将自己的信息插入SSL/TLS会话中。

攻击者需要准确的找出敏感数据的密文段。

攻击这可以控制受害者发送大量请求并可以控制请求内容。

 

防御方法 

使用RC4加密模式代替BCB加密模式。

部署TLS1.1或者更高级的版本,来避免SSL3.0/TLS1.0带来的安全问题。

在服务端设置每传输固定字节,就改变一次加密秘钥。

 

影响范围

TLS1.0.

SPDYprotocol(Google).

ApplicationsthatusesTLScompression.

MozillaFirefox(olderversions)thatsupportSPDY.

GoogleChrome(olderversions)thatsupportedbothTLSandSPDY.

POC

仅在python上模拟了攻击思想的实现,编码中只实现了第一个字母的猜测。

 

1.import sys 

2.import string 

3.import random 

4.from Crypto.Cipher import AES 

5.   

6.key = 'lyp62/22Sh2RlXJF' 

7.mode = AES.MODE_CBC 

8.vi = '1234567812345678' 

9.charset = string.letters + string.digits 

10.cookie = ''.join(random.choice(charset) for x in range(30)) 

11.HEADERS = ("POST / HTTP/1.1\r\n" 

12.           "Host:

 \r\n" 

13.           "Connection:

 keep-alive\r\n" 

14.           "User-Agent:

 Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/22.0.1207.1 Safari/537.1\r\n" 

15.           "Accept:

 */*\r\n" 

16.           "Referer:

  

17.           "Cookie:

 secret="+cookie+"\r\n" 

18.           "Accept-Encoding:

 gzip,deflate,sdch\r\n" 

19.           "Accept-Language:

 en-US,en;q=0.8\r\n" 

20.           "Accept-Charset:

 ISO-8859-1,utf-8;q=0.7,*;q=0.3\r\n" 

21.           "\r\n") 

22.global pad_num 

23.def add_padding(plaintext):

 

24.    global pad_num 

25.    pad_num = 16 - len(plaintext) % 16 

26.    for i in range(0,pad_num):

 

27.        plaintext += chr(pad_num) 

28.    return plaintext 

29.def check_padding(plaintext):

 

30.    global pad_num 

31.    for i in range(1,pad_num+1):

 

32.        if (plaintext[-i]!

=chr(pad_num)):

 

33.            return False 

34.    return True 

35.   

36.def encrypto(plaintext):

 

37.    global pad_num 

38.    obj = AES.new(key,mode,vi) 

39.    if (len(plaintext) % 16):

 

40.        plaintext = add_padding(plaintext) 

41.    else:

 

42.        pad_num=0 

43.    ciphertext = obj.encrypt(plaintext) 

44.    if (check_padding(ciphertext)):

 

45.        return ciphertext 

46.    else:

 

47.        return 0 

48.   

49.def decrypto(ciphertext):

 

50.    obj = AES.new(key,mode,vi) 

51.    plaintext = obj.decrypt(ciphertext) 

52.    return plaintext 

53.   

54.def findcookie():

 

55.    global HEADERS 

56.    return HEADERS.find('secret=')+7 

57.   

58.guess_cookie='' 

59.pos_cookie=findcookie() 

60.pos_block_s = pos_cookie + 16 - pos_cookie%16 

61.HEADERS = HEADERS[:

pos_cookie] + (16 - pos_cookie % 16 + 15)*'a' +HEADERS[pos_cookie:

62.encry_head = encrypto(add_padding(HEADERS)) 

63.per_per_block = encry_head[pos_block_s - 16:

pos_block_s]   #Ci-1 

64.per_block = encry_head[pos_block_s:

pos_block_s+16]         #x 

65.aft_block = encry_head[pos_block_s+16:

pos_block_s+32]      #Ci+1 

66.for i in charset:

 

67.    guess_block = 'a' * 15 + i 

68.    insert_block = ''.join(chr(ord(a) ^ ord(b) ^ ord(c)) for a,b,c in zip(per_block,per_per_block,guess_block)) 

69.    temp_header = HEADERS[:

pos_block_s+16] + insert_block + HEADERS[pos_block_s+16:

70.    encry_temp_header = encrypto(add_padding(temp_header)) 

71.    if (aft_block == encry_temp_header[pos_block_s+32:

pos_block_s+48]):

 

72.        print "(+)first byte is:

"+i 

73.print "(+)orign cookie:

"+cookie 

攻击者首先使用降级攻击,来让浏览器使用sslv3.0,再通过sslv3.0CBC-mode存在的缺陷,窃取到用户传输的明文。

0x04POODLE 

降级攻击

sslv3.0是一个存在了很久的协议了,现在大多数浏览器为了兼容性都会支持这个协议,但是并不会首先使用这个协议,中间人攻击者可以驳回浏览器协商高版本协议的请求,只放行sslv3.0协议。

PaddingOracle攻击

针对于CBC的攻击之前已经有一些了,比如,Beast,Lucky17之类的,详细可以看这里

首先来看CBC-mod的加解密流程。

解密流程

加密流程

校验流程

MAC1=hash(明文)

密文=Encode(明文+MAC1+Padding,K)明文=Decode(密文,k)-MAC1-Padding(padding的长度由最后一个字节标识)

MAC2=hash(明文)如果MAC1==MAC2则校验成功否则失败

知二求三

PaddingOracle攻击一般都会满足一个知二求三的规律,如下图

(1)VI

(2)解密后的数据,叫它midText把

(3)Plaintext

这三个值我们得到其中两个就可以推出另外一个,因为他们在一起Xor了嘛。

http:

//drops.wooyun.org/wp-content/uploads/2014/12/file0004.jpg

在Poodle攻击中,我们会把最后一个数据块替换成我们想要猜测的数据块。

如下图所示。

这样导致的直接后果就是,CBC完整性验证失败,数据包被驳回。

我们假设最

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > IT计算机 > 电脑基础知识

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2