ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Host Split Attack
    $ 웹 해킹 $/$ 웹 해킹 이론 $ 2019. 11. 5. 23:11

    Host Split Attack

     

    CTF 문제를 풀다가 우연히 Host Split Attack와 관련된 문제를 접했는데 알아보니, 올해 BlackHat 에서 Microsoft 연구원이 발표한 내용이였더라고요

     

    ms 연구원이 발표한 Host Split Attack :  https://i.blackhat.com/USA-19/Thursday/us-19-Birch-HostSplit-Exploitable-Antipatterns-In-Unicode-Normalization.pdf

     

    그래서 Host Split Attack 에 대해서 한번 다뤄 보려고 합니다.

    해당 기법을 이해하기 위해서는 IDN(Internationalized Domain Name) 에 대해서 알아야 합니다.

     

    대부분은 아스키 코드로 된 도메인을 많이들 사용하지만, 도메인 구입하는 곳에 가보면 한글도메인이라고해서 OOO.한국 와 같은 도메인이 있는 것을 알 수 있습니다.

     

    한글은 아스키 코드가 아니기 때문에 아스키 코드로 된 도메인의 범주에 들어가지 않습니다.

    즉, IDN은 아스키코드가 아닌 다른 문자를 포함하는 도메인을 의미 합니다.

     

    실제 발표에서 MS연구원은 발표 시작 부분을 이렇게 열었습니다.

    This talk is about new Unicode vulnerabilities -> 해당 발표는 새로운 유니코드의 취약성에 대한 것이다.

     

    IDN은 사용자에게 겉으로 표현할때만 사용하고 실제 통신이 일어나면 DNS Query 를 이용하고, HTTP 통신을 위해서 다시 아스키 코드로 변환해서 통신합니다.

     

    IDN을 아스키 코드로 변환하는 방식으로는 2가지가 있는데 1. Normalization 2. Punycoding 이 있습니다.

     

    Punycoding 은 Punycode 를 인코딩 하는 방식으로, 지정된 규칙에 따라서 아스키 코드가 아닌 문자열을 아스키 문자열로 치환 하며, 치환된 문자열은 xn-- 으로 시작되는 접두어를 가지고 있습니다.

     

    실제로 http://한글.co.krhttp://xn--bj0bj06e.co.kr 이 된다.

     

    https://krnic.or.kr/jsp/resources/domainInfo/punyCode.jsp <- 해당 사이트에서 다국어를 퓨니코드로 변환해줍니다.

     

    하지만 Punycoding은 2순위로 돌아가고 1순위로 먼저 Normalization 이라는 동작이 있었습니다.

    발표 자료에 있는 Normalization에 대한 내용을 같이 보겠습니다.

     

     

    유니코드를 기반으로 Normalization 방식으로 변환을 하는것은 Punycoding 과 달리 여러 비슷한 모양의 문자를 경우의 수를 줄여서 하나로 인식을 시키는 것 같습니다.

     

    http://unicode.org/reports/tr15/#Compatibility_Equivalence_Figure <- 해당 사이트에 들어가 보면 Normalization에 대해서 적혀 있습니다.

     

    유니코드는 각각의 나라 마다 언어가 다르고 모양도 다르기 때문에 경우의 수를 위와 같이 줄여 줍니다.

     

    http://ⓣⓔⓐⓜⓢⓘⓖⓝ.kr 를 들어가 보면 너무나도 잘 들어가 집니다.!

     

    발표에 나왔던 또다른 신기한 예제를 보겠습니다.

    https://evil.c℀.example.com 에 접속을 하면 브라우저에서 Normalization을 수행 하면 URL 은 https://evil.ca/c.example.com 이 됩니다.

     

    이렇게 된다면 1순위 변환인 Normalization 을 하면 https://evil.ca/c.example.com 와 같이 변환이 되기 때문에 이후에 2순위인 Punycoding 변환을 하지 않아도 URL 로 사용할 수 있습니다.

     

    대부분의 브라우저(Edge, IE 등)와 여러 프로그램(.Net, Python, Java)에서 취약점이 발견이 되었지만 현재 패치가 완료 된 상태입니다.

    하지만 패치가 완료 됬다고 해도 원인이였던 Normalization 은 버그가 아닌 정상적인 행동이기 때문에 해당 취약점이 어디서 터질지는 알 수가 없습니다.

    대부분 필터링을 할때 Normalization 하기 이전에 검사를 하기 때문에 Normalization 을 수행한 이후에 검사를 하지 않아서 더욱 심각하다고 이야기 합니다.

     

    해당 Host Split Attack을 아래와 같은 취약점과 같이 사용할 수 있습니다.

    Open Redirect, SSRF 등과 같은 취약점과도 같이 사용할 수 있지만 해당 발표를 하신 ms 연구원은 Attacking OAuth 라고 하면서 OAuth를 깨는데에 있어서 강력하게 작용을 할 수 있을 것 이다 라고 주장합니다.

     

    어떻게 Attacking OAuth가 가능한지 알아 보겠습니다.

     

     

    먼저 공격자 입장에서 인증 서버로 https://evil.c℀.office.com 보내면 서버에서는 hostname 의 맨뒤가 ".office.com"이구나 라고 인식을 하고 Authorization Code 를 보내는데 보내는 곳이 evil.ca 로 보내게 됩니다.

     

    결국 Redirect는 https://evil.c℀.office.com 가 되지만 브라우저(Edge)로 보내지는 URL 은 https://evil.ca/c.office.com 가 되는 것 입니다.

    위와 같은 방식으로 OAuth 타겟으로 해서 Steal Tokens 하는 것 입니다.

     

    아래와 같은 코드가 실행이 되서 .NET 에서 보완했다고 합니다.

     

    위와 같이 코드를 작성하고 실행을 하면 아래와 같이 출력이 됩니다.

     

    위의 패치는 CVE-2019-0657 에 .NET Framework and Visual Studio Spoofing Vulnerability 라는 제목으로 나와 있습니다.

     

    .NET 뿐만 아니라 Python 에서도 해당 취약점이 발생했습니다.

    해당 취약점은 CVE-2019-9636 으로 패치 되었습니다.

     

    자바 또한 CVE-2019-2816으로 패치 되었습니다.

     

    이처럼 Host Split Attack 을 알아 보았습니다.

    나름 흥미롭고 재미있었던 내용이였던 것 같습니다.


    Reference

     

    BlackHat USA 2019 Host/Split : https://i.blackhat.com/USA-19/Thursday/us-19-Birch-HostSplit-Exploitable-Antipatterns-In-Unicode-Normalization.pdf

    퓨니코드 변환기 : https://krnic.or.kr/jsp/resources/domainInfo/punyCode.jsp

    CVE-2019-0657 : https://portal.msrc.microsoft.com/en-US/security-guidance/advisory/CVE-2019-0657

    CVE-2019-9636 : https://bugs.python.org/issue36216

    CVE-2019-2816 : https://www.securityfocus.com/bid/109187/info

     

    댓글

Designed by Tistory.