[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 패키지로 재포장해서 시스템에 설치하셔도 됩니다.
- make
#> ./config #> make
- 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