이전에 SSL3 Version 사용 시 보안적인 이슈가 있었던 POODLE Attack에 관한 이야기입니다. 나온지도 좀 되었고, 이미 브라우저 개발사 및 서버 측에서 SSLv3 를 사용하지 않는 식으로 하여서 영향력은 많이 떨어졌지만 그래도 간단하게 정리해놓는게 좋을 것 같아 작성합니다.
[CVE-2014-3566] SSLv3 POODLE Attack 이란?
POODLE이라 하면 강아지 종류가 생각날 수도 있지만 POODLE Attack 에서 의미하는 POODLE은 좀 다른 의미의 약자입니다. Padding Oracle On Downgraded Legacy Encryption 의 약자이며 Padding Oracle 취약점을 통해 SSL이 적용된 암호문을 해독할 수 있는 MITM(중간자공격) 입니다. Padding Oracle side-channel 공격을 통해 풀어나가죠.
영향력은 높지않아 예전에도 말이 좀 많았었습니다. CVSS2로 취약성 평가 시 점수가 높진 않네요. AV(접근성):N AC(복잡도):L Au(인증):N C(기밀성):P I(무결성):N A(가용성):N
Base Score: 5
테스트 방법은 이미 Poc 코드 및 Exploit 코드들이 있어 쉽게 검증이 가능합니다. 크게 Metasploit 을 통한 검증, Script 를 통한 검증정도가 있을 것 같네요.
A2SV를 이용한 확인
첨에 이 글을 작성하였을때가 작년 10월쯤인데, 그땐 현재 사용하고 있는 A2SV를 개발하기 전이여서 이 내용이 없었습니다. 추가하여 수정했으니 애용해주세요 ^^
#> git clone https://github.com/hahwul/a2sv #> cd a2sv #> python a2sv.py -t [TARGET]
Metasploit 을 통한 확인
MSF Console 에서 SSL-Version 에 대해 검색하시면 쉽게 찾을 수 있습니다. SSL 버전을 확인할 수 있는 모듈은 aux/scan 하단의 http/ssl_version 입니다.
hahwul auxiliary(ssl_version) #> use auxiliary/scanner/http/ssl_version hahwul auxiliary(ssl_version) #> hosts -R hahwul auxiliary(ssl_version) #> run
[+] ...:443 accepts SSLv3 [] Scanned 1 of 1 hosts (100% complete) [] Auxiliary module execution completed
Poc Script 를 통한 확인
웹상에서 코드를 찾아보시면 많이 나옵니다. 그 중 bash 쉘로 짜여진 간단한 코드입니다.
./ssl3-check.sh [TESTIP]
Testing [TESTIP]:443 for support of SSL3.0 … NO SSL 3.0 support detected on [TESTIP]:443 (sslv3 alert handshake failure)
# cat ssl3-check.sh
#!/bin/bash
#
# ssl3_cipher_check.sh - Determine which SSL 3.0 ciphers, if any, are supported by
# a targeted server.
#
# Author - Lamar Spells (lamar.spells@gmail.com)
# Blog - http://foxtrot7security.blogspot.com
# Twitter - lspells
#
# Copyright (c) 2014, Lamar Spells
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without modification,
# are permitted provided that the following conditions are met:
#
# - Redistributions of source code must retain the above copyright notice, this
# list of conditions and the following disclaimer.
# - Redistributions in binary form must reproduce the above copyright notice,
# this list of conditions and the following disclaimer in the documentation
# and/or other materials provided with the distribution.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
# IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
# INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
# OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
# OF THE POSSIBILITY OF SUCH DAMAGE.
#
if [ $# -lt 1 ] ; then
echo "USAGE: `basename $0` <ip> [port]"
exit 1
fi
if [ $# -eq 1 ] ; then
SERVER=${1}:443
else
SERVER=${1}:${2}
fi
DELAY=1
echo "Testing $SERVER for support of SSL3.0 ..."
result=`echo -n | openssl s_client -connect $SERVER -ssl3 2>&1`
if [[ "$result" =~ "New, TLSv1/SSLv3, Cipher is" ]] ; then
echo "YES - SSL 3.0 support detected on $SERVER"
exit 1
else
if [[ "$result" =~ ":error:" ]] ; then
error=`echo -n $result | cut -d':' -f6`
echo NO SSL 3.0 support detected on $SERVER \($error\)
exit 0
else
echo "ERROR: UNKNOWN RESPONSE: $result"
exit 255
fi
fi
Server SSL 설정 변경을 통한 조치(Modify Server SSL Conf)
물론 SSLv3 에서 발생한 문제이니 간단하게 SSLv3 를 사용하지 않는 것으로 조치가 가능합니다.
Apache Apache SSL 설정 파일에 적용 후 서비스 재시작(Service Restart)
vim /etc/apache2/mods-available/ssl.conf
SSLProtocol ALL -SSLv2 -SSLv3
Nginx nginx 설정 파일에 아래 내용을 추가한 후 서비스 재시작(Service Restart) ssl_protocols TLSv1 TLSv1.1 TLSv1.2
IIS regedit(레지스트리편집)을 통해 아래 레지스트리 키 편집 HKey_Local_Machine\System\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols registry key -> 하위 키에서 SSL 3.0에 대해 “00 00 00 00”으로 설정 (support.microsoft.com 참조 / https://support.microsoft.com/ko-kr/kb/187498)
수정 후 테스트하면 SSLv3 가 Disable 된 것을 확인할 수 있습니다.
SSLProtocol ALL -SSLv2 -SSLv3 hahwul auxiliary(ssl_version) #> run
[] Scanned 1 of 1 hosts (100% complete) [] Auxiliary module execution completed