SSL Strip 공격과 HSTS Bypassing

 

MITM (Man-In-The-Middle) 공격은 공격자와 Victim이 동일한 네트워크에 연결되어 있어야 한다.
따라서 외부에서 공격하는 Remote Exploit Attack에 비해 “덜 흥미로운-less interesting”것으로 간주되곤 한다.

그러나 동일 네트워크라는 제약조건에도 불구하고 MITM 공격이 여전히 이슈가 되는 이유는,
Victim  네트워크에 접근했을 때, 다음 단계 해킹을 위한 강력한 무기로 활용할 수 있기 때문이다.
일반적으로 SSL과 같이 전송 구간 암호화가 적용되어 있으면 MITM이 불가능하다고 여기기 쉬우나,
다양한 기법을 통해 통신 내용을 중간에 가로채는 것이 (혹은 변조하는 것이) 가능하다.

이번 포스팅에서는 SSL 을 우회하여 MITM 공격하는 방법을 상세하게 다룰 예정이며, 목차는 다음과 같다.

  • SSL-Strip 기법의 기본 이론과 동작 원리
  • SSL-Strip 방어기법 (HSTS)과 우회 방법
  • HSTS Bypass 공격을 통한 계정 탈취 실습

 

SSL Strip 기본 이론과 동작 원리

Client-Server간 암호화 통신을 위해 SSL이 적용된 경우에는 공격자가 중간에서 통신을 가로채더라도
그 내용을 해독할 수 없기 때문에 MITM 공격이 불가능하다.
그러나 최초 서버와의 세션 연결시 HTTPS를 강제로 HTTP 통신을 하게끔 만들수만 있다면,
일반적인 MITM 공격으로 트래픽 내용을 훔쳐볼 수 있다.

