http encrypted information can be stolen through tcp-windows · 2016-08-04 · h e i s t tcp...

53
HTTP Encrypted Information can be Stolen through TCP-windows by Mathy Vanhoef & Tom Van Goethem

Upload: others

Post on 11-Jul-2020

0 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: HTTP Encrypted Information can be Stolen through TCP-windows · 2016-08-04 · H E I S T TCP Slow-start • Not all TCP packets are sent at once! • TCP packets are sent in congestion

HTTP!Encrypted!Information can be!Stolen through!TCP-windows

by!

Mathy Vanhoef & Tom Van Goethem

Page 2: HTTP Encrypted Information can be Stolen through TCP-windows · 2016-08-04 · H E I S T TCP Slow-start • Not all TCP packets are sent at once! • TCP packets are sent in congestion

H E I S T

Agenda• Technical background!

• Same-Origin Policy!

• Compression-based attacks!

• SSL/TLS & TCP!

• Nitty gritty HEIST details!

• Demo!

• Countermeasures

2

Page 3: HTTP Encrypted Information can be Stolen through TCP-windows · 2016-08-04 · H E I S T TCP Slow-start • Not all TCP packets are sent at once! • TCP packets are sent in congestion

H E I S T

Same-Origin Policy

3

Mr. Sniffleshttps://bunnehbank.com

GET /vault

Page 4: HTTP Encrypted Information can be Stolen through TCP-windows · 2016-08-04 · H E I S T TCP Slow-start • Not all TCP packets are sent at once! • TCP packets are sent in congestion

H E I S T

Same-Origin Policy

3

Mr. Sniffleshttps://bunnehbank.com

GET /vault

Page 5: HTTP Encrypted Information can be Stolen through TCP-windows · 2016-08-04 · H E I S T TCP Slow-start • Not all TCP packets are sent at once! • TCP packets are sent in congestion

H E I S T 4

the World Wide Web

Mr. Sniffles https://bunnehbank.com

Page 6: HTTP Encrypted Information can be Stolen through TCP-windows · 2016-08-04 · H E I S T TCP Slow-start • Not all TCP packets are sent at once! • TCP packets are sent in congestion

H E I S T 4

the World Wide Web

Mr. Sniffles https://bunnehbank.com

Page 7: HTTP Encrypted Information can be Stolen through TCP-windows · 2016-08-04 · H E I S T TCP Slow-start • Not all TCP packets are sent at once! • TCP packets are sent in congestion

H E I S T 4

the World Wide Web

Mr. Sniffles https://bunnehbank.com

GET /vault

Page 8: HTTP Encrypted Information can be Stolen through TCP-windows · 2016-08-04 · H E I S T TCP Slow-start • Not all TCP packets are sent at once! • TCP packets are sent in congestion

H E I S T 4

the World Wide Web

Mr. Sniffles https://bunnehbank.com

GET /vault

Page 9: HTTP Encrypted Information can be Stolen through TCP-windows · 2016-08-04 · H E I S T TCP Slow-start • Not all TCP packets are sent at once! • TCP packets are sent in congestion

H E I S T 4

the World Wide Web

Mr. Sniffles https://bunnehbank.com

GET /vault

Page 10: HTTP Encrypted Information can be Stolen through TCP-windows · 2016-08-04 · H E I S T TCP Slow-start • Not all TCP packets are sent at once! • TCP packets are sent in congestion

H E I S T 4

the World Wide Web

Mr. Sniffles https://bunnehbank.com

GET /vault

Page 11: HTTP Encrypted Information can be Stolen through TCP-windows · 2016-08-04 · H E I S T TCP Slow-start • Not all TCP packets are sent at once! • TCP packets are sent in congestion

H E I S T

the World Wide Web

Mr. Sniffles https://bunnehbank.com

GET /vault

5

Page 12: HTTP Encrypted Information can be Stolen through TCP-windows · 2016-08-04 · H E I S T TCP Slow-start • Not all TCP packets are sent at once! • TCP packets are sent in congestion

H E I S T 6

the World Wide Web

Mr. Sniffles https://bunnehbank.com

GET /vault

Page 13: HTTP Encrypted Information can be Stolen through TCP-windows · 2016-08-04 · H E I S T TCP Slow-start • Not all TCP packets are sent at once! • TCP packets are sent in congestion

H E I S T

Agenda• Technical background!

• Same-Origin Policy!

• Compression-based attacks!

• SSL/TLS & TCP!

• Nitty gritty HEIST details!

• Demo!

• Countermeasures

7

Page 14: HTTP Encrypted Information can be Stolen through TCP-windows · 2016-08-04 · H E I S T TCP Slow-start • Not all TCP packets are sent at once! • TCP packets are sent in congestion

H E I S T

You requested: /vault

_secret=carrots4life

8

/vault

Uncompressed Compressed

You requested: /vault

vault_secret=carrots4life

→ 51 bytes → 47 bytes

Page 15: HTTP Encrypted Information can be Stolen through TCP-windows · 2016-08-04 · H E I S T TCP Slow-start • Not all TCP packets are sent at once! • TCP packets are sent in congestion

H E I S T

You requested: /vault?secret=c

_ arrots4life

9

/vault?secret=a

→ 49 bytes

You requested: /vault?secret=a

_ carrots4life

→ 50 bytes

/vault?secret=c

Page 16: HTTP Encrypted Information can be Stolen through TCP-windows · 2016-08-04 · H E I S T TCP Slow-start • Not all TCP packets are sent at once! • TCP packets are sent in congestion

H E I S T

You requested: /vault?secret=c

_ arrots4life

10

/vault?secret=a

→ 49 bytes

You requested: /vault?secret=a

_ carrots4life

→ 50 bytes

/vault?secret=c

49 bytes < 50 bytes → 'c' is a correct guess

Page 17: HTTP Encrypted Information can be Stolen through TCP-windows · 2016-08-04 · H E I S T TCP Slow-start • Not all TCP packets are sent at once! • TCP packets are sent in congestion

H E I S T

You requested: /vault?secret=cb

_ arrots4life

11

/vault?secret=ca

→ 50 bytes

You requested: /vault?secret=ca

_ rrots4life

→ 49 bytes

/vault?secret=cb

Page 18: HTTP Encrypted Information can be Stolen through TCP-windows · 2016-08-04 · H E I S T TCP Slow-start • Not all TCP packets are sent at once! • TCP packets are sent in congestion

H E I S T

You requested: /vault?secret=cb

_ arrots4life

12

/vault?secret=ca

→ 50 bytes

You requested: /vault?secret=ca

_ rrots4life

→ 49 bytes

/vault?secret=cb

49 bytes < 50 bytes → 'ca' is a correct guess

Page 19: HTTP Encrypted Information can be Stolen through TCP-windows · 2016-08-04 · H E I S T TCP Slow-start • Not all TCP packets are sent at once! • TCP packets are sent in congestion

H E I S T

