
이 Repo는 Heartbleed 기법을 사용하여 nginx를 쉽게 공격할 수 있는 환경을 만들기 위해 컨테이너 1개를 구축하는 데 중점을 둡니다:

CVE-2014-0160 문제는 OpenSSL 라이브러리가 TLS heartbeat 기능(버퍼 크기 64kb)을 제공할 때 발생하며, 메모리 초과로 인해 서버 메모리의 민감한 정보가 유출됩니다.
Webapp은 민감한 메시지를 처리 중이며, nginx는 해당 메시지를 메모리에 캐시합니다.
우리는 환경이 TLS heartbeat를 지원하는지 확인하여 공격합니다.
openssl s_client -connect : -tlsdebug
참고: 최신 OpenSSL 버전은 TLS heartbeat 프로토콜을 더 이상 지원하지 않을 수 있으므로, 지원하는 버전을 사용하십시오.
Heartbleed는 무작위적인 메모리 경계를 벗어난 읽기(out-of-bounds read) 오류입니다. 서버는 인접한 64KB 메모리를 반환합니다.
heartbeat 한 개의 헤더 (RFC6520) 18 03 02 00
docker build를 사용하여 heartbleed lab을 빌드합니다.
docker build -t heartbleed-lab .
docker run heartbleed-lab -p port:8443
webapps의 기본 포트는 8443에서 서비스됩니다.
페이로드 heartbleed.py를 사용하여 테스트합니다. 페이로드가 hexdump 형식으로 결과를 반환하는 것을 확인할 수 있습니다.
example dump에서는 방금 보낸 request와 대부분 0x00인 메모리 셀을 볼 수 있습니다. 페이로드는 무작위적이므로 원하는 결과를 유출하려면 여러 번 실행해야 합니다.
memory.py를 실행하여 nginx에 request를 보내 메모리에 저장할 수 있습니다. 그런 다음 result.txt에서 볼 수 있듯이 유출된 결과를 얻을 수 있습니다.
공격자가 heartbeat request를 사용하여 메시지를 유출할 것임을 알고 있으므로,
alert tcp any any -> any 443 (msg:"Heartbeat request"; content:"|18 03 02 00|"; rawbytes;sid:100000)
Snort IDS를 사용하여 침입을 탐지합니다.