[Exploit] SSLv3 POODLE Attack 확인 및 대응방안(Check and Modify)

이전에 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