취약점 대응방안권고 14.4.14( 월 ) / KISA 취약점분석팀 14.04.23( 수 ) OpenSSL 취약점 FAQ 추가 개요 통신구간암호화를위해많이사용하는 라이브러리에서서버에저장된중요메모리데이터가노출되는 라고명명된심각한버그가발견되어시스템및소프트웨어에대한신속한취약점조치를권고 취약점정보 시스템메모리정보노출취약점 - CVE-2014-0160 (2014.04.07.) 영향받는버전 - OpenSSL 1.0.1 ~ OpenSSL 1.0.1f - OpenSSL 1.0.2-beta, OpenSSL 1.0.2-beta1 영향받는시스템및소프트웨어 - 취약한 OpenSSL 버전이탑재된시스템 서버 ( 웹서버, VPN 서버등 ), 네트워크장비, 모바일단말등다양한시스템이해당될수있음 - 취약한 OpenSSL 라이브러리가내장된소프트웨어제품 영향받지않는소프트웨어 - OpenSSL 0.9.x 대버전 - OpenSSL 1.0.0 대버전 - OpenSSL 1.0.1g - 1 -
취약점내용 암호화라이브러리의하트비트 라는확장모듈에서클라이언트요청메시지를처리할때데이터길이검증을수행하지않아시스템메모리에저장된 크기의데이터를외부에서아무런제한없이탈취할수있는취약점 하트비트 : 클라이언트와서버간의연결상태체크를위한 OpenSSL 확장모듈 공격형태 본취약점은원격에서발생가능한취약점으로 공격자는메시지길이정보가변조된 패킷을취약한 OpenSSL 버전을사용하는서버에전송할경우, 정해진버퍼밖의데이터를공격자에게전송하게되어시스템메모리에저장된개인정보및인증정보등을탈취할수있음 공격방법 1 ( 전송 ) 공격자는하트비트패킷헤더에서페이로드길이필드를조작하여서버에전송 2 ( 응답 ) 서버는공격자가요청한길이 ( 최대 64KB) 만큼메모리에서데이터를추출하여공격자에게응답 노출가능한정보 : SSL 서버비밀키, 세션키, 쿠키및개인정보 (ID/PW, 이메일주소등 ) 등 노출되는정보는서비스환경에따라다를수있음 - 2 -
취약점확인절차 점검대상선정 서버 네트워크 보안장비등의시스템에서 설치여부확인 웹서버의경우서브도메인을운영하는시스템도점검대상에포함 서브도메인 : mail.example.com, blog.example.com 등 시스템뿐만아니라소프트웨어제품자체에 라이브러리가내장되어있을경우버전확인후점검대상에포함 취약점노출여부확인방법 명령어를통한 버전정보확인 이설치된시스템에서아래명령어를입력하여취약점에영향받는버전을사용하는지확인 root@server:~# openssl version a OpenSSL 1.0.1 14 May 2012 취약버전정보 하트비트 활성화여부확인 취약한버전의 을사용하는시스템중 기능사용여부확인방법 단 패치된최신버전 은활성화여부를확인할필요없음 취약한버전이 를사용하지않은경우취약점에영향받지않음 root@server:~# openssl s_client connect domain.com:443 tlsextdebug debug state grep -i heartbeat 명령어실행방법 : domain.com 에점검대상 URL 정보로수정 - 3 -
HeartBeat 기능이활성화되어있는경우 heartbeat 문자열이검색됨 TLS server extension "heartbeat" (id=15), len=1 0000-01. read from 0x95cb888 [0x95d0e33] (5 bytes => 5 (0x5)) 0000-16 03 02 0b cc... read from 0x95cb888 [0x95d0e38] (3020 bytes => 3020 (0xBCC)) 0000-0b 00 0b c8 00 0b c5 00-05 9d 30 82 05 99 30 82...0...0. 0010-04 81 a0 03 02 01 02 02-08 11 bb ec db 00 00 39...9 0020 - d0 30 0d 06 09 2a 86 48-86 f7 0d 01 01 05 05 00.0...*.H... 0030-30 5e 31 0b 30 09 06 03-55 04 06 13 02 4b 52 31 0^1.0...U...KR1 0040-12 30 10 06 03 55 04 0a-0c 09 43 72 6f 73 73 43.0...U...CrossC HeartBeat 기능이활성화되지않은경우 heartbeat 문자열이검색되지않음 TLS server extension "session ticket" (id=35), len=0 read from 0x9349888 [0x934ee33] (5 bytes => 5 (0x5)) 0000-16 03 02 13 6f...o read from 0x9349888 [0x934ee38] (4975 bytes => 4975 (0x136F)) 에서사용하는소스코드확인 취약점이발생된소스코드를열람하여아래와같이보안패치코드가추가되었는지확인을통해취약여부판별 패치된버전에서는아래와같이사용자요청메시지에대한길이를검사하도록코드가추가됨 취약점코드 (ssl/d1_both.c) 보안패치코드 (ssl/d1_both.c) /* Read type and payload length first */ if (1 + 2 + 16 > s->s3->rrec.length) return 0; hbtype = *p++; hbtype = *p++; n2s(p, payload); n2s(p, payload); pl = p; if (1 + 2 + payload + 16 > return 0; s->s3->rrec.length) pl = p; 참고사이트 : http://git.openssl.org/gitweb/?p=openssl.git;a=commitdiff;h=96db902-4 -
한국인터넷진흥원 를통한취약점여부확인 자체적인확인이어려울경우 KISA 전문가로부터점검을요청 성명 연락처 메일주소 손기종 02-405-5223 skj@kisa.or.kr 김유홍 02-405-5488 uhong@kisa.or.kr 해결방안 시스템측면대응방안 버전을 버전으로업데이트 서비스운영환경에따른소프트웨어의존성문제를고려하여업데이트방법을선택하고반드시먼저테스트수행 아래보안패치방법은 CentOS/Fedora 및 Ubuntu 의예제로각운영체제별로업데이트방법이상이할수있음 전체시스템업데이트 을포함한시스탬내의소프트웨어전부업데이트 yum update 업데이트 sudo pacman -Syu 전체시스템업데이트 을포함한시스탬내의소프트웨어전부업데이트 sudo apt-get update sudo apt-get dist-upgrade - 5 -
업데이트 sudo apt-get install --only-upgrade openssl sudo apt-get install --only-upgrade libssl1.0.0 운영환경의특수성때문에패키지형태의업데이트가어려운경우 를사용하지않도록컴파일옵션을설정하여재컴파일가능 소스코드를처음다운받아컴파일하는경우라이브러리의존성문제가발생하여추가적인작업이필요한경우도존재./config DOPENSSL_NO_HEARTBEATS make depend make make install 네트워크보안장비측면대응방안 취약점공격탐지및차단패턴적용 아래의 탐지룰 을참고하여침입탐지시스템및침입차단시스템에패턴업데이트적용권고 차단패턴적용은서비스및네트워크영향도를고려하여적용 [OpenSSL HeartBeat 취약점탐지 Snort Rule] - SSL 서비스포트에대해공격요청시전송되는 18 03?? 탐지패턴 alert tcp any any < > any [443,465,563,636,695,898,989,990,992,993,994,995,2083,2087,2096,2484,8443,8883,9091] (content:" 18 03 00 "; depth: 3; content:" 01 "; distance: 2; within: 1; content:!" 00 "; within: 1; msg: "SSLv3 Malicious Heartbleed Request V2 ; sid: 1;) alert tcp any any < > any [443,465,563,636,695,898,989,990,992,993,994,995,2083,2087,2096,2484,8443,8883,9091] (content:" 18 03 01 "; depth: 3; content:" 01 "; distance: 2; within: 1; content:!" 00 "; within: 1; msg: "TLSv1 Malicious Heartbleed Request V2"; sid: 2;) alert tcp any any < > any [443,465,563,636,695,898,989,990,992,993,994,995,2083,2087,2096,2484,8443,8883,9091] (content:" 18 03 02 "; depth: 3; content:" 01 "; distance: 2; within: 1; content:!" 00 "; within: 1; msg: "TLSv1.1 Malicious Heartbleed Request V2"; sid: 3;) 출처 : FBI - 6 -
서비스관리측면대응방안 서버측 비밀키 가유출되었을가능성을배제할수없기때문에인증서를재발급받는것을운영자가검토 취약점에대한조치가완료된후사용자들의비밀번호재설정을유도하여탈취된계정을악용한추가피해를방지하는방안도고려 야후메일의경우접속한사용자의계정정보가유출되는것이확인되어현재비밀번호변경을안내중 - 7 -
붙임 취약점 HeartBleed 취약점대응 FAQ Q. HeartBleed 취약점에대응하기위해담당자측면에서무엇을어떻게해야하나요? HeartBleed 취약점대응방법 1. OpenSSL이설치된시스템조사 - openssl 명령어를통해사용유무확인 - SSL 기본서비스포트 (443) 사용유무확인 ( 포트를변경하여사용할수있음 ) 2. OpenSSL 버전정보확인 ( 네트워크, 보안장비는제조사를통해문의 ) 3. 취약한버전을사용하는경우보안패치적용 4. 보안패치후서비스재시작 5. 시스템의중요도를판단하여 SSL 인증서업데이트검토 Q. 윈도우서버를사용하고있습니다. OpenSSL 취약점에영향을받나요? 윈도우서버인경우에도 HeartBleed 취약점에영향받는 OpenSSL 버전을사용하는경우에는취약할수있습니다. (Microsoft에서제공하는 IIS를사용하는경우 Secure Channel 이라는자체 SSL를사용하고있어영향받지않음 ) 윈도우환경 OpenSSL 사용여부확인및보안패치방법 - OpenSSL 사용및버전정보확인 1. cmd 창에서 openssl version 입력 ( 명령어위치는서버환경에따라상이할수있음 ) 2. openssl version 명령어로확인이되지않을경우 윈도우익스플로러에서대상소프트웨어가설치된디렉터리로이동한후검색기능을이용하여 OpenSSL 라이브러리파일검색 ( 파일명 : ssleay32.dll, libeay32.dll, openssl.exe) 파일이검색되면, 우클릭후속성보기에서버전정보를확인 - OpenSSL 보안패치방법 1. 취약점에영향받는버전을사용할경우아래홈페이지에접속하여윈도우용 OpenSSL 1.0.1g 버전을다운로드하여업데이트수행하고라이브러리를최신버전으로변경 (http://slproweb.com/products/win32openssl.html) - 8 -
2. 파일이최신버전으로변경이되었으면서비스재시작 tomcat 참고 ) : wiki.apache.org/tomcat/security/heartbleed Q. 서버에서 OpenSSL 버전을확인하려면어떻게해야하나요? 터미널에접속하셔서아래의명령어를입력하여버전을확인하실수있습니다. # openssl version -a # rpm -q openssl # dpkg -l openssl OS 별로 OpenSSL 버전정보를확인하는방법이상이할수있으니해당되는명령어를통해확인하시기바랍니다. Q. 유닉스를사용하고있습니다. OpenSSL 명령어가없다는메시지가표시되는데어떻게해야하나요? which openssl 또는 find 명령어를입력하여 openssl 이설치되어있는지먼저확인하시고, 검색이되면 openssl 파일의절대경로를입력후명령어를실행하시기바랍니다. Ex) # /usr/local/bin/openssl version # find /usr name openssl (find 문은서버파일수에따라부하를줄수있으니검토후실행 ) 솔라리스는 OS 버전에따라 OpenSSL 명령어위치가상이하니아래사항을참고하시기바랍니다. - 솔라리스 10: /usr/sfw/bin/openssl version -a - 솔라리스 11: /usr/bin/openssl version a Q. 보안패치를적용했습니다. 패치가정상적으로되었는지어떻게확인할수있나요? 보안패치적용후버전정보가 1.0.1g 버전이거나아래와같이 OS 제조사측패치버전과 일치하는지를통해확인하실수있습니다. yum 또는 apt-get를통한업데이트시보안패치결과 - CentOS/Redhat 패치버전 : 1.0.1e-16.el6_5.7 또는 1.0.1g - Debian 패치버전 : 1.0.1e-2+deb7u5 또는 1.0.1g - ubuntu 패치버전 : 1.0.1-4ubuntu5.12 또는 1.0.1g - 9 -
Q. 보안업데이트를적용했지만아직취약한것으로확인됩니다. 어떻게해야하나요? 보안패치를적용했지만취약하다고결과가나올경우서비스재시작을추가적으로 해주시고다시확인해보시기바랍니다. Q. 네트워크및보안장비에선 HeartBleed 취약점확인을어떻게할수있나요? 명령어를통해 OpenSSL 버전정보확인이어려울경우제조사에문의하시기바랍니다. 또는제조사홈페이지에 HeartBleed 취약점에영향받는제품명이게시되었을경우 확인하실수있습니다. Q. 보안패치를적용하였는데 SSL 비밀키도변경해야하나요? 서비스또는시스템환경에따라유출될수있는정보가다르지만 HeartBleed 취약점으로인해비밀키가유출될수있으므로기존에사용하고있는 openssl 버전이취약한버전을사용하고있는경우였다면, 시스템중요도를고려하여비밀키변경을권고드립니다. Q. OpenSSL이외부에서접근이안되는내부망에설치되어있을경우조치대상에포함하여야하나요? 공격자가내부에위치할경우취약점에노출될수있으니보안패치적용을권고드립니다. Q. 버전이다른두개의 OpenSSL이서버에깔려있을경우실제사용되는버전이무엇인지확인할수있는방법이있나요? 서버구축담당자가 OpenSSL를서버에연동시킬때두개의 OpenSSL 중어떤버전을포함시켰는지확인해주시기바랍니다. 자체확인이어려울경우외부공개시스템은취약점노출여부점검을지원하고있으니 문의해주시기바랍니다. Q. 취약한 OpenSSL 버전을사용하면무조건중요정보가노출될수있나요? 서비스또는시스템종류에따라노출되는정보가상이할수있습니다. HeartBleed 를통해노출가능한정보로는아이디 / 패스워드, 이메일정보등의개인정보, SSL 비밀키, 세션키, 쿠키값등의인증정보입니다. Q. KISA 대응권고에있는 Snort 탐지룰에대해설명해주실수있나요? Snort 탐지룰은 HeartBleed 취약점에서사용하고있는 HeartBeat 라는확장기능에대해 탐지하는룰입니다. - 10 -
스노트탐지룰설명 alert tcp any any < > any [443,465,563,636,695,898,989,990,992,993,994,995,2083,2087,2096,2484,8443, 8883,9091] SSL 포트정보 - 기관에따라포트가한개일수도있고여러포트를이용할수있으니서비스하는포트를등록 (content:" 18 03 02 "; depth: 3; content:" 01 "; distance: 2; within: 1; content:!" 00 "; within: 1; msg: "SSLv3 Malicious Heartbleed Request V2 ; sid: 1;) HeartBeat 요청메시지탐지정책 - HeartBeat 요청헤더에포함된 TYPE(18) 버전정보 (03 00, 03 01, 03 02) 가대상시스템에수신될경우탐지및차단 Q. SSL 과 OpenSSL 의차이점은무엇인가요? SSL 은프로토콜중하나로, 통신구간암호화에사용되는프로토콜입니다. OpenSSL 은 SSL 프로토콜을구현한라이브러리입니다. Q. 시스템이취약한지테스트를해줄수있나요? 시스템이외부에오픈되어있을경우취약점노출여부에대한테스트가가능하며, 테스트를원하시는경우도메인이나아이피를알려주시면원격에서테스트를지원해드립니다. Q. 소프트웨어에 OpenSSL이설치되어있는데버전 0.9.x 및 1.0.0 버전은왜취약점에영향받지않나요? OpenSSL 0.9.X 및 1.0.0 버전은 HeartBeat 기능이부재하기때문에취약점에영향받지않습니다. Q. HeartBeat 는 OpenSSL 에언제탑재되었나요? 2012 년 2 월에 OpenSSL 라이브러리에포함이되었으며, 클라이언트와서버간의 연결상태를체크하는확장모듈입니다. - 11 -