이것을 SSL Strip 기법이며, 말 그대로 “SSL을 벗겨내서(Strip)” 강제로 HTTP통신을 하게끔 유도하는 기법이다.
SSL Strip 공격은 2009년 BlackHat DC 컨퍼런스에서 Moxie Marlinspike에 의해 처음 소개되었다.
(소개 자료는 http://www.thoughtcrime.org/software/sslstrip/)

아래 그림을 통해 SSL Strip 공격 흐름을 이해해보자.

FG0LEHk

  1. Victim(A) 이 가상의 은행 사이트 www.foobarbank.com 에 접속을 요청한다.
  2. 은행 서버(C)는 Victim에게 HTTPS를 사용하는 로그인 페이지 링크가 포함된 Response를 전송한다
  3. 이때 Attacker (B)는 Response를 가로채어 모든 링크 주소를 https에서 http로 변경한 후 Victim에게 전송한다.
  4. Victim과 Attacker 사이에는 http 통신을 하게 되어 Credential Info가 포함된 Request를 Attcker가 볼 수 있게 된다.
  5. Attacker는 가로챈 Request를 사용하여 은행 서버(C)와 HTTPS 통신을 맺는다.

요약 정리하자면 Attack는 Victim에게 다음의 원본 컨텐츠 (HTTPS 링크가 포함)를

다음과 같은 형태로 강제로 변경하여 전송하게 된다.

이후 Victim은 HTTP로 변경된 사이트로 접속하게 되고, 공격자는 중간에서 트래픽을 가로채서
모든 전송 내용을 평문으로 볼 수 있다.

 

SSL Strip 방어기법과 우회 방법

HSTS(Http Strict Tansport Security)는 RFC-6797에 정의되어 있으며 2012년 표준으로 지정되었다.
HSTS를 사용하게 되면 사용자가 브라우저에 http 주소를 입력하더라도 Https를 사용하는 페이지로
자동으로 연결되어 SSL-Strip과 같은 MITM 공격을 사전에 방지할 수 있다.
(즉, Client 레벨에서 HTTPS 사용을 강제하게 된다)

대표적인 예로 구글의 Gmail의 경우 브라우저에 http://www.gmail.com으로 접속해보면,
자동으로 https://www.gmail.com 에 연결되는 것을 확인할 수 있을 것이다.
with-hsts

따라서, HSTS가 적용된 페이지에 기존의 SSL-Strip과 같은 방식으로 MITM을 시도할 경우,
브라우저 레벨에서 강제로 HTTPS페이지로 변경되어 접속되기 때문에 공격이 불가능하다.

그러나 2014년 블랙햇 아시아 컨퍼런스에서 “Leonardo Nve Egea”가  sslstrip+ 를 공개하면서
HSTS를 우회하는 MITM 공격기법이 알려지게 되었다.
이 도구는 HSTS 의 정책이 Hostname 기반으로 적용된다는 헛점(?)을 이용하였는데,
동작 원리는 다음과 같다.

sslstrip-2

  1. Client가 DNS 요청시 DNS Spoofing을 통해 정상 URL과 유사해 보이는 Sub-Domain을 반환한다.

    (실제 주소 앞에 “w”문자가 하나 더 추가된 상태)
  2. 해당 Sub-Domain에 대한 HSTS정책이 적용되지 않기 때문에 (Hostname 불일치)
    Client는 변조된 http 주소로 접속을 시도한다.
  3. 공격자는 중간에서 POST 값등을 가로챈 후, 실제 서버와는 HTTPS 통신을 하게 된다.
  4. 서버에서 오는 모든 반환값에서 https 링크를 http로 변조한 후 Client에게 재전송한다.

단 HSTS 를 적용할 때 “includeSubDomain” 옵션이 누락된 경우에만 위 시나리오대로 공격이 가능하다.
(해당 옵션이 적용되면 모든 Sub-Domain에 대해 HSTS가 적용되기 때문)

그럼 실제 필드에서 HSTS 우회 공격을 어떻게 활용할 수 있는지 실습해보도록 하자.

 

HSTS Bypass를 통한 계정 탈취 공격 실습

이번 포스팅을 작성하면서 “Bettercap” 이란 아주 Awesome 한 MITM 도구를 발견하게 되어,
이 도구를 통해 위 내용을 실습해보도록 하겠다.

Bettercap은 Ruby 기반으로 작성된 MITM 도구이며, 칼리 리눅스에 설치된 Ettercap 보다
확장성면에서 훨씬 강력한 기능을 제공한다.
Bettercap은 gem을 통해 다음과 같이 설치할 수 있다.

Bettercap은 root 권한으로만 동작하므로, sudo 명령을 통해 실행한다.
설치가 완료되면 help 명령을 통해 대략적인 사용법을 살펴보도록 하자.

많은 옵션이 있는것처럼 보이나 실제 공격시 사용할 옵션은 제한적이므로 걱정할 필요는 없다.

SSL Strip 공격을 위해 필요한 몇가지 필수 옵션에 대해서만 짚고 넘어가도록 한다.

  • -T : 공격 타겟 IP를 설정하는 옵션. 전체 네트워크를 공격할 것이 아니라면 반드시 설정한다.
  • -X : Sniffing 모드로 동작하며 트래픽 모니터링만 가능하다. (Spoofing은 하지 않음)
  • –proxy : 가장 중요한 SSL Strip 공격에 사용되는 옵션이다. 모든 링크 주소를 http로 변경해서 보낸다.
  • -P : Parser로써 패킷 내용중 특정 프로토콜에 매칭되는 것을 파싱해서 보여준다.
  • –proxy-module MODULE : SSL Strip 공격시 추가적으로 모듈을 장착(?)해서 사용할 수 있다.
  • –httpd : bettercap 자체적으로 http 서버를 올려준다. 기본 포트는 8081번으로 셋팅된다.

이제 본격적으로 SSL Strip 실습을 해보도록 하자. 위에서 설명한 기본 이론에서는 facebook과 twitter를
공격 대상으로 햇으나, 실험해본 결과 현재는 모든 URL에 대해 HSTS 정책이 적용되어 Strip 공격이 불가능했다.

단, 기존 패치되기 이전 facebook SSL Strip 공격을 보고 싶다면 아래 영상을 참고하도록 하자.
(bettercap 이 사용되었다.)

 

공격 대상을 찾기 위해 몇가지 테스트를 해 본 결과, 일부 메일 서비스에 HSTS가 적용된 것을 알 수 있었다.
gmail과 함께 가장 많이 사용되는 메일 서비스인 hotmail은 SSL Strip 방지를 위해 HSTS가 적용되어 있으나
다음과 같이 bettercap을 사용하여 MITM 공격이 가능하였다. (계정 탈취 가능)

Cap 2016-04-27 18-12-58-722

Victim 측에서는 어떠한 SSL 관련 오류도 발생하지 않으며, 브라우저 주소창을 유심히 살피지 않으면
실제 MITM 공격을 당하고 있다는 것을 인지하기도 쉽지 않아 보인다.

그렇다면 똑같이 SSL Strip을 방어하기 위해 HSTS가 적용되어 있음에도 불구하고,
Gmail은 MITM이 불가한것일까? 정답은 HSTS 설정 옵션에 있다.

서버측에 HSTS를 적용하게 되면 Client 브라우저 요청시 다음과 같은 응답값을 받게 된다.

즉 페이지 요청에 대해 max-age 시간만큼 https 사용을 강제하라고 Client에게 알려주는 것이다.
그러나 위에서도 설명했듯이 이 정책은 hostname 기반으로만 적용되기 때문에
bettercap 을 이용해 sub-domain을 약간만 틀어버리면 https를 사용하지 않도록 우회가 가능하다.

안전한 gmail의 경우 Client 요청시 다음과 같은 응답값을 받을 수 있다.

즉, “www.gmail.com” 뿐만 아니라 “wwwwww.gmail.com” 을 요청하더라도 무조건 https를 사용하게 되어
훨씬 안전한 통신이 가능하며, SSL Strip 공격은 불가능하게 된다.
hotmail의 경우 “includeSubDomains” 옵션이 누락되어 있었기 때문에,
서브도메인 (“wwwww.hotmail.com”)을 조작하게 되면 HSTS 정책이 적용되지 않게 되는 것이다.

이메일 뿐만 아니라 Amazon과 같은 큰 규모의 온라인 쇼핑 서비스 역시 bettercap을 통해 MITM이 가능하였다.

Cap 2016-04-27 10-51-08-805

 

SSL 적용의 현실과 장애물

지금까지 HSTS Bypassing 기법을 이용해 SSL Strip 과 MITM 공격을 알아보았다.
이상적으로는  Google과 같이 자사의 전 서비스로 HTTPS를 확대하는 것이 좋겠지만,
개발/운영 환경과 리소스 현실을 고려했을 때는 쉽지 않을 것이 사실이다.

하지만 Google과 같은 흐름은 점차 확대될 것이며, 글로벌 상위 사이트 역시 이러한 흐름에
점차적으로 동참하고 있다 (https://www.google.com/transparencyreport/https/grid/?hl=ko)

따라서, 장기적인 접근을 통해 HTTPS를 기본적으로 사용하도록 해야하며,
HSTS 적용 역시 Strip 공격에 취약하지 않도록 옵션을 적절하게 설정해야할 것이다.

끝으로, 여러개의 URL에 대해 HSTS Bypass 취약점을 체크할 수 있는 간단한 스크립트를 작성해보았다.

최근 블로그를 통해 해킹 관련 기술을 악용하려는 사람들이 있지는 않을까 걱정이 되는데
이번 포스팅도 꼭 연구 목적 혹은 모의 해킹 용도로만 활용되었으면 하는 바램이다.

참고문서

https://avicoder.me/2016/02/22/SSLstrip-for-newbies

http://jetcat.nl/blog/bypassing-http-strict-transport-security-hsts

 

Site Footer

Sliding Sidebar

About Me

About Me

June Park