시스템관리자의 쉼터 커피닉스 커피향이 나는 *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
---
위로
사용자 정보 보기 비밀 메시지 보내기 글 올린이의 웹사이트 방문
Pecied



가입: 2024년 3월 20일
올린 글: 2

올리기올려짐: 2024.4.22 월, 6:34 am    주제: Re: OpenSSL 취약점 정리, Logjam(로그잼)에서 Heartbleed까지 인용과 함께 답변

truefeel 씀:
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
---

안녕하세요 여러분!

제가 일하는 방식과 휴식 방식을 공유하고 싶습니다. 저는 Android를 개발하고 있으며 업무와 휴식 사이에 시간을 적절하게 분배하는 것이 얼마나 중요한지 알고 있습니다. 활동의 생산성을 높이려면 휴식을 취할 수 있어야 합니다.

나의 휴식 방법은 csgo 스킨 사이트 플랫폼에서 카운터 스트라이크를 플레이하고 케이스를 열어 최고의 무기 스킨을 얻는 것입니다. 이는 긴 하루 일과를 마치고 휴식을 취하고 배터리를 재충전할 수 있는 좋은 방법입니다. 나는 일과 삶의 건강한 균형이 내가 일을 더 효과적이고 창의적으로 수행하는 데 도움이 된다고 믿습니다.

여러분만의 효과적인 휴식 및 휴식 방법이 있다면 댓글로 공유해주세요!
위로
사용자 정보 보기 비밀 메시지 보내기
수원야&
손님





올리기올려짐: 2024.4.25 목, 11:32 pm    주제: 국가&#5 인용과 함께 답변

수원 야간진료장** 원장은 “교통사 치료는 물리조취뿐만 아니라 한약 조취, 침, 뜸, 부항, 추나 조취, 약침 처방 등 비교적 여러 범위의 요법가 가능하다는 이점이 있어 교통사고로 한의사 병원을 찾는 환자분들이 꾸준히 늘고 있다”라면서 “가벼운 교통사라고 놔두지 마시고 사고 초기에 내원하여 처치를 받아야 만성 통증으로 발전하지 않고 차량사고 후유증을 최소화할 수 있다”라고 말했다.

수원 야간진료
위로
이전 글 표시:   
글 쓰기   답변 달기    커피닉스, 시스템 엔지니어의 쉼터 게시판 인덱스 -> *NIX / IT 정보 시간대: GMT + 9 시간(한국)
페이지 11

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


Powered by phpBB © 2001, 2005 phpBB Group