常见HTTPS攻击方法解析_第1页
常见HTTPS攻击方法解析_第2页
常见HTTPS攻击方法解析_第3页
常见HTTPS攻击方法解析_第4页
常见HTTPS攻击方法解析_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、常见HTTPSt击方法解析0x00背景研究常见的https攻击方法Beast crime breach ,并针对https 的特性提出一些安全部署 https的建议。针对于HTTPS的攻击,多存在于中间人攻击的环境中,主要是针对于HTTP河使用的压缩算法和 CBC加密模式,进行side-channel-attack 。这几类攻击的前置条件都比较苛刻,且都需要受害主机提交很多次请 求来收集破译关键数据的足够信息。常见的攻击方法,主要有,BEAST Lucky-13、RC4 Biases、CRIME TIME、BREAC等。主要对其中几种进行介绍。0x01 CRIMECompression Rat

2、io Info-leak Made Easy攻击原理攻击者控制受害者发送大量请求,利用压缩算法的机制猜测请求中的关键信息,根据response长度判断请求是否成功。如下面的https头,攻击这可以控制的部分为 get请求地址,想要猜测的部分为Cookie。那么攻击者只需要在GET地址处,不断变换猜测字符串,进行猜测。GET /sessionid=a HTTP/1.1Host: User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:16.0)Gecko/20100101 Firefox/16.0Cookie: sessionid=d3b0c4429

3、8fc1c149afbf4c8996fb924GET /sessionid=a HTTP/1.1Host: 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.1Host: User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:16.

4、0)Gecko/20100101 Firefox/16.0Cookie: sessionid=d3b0c44298fc1c149afbf4c8996fb924当攻击者猜对了 cookie的第一个字母,Response的长度会缩小到9999byte。当Response被SSL加密之后,如果使用 RC4加密模式,长度并不会发生随机改变。使用BCB加密模式时,因为padding的原因,长度会有略微的改变。受影响的加密算法Deflate = LZ77 + HuffManGZip = Headers + Data Compressed using Deflate攻击前提攻击者可以获取受害者的网络通信包。

5、(中间人攻击,ISP供应商)浏览器和服务器支持均支持并使用压缩算法。攻击这可以控制受害者发送大量请求并可以控制请求内容。防御方法客户端可以升级浏览器来避免这种攻击。? Chrome: 21.0.1180.89 and above? Firefox: 15.0.1 and above? Opera: 12.01 and above? Safari: 5.1.7 and above服务器端可以通过禁用一些加密算法来防止此类攻击。Apache? SSLCompression flag ="SSLCompression off "? GnuTLSPriorities flag =&

6、quot;!COMP -DEFLATE"禁止过于频繁的请求。修改压缩算法流程,用户输入的数据不进行压缩。随机添加长度不定的垃圾数据。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并不是模拟真实环境下的中间人攻击,只是在 python中利用CRIME勺

