시스템관리자의 쉼터 커피닉스 커피향이 나는 *NIX
커피닉스
시스템/네트웍/보안을 다루는 곳
 FAQFAQ   검색검색   멤버리스트멤버리스트   사용자 그룹사용자 그룹   사용자 등록하기사용자 등록하기 
 개인 정보개인 정보   비공개 메시지를 확인하려면 로그인하십시오비공개 메시지를 확인하려면 로그인하십시오   로그인로그인 

가입없이 누구나 글을 쓸 수 있습니다. 공지사항에 대한 댓글까지도..




BBS >> 설치, 운영 Q&A | 네트웍, 보안 Q&A | 일반 Q&A || 정보마당 | AWS || 자유게시판 | 구인구직 || 공지사항 | 의견제시
OpenSSL 취약점 정리, Logjam(로그잼)에서 Heartbleed까지

 
글 쓰기   답변 달기    커피닉스, 시스템 엔지니어의 쉼터 게시판 인덱스 -> *NIX / IT 정보
이전 주제 보기 :: 다음 주제 보기  
글쓴이 메시지
truefeel
카페 관리자


가입: 2003년 7월 24일
올린 글: 1277
위치: 대한민국

올리기올려짐: 2015.6.16 화, 4:40 pm    주제: OpenSSL 취약점 정리, Logjam(로그잼)에서 Heartbleed까지 인용과 함께 답변

OpenSSL취약점이 작년부터 무더기로 쏟아지고 있습니다. 징그러울 정도죠. 처음에 한두개 나올 때는 취약점명과 그 취약점이 어떤 것인지 연결이 되어었는데, 점점 늘어나다보니 헷갈립니다. 그래서 Heartbleed 취약점, POODLE 취약점, FREAK 취약점 얼마전에 나온 Logjam 취약점까지 간단히 정리해봤습니다.
취약점 여부를 체크할 수 있는 방법을 별도로 적었습니다.



1. OpenSSL Logjam 취약점 (2015.5.)


TLS프로토콜의 취약점으로 공격자가 임시 Diffie-Hellman 키 교환(Diffie-Hellman key exchange)을 사용하여 TLS연결을 512비트 수출등급 암호화로 다운그레이드할 수 있다.

OpenSSL 1.0.2 : 패치된 버전 1.0.2b이상
OpenSSL 1.0.1 : 패치된 버전 1.0.1n이상

OpenSSL 1.0.1과 1.0.2대의 버전별 해결책을 보면.
- 1.0.1과 1.0.2 : DH 파라미터가 768비트보다 짧다면 handshake를 거부하도록 TLS클라이언트에 대한 보호 기능을 추가했다.
- 1.0.2b이상, 1.0.1n이상 : 위 제한을 1024비트까지 증가했다.
- 1.0.1m이상, 1.0.2a이상 : EXPORT cipher suite(즉, 수출등급 암호)를 기본적으로 disable했다.

인용:

1) 취약점 여부 확인하기
반드시 openssl 1.0.2 client를 사용해야 Server Temp Key: 값을 볼 수 있다. Server Temp Key: 값이 1024비트거나 이하이면 2048비트 DH parameter를 생성한다. (1024비트가 반드시 취약하다는 것은 아니고, 반대로 안전한 것도 아니다. 오늘날 같이 PC 연산기능이 좋은 경우 1024비트 암호를 빠른 시간내에 풀 수 있다는 것임. 그래서 2048비트를 권장)

$ openssl s_client -connect 서버:433 - cipher EDH

2) apache 설정
$ openssl dhparam -out dhparam.pem 2048

생성된 DH parameter를 SSLCertificateFile 에 적힌 파일 맨뒤에 붙인다.
cat dhparam.pem >> /path/to/sslcertfile

그런데, apache 2.4.7이전 버전은 DH parameter가 항상 1024비트로 셋팅되어 있고, 사용자가 이를 바꿀 수 없다.
RHEL 6(CentOS 6)의 apache 2.2버전은 2.4.7것을 백포팅해서 셋팅이 가능하다.

3) nginx 설정
$ openssl dhparam -out dhparam.pem 2048

nginx.conf에 다음 추가
ssl_dhparam /path/to/dhparam.pem;


