2010년대 중반에 가장 잘 알려진 취약점 중 하나는 "하트블리드(Heartbleed)"였습니다. Heartbleed는 매우 널리 사용되는 HTTPS 연결용 주요 암호화 라이브러리인 "OpenSSL"에 영향을 미치는 소프트웨어이기 때문에 특히 심각했습니다. 설상가상으로 이 취약점은 이전에 2년 이상 OpenSSL에 존재했습니다. 그것은 많은 사람들이 취약한 것을 사용하고 있다는 것을 의미했습니다. 버전.
Heartbleed는 악용될 때 RAM에서 서버에서 클라이언트로 데이터가 누출되는 하트비트 확장의 데이터 누출 취약점이었습니다. 하트비트 확장은 정상적인 페이지 요청 없이 웹 서버와 클라이언트 간의 연결을 유지하는 데 사용됩니다.
OpenSSL의 경우 클라이언트는 서버에 메시지를 보내고 메시지의 길이를 최대 64KB까지 서버에 알려줍니다. 그런 다음 서버는 동일한 메시지를 다시 에코해야 합니다. 그러나 결정적으로 서버는 실제로 클라이언트가 요청한 메시지 길이인지 확인하지 않았습니다. 이것은 클라이언트가 10KB 메시지를 보내고 64KB라고 주장하며 64KB 응답을 받을 수 있음을 의미하며, 거기에 저장된 데이터에 관계없이 추가 54KB는 다음 54KB RAM으로 구성됩니다. 이 과정은 다음과 같이 잘 시각화되어 있습니다. XKCD 만화 #1354.
![](/f/d1fdb70d5d1b6b1d5703fe3cb3fd8717.png)
이미지 제공 xkcd.com.
작은 하트비트 요청을 많이 만들고 큰 요청이라고 주장함으로써 공격자는 응답을 함께 연결하여 대부분의 서버 RAM에 대한 그림을 만들 수 있습니다. 유출될 수 있는 RAM에 저장된 데이터에는 암호화 키, HTTPS 인증서는 물론 사용자 이름 및 비밀번호와 같은 암호화되지 않은 POST 데이터가 포함됩니다.
참고: 덜 알려져 있지만 하트비트 프로토콜과 익스플로잇은 다른 방향으로도 작동했습니다. 악의적인 서버는 하트비트 요청당 최대 64KB의 사용자 메모리를 읽도록 구성되었을 수 있습니다.
이 문제는 2014년 4월 1일 여러 보안 연구원에 의해 독립적으로 발견되었으며 패치를 만들 수 있도록 OpenSSL에 비공개로 공개되었습니다. 이 버그는 2014년 4월 7일 패치가 발표되었을 때 알려졌습니다. 문제를 해결하는 가장 좋은 방법은 패치를 적용하는 것이지만 즉시 패치가 옵션이 아닌 경우 하트비트 확장을 비활성화하여 문제를 해결할 수도 있었습니다.
불행히도 익스플로잇이 공개되고 일반적으로 잘 알려져 있음에도 불구하고 많은 웹 사이트가 여전히 즉시 업데이트되지 않았으며 몇 년 후에도 취약점이 여전히 가끔 발견되었습니다. 이로 인해 계정에 대한 액세스 권한을 얻거나 데이터를 유출하는 데 악용되는 여러 사례가 발생했습니다.