BEAST 공격 과 Heartbleed 버그 후에 SSL / TLS의 POODLE 이라는 새로운 취약점에 대해 들었습니다 . 악용되지 않도록 어떻게 보호합니까?
- 서버 나 클라이언트 만 영향을 받습니까?
- 이 OpenSSL / GnuTLS는 구체적입니까?
- 어떤 종류의 서비스가 영향을 받습니까? HTTPS 또는 IMAPS, SMTPS, OpenVPN 등 만?
이 취약점을 피하는 방법에 대한 예를 보여주세요.
BEAST 공격 과 Heartbleed 버그 후에 SSL / TLS의 POODLE 이라는 새로운 취약점에 대해 들었습니다 . 악용되지 않도록 어떻게 보호합니까?
이 취약점을 피하는 방법에 대한 예를 보여주세요.
답변:
SSL은 인터넷의 전송 수준을 보호하도록 설계되었습니다. '웹'(일명 HTTP)의 경우이를 HTTPS로 알고 있지만 다른 응용 프로그램 프로토콜에도 사용됩니다. SSLv2는 가장 널리 사용되는 전송 보안 프로토콜 이었지만 얼마 지나지 않아 안전하지 않은 것으로 밝혀졌습니다. 후임 SSLv3 및 TLSv1이 현재 널리 지원됩니다. TLSv1.1 및 TLSv1.2는 최신 버전이며 많은 지원을 받고 있습니다. 2014 년에 출시 된 모든 웹 브라우저가이를 지원하는 것은 아닙니다.
Google 엔지니어의 최근 발견에 따르면 SSLv3은 더 이상 사용되지 않아야합니다 (예 : SSLv2는 오래 전에 사용되지 않음). 사이트 / 서비스에 연결할 수없는 클라이언트는 매우 제한적일 수 있습니다. CloudFlare 는 방문자의 0.09 % 미만이 여전히 SSLv3에 의존 한다고 발표 했습니다.
간단한 해결책 : SSLv3을 비활성화하십시오.
예, SCSV 기능이 추가 된 usn-2385-1 을 통해 SSLv3를 비활성화하지 않기 때문에 문제를 완전히 완화 하지 않으며 연결의 양쪽이 패치 된 경우에만 패치가 작동합니다. 패키지 관리자의 정기적 인 보안 업데이트를 통해받을 수 있습니다.
그래서, 여전히 당신은 (그것을 구성의)은 SSLv3를 해제하는 조치를 직접 수행해야합니다. 향후 버전의 클라이언트 / 브라우저는 SSLv3을 사용하지 않도록 설정합니다. 예를 들어 Firefox 34가 그렇게합니다.
구현 수준의 Ubuntu에서 기본적으로 SSLv3을 완전히 비활성화하면 HTTPS 이외의 SSL 사용에 대해서도 취약하지 않을 수 있습니다. 관리자가 그렇게하지 않을 것이라고 가정 하고이 SCSV 패치 만 적용됩니다.
실제로 그러한 질문을 멈추고 몇 단락을 건너 뛰고 SSLv3을 비활성화하십시오. 그러나 당신이 확신하지 않으면 여기에 간다.
POODLE은 CBC 암호를 사용하는 SSLv3이 손상되었음을 보여 주므로 SCSV를 구현해도 변경되지 않습니다. SCSV는 일반적인 경우에 필요한 MITM (Man-in-the-Middle) 공격으로 필요에 따라 일부 TLS 프로토콜에서 하위 TLS / SSL 프로토콜로 다운 그레이드하지 않도록합니다.
TLS를 전혀 제공하지 않고 SSLv3 만 제공하는 일부 서버에 액세스해야하는 경우 브라우저는 실제로 선택할 수 없으며 SSLv3을 사용하여 서버와 통신해야합니다. 그러면 다운 그레이드 공격없이 취약합니다.
당신은 (낙담하는) 너무 TLSv1의 +와 SSLv3에 제공 일부 서버에 액세스 할 수 있고 당신이 당신의 연결이 공격자에 의해 SSLv3에 다운 그레이드되지 않습니다해야 할 경우 모두 서버와 클라이언트는이 SCSV 패치가 필요합니다.
이 문제를 완전히 완화하기 위해 SSLv3를 사용하지 않도록 설정하면 충분하며 다운 그레이드되지 않을 것입니다. 그리고 SSLv3 전용 서버와 통신 할 수 없습니다.
응용 프로그램 별 섹션에서 아래를 참조하십시오 : Firefox, Chrome, Apache, Nginx 및 Postfix는 현재 다루고 있습니다.
다운 그레이드 공격으로 인해 TLSv1 / TLSv1.1 / TLS1.2를 모두 수행 할 수있는 경우에도 서버와 클라이언트 모두 SSLv3을 허용하는 경우 취약점이 존재합니다.
서버 관리자는 이제 사용자 보안을 위해 SSLv3을 비활성화 해야합니다.
사용자로, 당신은 당신의 브라우저에서 SSLv3에를 비활성화해야합니다 지금 계속하고 SSLv3을 지원하는 웹 사이트를 방문 할 때 자신을 보호 할 수 있습니다.
아니요. 구현 버그가 아닌 프로토콜 (디자인) 버그입니다. 즉, 이전 SSLv3의 디자인을 변경하지 않는 한 실제로 패치 할 수 없습니다.
그리고 네, 새로운 OpenSSL 보안 릴리스 가 있지만 아래에서 읽으십시오 ( 그러나 X, Y, Z! 이유로 SSLv3 지원이 정말로 필요 합니다).
아마도 요 추가 생각과 작업을 위해 이것을 별도의 블로그 게시물에 넣었습니다. 사용할 수있는 마법 iptables
규칙이있을 수 있습니다!
내 블로그 게시물 : POODLE에 iptables를 사용하여 네트워크에서 SSLv3을 중단하는 방법은 무엇입니까?
연구원들에 의해 보여지는 바와 같이, 현재의 공격 벡터는 피해자의 머신에서 실행되는 자바 스크립트를 사용하여 서버로 전송되는 평문을 제어하는 작업을한다. 이 벡터는 브라우저를 사용하지 않는 비 HTTPS 시나리오에는 적용되지 않습니다.
또한 일반적으로 SSL 클라이언트에서는 세션을 SSLv3으로 다운 그레이드 할 수 없지만 (핸드 셰이크 기능에서 볼 수있는 TLSv1 + 사용) 브라우저는 이전 버전과 매우 호환되기를 원합니다. 평문 제어와 HTTP 헤더가 구축되는 특정 방식의 조합으로 인해이를 활용할 수 있습니다.
결론 : HTTPS에 대한 해제 SSLv3에 지금 , 비활성화 SSLv3에 다음 서비스 창에서 다른 서비스.
아니요,이를 위해 인증서를 교체 할 필요가 없습니다. 이 취약점은 세션 데이터에서 일반 텍스트 복구를 제공하며 비밀 키 (세션 키 또는 인증서 키)에 대한 액세스를 제공하지 않습니다.
공격자는 세션 하이재킹 을 수행하기 위해 세션 쿠키와 같은 일반 텍스트 헤더 만 훔칠 수 있습니다. 추가적인 제약은 완전한 (활성) MitM 공격 이 필요하다는 것입니다 .
사용자는 브라우저에서 SSLv3을 비활성화하는 것 외에도 실제로는 아닙니다. 항상 최신 보안 업데이트를 설치하십시오.
서버의 경우 Mozilla의 TLS 서버 안내서를 따르십시오 . 그리고와 시험 퀄리스 (Qualys) 'SSL 연구소 시험 . 귀하의 사이트에서 A + 등급을 얻는 것은 그리 어렵지 않습니다. 패키지를 업데이트하고 Mozilla 가이드에서 권장 사항을 구현하십시오.
SSLv3 대체 보호라고하는 TLSv1 가능 클라이언트의 다운 그레이드 공격을 우회하는 패치가 있습니다. 또한 TLSv1 +의 보안도 향상시킬 것입니다 (다운 그레이드 공격은 더 어렵거나 불가능합니다). Ubuntu 보안 권고 usn-2385-1 의 최신 OpenSSL 버전에서 백 포트로 제공됩니다 .
큰 문제 : 클라이언트와 서버 모두 작동하려면이 패치가 필요합니다. 따라서 클라이언트와 서버를 모두 업데이트하는 동안 어쨌든 TLSv1 +로 업그레이드해야한다고 생각합니다.
그러나 지금은 네트워크에서 SSLv3을 폐기하십시오. 보안 표준을 업그레이드하고 SSLv3을 버립니다.
이상한 이유로 SSLv3이 실제로 필요한 경우에만 TLSv1 +의 보안이 향상되므로 설치하는 것이 좋습니다. Ubuntu는 usn-2385-1 에서이 기능에 대한 업데이트를 제공합니다 . 패키지 관리자의 정기적 인 보안 업데이트를 통해받을 수 있습니다.
서버가 SSLv3을 지원하는 것만으로 취약합니다. 여기 몇 가지 옵션이 있습니다.
OpenSSL s_client로 :
openssl s_client -connect <server>:<port> -ssl3
연결에 성공하면 sslv3이 활성화됩니다. 실패하면 비활성화됩니다. 실패하면 다음과 같이 표시됩니다.
error:14094410:SSL routines:SSL3_READ_BYTES:sslv3 alert handshake failure
사용 nmap
:
nmap --script ssl-enum-ciphers -p 443 myhostname.tld
' SSLv3: No supported ciphers found
'를 출력해야합니다 . 호스트 이름 / 포트를 조정하십시오.
사용 cipherscan . 바이너리를 복제 / 다운로드하여 실행하십시오 :
./cipherscan myhostname.tld
'프로토콜'열 아래에 SSLv3이있는 항목을 나열 해서는 안됩니다 .
열기 about:config
, 발견 security.tls.version.min
과에 값을 설정합니다 1
. 그런 다음 브라우저를 다시 시작하여 열린 SSL 연결을 끊으십시오.
버전 34 이상의 Firefox는 기본적으로 SSLv3을 비활성화하므로 조치 ( source )가 필요하지 않습니다 . 그러나 글을 쓰는 시점에서 33 개가 방금 릴리스되었고 11 월 25 일에 34 개가 설정되었습니다.
/usr/share/applications/google-chrome.desktop
예를 들어 파일 편집
sudo nano /usr/share/applications/google-chrome.desktop
편집 모든 라인 으로 시작 Exec=
포함을 --ssl-version-min=tls1
.
예를 들어 같은 라인
Exec=/usr/bin/google-chrome-stable %U
된다
Exec=/usr/bin/google-chrome-stable --ssl-version-min=tls1 %U
그런 다음 브라우저를 완전히 닫아야합니다 (Chrome 앱이 브라우저를 백그라운드에서 활성 상태로 유지할 수 있습니다!).
참고 :이 .desktop
런처 파일을 덮어 쓰면서 모든 Google 크롬 패키지 업데이트를 반복해야 할 수도 있습니다. SSLv3가 기본적으로 사용 중지 된 Chrome 또는 Chromium 브라우저는 아직 작성 시점에 발표되지 않았습니다.
현재 SSLv3을 허용하는 Apache 웹 서버를 실행중인 경우 Apache 구성을 편집해야합니다. 데비안 및 우분투 시스템에서 파일은 /etc/apache2/mods-available/ssl.conf 입니다. CentOS 및 Fedora에서 파일은 /etc/httpd/conf.d/ssl.conf 입니다. 다른 SSL 지시문을 사용하여 Apache 구성에 다음 행을 추가해야합니다.
SSLProtocol All -SSLv2 -SSLv3
SSLv2 및 SSLv3을 제외한 모든 프로토콜이 허용됩니다.
그 동안 Mozilla의 TLS 서버 안내서 에 설명 된대로 웹 서버의 암호 구성을 개선하는 것이 좋습니다. 예를 들어 추가하십시오.
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-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
SSLCompression off
# Read up on HSTS before you enable it (recommended)
# Header add Strict-Transport-Security "max-age=15768000"
그런 다음 새 구성이 올바른지 확인하십시오 (오타가없는 등).
sudo apache2ctl configtest
예를 들어 서버를 다시 시작하십시오.
sudo service apache2 restart
CentOS 및 Fedora에서 :
systemctl restart httpd
추가 정보 : Apache 문서
사이트를 공개적으로 사용할 수있는 경우 Qualys의 SSL Labs 도구를 사용하여 테스트하십시오 .
Nginx를 실행하는 경우 다른 SSL 지시문 중 구성에 다음 행을 포함하십시오.
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
그 동안 Mozilla의 TLS 서버 안내서 에 설명 된대로 웹 서버의 암호 구성을 개선하는 것이 좋습니다. 예를 들어 추가하십시오.
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-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;
# Read up on HSTS before you enable it (recommended)
# add_header Strict-Transport-Security max-age=15768000;
예를 들어 서버를 다시 시작하십시오.
sudo service nginx restart
참조 : Nginx 문서
사이트를 공개적으로 사용할 수있는 경우 Qualys의 SSL Labs 도구를 사용하여 테스트하십시오 .
Lighttpd 버전> 1.4.28은 SSLv2 및 v3을 비활성화하는 구성 옵션을 지원합니다. 1.4.28 이전의 Lighttpd 릴리스에서는 SSLv2 만 비활성화 할 수 있습니다. Ubuntu 12.04 LTS 및 이전 버전은 최상의 lighttpd v1.4.28에 설치되므로 해당 배포판에 대한 간단한 수정 사항을 사용할 수 없습니다. 따라서이 수정은 12.04보다 큰 Ubuntu 버전에만 사용해야합니다.
Ubuntu 버전 12.04 또는 Debian 6의 경우 업데이트 된 lighttpd 패키지는 openSUSE 저장소에서 사용할 수 있습니다. http://download.opensuse.org/repositories/server:/http/Debian_6.0
이 패키지는 데비안 6 (squeeze) 용이지만 12.04 (정확)에서도 작동합니다
지시문 /etc/lighttpd/lighttpd.conf
뒤에 다음 줄을 추가하도록 편집하십시오.ssl.engine = "enable"
ssl.use-sslv2 = "disable"
ssl.use-sslv3 = "disable"
그런 다음 a sudo service lighttpd restart
를 사용 하여 lighttpd 서비스를 다시 시작하고 이전 섹션에 설명 된대로 ssl3 핸드 셰이크 테스트를 수행하여 변경이 성공적으로 구현되었는지 확인해야합니다.
http://redmine.lighttpd.net/projects/lighttpd/wiki/Docs_SSL 에서 가져 왔습니다 .
'기회 SSL'(암호화 정책이 적용되지 않고 평범한 것도 허용됨)의 경우 아무것도 변경할 필요가 없습니다. SSLv2조차 일반보다 낫기 때문에 서버를 보호해야하는 경우 어쨌든 '필수 SSL'모드를 사용해야합니다.
'필수 SSL'모드가 이미 구성 되어있는 경우 인바운드 연결에 대한 smtpd_tls_mandatory_protocols 설정과 아웃 바운드 연결에 대한 smtp_tls_mandatory_protocols 설정을 추가 / 변경하십시오 .
smtpd_tls_mandatory_protocols=!SSLv2,!SSLv3
smtp_tls_mandatory_protocols=!SSLv2,!SSLv3
선택적으로, 기회 적 암호화에 대해 SSLv3을 사용하지 않으려면 (위에서 설명한대로 불필요하더라도) 다음과 같이하십시오.
smtpd_tls_protocols=!SSLv2,!SSLv3
smtp_tls_protocols=!SSLv2,!SSLv3
Postfix를 다시 시작하십시오.
sudo service postfix restart
(익명 사용자에 의한 확인되지 않은, Sendmail에 익숙하지 않습니다. 확인하십시오.)
이 옵션은 LOCAL_CONFIG
귀하 의 섹션 에서 구성됩니다sendmail.mc
LOCAL_CONFIG
O CipherList=HIGH
O ServerSSLOptions=+SSL_OP_NO_SSLv2 +SSL_OP_NO_SSLv3 +SSL_OP_CIPHER_SERVER_PREFERENCE
O ClientSSLOptions=+SSL_OP_NO_SSLv2 +SSL_OP_NO_SSLv3
Dovecot v2.1 +에서 다음 /etc/dovecot/local.conf
(또는의 새 파일)에 다음을 추가하십시오 /etc/dovecot/conf.d
.
ssl_protocols = !SSLv2 !SSLv3
Dovecot을 다시 시작하십시오.
sudo service dovecot restart
Courier-imap은 Ubuntu 12.04 및 기타에서 기본적으로 SSLv3을 허용합니다. TLS를 강제로 사용하지 않도록 설정하고 STARTTLS를 사용해야합니다. /etc/courier/imapd-ssl
다음 변경 사항을 반영하도록 구성 파일을 편집하십시오.
IMAPDSSLSTART=NO
IMAPDSTARTTLS=YES
IMAP_TLS_REQUIRED=1
TLS_PROTOCOL=TLS1
TLS_STARTTLS_PROTOCOL=TLS1
TLS_CIPHER_LIST="<take those from the Mozilla TLS Server guide!>"
SSL은 HAProxy> = 1.5에서 지원됩니다.
/etc/haproxy.cfg
파일을 편집하고 bind
줄을 찾으십시오 . 추가 no-sslv3
. 예를 들면 다음과 같습니다.
bind :443 ssl crt <crt> ciphers <ciphers> no-sslv3
참조 : HAProxy 설명서
영향을받지 않는 것으로 나타납니다 ( source ).
OpenVPN은 TLSv1.0 또는 (> = 2.3.3) 선택적으로 TLSv1.2를 사용하므로 POODLE의 영향을받지 않습니다.
Puppet은 HTTPS를 통한 SSL을 사용하지만 '브라우저'클라이언트는 사용하지 않으며 표시된 공격 벡터에 취약하지 않은 Puppet 에이전트 만 사용합니다. 그러나 SSLv3 만 비활성화하는 것이 가장 좋습니다.
내 추천은 stephenrjohnson / puppetmodule Puppet 모듈 을 사용하여 얼마 전에 SSLv3를 죽인 Puppet 마스터를 설정하는 것 입니다.
우분투 특정 있지만 위해 당신이 설정할 수 있습니다 Node.js를의 푸들 vulnerablity를 해결하기 위해되지 않을 수 있습니다 secureOptions
에 require('constants').SSL_OP_NO_SSLv3
당신이 HTTPS 또는 TLS 서버를 만들 때.
추가 정보는 https://gist.github.com/3rd-Eden/715522f6950044da45d8 을 참조 하십시오
POODLE 취약점은 프로토콜 자체의 설계 결함이며 구현 버그가 아니기 때문에 패치가 없습니다. 이를 완화하는 유일한 방법은 아파치 서버에서 SSLv3을 비활성화하는 것입니다. 아래 줄을 ssl.conf에 추가하고 아파치 다시 시작하십시오.
SSLProtocol all -SSLv2 -SSLv3
SSLHonorCipherOrder on
SSLCipherSuite "EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 EECDH EDH+aRSA RC4 !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS"