Apache에서 'logjam'취약점을 해결하는 방법 (httpd)


56

최근에 비공식적으로 'logjam'이라고하는 Diffie-Hellman의 새로운 취약점이 발표되었으며, 이 페이지 에서 취약점을 해결하는 방법을 제안합니다.

TLS 용 Diffie-Hellman을 올바르게 배포하기위한 3 가지 권장 사항이 있습니다.

  1. 내보내기 암호 스위트를 비활성화합니다. 최신 브라우저는 더 이상 내보내기 제품군을 지원하지 않지만 FREAK 및 Logjam 공격을 사용하면 중간자 공격자가 브라우저를 사용하여 내보내기 등급 암호화를 사용하여 브라우저를 속여 TLS 연결을 해독 할 수 있습니다. 수출 암호는 강력한 암호화 프로토콜이 미국에서 수출되는 것을 막는 1990 년대 정책의 나머지입니다. 현대의 고객은 수출 제품군에 의존하지 않으며이를 비활성화 할 때 단점이 거의 없습니다.
  2. (Ephemeral) Elliptic-Curve Diffie-Hellman (ECDHE)을 배포합니다. ECDH (Elliptic-Curve Diffie-Hellman) 키 교환은 알려진 모든 가능한 암호화 분석 공격을 피하며 최신 웹 브라우저는 이제 원래의 유한 필드 인 Diffie-Hellman보다 ECDHE를 선호합니다. 표준 Diffie-Hellman 그룹을 공격하는 데 사용했던 불연속 로그 알고리즘은 사전 계산의 이점을 얻지 못하며 개별 서버는 고유 한 타원 곡선을 생성 할 필요가 없습니다.
  3. 강력하고 독특한 Diffie Hellman 그룹 생성 . 몇 개의 고정 그룹이 수백만 대의 서버에서 사용되므로 사전 계산 및 잠재적 도청에 최적의 대상이됩니다. 관리자는 각 웹 사이트 또는 서버에 대해 "안전한"프라임을 사용하여 고유 한 2048 비트 이상의 강력한 Diffie-Hellman 그룹을 생성해야합니다.

위 권장 사항에 따라 서버를 보호하기 위해 수행해야 할 가장 좋은 단계는 무엇입니까?


답변:


82

링크기사 에서이 취약점으로부터 자신을 보호하기위한 3 가지 권장 단계가 있습니다. 원칙적으로이 단계는 SSL / TLS와 함께 사용할 수있는 모든 소프트웨어에 적용되지만 여기서는 해당 소프트웨어이므로 Apache (httpd)에 적용하기위한 특정 단계를 처리합니다.

  1. 내보내기 암호 스위트 비활성화

아래 2에서 구성 변경 사항 !EXPORT을 처리하십시오 ( SSLCipherSuite줄 끝 부분은 내보내기 암호 제품군을 비활성화하는 방법입니다)

  1. ECDHE (Ephemeral) Elliptic-Curve Diffie-Hellman 배포

이를 위해, 당신은 당신의 아파치 설정 파일에 몇 가지 설정을 편집해야합니다 - 즉 SSLProtocol, SSLCipherSuite, SSLHonorCipherOrder는 "모범 사례"설정을 할 수 있습니다. 다음과 같은 것으로 충분합니다.

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

참고 :있는대로 SSLCipherSuite사용하는 설정이 항상 변화하고, 같은 리소스를 참조하는 것이 좋습니다 이 한 최신 권장 구성을 확인합니다.

3. 강력하고 독특한 Diffie Hellman 그룹 생성

그렇게하기 위해, 당신은 실행할 수 있습니다

openssl dhparam -out dhparams.pem 2048.

이는 매개 변수가 생성되는 동안 서버에 상당한로드를 가할 것입니다. 다른 시스템에서 매개 변수를 생성하고 scp이를 사용하여 해당 서버로 전송 하여 사용하여이 잠재적 문제를 항상 해결할 수 있습니다.

Apache 설명서dhparams 에서 Apache에서 새로 생성 된 것을 사용하려면 다음 을 수행하십시오 .

사용자 정의 DH 매개 변수를 생성하려면 openssl dhparam 명령을 사용하십시오. 또는 RFC 2409, 섹션 6.2 의 다음 표준 1024 비트 DH 매개 변수를 해당 SSLCertificateFile 파일에 추가 할 수 있습니다 .

(강조 광산)