자세한 정보는 다음 글을.
https://www.openssl.org/blog/blog/2015/05/20/logjam-freak-upcoming-changes/
http://www.openssl.org/news/secadv_20150611.txt
https://access.redhat.com/ko/articles/1480443 (한글)

웹서버 설정과 관련에서는 Guide to Deploying Diffie-Hellman for TLS ( https://weakdh.org/sysadmin.html )글이 가장 정리가 잘 된 것 같다.


2. OpenSSL FREAK 취약점 (2015.3.)

과거 미국은 암호화 기술에 대해 해외 수출을 제한했다. 그래서 해외에 암호화 기술을 수출하려면 낮은 수준인 512비트 암호화(RSA EXPORT)만 사용할 수 있었다. 이후 2000년에 미국은 이 수출제한을 없앴다.

현재는 2048비트 이상의 암호화 키를 많이 사용한다. 그런데, 수출제한이 없어진지 10여년이 지났는데도 OpenSSL에 수출등급 암호화 기능이 그대로 남아있었다. FREAK(Factoring attack on RSA-EXPORT Keys)라고 불리는 취약점은 공격자가 512비트의 낮은 수준의 수출등급 암호를 요청할 수가 있다.

OpenSSL 1.0.1 : 패치된 버전 1.0.1k
OpenSSL 1.0.0 : 패치된 버전 1.0.0p
OpenSSL 0.9.8 : 패치된 버전 0.9.8zd

인용:

1) 취약점 여부 확인하기
$ openssl s_client -connect 서버:433 - cipher EXPORT

2) apache 설정 : SSLCipherSuite 에 !EXP 또는 !EXPORT를 추가한다.
(예) SSLCipherSuite HIGH:!aNULL:!MD5:!EXP

3) nginx 설정 : !EXPORT를 추가한다.
(예) ssl_ciphers HIGH:!aNULL:!MD5:!EXPORT;



3. OpenSSL POODLE 취약점 (SSLv3 취약점, 2014.10.)

POODLE(Padding Oracle On Downgraded Legacy Encryption)이라고 불리는 취약점은 SSL 3.0 버전에 존재하는 취약점이다. 공격자가 패딩 오라클 공격(이게 뭔지 모름)을 하여 암호화 통신을 해독할 수 있다.

Poodle 취약점은 프로토콜 자체 결함이 아니라 구현상의 문제여서 패치가 아닌 설정 변경으로 해결한다. SSL v3만 해당되고 TLS은 취약하지 않다. 따라서 SSL v3를 사용하지 않도록 설정해주면 된다.

인용:

1) 취약점 여부 확인하기
$ openssl s_client -connect 서버:443 -ssl2 (-ssl2 옵션은 지원하지 않을 수 있음)
$ openssl s_client -connect 서버:443 -ssl3

2) apache 설정 : SSLProtocol에서 -SSLv3를 추가한다.
(예) SSLProtocol all -SSLv2 -SSLv3

3) nginx 설정 : TLS만 허용
(예) ssl_protocols TLSv1.2 TLSv1.1 TLSv1;


자세한 정보는 다음 글을.
https://access.redhat.com/ko/node/1256013 (한글)


4. OpenSSL Heartbleed 취약점 (2014.4.)

OpenSSL 1.0.1버전에 TLS heartbeat 취약점(일명 Heartbleed Bug라고 부름. CVE-2014-0160, openssl: information disclosure in handling of TLS heartbeat extension packets)이 있다. 공격자가 https서버의 메모리 64KB 데이터를 볼 수 있다. 메모리에는 https서버와 유저간에 주고 받은 데이터들(ID/PW, ... 등의 정보)이 있는데, 공격자는 plain text형태로 볼 수 있다. 그리고,SSL 개인키를 얻을 수.

자세한 정보는 다음 글을.
http://coffeenix.net/bbs/viewtopic.php?t=8239


------------------------------------------------------------------------------------------------------------
5. openssl 명령으로 간단히 취약점 여부 체크

※ 참고 : openssl로 인증서 정보 살펴보기 (2008.12.)

1-1) SSLv3가 허용된 경우

코드:

$ openssl s_client -connect 서버:443 -ssl3
CONNECTED(00000003)
depth=1 C = IL, O = StartCom Ltd., OU = Secure Digital Certificate Signing, CN = StartCom Class 1 Primary Intermediate Server CA
verify error:num=20:unable to get local issuer certificate
verify return:0
---
Certificate chain
...생략...
SSL-Session:
    Protocol  : SSLv3
    Cipher    : DHE-RSA-AES256-SHA <-- SSLv3 지원하는 경우.


1-2) SSLv3가 허용되지 않은 경우 (안전)

코드:

$ openssl s_client -connect 서버:443 -ssl3
CONNECTED(00000003)
140289569347264:error:14094410:SSL routines:SSL3_READ_BYTES:sslv3 alert handshake failure:s3_pkt.c:1256:SSL alert number 40
140289569347264:error:1409E0E5:SSL routines:SSL3_WRITE_BYTES:ssl handshake failure:s3_pkt.c:596:
---
no peer certificate available
---
No client certificate CA names sent
---
SSL handshake has read 7 bytes and written 0 bytes
---
New, (NONE), Cipher is (NONE)
Secure Renegotiation IS NOT supported
Compression: NONE
Expansion: NONE
SSL-Session:
    Protocol  : SSLv3
    Cipher    : 0000 <-- SSLv3 지원하지 않음.


2-1) 수출용 암호화가 허용된 경우 (인증서 정보가 표시됨. 보안상 취약)

코드:

$ openssl s_client -connect 서버:443 -cipher EXPORT
CONNECTED(00000003)
depth=2 C = US, O = "VeriSign, Inc.", OU = VeriSign Trust Network, ... 생략 ...
verify error:num=20:unable to get local issuer certificate
verify return:0
---
Certificate chain
...생략...
SSL handshake has read 4798 bytes and written 201 bytes


2-3) 수출용 암호화가 허용되지 않는 경우 (안전)

코드:

$ openssl s_client -connect 서버:443 -cipher EXPORT
CONNECTED(00000003)
139768004437696:error:14077410:SSL routines:SSL23_GET_SERVER_HELLO:sslv3 alert handshake failure:s23_clnt.c:741:
---
no peer certificate available
---
No client certificate CA names sent
---
SSL handshake has read 7 bytes and written 75 bytes
---
New, (NONE), Cipher is (NONE)
Secure Renegotiation IS NOT supported
Compression: NONE
Expansion: NONE
---


3-1) logjam에 취약한 경우 (반드시 openssl 1.0.2 client로 테스트해야 Server Temp Key: 값을 확인할 수 있다)

코드:

$ openssl s_client -connect 서버:443 -cipher EDH
... 생략 ...
Server Temp Key: DH, 1024 bits <--- 1024비트이거나 낮다면 2048비트 DH parameter를 사용하도록 셋팅한다.

SSL-Session:
    Protocol  : TLSv1
    Cipher    : DHE-RSA-AES256-SHA
... 생략 ...


3-2) logjam 취약점에 안전한 경우

코드:

$ openssl s_client -connect 서버:443 -cipher EDH
CONNECTED(00000003)
139828320765632:error:14077410:SSL routines:SSL23_GET_SERVER_HELLO:sslv3 alert handshake failure:s23_clnt.c:769:
---
no peer certificate available
---
No client certificate CA names sent
---
SSL handshake has read 7 bytes and written 145 bytes
---
New, (NONE), Cipher is (NONE)
Secure Renegotiation IS NOT supported
Compression: NONE
Expansion: NONE
No ALPN negotiated
---
위로
사용자 정보 보기 비밀 메시지 보내기 글 올린이의 웹사이트 방문
이전 글 표시:   
글 쓰기   답변 달기    커피닉스, 시스템 엔지니어의 쉼터 게시판 인덱스 -> *NIX / IT 정보 시간대: GMT + 9 시간(한국)
페이지 11

 
건너뛰기:  
새로운 주제를 올릴 수 있습니다
답글을 올릴 수 있습니다
주제를 수정할 수 없습니다
올린 글을 삭제할 수 없습니다
투표를 할 수 없습니다


Powered by phpBB © 2001, 2005 phpBB Group