목차 1) 개요 ) HTTPS & SSL ) HeartBleed 란?

Similar documents
정적으로 설치된 mod_ssl 모듈확인 동적으로 설치된 mod_ssl 모듈확인 웹서버에 설치된 모듈중 mod_so.c 를 먼저 확인후 동적으로 설치된 모듈중 mod_ssl.so 를 확인합니다. 동적으로 설치된 경우 apache 설치 디렉토리의 module 이나 libe

2. 개인키권한설정 보안경고개인키의유출방지를위해 group 과 other 의 permission 을모두제거한다. chmod 600 /etc/pki/tls/private/lesstif-rootca.key 3. CSR(Certificate Signing Request) 생

untitled

1) 인증서만들기 ssl]# cat > // 설명 : 발급받은인증서 / 개인키파일을한파일로저장합니다. ( 저장방법 : cat [ 개인키

1) 인증서만들기 ssl]# cat > // 설명 : 발급받은인증서 / 개인키파일을한파일로저장합니다. ( 저장방법 : cat [ 개인키

PowerPoint 프레젠테이션

1217 WebTrafMon II

4. CSR 값확인. (vi csr.pem) CSR(Certificate Signing Request) 즉, 인증서서명요청입니다. 이는자신이설치할웹서버에서 DN 값, 각종정보를암호화한파일로써 한국전자인증 신청란에서붙여넣으면됩니다. 인증서설치 1. 직접 CSR 및 KEY

취약점 대응방안권고 ( 월 ) / KISA 취약점분석팀 ( 수 ) OpenSSL 취약점 FAQ 추가 개요 통신구간암호화를위해많이사용하는 라이브러리에서서버에저장된중요메모리데이터가노출되는 라고명명된심각한버그가발견되어시스템및소프트웨어에대한신속한취약

ApacheWebServer.hwp

BEA_WebLogic.hwp

Network seminar.key

bn2019_2

#HNS-WI CVE 버그분석 Heartbleed Bug v.01 ( 공개용 )

WebtoB.hwp

<C0CCBCBCBFB52DC1A4B4EBBFF82DBCAEBBE7B3EDB9AE2D D382E687770>

LXR 설치 및 사용법.doc

슬라이드 1

Subnet Address Internet Network G Network Network class B networ

1. efolder 시스템구성 A. DB B. apache - mod-perl - PHP C. SphinxSearch ( 검색서비스 ) D. File Storage 2. efolder 설치순서 A. DB (MySQL) B. efolder Service - efolder

SMB_ICMP_UDP(huichang).PDF

SSL Strip Attack JAC (SemiDntmd) 이우승 semidntmd.tistory.com

Apache install guide

4. CSR 값확인. (vi csr.pem) CSR(Certificate Signing Request) 즉, 인증서서명요청입니다. 이는자신이설치할웹서버에서 DN 값, 각종정보를암호화한파일로써 한국전자인증 신청란에서붙여넣으면됩니다. 인증서설치 1. 직접 CSR 및 KEY

Remote UI Guide

PowerPoint 프레젠테이션

Microsoft Word - SSL_apache.doc

Sena Device Server Serial/IP TM Version

Apache( 단일도메인 ) SSL 인증서신규설치가이드 본문서는주식회사한국기업보안에서 SSL 보안서버인증서설치를위해작성된문서로 주식회사한국기업보안의동의없이무단으로사용하실수없습니다. [ 고객센터 ] 한국기업보안. 유서트기술팀 Copyright 201

Apache( 멀티도메인 ) SSL 인증서신규설치가이드 본문서는주식회사한국기업보안에서 SSL 보안서버인증서설치를위해작성된문서로 주식회사한국기업보안의동의없이무단으로사용하실수없습니다. [ 고객센터 ] 한국기업보안. 유서트기술팀 Copyright 201

목차 1. 사전준비 mod_ssl OpenSSL 인증서파일 2. 주의사항 신규및갱신구분 CSR 직접생성여부 3. 인증서설치 httpd.conf 설정 httpd-ssl.conf 설정 갱신설치 서비스재시작 4. 확인및테스트 서비스구동확인 네트워크상태확인 방화벽확인 실제브라

Apache 설치방법보기 Apache 웹서버에 SSL 를적용하기위해아래두항목이웹서버에설치되어있어야합니다. - Openssl 암호화라이브러리 - Mod_ssl 모듈 위두항목이웹서버에설치되어있다면개인키를생성하고생성된개인키를바탕으로 CSR 파일을생성합니다. 생성된 CSR 파

Apache( 단일도메인 ) SSL 인증서신규설치가이드 본문서는주식회사한국기업보안에서 SSL 보안서버인증서설치를위해작성된문서로 주식회사한국기업보안의동의없이무단으로사용하실수없습니다. [ 고객센터 ] 한국기업보안. 유서트기술팀 Copyright 201

歯규격(안).PDF

TCP.IP.ppt

Apache( 단일도메인 ) SSL 인증서갱신설치가이드 본문서는주식회사한국기업보안에서 SSL 보안서버인증서설치를위해작성된문서로 주식회사한국기업보안의동의없이무단으로사용하실수없습니다. [ 고객센터 ] 한국기업보안. 유서트기술팀 Copyright 201

Tomcat 4.x 웹서버에 J2SE 를설치를확인합니다. java -version java version "1.4.2_05" Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.2_05-b04) Java HotSp

PowerPoint 프레젠테이션

The Pocket Guide to TCP/IP Sockets: C Version

개정이력 버전 개정일 개정내용 Ver 년 5월 Apache Web Server SSL 설명서최초작성 Ver 년 1월 인증서갱신방법, 다중 SSL 서버설정방법추가 Ver 년 12월 암호체계고도화관련키길이변경 (2,048bit)

< FC8A8C6E4C0CCC1F620B0B3B9DF20BAB8BEC8B0A1C0CCB5E5C3D6C1BE28C0FAC0DBB1C7BBE8C1A6292E687770>

Apache( 멀티도메인 ) SSL 인증서신규설치가이드 본문서는주식회사한국기업보안에서 SSL 보안서버인증서설치를위해작성된문서로 주식회사한국기업보안의동의없이무단으로사용하실수없습니다. [ 고객센터 ] 한국기업보안. 유서트기술팀 Copyright 201

PWR PWR HDD HDD USB USB Quick Network Setup Guide xdsl/cable Modem PC DVR 1~3 1.. DVR DVR IP xdsl Cable xdsl Cable PC PC DDNS (

PowerPoint 프레젠테이션

1. 발급받으신인증서를해당서버폴더에업로드또는저장합니다. 설명 : [$Apache] = Apache 디렉토리. 소스버전의경우 Apache]# mkdir conf/ssl Apache]# cp

[SHA-2] HASH 함수 중의 하나로, HASH는 임의의 길이의 데이터를 입력 받아 고정된 길이의 데이터(해시 값)로 출력합니다. 동일한 데이터인 경우 동일한 해시 값을 갖는다. 에 기초하여 메시지 무결성(오류/변조 탐지)을 확인하기 위하여 사용됩 니다. 하지만 서

28 THE ASIAN JOURNAL OF TEX [2] ko.tex [5]

1. 발급받으신인증서를해당 SSL 폴더에업로드또는저장합니다. Apache source 및 package 구분아파치경로확인명령어 : ps ef grep httpd -source: /usr/local/apache [ 경로및 apache이름은상이할수있음 ] -> 확인경로에설

Apache( 멀티도메인 ) SSL 인증서신규설치가이드 본문서는주식회사한국기업보안에서 SSL 보안서버인증서설치를위해작성된문서로 주식회사한국기업보안의동의없이무단으로사용하실수없습니다. [ 고객센터 ] 한국기업보안. 유서트기술팀 Copyright 201

Apache( 단일도메인 ) SSL 인증서갱신설치가이드 본문서는주식회사한국기업보안에서 SSL 보안서버인증서설치를위해작성된문서로 주식회사한국기업보안의동의없이무단으로사용하실수없습니다. [ 고객센터 ] 한국기업보안. 유서트기술팀 Copyright 201

Microsoft PowerPoint - L4-7Switch기본교육자료.ppt


Microsoft Word - KPMC-400,401 SW 사용 설명서

PowerPoint 프레젠테이션

제20회_해킹방지워크샵_(이재석)

Snort Install Manual Ad2m VMware libnet tar.gz DebianOS libpcap tar.gz Putty snort tar.gz WinSCP snort rules 1. 첫번째로네트워크설정 1) ifconf

Microsoft Word - ntasFrameBuilderInstallGuide2.5.doc

Apache( 멀티도메인 ) SSL 인증서갱신설치가이드 본문서는주식회사한국기업보안에서 SSL 보안서버인증서설치를위해작성된문서로 주식회사한국기업보안의동의없이무단으로사용하실수없습니다. [ 고객센터 ] 한국기업보안. 유서트기술팀 Copyright 201

리눅스 취약점대응방안권고 / KISA 취약점점검팀 영향받는플랫폼 OS, FAQ 추가 개요 미국보안회사 에의해 시스템의 라이브러리 의특정함수에서임의코드를실행할수있는취약점이공개 해당취약점은 CVE 지정, 도메인네임을

<4D F736F F F696E74202D20C6AEB7A2315F33335FC7C3B6F3C0CCC7CFC0CC20B1E8B1E2BFB5B4EBC7A55F BFCFC0FCC1A4BAB95F E >

기술교육 SSL 설정및변환방법

Tomcat.hwp

TTA Verified : HomeGateway :, : (NEtwork Testing Team)

본문서는 초급자들을 대상으로 최대한 쉽게 작성하였습니다. 본문서에서는 설치방법만 기술했으며 자세한 설정방법은 검색을 통하시기 바랍니다. 1. 설치개요 워드프레스는 블로그 형태의 홈페이지를 빠르게 만들수 있게 해 주는 프로그램입니다. 다양한 기능을 하는 플러그인과 디자인

슬라이드 1

RHEV 2.2 인증서 만료 확인 및 갱신

T100MD+

PowerPoint 프레젠테이션

CD-RW_Advanced.PDF

Apache를 이용한 CSR 생성방법

일반적인 네트워크의 구성은 다음과 같다

PowerPoint 프레젠테이션

USB USB DV25 DV25 REC SRN-475S REC SRN-475S LAN POWER LAN POWER Quick Network Setup Guide xdsl/cable Modem PC DVR 1~3 1.. DVR DVR IP xdsl Cable xdsl C

Citrix Workload Balancing 2.1 설치 가이드

<31332DB9E9C6AEB7A2C7D8C5B72D3131C0E528BACEB7CF292E687770>

[ 네트워크 1] 3 주차 1 차시. IPv4 주소클래스 3 주차 1 차시 IPv4 주소클래스 학습목표 1. IP 헤더필드의구성을파악하고요약하여설명할수있다. 2. Subnet ID 및 Subnet Mask 를설명할수있고, 각클래스의사용가능한호스트수와사설 IP 주소및네트

Install stm32cubemx and st-link utility

초기설정 WebtoB Web Server 에서인증서를사용하기위해 CSR 을생성하는방법입니다. 1. 초기설정 - CSR 을생성하기전에다음의몇가지사항을필히확인합니다. 부팅후 Path 나환경변수를일일이설정하지않게초기설정파일을사용하여로그인시자동으로실행되도록하고있습니다. 그러나

ìœ€íŁ´IP( _0219).xlsx

Microsoft PowerPoint - 04-UDP Programming.ppt

(Asynchronous Mode) ( 1, 5~8, 1~2) & (Parity) 1 ; * S erial Port (BIOS INT 14H) - 1 -


ARMBOOT 1

PowerPoint Template

Microsoft Word doc

시스코 무선랜 설치운영 매뉴얼(AP1200s_v1.1)

untitled

6주차.key

SSL인증서 설치 매뉴얼 (Apache)

FileMaker 15 WebDirect 설명서

API STORE 키발급및 API 사용가이드 Document Information 문서명 : API STORE 언어별 Client 사용가이드작성자 : 작성일 : 업무영역 : 버전 : 1 st Draft. 서브시스템 : 문서번호 : 단계 : Docum

chapter1,2.doc

Microsoft PowerPoint - 6.pptx

Solaris Express Developer Edition

Chapter11OSPF

UDP Flooding Attack 공격과 방어

K&R2 Reference Manual 번역본

Analytics > Log & Crash Search > Unity ios SDK [Deprecated] Log & Crash Unity ios SDK. TOAST SDK. Log & Crash Unity SDK Log & Crash Search. Log & Cras

Transcription:

HeartBleed 지용빈

목차 1) 개요 -------------------------------------------------- 2) HTTPS & SSL---------------------------------------- 3) HeartBleed 란?--------------------------------------- 4) HeartBleed 의원리 ---------------------------------- 5) 소스코드 --------------------------------------------- 6) 실습 -------------------------------------------------- 7) 대응방안 --------------------------------------------- 2

1. 개요 이문서는 2014년 4월에발표된 CVE-2014-0160 통칭 'HeartBleed' 취약점에대한실습과원리에대해서술한문서로서이해를돕기위해 PPT와같이제작되었습니다. 사실영어문서찾다가지쳐서필자가만듬. HeartBleed 취약점을웹에서점검할수있도록 https://filippo.io/heartbleed/ 에서취약점점검을할수있습니다. 또한 http://heartbleed.com/ 에서별도로정보를제공하고있습니다. 2. HTTPS & SSL 일반적인 HTTP 는 80번포트를이용하여통신을하게됩니다. 그러나 HTTP 는암호화가되어있지않기때문에보안에있어서는좀더취약합니다. 그래서보안이좀더요구되는인터넷뱅킹같은업무를할때는 HTTPS 가사용됩니다. HTTPS 란일반적인 HTTP 통신을 SSL이란암호화프로토콜로암호화한것입니다. SSL(Secure Socket Layer) 중에서가장널리쓰이는것은 OpenSSL이란암호화방식으로오픈소스환경에서개발되었습니다. SSL의정식적인이름은 TLS(Transport Layer Security) 로서 Server와 Client 사이의통신보안을위한프로토콜로서개발되었습니다. 3. HeartBleed 란? HeartBleed 란이름이붙은이유는이취약점이 OpenSSL의 TLS/DTLS HeartBeat Extension 코드에서문제가발생하였는데처음 HeartBleed 를발표한회사인 Codenomicon 에서피를흘리는하트모양의이미지를처음으로사용해서입니다. HeartBleed 는 OpenSSL 1.0.1 ~ 1.0.1f 그리고 1.0.2-beta1 버전에서발견된취약점으로 OpenSSL에서 TLS/DTLS 구현이미숙한점을이용한것으로 HeartBeat 프로토콜의패킷조작만으로 Sever의메모리에서최대 64kb의민감한정보를누출시킬수있습니다. 현재취약한버전을탑재한운영체제의목록입니다. Debian Wheezy (stable), OpenSSL 1.0.1e-2+deb7u4 Ubuntu 12.04.4 LTS, OpenSSL 1.0.1-4ubuntu5.11 CentOS 6.5, OpenSSL 1.0.1e-15 Fedora 18, OpenSSL 1.0.1e-4 OpenBSD 5.3 (OpenSSL 1.0.1c 10 May 2012) & 5.4 (OpenSSL 1.0.1c 10 May 2012) FreeBSD 10.0 - OpenSSL 1.0.1e 11 Feb 2013 NetBSD 5.0.2 (OpenSSL 1.0.1e) OpenSUSE 12.2 (OpenSSL 1.0.1c) 3

4. HeartBleed 의원리 HeartBleed 취약점은 TLS extension Library 인 HeartBeat 프로토콜에서발견되었습니다. HeartBeat 프로토콜은 Server와 Client의연결을유지하기위해일정신호를주고받는 OpenSSL 확장프로토콜입니다. 이렇게 Client가 HeartBeat Request 를 Server 에날리게되면 Server는 Client에게 HeartBeat Response 를날리게됩니다. 이 HeartBeat 프로토콜의 Packet 을뜯어보면이렇게 4가지구조를이루고있습니다. 4