그런 다음 표준 1024 비트 DH 매개 변수가 이어집니다. 이를 통해 맞춤형 생성 된 DH 매개 변수가 해당 관련 항목 SSLCertificateFile에 추가 될 수 있음을 알 수 있습니다 .

이렇게하려면 다음과 유사한 것을 실행하십시오.

cat /path/to/custom/dhparam >> /path/to/sslcertfile

또는 원래 링크 한 기사 의 Apache 하위 섹션 에 따라 인증서 파일 자체를 변경하지 않으려는 경우 작성한 사용자 정의 dhparams 파일을 지정할 수도 있습니다.

SSLOpenSSLConfCmd DHParameters "/path/to/dhparams.pem"

Apache 구성이 특정 SSL / TLS 구현과 관련 이 있는 conf.d/ssl.conf경우 ( 일반적으로 또는 conf.d/vhosts.conf아파치 구성에 따라 다름)

이에 따라, 그 주목할 가치가 이 링크 ,

Apache 2.4.7 이전에는 DH 매개 변수가 항상 1024 비트로 설정되어 있으며 사용자가 구성 할 수 없습니다. 이는 Red Hat이 httpd-2.2.15-32.el6을 사용하여 RHEL 6 Apache 2.2 배포판으로 백 포트 한 mod_ssl 2.4.7에서 수정되었습니다.

Debian Wheezy에서 apache2를 2.2.22-13 + deb7u4 이상으로 업그레이드하고 openssl을 1.0.1e-2 + deb7u17로 업그레이드하십시오. 위의 SSLCipherSuite가 완벽하게 작동하지 않고이 블로그에 따라 다음을 사용하십시오 .

SSLCipherSuite ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384: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-DSS-AES128-SHA256:DHE-DSS-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384: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:!DHE-RSA-AES128-GCM-SHA256:!DHE-RSA-AES256-GCM-SHA384:!DHE-RSA-AES128-SHA256:!DHE-RSA-AES256-SHA:!DHE-RSA-AES128-SHA:!DHE-RSA-AES256-SHA256:!DHE-RSA-CAMELLIA128-SHA:!DHE-RSA-CAMELLIA256-SHA

배포판에 따라 Apache 버전이이 버전 번호보다 늦은 지 확인하고, 그렇지 않은 경우 가능하면 업데이트하십시오.

위의 단계를 수행하여 구성을 업데이트하고 Apache 서비스를 다시 시작하여 변경 사항을 적용한 후 SSLLabs 및 이 특정 취약성 관련 기사 에서 테스트를 실행하여 구성이 원하는지 확인해야 합니다.


1
매개 변수를 생성하여 서버에 가한로드에 대해서는 언제든지 다른 시스템에서 생성 할 수 있으며 파일을 대상 서버에 복사하거나 붙여 넣기 만하면됩니다. 프로덕션 서버에서 매개 변수를 생성 할 필요가 없습니다.
Erathiel

2
구성을 변경 한 후 SSLLabs.com 에서 확인을 수행하고 확인 하는 것이 좋습니다.
user2428118 12

2
Apache / 2.2.22 (Ubuntu 12.04)에서이 취약점을 해결하는 방법이 있습니까? dhparams.pem을 certificate.crt에 추가했지만 weakdh.org/sysadmin.html이 여전히 불평합니다
tersmitten

2
@tersmitten 이것과는 완전히 별개의 질문입니다.
Michael Hampton

3
'nice'명령으로 키 생성을 항상 실행할 수 있습니다. nice 19 openssl dhparam -out dhparams.pem 2048로 넣을 수 있습니다. 이것은 더 오래 작동하지만 사용되지 않은 CPU 시간 만 소비합니다.
Znik

1

: Winni Neessen의 패치를 바탕으로 나는 (우분투에 아마 또한 사용 가능한 데비안 위지) 아파치 / 2.2.22에 대한 수정 발표 한 https://flo.sh/debian-wheezy-apache2-logjam-fix/ - 들으 . 귀하의 의견에.


3
이것은 솔루션보다 해킹 해킹입니다. 리버스 프록시로 최근 nginx를 아파치 앞에 두는 것이 훨씬 쉬울 수 있으며 타사 아파치에 의존하지 않습니다.
저기저기서

6
왜이 바이너리를 신뢰해야합니까?
CVn

2
바이너리를 신뢰할 필요는 없습니다. 시간이 걸리면 설명 된 단계에 따라 apache2.2.x를 매우 쉽게 다시 컴파일 할 수 있습니다. 설정에는 고유 한 기본 키가 있기 때문에 보안이 더욱 향상됩니다.
Flo

사람들이 오픈 소스 소프트웨어의 문제를 해결하는 패치에 대해 불평하지 않을 것을 제안합니다.
Florian Heigl 2016 년

@FlorianHeigl 그 의견을 어떻게 작성
해야할지 모르겠습니다

-7

위의 '해킹'의 복잡한 경로를 사용하는 대신 캐싱이나 프록시가 아닌 기본 웹 서버 소프트웨어 로 nginx전환하는 것을 고려 하십시오. 분명히 기존 아파치 엔진보다 보안 측면에서 현재 표준에 더 가깝습니다. nginx 저장소를 사용하면 아파치보다 안정적인 최신 웹 서버 엔진을 제공합니다.

나는 완전히 전환했다. TLS와 관련하여 많은 시간이 소요되는 문제 해결을 절약했으며 구성을 위해 같은 시간에 많은 RAM을 확보했습니다. 사실, 내가 익숙해 져온 httpd / apache의 수많은 구성 합병증과 비교할 때, nginx의 채용이 매우 간단하고 간단하다는 것을 알았습니다. 맛의 문제가 될 수 있었지만, 내가 돌기 전에 httpd / apache rewrite / config / maintenance에 상당히 능숙 해졌으며, 내가 생각했던 것보다 쉬웠습니다. 온라인으로 제공되는 nginx 설정에 대한 적절한 최신 정보가 있으며 사용자 기반은 방대하고 매우 적극적이며 지원하기 쉽습니다. https://news.netcraft.com/wp-content/uploads/2018/11/wpid-wss-top-1m-share.png


3
nginx를 수출 암호가 될 수 있도록 설정 을 정확하게 수출 암호를 허용하도록 설정 아파치 서버로 정체 공격에 취약. 또한 질문은 Apache의 솔루션을 요구합니다.
CVn

2
사실, 솔루션 : 당신이 절대적으로 최신 버전이 필요 소프트웨어에 대한 더 많은 최신 패키지를 제공하는 분포 중 스위치 (단지 백 포트되지 버그 수정, 데비안이나 CentOS는의 경우 예를 들어처럼) 또는 패키지를 직접 구축 소스 (하드가 아님)에서 패키지 관리자를 사용하여 설치 하거나 소스 코드에서 일반 이전 설치 (하드가 아니지만 관리하는 데 약간의 작업이 더 필요함). "Y 소프트웨어 내에서 취약성 X를 어떻게 완화합니까?"라는 질문의 경우, "Y 소프트웨어를 Z 소프트웨어로 대체"라는 대답은 종종 유용한 대답이 아닙니다.
CVn

1
Apache to Nginx는 업그레이드가 아니며 대체품입니다. 백 포트는 가능성이 있습니다. Apache 솔루션에 많은 투자를 한 경우 완전히 버리고 다른 것으로 교체하는 것도 많은 작업이 필요합니다. 그리고이 질문은 여전히 Nginx가 아닌 Apache 중심의 솔루션에 관한 것 입니다. 나는 이것에 대해 논쟁하는 데 더 많은 시간을 소비하지 않을 것입니다. 답변을 게시 할 때 페이지 상단에 표시된 질문에 답변해야합니다. 사람들이 Apache에서 Nginx로 전환하도록 격려하는 답변을 게시하려면 반드시 그렇게하지만 Nginx를 허용하는 질문으로하십시오.
CVn

1
알려진 공격에 대비하여 소프트웨어를 올바르게 구성하는 것이 "복잡한 해킹 경로"입니까? 간단한 아파치 구성으로 ssllabs.com에서 A +를 얻습니다. 시간을내어 사용중인 소프트웨어를 올바르게 구성하는 방법을 이해하기 위해 약간의 연구를 수행해야합니다. 여기에 해킹이 없습니다 ...
Chazy Chaz

1
@Julius-downvotes는 nginx 대 apache에 대해 숨겨진 숨겨진 "아젠다"사람보다 질문에 대한 답변의 가치가 부족한 것과 더 관련이 있습니다. 그것이 일어날 때, 나는 선호도 때문에 독점적으로 nginx를 사용하지만이 질문에 답한 사람은 나였습니다. "다른 소프트웨어로 전환"은 "해결 방법 (문제)"에 대한 적절한 대답이 아닙니다. 말할 것도없이, 실제 취약점의 요점을 완전히 놓쳤습니다. 아파치 (또는 nginx, sshd, 또는 ...)가
아닌 어려운 지옥
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.