TLS
▶TLS layer
• Application layer→TLS: unprotected data 전송됨
• TLS: handles encryption, decryption, integrity checks 수행
• TLS→Transport layer: protected data 전송됨
▶TLS Record Protocol
TLS handshake가 끝나면 client와 server는 header와 payload로 구성된 record를 이용해 데이터를 교환한다.
Record
Sending Data
Receiving Data
▶Hearbeat protocol in OpenSSL
client와 server가 일정 기간 이상 서로에게 데이터를 보내지 않으면 통신을 막음으로써,
TLS의 keep-alive feature을 구현한다.
• A→B: payload(는 별로 안중요)와 payload length value (n)이 포함된 heartbeat packet을 보낸다.
• B: request packet의 payload field의 시작점부터해서 총 n 바이트만큼, 즉 request packet의 payload 그대로를 response packet에다 복사함
→ A가 줬던 request packet의 payload와 동일한 payload를 가짐
• B→A: 이 response packet 전송
Heartbleed Attack
OpenSSL heartbeat extension의 결함으로 인해 heartbleed bug가 발생한다:
response packet에다가 얼마나 복사해넣을지는 payload length field에 의해 직접 결정되므로,
payload length field의 값이 실제 payload보다 크면, payload 이외의 데이터 즉 server 측의 memory 일부까지도 response packet에 복사되어 상대에게 전송됨으로써, server memory의 disclosure 발생.
▶Patch
걍 OpenSSL library를 업데이트하면 해결됨.