티스토리 뷰

728x90
반응형

이번 포스팅에서는 Web Server SSL 취약점으로 분석되는 디피 헬만 키에 대해 살펴보겠습니다.


 

1. 디피 헬만 키 취약점 분석


디피 헬만(Diffie-Hellman) 키 교환 프로토콜을 사용하는 TLS 연결에 취약점이 발견되었습니다.

바로 Logjam이라는 TLS 취약점인데요.

상세한 사항은 위 논문을 참고하시구요.

대략적인 이야기만 하자면, 취약한 DHE 연결의 오프라인 암호 해독이 가능하거나, DHE_EXPORT 다운그레이드(의도적으로 512로 다운그레이드) 및 TLS False Start 확장 오프라인 해독 공격, DHE_EXPORT 다운그레이드 및 중간자가 서버 자격을 변경하는 등의 공격 시나리오를 갖을 수 있습니다.

이를 통해 암호화 된 통신을 해독하여 도감청이 가능해집니다.

NSA에서는 약 3000개의 CPU로 1024bit의 암호화 된 연결을 해독해 낼 수 있다고 하는데요.

이를 해결하기 위해서는 다음과 같은 방법이 제시됩니다.

1) OpenSSL 버전 업데이트

OpenSSL 1.0.2b 이상 1.0.1n 이상이면 관련 취약점을 회피 할 수 있습니다.
기존 DH 파라미터가 768비트보다 짧다면 handshake를 거부하도록 하던 TLS클라이언트에 대한 보호 기능이 1024비트로 증가했기 때문입니다.

2) ECDHE(Elliptic-Curve Hellman) 사용

현존하는 실현 가능하다고 알려진 모든 암호 해독학적 공격을 우회할 수 있는 교환방식으로 알려져 있습니다. 따라서 웹 브라우저들은 ECDHE 방식을 더욱 선호합니다.

3) Diffie-Hellman 키 Size 변경

디피 헬만 키를 사용해야 할 경우 기존 사용하던 512, 1024 비트를 넘어선 2048 비트 이상으로 생성하고, 새롭고 고유한 방법의 그룹을 생성해야 합니다.

# 주의 사항

Diffie-Hellman 키의 사이즈를 변경하기 위해서는 JDK 버전을 확인해야 합니다. JDK 1.7부터 2048 비트를 지원하여 출발지와 도착지의 지원 스펙이 다를 경우 SSLHandShakeException을 발생 시킬 수 있습니다.

참고로 Apache의 경우 2.4 버전 이상에서 2048 비트를 지원합니다.

4) Diffie-Hellman 수출용 Cipher Suite를 사용하지 않는다.

2. 주요 웹서버 적용 가이드


먼저 새롭고 고유한 디피 헬만 그룹을 생성하기 위해서 다음과 같이 openssl을 활용하여 새로운 고유 키를 생성합니다.

1) Apache HTTP Server


SSL 파라미터들은 httpd.conf나 특정 가상 호스트에서 세팅할 수 있습니다.

a) SSLCipherSuite

SSLProtocol	all -SSLv2 -SSLv3
SSLCipherSuite	ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA
SSLHonorCipherOrder	on

b) DH Parameter

# httpd-ssl.conf 파일에 아래 내용 설정

Apache 2.4.8 이상 / OpenSSL 1.0.2b 이상

SSLOpenSSLConfCmd DHParameters "{path to dhparams.pem}"

dhparams.pem 경로를 직접



Apache 2.4.8 이하 / OpenSSL 1.0.2b 이하

SSLCertificateFile "$SSL_HOME/certificate.crt"

생성한 dhparams.pem의 텍스트를 certificate.crt 하단에 붙여 넣기

2) Nginx


/etc/nginx/sites-enabled/default에 설정을 반영합니다.

a) ssl_ciphers

ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA';
ssl_prefer_server_ciphers on;

b) DH Parameter

ssl_dhparam {path to dhparams.pem}

3) Microsoft IIS


/etc/lighttpd/lighttpd.conf에 설정을 반영합니다.

a) ssl.cipher-list

ssl.cipher-list = "ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA "

b) DH Parameter

ssl_dhparam {path to dhparams.pem}ssl.dh-file="{path to dhparams.pem}"

4) Apache Tomcat


Server.xml에 설정을 반영합니다.

a) Connector

<Connector ciphers="TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_DHE_RSA_WITH_AES_128_GCM_SHA256,TLS_DHE_DSS_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_SHA256,TLS_ECDHE_ECDSA_WITH_AES_128_SHA256,TLS_ECDHE_RSA_WITH_AES_128_SHA,TLS_ECDHE_ECDSA_WITH_AES_128_SHA,TLS_ECDHE_RSA_WITH_AE_256_SHA384,TLS_ECDHE_ECDSA_WITH_AES_256_SHA384,TLS_ECDHE_RSA_WITH_AES_256_SHA,TLS_ECDHE_ECDSA_WITH_AES_256_SHA,TLS_DHE_RSA_WITH_AES_128_SHA256,TLS_DHE_RSA_WITH_AES_128_SHA,TLS_DHE_DSS_WITH_AES_128_SHA256,TLS_DHE_RSA_WITH_AES_256_SHA256,TLS_DHE_DSS_WITH_AES_256_SHA,TLS_DHE_RSA_WITH_AES_256_SHA"/>

 

728x90
반응형