티스토리 뷰
이번 포스팅에서는 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을 활용하여 새로운 고유 키를 생성합니다.
- openssl dhparam -out dhparams.pem 2048
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"/>
'④ 미들웨어 > ⓐ Apache' 카테고리의 다른 글
[apache] LogFormat 설정 참고자료 (nickname) (2) | 2019.01.19 |
---|---|
[Apache] 아파치 다중 프로세스 기동하기 (0) | 2018.12.27 |
[Apache] SSL 적용하기 / HTTP->HTTPS로 Rewrite하기 (0) | 2018.11.27 |
[apache] 설치 (+apr,apr-util,pcre) (0) | 2018.10.18 |
Apache, WebtoB ProxySSL 상호인증 설정 및 테스트 가이드 (0) | 2018.08.14 |
- Total
- Today
- Yesterday
- git
- JEUS6
- jeus
- apache
- k8s
- aa
- 쿠버네티스
- 마이크로서비스 아키텍처
- 오픈스택
- API Gateway
- nodejs
- node.js
- Architecture
- 마이크로서비스
- OpenStack
- JEUS7
- MSA
- openstack tenant
- openstack token issue
- SA
- wildfly
- Docker
- JBoss
- 아키텍처
- SWA
- aws
- webtob
- kubernetes
- TA
- Da
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |