BlackHat, Defcon 시즌이 끝났습니다. 블랙햇 USA는 세계에서 가장 큰 해킹 컨퍼런스인만큼, 매년 흥미로운 발표가 있기 마련이죠.
올해에는 MS의 한 연구원이 Host split attack 이라는 발표를 내놓았는데 내용이 재미있어 정리해서 올립니다.
이 공격을 이해하기 위해서는 먼저 IDN(Internationalized Domain Name)에 대해서 이해를 해야합니다.
IDN은 아스키코드가 아닌 다른 문자를 포함하는 도메인을 의미하는데, 가끔 보이는 어쩌구.한국 같은 도메인 역시 한글은 아스키코드가 아니므로 IDN입니다.
이 IDN은 단지 우리에게 표시될때만 사용되고 실제 통신을 할 때에는 dns query, 그 후의 HTTP 통신등을 위해서 결국 아스키코드로 변환됩니다.
아스키코드로 변환하는 방법은 1. Normalization 2. Punycoding 입니다.
Punycode는 아마 한 번쯤 들어보셨을 것 같습니다.
지정된 규칙에 따라서 아스키코드가 아닌 문자열들을 아스키문자열로 치환하며, 치환된 문자열은 xn-- 으로 시작하는 접두어를 가집니다.
예를들어 루비야.kr 은 xn--2s2b21ho6g.kr 와 동일한 도메인입니다.
ё 같은 키릴문자, 그리스문자 등을 사용한 피싱이 이슈가 되기도 했었습니다. navёr.com 같은 도메인은 정신줄놓고 낚이기 딱 좋죠.
그런데 punycode는 2순위이고 1순위에는 Normalization 이라는 처음 보는 동작이 있습니다.
Normalization은 위와 같이 유니코드의 경우의 수를 줄이는 것 같이 보입니다.
좀 더 자세히 알기 위해서 레퍼런스를 확인해봅시다. http://unicode.org/reports/tr15/
Font variants | ℌ | → | H |
ℍ | → | H |
그렇다네요. http://webℍacking.kr/ 에 접속해보면 실제로 브라우저에서 normalization을 수행해 ℍ가 H로 바뀌며 잘 접속되는것을 볼 수 있습니다.
localℍost 등으로 응용할 수 있겠네요.
몇 가지 예제가 더 있는데 쭉 내리다보면 이런게 보입니다.
Fractions | ¼ | → | 1/4 |
¼은 1/4로 normalization 된다고 합니다.
조금 더 활용하기 쉬운 예시로 ℀는 a/c가 된다고 합니다.
??? 뭔가 이상합니다.
그럼 http://evil.c℀.example.com 에 접속해서 브라우저가 normalization을 수행하면…
URL은 http://evil.ca/c.example.com 이 됩니다.
Edge, IE, .Net, Python, Java 등에서 해당 취약점이 발견되었지만 패치가 완료된 상태입니다. 웹해커들의 친구인 Fiddler 프록시 역시 .Net을 사용해 개발되었기에 동일한 취약점이 발생했다고 합니다.
다만 패치가 되었다고 해도 normalization은 버그가 아닌 정상적인 행동이기에 해당 공격이 발표된지 1주일도 안된 현 시점에서 어떤 라이브러리에서 똑같은 취약점이 터질지 알 수 없습니다. 직접 테스트 해보는 수 밖에요.
이 취약점이 더 심각한 이유는 개발자들이 URL의 Host를 검사할 때 누구도 normalization을 수행한채로 검사하지 않기 때문입니다.(분명 이 글을 읽는 독자분도…)
Open Redirect, SSRF 등에 악용이 가능하며, 발표자는 OAuth를 깨는데에 크리티컬하게 작동할 수 있다고 주장하고 있지만 사실 이건 그냥 Host Spoofing 기법 중 하나일 뿐 OAuth에 더 치명적이거나 하진 않습니다.
마무리로 비슷한 효과를 낼 수 있는 예시들을 더 소개하며 끝마칩니다.
U+2048 ⁈ | U+FF1A: |
U+FF0F / | U+2488 ⒈ |
U+FF03# | U+FE47 ﹇ |
U+FF20 @ | etc… |
P.S. 저는 지금 피씨방에서 이 글을 쓰고있는데 IE에서 http://⒈rubiya.kr 을 접속하니 http://1.rubiya.kr 로 잘 접속됩니다. 실제로 보니까 충격과 공포네요…