웹 해킹을 진행 중 SSL이 결려있는 https 에 대한 침투테스트를 진행할 때가 있습니다.
대부분의 site 는 SSL(https)만 적용되어 Proxy를 통해 쉽게 테스트가 가능하지만 개인정보나 중요정보를 다루는 서버는 HSTS 기술이 적용되어 있습니다.
이 HSTS는 기존 HTTPS 보다 더 강화된 형태의 보안 정책이며 Proxy 사용 시 브라우저단에서 HSTS로 인해 요청처리를 하지 않아 테스트 진행 시 불편한점이 상당히 많습니다.
그래서 이 HSTS가 무엇인지, 이것을 피해 테스트를 진행하기 위해 어떤 방법을 생각하고 사용하였는지에 대한 이야기로 풀어나갈까 합니다.
HSTS(Http Strict Transport Security)란?
Wikipedia에서 제공되는 내용을 보면 웹사이트내 Session Hijacking, agains downgrade attack 등에 대응하기 위하여 만들어진 보안정책 메커니즘입니다. 간단히 두면 SSL를 안전하게 처리하기 위한 정책이라고 볼 수 있죠.HTTP Strict Transport Security (HSTS) is a web security policy mechanism which helps to protect secure HTTPS websites against downgrade attacks and cookie hijacking. It allows web servers to declare that web browsers (or other complying user agents) should only interact with it using secure HTTPS connections,[1] and never via the insecure HTTP protocol. HSTS is an IETF standards track protocol and is specified in RFC 6797.
The HSTS Policy[2] is communicated by the server to the user agent via an HTTP response header field named "Strict-Transport-Security". HSTS Policy specifies a period of time during which the user agent shall access the server in a secure-only fashion. -Wikipedia-
이 HSTS 기술은 IETF에서 Proposed Standard로 승인되었고 보안연결이 지정된 사이트만 접근할 수 있도록 서버가 설정하는 보안 메커니즘입니다. 이 기술을 통해서 HTTPS가 아닌 일반적인 URL 접근시에도 강제로 HTTPS로 돌려지는 기능또한 수행되고 있지요.
이제 이런 HSTS가 적용된 사이트에 Proxy를 통해 접근하려고 하면 아래와 같이 Error가 발생하며 연결에 실패합니다.
*******는 유효하지 않은 보안 인증서를 사용합니다. 발급자 인증서를 알 수 없기 때문에 인증서를 신뢰할 수 없습니다. 서버가 적절한 중간 인증서를 보내지 않을 수 있습니다. 가져오기를 하기 위해 추가적인 루트 인증서가 필요할 수 있습니다. (오류 코드: sec_error_unknown_issuer)
일반적인 경우에는 공격의 위험성이 있는 네트워크를 식별하여 사용자에게 좀 더 높은 수준의 보안을 제공하는것 이지만
보안분석가의 입장에서 침투 테스트 시 귀찮은 가림막이 됩니다.. :(
1. FireFox Addon 인 Live HTTP Header 기능 활용
각 브라우저 별로 유사한 형태의 Addon이 있을것으로 생각됩니다. 전 Firefox가 메인 브라우저이기 때문에 Firefox addon인 Live HTTP Header를 사용하여 테스트를 진행합니다.Mozilla Addon에서 간단하게 설치가 가능하며, Proxy가 아닌 브라우저단에서 확인하기 때문에 SSL 기술을 쉽게 우회하여 테스트를 진행할 수 있습니다.
2. HSTS를 지원하지 않는 구버전 Web Browser 를 이용한 테스트
거의 1번의 방법으로 테스트를 하였지만, 불편한점이 많아 자료를 찾아보고 생각해낸 방법은 구버전의 웹 브라우저를 사용하는 방법입니다.HSTS로 인해 테스트가 불편한 사람들도 다수 이 방법을 적용하는듯 합니다.
일단 구버전의 Firefox(3.0정도..?) 를 다운로드 받아 설치합니다. 구버전 사용은 보안적인 이슈가 있을 가능성이 높기 때문에 VM에서 별도로 설치하여 Proxy를 분석 PC로 돌려 사용하는 방법으로 해볼까합니다.
일단 가상환경(VM)에서 구버전의 웹 브라우저(Firefox 3.0) 은 다운로드/설치합니다.
아주 옛날 버전의 브라우저는 HSTS를 지원하지 않기 때문에 Server에서 HSTS 설정이 되어있어도 처리되지 않고 사용이 가능합니다.
여기서 VM에서 Burp or Fiddler 등을 설치해서 테스트하시면 바로 하면되고, 메인 분석 PC에서 테스트를 하려면 Proxy 주소를 분석 PC 주소로 맞춰줍니다. 그리고 Burp등에서 원격지에서 넘어온 데이터를 받을 수 있게 설정하고 테스트를 진행하면 HSTS의 구속 없이 취약점 진단이 가능합니다.
3. CA(인증서) 설치
가장 확실한 방법입니다. 웹 브라우저에 프록시 툴에서 제공하는 CA, 또는 직접 구성한 CA를 로컬단에서 직접 인증서로 설치해주면 웹 브라우저는 프록시 서버를 정상적인 서버로 판단하고 에러가 발생하지 않습니다.Burp, ZAP 인증서 |
HAHWULSecurity engineer, Gopher and H4cker! |
좋은 정보 감사합니다. ^^
ReplyDelete감사합니다 :)
ReplyDelete서버 운영하는데 자꾸 HTTPS로 리디렉팅되어서요ㅠㅠ
ReplyDelete헤메다보니 결국 이게 문제였네요 감사합니다 :)
도움되셨다니 기분 좋네요~
Delete감사합니다 :)
예전엔 잘되었는데 요즘에 hsts에 막혀서 고생하고 있었는데... 그랬었군요...
ReplyDelete