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
에 추가할 수 있습니다. code> 블록은 /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과 같은 약한 형태의 암호화를 완전히 비활성화하기 위한 명시적 지침이 필요합니다.