[HACKING] OpenSSL Client 에서 SSLv2 사용하기(Check DROWN Attack)

OpenSSL, Python 내 ssl 패키지도 어느시점부터 SSLv2 사용에 대해 지원을 중단하고 사용하지 못하도록 패치되었습니다. 올 초에 이슈가 되었던 DROWN Attack에 대해서 점검하기 위해서는 SSLv2 를 사용하여 서버에 접근해야하지만, 기존에 사용하던 OpenSSL은 -ssl2 옵션을 사용하지 못합니다. 그래서 간단한 방법으로 패치하여 사용하는 법에 대해 공유할까 합니다.

아래와 같이 -ssl2 옵션을 찾을 수 없는 경우(unknown option -ssl2)

#> openssl s_client -connect 127.0.0.1:443 -ssl2


unknown option -ssl2
usage: s_client args

 -host host     - use -connect instead
 -port port     - use -connect instead
 -connect host:port - who to connect to (default is localhost:4433)
 -verify arg   - turn on peer certificate verification

패치 전 준비사항(Install Utility for OpenSSL)

OpenSSL을 수정하기 전 편의를 위해 devscripts와 quilt 를 설치해둡니다. 데비안/우분투에서는 apt 패키징으로 쉽게 설치가 가능합니다.

#> apt-get install devscripts quilt

설치가 되었다면 openssl의 source 코드를 저장소로부터 받아옵니다. #> apt-get source openssl #> cd openssl-1.0.1f // 이 부분은 각 버전에 맞게 들어가시면 됩니다.

OpenSSL 수정하기(Patch OpenSSL)

일단 quilt 툴을 이용하여 패치 내역을 끌어냅니다. #> quilt pop -a

쭉 보다보시면 no_sslv2.patch 가 보입니다. 이 부분이 이전에 openssl 측에서 패치한 내용이죠.


 debian/patches/series
 no_sslv2.patch

그럼 debian 디렉토리로 이동 후 rules 파일을 편집합니다. #> cd debian #> vim rules

해당 파일은 make 시 옵션으로 들어갈 부분들이 정의되어 있고 CONFARGS 값의 no-ssl2 옵션을 지워줍니다.

Before


CONFARGS  = --prefix=/usr --openssldir=/usr/lib/ssl --libdir=lib/$(DEB_HOST_MULTIARCH) no-idea no-mdc2 no-rc5 no-zlib  no-ssl2 enable-tlsext $(ARCH_CONFARGS)

After


CONFARGS  = --prefix=/usr --openssldir=/usr/lib/ssl --libdir=lib/$(DEB_HOST_MULTIARCH) no-idea no-mdc2 no-rc5 no-zlib  enable-tlsext $(ARCH_CONFARGS)

그 후 quilt 를 이용하여 repatch 합니다.

#> quilt push -a #> dch –n ‘Allow SSLv2’

이다음 make를 해서 binary만 따로 사용하셔도 좋고, deb 패키지로 재포장해서 시스템에 설치하셔도 됩니다.

  1. make

#> ./config #> make

  1. deb package #> dpkg-source –commit #> debuild -uc -us #> cd .. #> dpkg -i ssl.deb

이후부터는 OpenSSL 에서 sslv2 를 사용할 수 있습니다.

이제 -ssl2 옵션을 이용해서 sslv2 사용 여부를 확인할 수 있습니다. DROWN Attack 에 대한 검증 방법으로도 사용할 수 있겠네요.

Reference

http://blog.opensecurityresearch.com/2013/05/fixing-sslv2-support-in-kali-linux.html