7、思想验证了攻击的可行性。1. importstring2. importzlib3. importsys4. importrandom5.5. charset = string.letters + string.digits7.6. COOKIE = '' .join(random.choice(charset)for x in range(30)9.7. HEADERS = ( "POST / HTTP/1.1rn"8. "Host: rn"9. "Connection: keep-alivern"10. "

8、;User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/22.0.1207.1 Safari/537.1rn"14."Accept: */*rn"15."Referer: 16."Cookie: secret="+COOKIE+ "rn"17."Accept-Encoding: gzip,deflate,sdchrn"18."Accept-Language

9、: en-US,en;q=0.8rn"19."Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3rn"20."rn")21.BODY = ( "POST / HTTP/1.1rn"22."Host: rn”23."Connection: keep-alivern"24."User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKi25.t/537.1 (KHTML, like Gecko)

10、 Chrome/22.0.1207.1 Safari/537.1rn""Accept: */*rn"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(compre

11、ss(HEADERS+perchar)37.for i in chars:38.t = len(compress(HEADERS+ perchar+i)39.if (t<=baselen):40.posset += i41.return posset42.def doguess():43.global cookie44.while len(cookie)<30:45.posset = getposset(BODY+cookie,charset)46.trun = 147.tem_posset = posset48.while 1<len(posset):49.tem_body

12、 = BODYtrun:50.posset = getposset(tem_body+cookie,tem_posset)51.trun = trun +152.if len(posset)=0:53.return False54.cookie += posset055. printposset056. returnTrue57.57. while BODY.find( "rn")>=0:58. if not doguess():)+ 2:59. print "(-)Changebody"60. BODY = BODYBODY.find("

13、;rn"61. print"(+)orign cookie"+COOKIE62. print"(+)Gotten cookie"+cookie0x02 TIMETiming Info-leak Made Easy攻击原理攻击者控制受害者发送大量请求,利用压缩算法的机制猜测请求中的关键信息,根据response响应时间判断请求是否成功。其实TIME和CRIMEH样都利用了压缩算法,只不过CRIME是通过长度信息作为辅助,而TIME是通过时间信息作为辅助。Unable to render embedded object: File (1.jpg)

14、not found.如上图当数据长度,大于MTM寸会截断为两个包发送,这样就会产生较大的相应时间差异。攻击者吧包长控制在 MTM右,不断尝试猜测 COOKIE Unable to render embedded object: File (QQ图片20140724174303.jpg) not found.如上图所示,我们通过添加 Padding来吧数据包大小增加到和 MT5目等,Case 1中我们添加的extraByte 和需要猜测的数据重合,因为压缩算法的原因,并不会增加包的长度,而 Case 2中extraByte和需要猜测 的数据并不一致,导致了分包。攻击这可以通过响应时间的不同来区分

15、Case1 Case2两种情况。攻击前提攻击这可以控制受害者发送大量请求并可以控制请求内容。稳定的网络环境。防御方法在解密Response过程中加入随机的短时间延迟。阻止短时间内的频繁请求。0x03 BEASTBrowser Exploit Against SSL/TLS攻击原理攻击者控制受害者发送大量请求,利用CBC加密模式猜测关键信息。CB破式工作的方法是当加密第i块的时候,和第i-1块的密文异或。更正式地表达如下:Ci= E(Key, Ci-1 由 Mi)很显然,当你加密第一块的时候,没有前一块的密文和它异或,因此,标准的做法是产生一个随机的初始化向量(IV),并且用它和第一块明文异或。

16、第一块 M0的加密如下:C0= E(Key, IV ® M0).然后,接着第一块 M1加密如下:C1= E(Key, C0 由 M1).现在,除非C0碰巧和IV 一样(这是非常不可能的),那么,即使 M0 = M1,对于加密函数来说,两个输入 是不同的,因此,C07 C1 o CBC有两种的基本的使用方法:1. 对于每条记录都认为是独立的;为每一个记录产生一个 IV2. 把所有的记录当作一个链接在一起的大对象,并且在记录之间继续使用 CBC勺状态。这意味着最后一条记录n的IV是n-1条记录的密文。SSLV3和TLS1.0选择的是第二个用法。这好像本来就是个错误CBCW两种的基本的使用

17、方法:1. 对于每条记录都认为是独立的;为每一个记录产生一个 IV2, 把所有的记录当作一个链接在一起的大对象,并且在记录之间继续使用 CBC勺状态。这意味着最后一条记录n的IV是n-1条记录的密文。SSL 3.0和TLS1.0选择的是第二个用法。因此产生了加密算法的安全问题。攻击者可以把想要猜测的数据段替换掉成:X ® Ci-1 ® P当这个注入的内容被加密,X会被异或,结果传给加密算法的明文块如下:Ci-1 ® P如果p=Mi ,新的密文块将和 Ci 一样,这意味着,你的猜测是正确的。攻击前提攻击者可以获取受害者的网络通信包。(中间人攻击,ISP供应商)攻击者

18、需要能得到发送敏感数据端的一部分权限。以便将自己的信息插入SSL/TLS会话中攻击者需要准确的找出敏感数据的密文段。攻击这可以控制受害者发送大量请求并可以控制请求内容。防御方法使用RC4加密模式代替BCB加密模式。部署TLS 1.1或者更高级的版本,来避免 SSL3.0/TLS 1.0 带来的安全问题。在服务端设置每传输固定字节,就改变一次加密秘钥。影响范围TLS 1.0.SPDY protocol (Google).Applications that uses TLS compression.Mozilla Firefox (older versions) that support SPDY

19、.Google Chrome (older versions) that supported both TLS and SPDY.POC仅在python上模拟了攻击思想的实现,编码中只实现了第一个字母的猜测。1. importsys2. importstring3. importrandom4. from Crypto.Cipher import AES5.5. key = 'lyp62/22Sh2RlXJF'6. mode = AES.MODE_CBC7. vi ='1234567812345678'8. charset = string.letters +

20、string.digits9. cookie ='' .join(random.choice(charset)for x in range(30)10. HEADERS = ( "POST / HTTP/1.1rn"11. "Host: rn”12. "Connection: keep-alivern"13. "User-Agent: Mozilla/5.0 (Windows NT 6.1;WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/22.0.1207.1 S

21、afari/537.1rn"14. "Accept: */*rn"15. "Referer: 16. "Cookie: secret="+cookie+ "rn"17. "Accept-Encoding:gzip,deflate,sdchrn"18. "Accept-Language: en-US,en;q=0.8rn"19. "Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3rn"20. "rn&qu

22、ot;)21. global pad_num22. def add_padding(plaintext):23. globalpad_num24. pad_num = 16 - len(plaintext) % 1625. for iin range(0,pad_num):26. plaintext += chr(pad_num)27. returnplaintext28. def check_padding(plaintext):29. globalpad_num30. for iin range(1,pad_num+1):31. if (plaintext-i!=chr(pad_num):

23、32. return False33. return True35.34. def encrypto(plaintext):35. global pad_num36. obj = AES.new(key,mode,vi)37. if (len(plaintext) %16):38. plaintext = add_padding(plaintext)39. else :40. pad_num=041. ciphertext = obj.encrypt(plaintext)42. if (check_padding(ciphertext):43. returnciphertext44. else

24、 :45. return048.49. def decrypto(ciphertext):50. obj = AES.new(key,mode,vi)51. plaintext = obj.decrypt(ciphertext)52. return plaintext53.53. def findcookie():54. globalHEADERS55. returnHEADERS.find('secret=' )+757.58. guess_cookie= ''59. pos_cookie=findcookie()60. pos_block_s = pos_c

25、ookie + 16 - pos_cookie%1661. HEADERS = HEADERS:pos_cookie + (16 - pos_cookie % 16 + 15)* ERSpos_cookie:62. encry_head = encrypto(add_padding(HEADERS)63. per_per_block = encry_headpos_block_s - 16:pos_block_s64. per_block = encry_headpos_block_s:pos_block_s+1665. aft_block = encry_headpos_block_s+16

26、:pos_block_s+3266. for i in charset:67. guess_block ='a'* 15 + i68. insert_block ='' .join(chr(ord(a) A ord(b) A ord(c)zip(per_block,per_per_block,guess_block)69. temp_header = HEADERS:pos_block_s+16 + insert_block + HEADERSpo s_block_s+16:'a' +HEAD#Ci-1#x#Ci+1for a,b,c in70.

27、 encry_temp_header = encrypto(add_padding(temp_header)71. if (aft_block = encry_temp_headerpos_block_s+32:pos_block_s+48)72.print "(+)first byte is:"+i73. print "(+)orign cookie:"+cookie攻击者首先使用降级攻击,来让浏览器使用ssl v3.0,再通过ssl v3.0 CBC-mode存在的缺陷,窃取到用户传输的明文。0x04 POODLE降级攻击ssl v3.0是一个存在了

28、很久的协议了,现在大多数浏览器为了兼容性都会支持这个协议,但是并不会首先使用这个协议,中间人攻击者可以驳回浏览器协商高版本协议的请求,只放行 ssl v3.0 协议。Padding Oracle 攻击针对于CBC的攻击之前已经有一些了,比如, Beast, Lucky17之类的,详细可以看这里首先来看CBC-mod的加解密流程User PCSerXTer(1) TLS j. 2 or TLS i, t or TLS , 0 Request(2) 不支持以上协议,换一个IS牍本的吧,(3) SSL 3.0 Requestdrops.'L,oapun.o 喑向服务器转发请求,建立连接解密流

29、程Initiilizatlon Vector (IV) CiphertextI I【I I I M I I J I I【I I ICiphertextCiphertext11 【111111 i i t 11加密流程Block Cipher Kev *Decryption* dh*Block CipherKey *Decryption KeyElock CipheDecryptioni - - I;IMrPlaintextPlaihttPliirtettCipher Block Chaining (CBC) mode decryptiondrop I. wo oyuii, orgFlamte

30、xtPlaintextInH allzatlon Vector (IV)滂tBlock CipherKey EncryptionTtSleek CipherEncryptionPlaints rrTTTnBkxk CipherK 即 EncryptionCiphertext. ICiphertexti : i i i rn<if>hertextCipher Block Chaining (CBC) mode encryptiondrops.woonji.'nrvT校验流程MAC1 = hash(明文)密文=Encode(明文 +MAC1+Padding,K)明文=Decod

31、e(密文,k) - MAC1-Padding(padding 的长度由最后一个字节标识)MAC2 = hash(明文)如果MAC1 = MAC2则校验成功 否则失败知二求三Padding Oracle 攻击一般都会满足一个知二求三的规律,如下图(1) VI(2)解密后的数据,叫它 midText把(3) Plaintext这三个值我们得到其中两个就可以推出另外一个,因为他们在一起Xor 了嘛。/wp-content/uploads/2014/12/file0004.jpg在Poodle攻击中,我们会把最后一个数据块替换成我们想要猜测的数据块。如下图所

32、示block. £ tssLnt toCiphertext I匚时EewtBlock CipherDerry pti onBlock CipherO*CTypon WL 1 t ITTIPlaintextBC) mode decryption jdr op s .wo o jtj Ji. o rgPla intext这样导致的直接后果就是,CBC整性验证失败,数据包被驳回。我们假设最后一个数据块均为padding组成(其实我们可以通过控制包的长度来达到这一目的,比如增加path的长度)那么当且仅当 Plaintext" = 7(block为16为时为15)的时候CBC完整性

33、校验才会通过。如果不为7,多删或者少删的padding ,都会影响到MAC勺正确取值,从而导致校验失败。那么,我们只需要不断地更改(1) IV最后一位的值,直到(3) Plaintext最后一位为7 (CBC验证通过)的时候,我们就可以推出(2) mid text的最后一位POODLEBEASTLucky*13RC4 BiasesPadding Oracle On Downgraded LegacyEncryptiontext-base-iide-channei- attacktime-ba&e-side- channe battacktime-fca&e-side- channei-attackj氐版本SSL中问人大量 瞄

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论