먼저 Type은날아온패킷이 Response 인지 Request 인지를판단하는정보가들어있습니다. payload_length 에는 payload 의길이값이들어있고 payload 에는가변적인길이의문자열이들어가게됩니다. padding 에는 16Byte 의랜덤문자열이들어가게됩니다. 그리고이렇게날아온 Request 와 Response 패킷은 payload_length 와 payload 의값과길이가같아야지만이서로살아있다고판단하고연결을유지하게됩니다. 이게 HeartBeat 프로토콜의기본적인원리입니다. HearBeat Request 의데이터구조체입니다. 5. Source Code 문제가된 HeartBeat 프로토콜의핵심코드입니다. 설명을위하여빨간색으로주석을달아놓았습니다. #ifndef OPENSSL_NO_HEARTBEATS int tls1_process_heartbeat(ssl *s). unsigned char *p = &s->s3->rrec.data[0], *pl; unsigned short hbtype; unsigned int payload; unsigned int padding = 16; /* Use minimum padding */ /* Read type and payload length first * HeartBeatRequest 구조체선언 5

hbtype = *p++; n2s(p, payload); Request 패킷의데이터에서 payload의길이만큼저장 pl = p; if (s->msg_callback) s->msg_callback(0, s->version, TLS1_RT_HEARTBEAT, &s->s3->rrec.data[0], s->s3->rrec.length, s, s->msg_callback_arg); if (hbtype == TLS1_HB_REQUEST) unsigned char *buffer, *bp; int r; /* Allocate memory for the response, size is 1 bytes * message type, plus 2 bytes payload length, plus * payload, plus padding */ buffer = OPENSSL_malloc(1 + 2 + payload + padding); bp = buffer; /* Enter response type, length and copy payload */ *bp++ = TLS1_HB_RESPONSE; Response 패킷의크기만큼메모리를확보합니다. s2n(payload, bp); memcpy(bp, pl, payload); 이때 memcpy라는함수가문제를일으켰습니다. 바로 payload 의실제크기를비교하지않는다는점입니다. 만약 hello라는 payload 가서버의메모리상에저장되있을때 length값은 5byte 여야합니다. 근데만약 length값을 10byte 라고속이게된다면서버의메모리상에서 hello라는 5byte 외에도서버의메모리에있는나머지 5byte 의정보를전송하게됩니다. bp += payload; /* Random padding */ RAND_pseudo_bytes(bp, padding); r = ssl3_write_bytes(s, TLS1_RT_HEARTBEAT, buffer, 3 + payload + padding); 6

정상적인 HeartBeat 프로토콜의구조입니다. HeartBleed 공격의원리입니다. 7

이렇게유출된정보는중에는서버의민감정보들이포함될가능성이있습니다. 실제로야후는 HeartBleed 취약점발표직후에실제한해커에게공격을당해한사용자의아이디와패 스워드가노출되는것이확인되었습니다. 6. 실습환경 Ubuntu 12.04 OpenSSL 1.0.1 CVE-2014-0160 https://github.com/sensepost/heartbleed-poc 취약한 OpenSSL 버전이탑재된 Ubuntu 12.04 를사용했습니다. SSL 묘듈을설치하기전에먼저웹서버가설치되어야합니다. 8

OpenSSL 을사용하기위해서는먼저인증서를발급해야합니다. 먼저 SSL 모듈을추가합니다. root@tempus:/home/tempus# a2enmod ssl root@tempus:/home/tempus# service apache2 restart root@tempus:/home/tempus# mkdir /etc/apache2/ssl 그리고 SSL 인증서를발급합니다. root@tempus:/etc/apache2/ssl# openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/apache2/ssl/webserver.key -out /etc/apache2/ssl/webserver.crt Generating a 2048 bit RSA private key...+++...+++ writing new private key to '/etc/apache2/ssl/webserver.key' ----- You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Country Name (2 letter code) [AU]:KO State or Province Name (full name) [Some-State]:Seoul Locality Name (eg, city) []:Seoul Organization Name (eg, company) [Internet Widgits Pty Ltd]:Tempus 9

