
CVE-2014-0160(Heartbleed)과 TLS 하트비트 처리의 프레이밍 불일치를 연구하기 위한 교육용 실습 환경.
Docker 내 실제 취약한 OpenSSL 환경을 사용하여 하트블리드 취약점(CVE-2014-0160)을 연구하기 위한 교육용 실습실입니다.
이 프로젝트는 OpenSSL 1.0.1f를 사용하여 취약한 TLS 서버를 재현하고, 변조된 하트비트 패킷이 메모리 노출을 유발하는 방식을 시연하기 위해 사용자 정의 원시 TLS 하트비트 클라이언트를 구현합니다.
이 실습실은 교육 및 연구 목적으로 만들어졌으며, 특히 다음을 연구하기 위해 설계되었습니다:
heartbleed-lab/
├── client/
│ ├── attacker.py
│ └── Dockerfile
│
├── vulnerable/
│ ├── Dockerfile
│ └── server/
│
├── fixed/
│ ├── Dockerfile
│ └── server/
│
├── docs/
│ └── diagrams/
│
├── notes/
│
├── docker-compose.yml
├── .gitignore
└── README.md
heartbleed-client
↓
Docker internal network
↓
vulnerable-heartbleed
조건:
heartbleed-client는 원시 TLS 레코드를 전송합니다vulnerable-heartbleed는 OpenSSL 1.0.1f를 실행합니다취약한 서버는 다음을 사용합니다:
openssl s_server이 환경은 원래 하트블리드 동작을 재현하도록 의도적으로 구성되었습니다.
클라이언트 구현:
현재 구현은 변조된 하트비트 패킷을 전송하여 원래 하트블리드 동작을 재현합니다. 조건:
payload_length > real payload size
예시:
Declared payload length: 0x4000
Real payload: 1 byte ("A")
취약한 서버는 선언된 길이를 잘못 신뢰하고 실제 페이로드 경계를 넘어 메모리 내용을 응답합니다.
sudo COMPOSE_HTTP_TIMEOUT=300 docker-compose up --build
sudo docker exec -it heartbleed-client bash
python attacker.py
[+] Sending malformed heartbeat
[+] Got TLS record: type=24 version=(3, 2) length=16384
[!!!] Heartbeat response received
이 프로젝트는 다음 간의 관계를 탐구합니다:
이 실습실의 주요 연구 관심사 중 하나는 다음을 비교하는 것입니다:
HTTP Request Smuggling
vs
TLS Heartbeat Parsing Failures
다음 관점에서:
계획된 다음 단계는 다음과 같습니다:
이 저장소는 오로지 다음을 위해서만 존재합니다: