LOKIDN! 재미있는 IDN HomoGraph Attack 벡터

한 2주전쯤인가요? EDB에서 재미있는 문서 하나를 보았습니다. 서로 다르지만 비슷하게 생긴 문자들 이용한 공격 기법인 IDN Homograph attack으로 웹을 공격하는 재미있는 방법이라 정리해서 글로 공유해봅니다.

IDN Homograph attack인 LOKIDN 입니다.

IDN

IDN은 Internationalized Domain Names로 직역하면 국제화 도메인 네임입니다. 컴퓨터에서 자주 사용되는 Ascii 등의 문자 이외의 문자를 표현하기 위한 문자들로 여러 언어와 특정 국가 등에서만 사용되는 문자 등으로 이루어져 있습니다.

오늘 이야기할 IDN Homograph attack 이외에도 XSS나 SSRF 등에서도 많이 사용하기 때문에 개인적으로 문자셋을 정리해뒀으니 참고하시면 좋을 것 같습니다.

Phoenix > IDN Chars

IDN HomoGraph Attack

IDN HomoGraph Attack은 서로 다른 비슷한 문자를 이용해 어떤 도메인과 통신하는지 속이는 공격입니다. 보통 피싱에서 많이 사용되고 눈썰미가 정말 좋은거 아니면 이를 구별하기가 어렵습니다.

하나 예시를 들어보면 아래 두 문자는 서로 다른 문자입니다.

  • 영문자 A (Wiki)
  • 키릴문자 А (Wiki

이런 문자열을 이용해서 마치 애플(Apple.com)의 공식 홈페이지를 A가 키릴문자로 구성된 Apple.com으로 도메인을 생성하여 사용자를 낚을 수 있습니다.

라틴어, 키릴문자, 그리스어 영문자랑 유사하거나 동일한 문자 형태이지만 실제로 Bytecode가 다른 문자셋을 이용합니다. 그래서 보통은 미리 구성된 링크(a tag 등)를 사용자에게 클릭하도록 유도하거나 Open Redirect를 이용해서 마치 공식적인 페이지로 접근한 것 처럼 사용자를 속일 수 있습니다. (물론 SSL Chain 보면 금방 알겠지만, 보안에 관심있는 분 아니라면 대다수가 그냥 넘어갑니다..)

<a href='https://Аpple.com'>Apple 홈페이지에서 보기</a>

주소는 애플 사 홈페이지인 Apple.com이지만 실제로 코드 링크 타고 들어가보면 없는 도메인으로 연결됩니다.

LOKIDN

그럼 과연 문서 작성자는 어떤것이 새로운 공격 벡터라고 이야기하고 있을까요?

LOKIDN (Lapse of Keyboard at Internationalized Domain Name)

직역하면 IDN에서 키보드의 Lapse(기억·말 등의 사소한 착오,실수,잘못)를 이용한 공격이고 소스코드상에서 개발자가 Javascript, CSS 등을 실수해서 작성하는 경우 원하지 않는 도메인으로 중요한 요청을 보낼 수 있기에 이를 찾고, 도메인을 소유하여 공격하는 개념입니다.

이러한 일이 잘 발생할 수 있는 이유는 영어 이외의 언어권 키보드에선 특정 문자에 대해 자동으로 치환하는 기능이 있기 때문이에요. 예를들어 같은 a를 입력하더라도 a와 유사한 문자를 쓰는 키보드에선 자동 치환 또는 선택 치환이 발생하게 되고 개발자가 인지하지 못하는 사이에 잘못된 주소가 들어갈 수 있습니다.

<script src="https://Аpple.com/"></script>

How to find?

그럼 관리자가 놓친 부분들은 어떻게 찾을까요? 수동으로 직접 돌아다니면서 콘솔 로그에 known host가 있는지 찾거나 dead link를 찾아주는 도구를 활용하면 조금 더 쉽게 찾을 수 있습니다.

제가 dead link를 쉽게 식별하려고 만든 도구가 있는데, 이를 통해서도 찾을 수가 있습니다.

Deadfinder

# sitemap 
deadfinder sitemap https://www.hahwul.com/sitemap.xml

# from file
cat urls | deadfinder pipe

Reference