Compression-based Attacks• Compression and Information Leakage of Plaintext [FSE'02]!

• Chosen plaintext + compression = plaintext leakage!

• Phonotactic Reconstruction of Encrypted VoIP Conversations [S&P'11]!• Packet length + bitrate encoding !

• CRIME [ekoparty'12]!• Exploits SSL compression!

• BREACH [Black Hat USA'13]!• Exploits HTTP compression

13

Page 20: HTTP Encrypted Information can be Stolen through TCP-windows · 2016-08-04 · H E I S T TCP Slow-start • Not all TCP packets are sent at once! • TCP packets are sent in congestion

H E I S T

Agenda• Technical background!

• Same-Origin Policy!

• Compression-based attacks!

• SSL/TLS & TCP!

• Nitty gritty HEIST details!

• Demo!

• Countermeasures

14

Page 21: HTTP Encrypted Information can be Stolen through TCP-windows · 2016-08-04 · H E I S T TCP Slow-start • Not all TCP packets are sent at once! • TCP packets are sent in congestion

H E I S T 15

GET /vault

SYN

SYN, ACK

ACK

Client Hello

Server Hello

Pre-Master Secret

TCP handshake

SSL handshake

Page 22: HTTP Encrypted Information can be Stolen through TCP-windows · 2016-08-04 · H E I S T TCP Slow-start • Not all TCP packets are sent at once! • TCP packets are sent in congestion

H E I S T 16

GET /vault

encrypt( GET /vault HTTP/1.1 Cookie: user=mr.sniffles! Host: bunnehbank.com! ....)

1 TCP data packet

Page 23: HTTP Encrypted Information can be Stolen through TCP-windows · 2016-08-04 · H E I S T TCP Slow-start • Not all TCP packets are sent at once! • TCP packets are sent in congestion

H E I S T 17

encrypt( ) = 19 TCP data packets

Page 24: HTTP Encrypted Information can be Stolen through TCP-windows · 2016-08-04 · H E I S T TCP Slow-start • Not all TCP packets are sent at once! • TCP packets are sent in congestion

H E I S T 18

encrypt( ) = 19 TCP data packets

TCP packet 1TCP packet 2

TCP packet 10...

initcwnd = 10

Page 25: HTTP Encrypted Information can be Stolen through TCP-windows · 2016-08-04 · H E I S T TCP Slow-start • Not all TCP packets are sent at once! • TCP packets are sent in congestion

H E I S T

TCP Slow-start• Not all TCP packets are sent at once!

• TCP packets are sent in congestion windows!• Congestion windows determine the amount of TCP packets that can be sent!

• Starts with the initial congestion window, initcwnd, typically set to 10!

• When the packets of the first congestion window are ACK'd, the next congestion window is sent!• Size of the next congestion window is doubled

19

Page 26: HTTP Encrypted Information can be Stolen through TCP-windows · 2016-08-04 · H E I S T TCP Slow-start • Not all TCP packets are sent at once! • TCP packets are sent in congestion

H E I S T 20

encrypt( ) = 19 TCP data packets

TCP packet 1TCP packet 2

TCP packet 10...

ACK

TCP packet 11...

TCP packet 19

initcwnd = 10

Page 27: HTTP Encrypted Information can be Stolen through TCP-windows · 2016-08-04 · H E I S T TCP Slow-start • Not all TCP packets are sent at once! • TCP packets are sent in congestion

H E I S T

HEIST• A set of techniques that allow attacker to determine the

exact size of a network response!

• ... purely in the browser!

• Leverages browser side-channels!

• Can be used to perform compression-based attacks, such as CRIME and BREACH, in the browser

21

Page 28: HTTP Encrypted Information can be Stolen through TCP-windows · 2016-08-04 · H E I S T TCP Slow-start • Not all TCP packets are sent at once! • TCP packets are sent in congestion

H E I S T

Browser Side-channels

• Send authenticated request to /vault resource!

• Returns a Promise, which resolves as soon as browser receives the first byte of the response

22

• Returns time when response was completely downloaded

fetch('https://bunnehbank.com/vault', {mode: "no-cors", credentials:"include"})

performance.getEntries()[-1].responseEnd

Page 29: HTTP Encrypted Information can be Stolen through TCP-windows · 2016-08-04 · H E I S T TCP Slow-start • Not all TCP packets are sent at once! • TCP packets are sent in congestion

H E I S T

HEIST

• Step 1: find out if response fits in a single TCP window

23

Page 30: HTTP Encrypted Information can be Stolen through TCP-windows · 2016-08-04 · H E I S T TCP Slow-start • Not all TCP packets are sent at once! • TCP packets are sent in congestion

H E I S T 24

time

fetch('...')

TCP handshake complete

SSL handshake complete

GET /vault

initial TCPwindow sent

first byte received

Promiseresolves

initial TCPwindow received

responseEnd

T1 T2

Page 31: HTTP Encrypted Information can be Stolen through TCP-windows · 2016-08-04 · H E I S T TCP Slow-start • Not all TCP packets are sent at once! • TCP packets are sent in congestion

H E I S T 25

time

fetch('...')

TCP handshake complete

SSL handshake complete

GET /vault

initial TCPwindow sent

first byte received

Promiseresolves

initial TCPwindow received

ACK sent

second TCPwindow sent

second TCPwindow received

responseEnd

T1 T2

Page 32: HTTP Encrypted Information can be Stolen through TCP-windows · 2016-08-04 · H E I S T TCP Slow-start • Not all TCP packets are sent at once! • TCP packets are sent in congestion

H E I S T

HEIST

• Step 1: find out if response fits in a single TCP window!

• Step 2: discover exact response size

26

Page 33: HTTP Encrypted Information can be Stolen through TCP-windows · 2016-08-04 · H E I S T TCP Slow-start • Not all TCP packets are sent at once! • TCP packets are sent in congestion

H E I S T

Discover Exact Response Size

27

initcwnd second TCP window

Resource size: ?? bytes Reflected content: x bytes

Page 34: HTTP Encrypted Information can be Stolen through TCP-windows · 2016-08-04 · H E I S T TCP Slow-start • Not all TCP packets are sent at once! • TCP packets are sent in congestion

H E I S T

Discover Exact Response Size

28

initcwnd second TCP window

Resource size: ?? bytes Reflected content: x/2 bytes

Page 35: HTTP Encrypted Information can be Stolen through TCP-windows · 2016-08-04 · H E I S T TCP Slow-start • Not all TCP packets are sent at once! • TCP packets are sent in congestion

H E I S T

Discover Exact Response Size

29

initcwnd second TCP window

Resource size: ?? bytes Reflected content: x/4 bytes

Page 36: HTTP Encrypted Information can be Stolen through TCP-windows · 2016-08-04 · H E I S T TCP Slow-start • Not all TCP packets are sent at once! • TCP packets are sent in congestion

H E I S T

Discover Exact Response Size

30

initcwnd second TCP window

Resource size: ?? bytes Reflected content: x/4+x/8 bytes

Page 37: HTTP Encrypted Information can be Stolen through TCP-windows · 2016-08-04 · H E I S T TCP Slow-start • Not all TCP packets are sent at once! • TCP packets are sent in congestion

H E I S T 31

initcwnd second TCP window

Resource size: ?? bytes Reflected content: y bytes

After log(n) checks, we find:! y bytes of reflected content = 1 TCP window!! y+1 bytes of reflected content = 2 TCP windows → resource size = initcwnd - y bytes

Page 38: HTTP Encrypted Information can be Stolen through TCP-windows · 2016-08-04 · H E I S T TCP Slow-start • Not all TCP packets are sent at once! • TCP packets are sent in congestion

H E I S T

HEIST

• Step 1: find out if response fits in a single TCP window!

• Step 2: discover exact response size!

• Step 3: do the same for large responses ( > initcwnd)

32

Page 39: HTTP Encrypted Information can be Stolen through TCP-windows · 2016-08-04 · H E I S T TCP Slow-start • Not all TCP packets are sent at once! • TCP packets are sent in congestion

H E I S T

Determine size of large responses• initcwnd is typically set to 10 TCP packets!

• ~14kB!

• TCP windows grow as packets are acknowledged!• Second TCP window is 20 TCP packets, third is 40, ...!

• We can arbitrarily increase window size!• Send request to resource of known size!• After response is in, send request to target resource, repeat step 2

33

Page 40: HTTP Encrypted Information can be Stolen through TCP-windows · 2016-08-04 · H E I S T TCP Slow-start • Not all TCP packets are sent at once! • TCP packets are sent in congestion

H E I S T 34

CWND = 10GET /foo

10 TCP packets

ACKCWND = 20GET /vault

= 19 TCP data packets

19 TCP packets

ACK sent in single TCP window

Page 41: HTTP Encrypted Information can be Stolen through TCP-windows · 2016-08-04 · H E I S T TCP Slow-start • Not all TCP packets are sent at once! • TCP packets are sent in congestion

H E I S T

HEIST

• Step 1: find out if response fits in a single TCP window!

• Step 2: discover exact response size!

• Step 3: do the same for large responses ( > initcwnd)!

• Step 4: if available, leverage HTTP/2

35

Page 42: HTTP Encrypted Information can be Stolen through TCP-windows · 2016-08-04 · H E I S T TCP Slow-start • Not all TCP packets are sent at once! • TCP packets are sent in congestion

H E I S T

Leveraging HTTP/2• HTTP/2 is the new HTTP version!

• Preserves the semantics of HTTP!

• Main changes are on the network level!• Only a single TCP connection is used for parallel requests!

• Headers are compressed using HPACK!• Client and server build same lookup table!• Header is now just a reference to an entry in the table!• Mitigates CRIME

36

Page 43: HTTP Encrypted Information can be Stolen through TCP-windows · 2016-08-04 · H E I S T TCP Slow-start • Not all TCP packets are sent at once! • TCP packets are sent in congestion

H E I S T

Leveraging HTTP/2• HTTP/2 allows us to determine exact response size without

needing reflected content in the same response!• Only a single TCP connection is used for parallel requests!

• Use (reflected) content in other responses on the same server!• Note that BREACH still requires reflective content in the same resource!

• Response size can still be used to leak sensitive data (see examples later)

37

Page 44: HTTP Encrypted Information can be Stolen through TCP-windows · 2016-08-04 · H E I S T TCP Slow-start • Not all TCP packets are sent at once! • TCP packets are sent in congestion

H E I S T 38

CWND = 10GET /reflect?x=[1 TCP packet]

GET /vault

= 6 TCP packets

/reflect = 2 TCP packets + reflected

contains both/reflect

and /vault

9 TCP packets

ACKresponseEnd

Promiseresolves

Page 45: HTTP Encrypted Information can be Stolen through TCP-windows · 2016-08-04 · H E I S T TCP Slow-start • Not all TCP packets are sent at once! • TCP packets are sent in congestion

H E I S T 39

CWND = 10GET /reflect?x=[3 TCP packet]

1 TCP packet

GET /vault

= 6 TCP packets

ACK

/reflect = 2 TCP packets + reflected

contains both/reflect and

part of /vault

CWND = 20

10 TCP packets

ACK

responseEnd

Promiseresolves

Page 46: HTTP Encrypted Information can be Stolen through TCP-windows · 2016-08-04 · H E I S T TCP Slow-start • Not all TCP packets are sent at once! • TCP packets are sent in congestion

H E I S T

HEIST• Step 1: find out if response fits in a single TCP window!

• Step 2: discover exact response size!

• Step 3: do the same for large responses ( > initcwnd)!

• Step 4: if available, leverage HTTP/2!

• Step 5: exploit & profit

40

Page 47: HTTP Encrypted Information can be Stolen through TCP-windows · 2016-08-04 · H E I S T TCP Slow-start • Not all TCP packets are sent at once! • TCP packets are sent in congestion
Page 48: HTTP Encrypted Information can be Stolen through TCP-windows · 2016-08-04 · H E I S T TCP Slow-start • Not all TCP packets are sent at once! • TCP packets are sent in congestion

H E I S T

Exploit & profit

• Use HEIST to exploit BREACH/CRIME!• Extract CSRF tokens, private message content, ...!

• Only 2 requirements: gzip/SSL compression + reflected content!

• Obtain sensitive content from web services!• Response size is related to user (victim) state

42

Page 49: HTTP Encrypted Information can be Stolen through TCP-windows · 2016-08-04 · H E I S T TCP Slow-start • Not all TCP packets are sent at once! • TCP packets are sent in congestion

H E I S T

DEMO

43

Page 50: HTTP Encrypted Information can be Stolen through TCP-windows · 2016-08-04 · H E I S T TCP Slow-start • Not all TCP packets are sent at once! • TCP packets are sent in congestion

H E I S T

Other targets• Compression-based attacks!

• gzip compression is used by virtually every website!

• Size-exposing attacks!• Uncover victim's demographics from popular social networks!

• Reveal victim's health conditions from online health websites!

• Disclose victim's financial information!

• Hard to find sites that are not vulnerable

44

Page 51: HTTP Encrypted Information can be Stolen through TCP-windows · 2016-08-04 · H E I S T TCP Slow-start • Not all TCP packets are sent at once! • TCP packets are sent in congestion

H E I S T

Countermeasures• Browser layer!

• Prevent side-channel leak (infeasible)!

• Disable third-party cookies (complete)!

• HTTP layer!• Block illicit requests (inadequate)!

• Disable compression (incomplete)!

• Network layer!• Randomize TCP congestion window (inadequate)!

• Apply random padding (inadequate)

45

Page 52: HTTP Encrypted Information can be Stolen through TCP-windows · 2016-08-04 · H E I S T TCP Slow-start • Not all TCP packets are sent at once! • TCP packets are sent in congestion

H E I S T

Conclusion• Collection of techniques to discover network response size

in the browser, for all authenticated cross-origin resources!

• Exploits the subtle interplay of browser and network layer !

• HTTP/2 makes exploitation easier!

• Allows for compression-based and size-exposing attacks!

• Many countermeasures, few that actually work

46

Page 53: HTTP Encrypted Information can be Stolen through TCP-windows · 2016-08-04 · H E I S T TCP Slow-start • Not all TCP packets are sent at once! • TCP packets are sent in congestion

Questions?

Mathy Vanhoef!@vanhoefm!

[email protected]

Tom Van Goethem!@tomvangoethem!

[email protected]

H E I S T