Organizational Unit Name (eg, section) []:Education Common Name (e.g. server FQDN or YOUR name) []:Tempus Email Address []:ben3679@naver.com root@tempus:/home/tempus# ifconfig eth0 eth0 Link encap:ethernet HWaddr 00:0c:29:48:ed:58 inet addr:192.168.106.128 Bcast::192.168.27.255 Mask:255.255.255.0 inet6 addr: fe80::20c:29ff:fe48:ed58/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:10289 errors:0 dropped:0 overruns:0 frame:0 TX packets:7061 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:3496929 (3.4 MB) TX bytes:1605943 (1.6 MB) Interrupt:19 Base address:0x2024 설정파일의 ServerName을서버의 IP로설정해주고 root@tempus:/home/tempus# vi /etc/apache2/sites-available/default-ssl 1 <IfModule mod_ssl.c> 2 <VirtualHost _default_:443> 3 ServerAdmin webmaster@localhost 4 ServerName 192.168.106.128 5................. # SSL Engine Switch: 10

44 # Enable/Disable SSL for this virtual host. 45 SSLEngine on 46 47 # A self-signed (snakeoil) certificate can be created by installing 48 # the ssl-cert package. See 49 # /usr/share/doc/apache2.2-common/readme.debian.gz for more info. 50 # If both key and certificate are stored in the same file, only the 51 # SSLCertificateFile directive is needed. 52 SSLCertificateFile /etc/apache2/ssl/webserver.crt 53 SSLCertificateKeyFile /etc/apache2/ssl/webserver.key SSL 인증서가있는디렉토리로바꿔줍니다. root@tempus:/home/tempus# a2ensite default-ssl root@tempus:/home/tempus# service apache2 restart 이제취약한 OpenSSL 1.0.1 버전이탑재된웹서버를완성했습니다. 이화면이뜨면은 I Understand the Risks 를눌러주시면됩니다. 11

설치한환경이 HeartBeat 프로토콜이활성화되어있는지확인합니다. root@tempus:/home/tempus# openssl s_client -connect 192.168.106.128:443 -tlsextdebug -debug -state grep -i heartbeat SSL_connect:before/connect initialization SSL_connect:unknown state TLS server extension "heartbeat" (id=15), len=1 SSL_connect:SSLv3 read server hello A depth=0 C = KO, ST = Seoul, L = Seoul, O = Tempus, OU = Education, CN = Tempus, emailaddress = ben3679@naver.com verify error:num=18:self signed certificate verify return:1 depth=0 C = KO, ST = Seoul, L = Seoul, O = Tempus, OU = Education, CN = Tempus, emailaddress = ben3679@naver.com verify return:1 SSL_connect:SSLv3 read server certificate A 12

SSL_connect:SSLv3 read server key exchange A SSL_connect:SSLv3 read server done A SSL_connect:SSLv3 write client key exchange A SSL_connect:SSLv3 write change cipher spec A SSL_connect:SSLv3 write finished A SSL_connect:SSLv3 flush data SSL_connect:SSLv3 read server session ticket A SSL_connect:SSLv3 read finished A SSL3 alert read:warning:close notify SSL3 alert write:warning:close notify HeartBeat 라는문자열이검색된다면 HeartBeat 프로토콜이활성화되어있는걸확인할수있습니다. GitHub 에공개되어있는 CVE-2014-0160 POC 코드를이용하여서버에테스트를합니다. root@tempus:/home/tempus/ 바탕화면 /CVE-2014-0160-master# python heartbleed-poc.py -n10 -f dump 192.168.106.129 위처럼서버의메모리내에있는정보가유출되고있다는걸확인할수있습니다. 13

7. 대응방안 HeartBleed 취약점을방지하려면 OpenSSL 을 1.0.1g 이상버전으로업데이트를해줘야합니다. Centos/Fedora 계열 yum update sudo pacman -Syu Ubuntu 계열 sudo apt-get update sudo apt-get dist-upgrade sudo apt-get install --only-upgrade openssl sudo apt-get install --only-upgrade libssl1.0.0 14