웹사이트 검색

POODLE SSLv3 취약점으로부터 서버를 보호하는 방법


소개

2014년 10월 14일 SSL 암호화 프로토콜 버전 3의 취약점이 공개되었습니다. POODLE(Padding Oracle On Downgraded Legacy Encryption)이라고 하는 이 취약점을 통해 공격자는 중간자 공격을 사용하여 이 버전의 프로토콜로 암호화된 정보를 일반 텍스트로 읽을 수 있습니다.

SSLv3는 주로 사용되지 않는 이전 버전의 프로토콜이지만 더 나은 암호화 옵션을 사용할 수 없는 경우 많은 소프트웨어가 여전히 SSLv3으로 대체됩니다. 더 중요한 것은 연결을 시도하는 두 참가자 모두에게 SSLv3 연결이 가능한 대안인 경우 공격자가 SSLv3 연결을 강제할 수 있다는 것입니다.

POODLE 취약점은 SSLv3을 사용하여 통신할 수 있도록 하는 모든 서비스 또는 클라이언트에 영향을 미칩니다. 이는 구현 문제가 아니라 프로토콜 설계의 결함이기 때문에 SSLv3을 사용하는 모든 소프트웨어가 취약합니다.

취약점에 대한 자세한 내용을 알아보려면 CVE-2014-3566에 있는 CVE 정보를 참조하십시오.

POODLE 취약점이란 무엇입니까?

POODLE 취약점은 중간자 컨텍스트의 공격자가 SSLv3 암호화 메시지의 일반 텍스트 콘텐츠를 해독할 수 있도록 하는 SSL 프로토콜 버전 3의 약점입니다.

이 취약점의 영향을 받는 사람은 누구입니까?

이 취약점은 SSLv3과 통신하도록 강제될 수 있는 모든 소프트웨어에 영향을 미칩니다. 이는 SSLv3 지원을 포함하는 폴백 메커니즘을 구현하는 모든 소프트웨어가 취약하고 악용될 수 있음을 의미합니다.

영향을 받을 수 있는 일부 일반적인 소프트웨어는 웹 브라우저, 웹 서버, VPN 서버, 메일 서버 등입니다.

어떻게 작동합니까?

즉, POODLE 취약점은 SSLv3 프로토콜이 암호화된 메시지와 함께 전송되는 패딩 바이트를 적절하게 검사하지 않기 때문에 존재합니다.

수신측에서 확인할 수 없기 때문에 공격자는 이를 대체하여 의도한 대상으로 전달할 수 있습니다. 특정 방식으로 완료되면 수정된 페이로드는 잠재적으로 수신자가 불만 없이 수락할 수 있습니다.

256개 요청 중 평균 한 번은 대상에서 수락되어 공격자가 단일 바이트를 해독할 수 있습니다. 추가 바이트를 점진적으로 해독하기 위해 쉽게 반복할 수 있습니다. 참가자가 이 프로토콜을 사용하여 데이터를 다시 보내도록 반복적으로 강제할 수 있는 공격자는 매우 짧은 시간 내에 암호화를 깨뜨릴 수 있습니다.

나 자신을 어떻게 보호할 수 있습니까?

클라이언트와 서버 역할 모두에서 취약하지 않도록 조치를 취해야 합니다. 암호화는 일반적으로 클라이언트와 서버 간에 협상되기 때문에 양 당사자가 관련된 문제입니다.

서버와 클라이언트는 SSLv3 지원을 완전히 비활성화하는 조치를 취해야 합니다. 많은 애플리케이션이 기본적으로 더 나은 암호화를 사용하지만 대체 옵션으로 SSLv3 지원을 구현합니다. 악의적인 사용자가 두 참가자 모두 허용 가능한 방법으로 SSLv3 통신을 허용하는 경우 SSLv3 통신을 강제할 수 있으므로 비활성화해야 합니다.

일반 애플리케이션을 보호하는 방법

아래에서는 일부 일반적인 서버 애플리케이션에서 SSLv3를 비활성화하는 방법을 설명합니다. SSL/TCP 암호화에 의존할 수 있는 추가 서비스를 보호하기 위해 서버를 평가할 때 주의하십시오.

POODLE 취약점은 구현 문제를 나타내지 않고 전체 프로토콜에 내재된 문제이기 때문에 해결 방법이 없으며 유일하게 신뢰할 수 있는 솔루션은 POODLE을 사용하지 않는 것입니다.

Nginx 웹 서버

Nginx 웹 서버에서 SSLv3를 비활성화하려면 ssl_protocols 지시문을 사용할 수 있습니다. 이는 구성의 server 또는 http 블록에 있습니다.

예를 들어 Ubuntu에서 http 블록 내부의 /etc/nginx/nginx.conf에 전체적으로 추가하거나 각 server에 추가할 수 있습니다. 블록은 /etc/nginx/sites-enabled 디렉토리에 있습니다.

sudo nano /etc/nginx/nginx.conf

SSLv3를 비활성화하려면 ssl_protocols 지시문을 다음과 같이 설정해야 합니다.

ssl_protocols TLSv1 TLSv1.1 TLSv1.2;

위와 같이 수정한 후 서버를 다시 시작해야 합니다.

sudo service nginx restart

아파치 웹 서버

Apache 웹 서버에서 SSLv3를 비활성화하려면 mod_ssl 모듈에서 제공하는 SSLProtocol 지시문을 조정해야 합니다.

