
CVE-2014-0160 (Heartbleed)를 악용하여 nginx 웹 서버에서 메모리를 유출하는 Docker 기반 실험 환경, 페이로드 스크립트 및 Snort IDS 탐지 규칙 포함.
이 저장소는 Heartbleed 기술을 사용하여 nginx를 악용할 수 있는 쉬운 환경을 구축하는 데 중점을 둡니다.

CVE-2014-0160 문제는 OpenSSL 라이브러리가 TLS 하트비트 기능의 버퍼 크기를 64KB로 제공하여 메모리 오버플로우를 일으켜 서버 메모리의 민감한 정보가 누출될 때 발생합니다.
웹앱은 nginx가 메모리에 캐시한 민감한 메시지를 처리하고 있습니다.
우리는 환경이 TLS 하트비트를 지원하는지 확인하여 악용합니다.
openssl s_client -connect : -tlsdebug
최신 OpenSSL 버전은 TLS 하트비트 프로토콜을 더 이상 지원하지 않을 수 있으므로, 지원되는 버전을 사용하십시오.
Heartbleed는 무작위적인 경계 읽기(out-of-bounds read) 오류입니다. 서버는 인접한 64KB의 메모리를 반환합니다.
하트비트 헤더 (RFC6520) 18 03 02 00
Docker 빌드를 사용하여 heartbleed 랩을 구축합니다.
docker build -t heartbleed-lab .
docker run heartbleed-lab -p port:8443
웹앱의 기본 포트는 8443입니다.
페이로드 heartbleed.py를 사용하여 테스트합니다. 페이로드가 hexdump 형식으로 결과를 반환하는 것을 확인할 수 있습니다.
예제 덤프에서 방금 보낸 요청과 메모리 영역(주로 0x00)을 볼 수 있습니다. 페이로드는 무작위적이므로 원하는 결과를 유출하기 위해 여러 번 실행해야 합니다.
memory.py를 실행하여 nginx에 요청을 보내 메모리에 저장한 후, result.txt에서 볼 수 있는 유출 결과를 얻을 수 있습니다.
공격자가 하트비트 요청을 사용하여 메시지를 유출한다는 것을 알고 있습니다.
alert tcp any any -> any 443 (msg:"Heartbeat request"; content:"|18 03 02 00|"; rawbytes;sid:100000)
침입 탐지를 위해 snort IDS를 사용합니다.