이 지시문은 서버 수준 또는 가상 호스트 구성에서 설정할 수 있습니다. 배포판의 Apache 구성에 따라 SSL 구성은 소싱된 별도의 파일에 있을 수 있습니다.

Ubuntu에서 서버에 대한 서버 전체 사양은 /etc/apache2/mods-available/ssl.conf 파일을 편집하여 조정할 수 있습니다. mod_ssl이 활성화되면 심볼릭 링크가 이 파일을 mods-enabled 하위 디렉토리에 연결합니다.

sudo nano /etc/apache2/mods-available/ssl.conf

CentOS에서는 여기에 있는 SSL 구성 파일에서 이를 조정할 수 있습니다(SSL이 활성화된 경우).

sudo nano /etc/httpd/conf.d/ssl.conf

내부에서 SSLProtocol 지시문을 찾을 수 있습니다. 사용할 수 없는 경우 생성합니다. SSLv3에 대한 지원을 명시적으로 제거하려면 다음을 수정하십시오.

SSLProtocol all -SSLv3 -SSLv2

파일을 저장하고 닫습니다. 변경 사항을 적용하려면 서비스를 다시 시작하십시오.

Ubuntu에서는 다음을 입력할 수 있습니다.

sudo service apache2 restart

CentOS에서는 다음과 같습니다.

sudo service httpd restart

HAProxy 로드 밸런서

HAProxy 로드 밸런서에서 SSLv3를 비활성화하려면 haproxy.cfg 파일을 열어야 합니다.

이것은 /etc/haproxy/haproxy.cfg에 있습니다.

sudo nano /etc/haproxy/haproxy.cfg

프런트 엔드 구성에서 SSL을 활성화한 경우 bind 지시문은 공용 IP 주소와 포트를 지정합니다. SSL을 사용하는 경우 이 줄 끝에 no-sslv3를 추가해야 합니다.

frontend name
    bind public_ip:443 ssl crt /path/to/certs no-sslv3

파일을 저장하고 닫습니다.

변경 사항을 구현하려면 서비스를 다시 시작해야 합니다.

sudo service haproxy restart

OpenVPN VPN 서버

최신 버전의 OpenVPN은 실제로 SSLv3를 허용하지 않습니다. 서비스는 이 특정 문제에 취약하지 않으므로 구성을 조정할 필요가 없습니다.

자세한 내용은 OpenVPN 포럼에서 이 게시물을 참조하십시오.

Postfix SMTP 서버

Postfix 구성이 암호화를 요구하도록 설정된 경우 smtpd_tls_mandatory_protocols라는 지시문을 사용합니다.

기본 Postfix 구성 파일에서 이를 찾을 수 있습니다.

sudo nano /etc/postfix/main.cf

항상 암호화를 사용하도록 설정된 Postfix 서버의 경우 이 매개변수를 설정하여 SSLv3 및 SSLv2가 허용되지 않도록 할 수 있습니다. 강제로 암호화하지 않으면 다음 작업을 수행할 필요가 없습니다.

smtpd_tls_mandatory_protocols=!SSLv2, !SSLv3

구성을 저장하십시오. 변경 사항을 구현하려면 서비스를 다시 시작하십시오.

sudo service postfix restart

Dovecot IMAP 및 POP3 서버

Dovecot 서버에서 SSLv3를 비활성화하려면 ssl_protocols라는 지시문을 조정해야 합니다. 배포 패키징 방법에 따라 SSL 구성이 대체 구성 파일에 보관될 수 있습니다.

대부분의 배포판의 경우 다음 파일을 열어 이 지시어를 조정할 수 있습니다.

sudo nano /etc/dovecot/conf.d/10-ssl.conf

내부에서 Dovecot 2.1 이상을 사용하는 경우 SSLv2 및 SSLv3을 비활성화하도록 ssl_protocols 지시문을 설정합니다.

ssl_protocols = !SSLv3 !SSLv2

2.1 미만의 Dovecot 버전을 사용하는 경우 다음과 같이 ssl_cipher_list를 설정하여 SSLv3를 허용하지 않을 수 있습니다.

ssl_cipher_list = ALL:!LOW:!SSLv2:!EXP:!aNULL:!SSLv3

파일을 저장하고 닫습니다.

변경 사항을 구현하려면 서비스를 다시 시작하십시오.

sudo service dovecot restart

추가 단계

서버 측 애플리케이션과 함께 모든 클라이언트 애플리케이션도 업데이트해야 합니다.

특히 웹 브라우저는 단계적 프로토콜 협상으로 인해 이 문제에 취약할 수 있습니다. 브라우저에서 허용되는 암호화 방법으로 SSLv3를 허용하지 않는지 확인하십시오. 이는 설정 또는 추가 플러그인 또는 확장 설치를 통해 조정할 수 있습니다.

결론

SSLv3에 대한 광범위한 지원으로 인해 더 강력한 암호화가 활성화된 경우에도 이 취약성은 광범위하고 위험합니다. SSL 암호화를 사용하는 모든 리소스의 소비자이자 공급자로서 자신을 보호하기 위한 조치를 취해야 합니다.

어떤 형태로든 SSL/TLS를 활용할 수 있는 모든 네트워크 액세스 가능 서비스를 확인하십시오. 종종 이러한 애플리케이션에는 SSLv3과 같은 약한 형태의 암호화를 완전히 비활성화하기 위한 명시적 지침이 필요합니다.