보안 / 브라우저

“모양은 같은데 의미는 다른” 동형이의어를 통한 피싱 기승

Glenn Fleishman | Macworld 2017.05.31
“a”가 내가 생각하는 그 “a”가 아니라면? 브라우저의 위치 필드 또는 스마트 검색 필드에 URL의 일부로 표시되는 a는 내가 아는 a가 아닐 수도 있다. 로마자 이외의 문자가 뒤늦게 도메인 이름에 추가되면서, 이를 표현하기 위한 하위호환 방법이 피싱에 악용되고 있다.



유니코드는 전 세계에 사용되는 언어, 그리고 수학이나 게임과 같은 다른 표기법의 기본을 형성하는 문자, 기호, 표의문자, 글씨 등 거의 모든 그림 문자를 표현할 수 있다. 유니코드 컨소시엄은 수십 년 전부터 활동했지만 유니코드가 운영 체제와 브라우저, 앱에 완전히 보편화된 것은 불과 몇 년 전부터다.

그러나 인간이 읽을 수 있는 위치 및 리소스 이름을 숫자와 기타 데이터로 변환하기 위해 운영 체제가 사용하는 도메인 이름 시스템(DNS)의 기원은 유니코드가 탄생하기 이전까지 거슬러 올라간다. DNS는 너무나 보편화되어 있어서 이를 변경할 경우 수억 명의 사람들과 수억 개의 기기에 호환성 문제가 발생할 수 있다. 도메인을 소유하지 않은 사람이 도메인을 스푸핑하는 것을 차단하기 위해 도메인 이름에 암호화 요소를 사용하는 것과 같은, 지극히 합당한 개선이 아직도 시행되지 못하는 이유가 그래서다.

도메인은 가능한 모든 그림 문자의 아주 작은 부분집합인 26개의 로마자(대소문자 구분 없음), 숫자 0~9, 그리고 하이픈으로 인코딩된다. 마침표(.)는 도메인 이름의 요소를 구분하는 데 사용된다. 로마자 영어 이외의 글씨를 사용해서 생활하고 쓰고 거래를 하는 사람들에게는 불편할 수밖에 없다. ñ 또는 é가 필요해도 사용할 수 없다. 세계에는 로마자 영어를 사용하지 않는 사람들이 대다수이므로 어떤 식으로든 해결 방안이 필요했다.

문자를 다른 문자 안에 숨기기
2003년 등장한 방법은 “퓨니코드(punycode)”다. ASCII 문자를 사용해서 DNS에서 허용되는 문자 집합 이외의 문자를 표현하기 위한 방편이다. 퓨니코드를 사용하면 예를 들어 xn--ri8h56g.com으로 변환되는 (삐에로, 복숭아모양 아이콘).com을 등록할 수 있다. 이 코드는 유니코드 문자를 압축해서 표현하는 방식으로, 브라우저가 압축을 해석해서 표시한다.

하지만 고질적인 문제가 있다. 언어가 달라도 모양은 비슷한 문자가 많다는 것이다. 사실 위치/검색 표시줄에 사용되는 것과 글꼴이 완전히 똑같은 경우도 있다. 바로 동형이의어다. 동형이의어는 일반적으로 철자는 똑같지만 의미는 다른 단어를 뜻한다. 이 글에서 말하는 동형이의어는 조금 다르다. 사실 철자가 다른 데도 불구하고 모양은 똑같은 단어다.

피싱 사기꾼은 이를 악용해서 예를 들어 퓨니코드에서 유니코드로 변환되어 브라우저 필드에 “apple.com”으로 표시되는 도메인을 등록할 수 있다. 이러한 도메인은 합법적인 TLS 인증서까지 받을 수 있으므로 도메인이 “진짜” 도메인인지 확인하는 습관이 있는 꼼꼼한 사용자라도 자물쇠 아이콘과 https 연결 표시에 속아 넘어가기 쉽다.

각 브라우저는 피싱 위험을 줄이기 위해 지난 몇 년 동안 퓨니코드 변환에 제한을 추가해왔지만, 최근 업계 연구자들이 다른 언어에서 로마자와 똑같은 모양의 문자만 사용할 경우 브라우저에서 이를 제대로 처리하지 못한다는 점을 지적하면서 이 문제가 다시 불거지고 있다. 한 연구자는 전체가 키릴 문자인 “apple.com”을 등록할 수 있으며 크롬과 파이어폭스에서 렌더링된 유니코드로 표시된다는 점을 발견했다.

하나의 도메인에 여러 문자가 섞인 경우, 모든 주요 브라우저는 ASCII 퓨니코드 도메인을 변환 없이 그대로 표시한다. 다른 언어의 “a”를 로마 문자들 중간에 섞어 사용하는 수법을 방지할 수 있는 손쉬운 방법이다. 일부 브라우저는 사용 중인 기기에 설치되지 않은 언어 조합으로 구성된 경우, 또는 언어가 국가 코드 최상위 도메인(예를 들어 일본의 경우 .jp)과 일치하지 않는 경우 해당 퓨니코드를 렌더링하지 않는다. (위키피디아에 자세한 설명이 나와 있다.)

일부 최상위 도메인(TLD)은 특정 언어로 된 이름만 수락한다. 예를 들어 .рф(러시아 연방) 도메인은 전체가 키릴 문자여야 한다. 더 보편적인 TLD(예를 들어 .com)는 국제적인 용도와 호환성을 더 폭넓게 지원하기 위해 이보다는 덜 엄격한 정책을 사용하므로 브라우저가 도메인을 심사해야 한다.

사파리와 인터넷 익스플로러는 이 새로운 피싱 방법에 안전한 것으로 보인다. 크롬은 .com과 같이 언어 제한이 없는 도메인에서 도메인 이름이 키릴 동형이의어 문자(로마자와 똑같이 생긴 문자)만 사용하는 경우, 퓨니코드 렌더링을 방지하도록 업데이트됐다. 이 기능은 크롬 58부터 적용된다.

파이어폭스는 이 대열에 합류하지 않고 있는데, 렌더링되지 않은 퓨니코드를 표시할 경우 로마 문자가 불공정하게 기본 문자가 되고, 피싱 의도가 전혀 없는 도메인 소유자에게 불이익이 될 수 있다는 우려 때문이다.

퓨니코드 피싱 해결과 모니터링
파이어폭스 사용자이면서 IDN 도메인을 방문하지 않고 이러한 URL의 표시에 대해 신경 쓰지 않는다면 이 렌더링 설정을 비활성화할 수 있다.

1. about:config으로 이동한다.
2. 검색 필드에 punycode를 입력하면 network.IDN_show_punycode 설정이 표시된다.
3. false를 두 번 클릭해 true로 바꾼다.

 파이어폭스는 여전히 문제가 되는 퓨니코드를 표시한다. 설정 중 하나를 변경하면 기본 도메인 ASCII가 항상 표시된다.

다음은 동형이의어를 차단하기 위한 브라우저의 방책을 우회하는 다른 사례가 발생할 경우 퓨니코드 피싱을 피하기 위한 세 가지 추가 팁이다.

• URL을 클릭하기 전에 복사해서 TextEdit이나 BBEdit와 같은 텍스트 편집 앱에 붙여 넣는다. URL이 위치/검색 표시줄에 렌더링된다 해도 복사하면 기본 퓨니코드가 복사되므로 붙여 넣기를 하면 본래의 모습이 드러난다.

• https 연결의 인증서를 확인한다. 일반적으로 위치/검색 표시줄의 자물쇠 아이콘을 클릭한 다음 화면에 표시되는 절차에 따라 해당 인증서를 볼 수 있다. 애플 사이트와 같은 모든 주요 사이트는 직접 등록된 인증서가 있다. 이러한 인증서를 생성한 인증 기관은 일종의 검증 과정을 거치게 되어 있으며 인증서의 세부 정보는 비교적 쉽게 알아볼 수 있다. 인증서 소유자가 자신이 생각하는 소유자와 일치하지 않을 경우 위에 설명한 복사/붙여 넣기 방법을 사용한다.

• 계정 정보는 1Password 또는 라스트패스(LastPass)와 같은 암호 관리자를 통해서만 입력한다. 암호 관리자 앱은 동형이의어에 속지 않고 실제 도메인 이름의 기본 정보를 확인한 다음 자동 입력한다. 암호 관리자가 로그인 정보를 자동으로 입력하지 않는다면 그 사이트가 피싱 사이트라는 의미다. (또는 사이트 구성이 잘못되어 암호를 저장해둔 도메인이 아닌 다른 도메인으로 연결되는 경우)
editor@itworld.co.kr

회사명 : 한국IDG | 제호: ITWorld | 주소 : 서울시 중구 세종대로 23, 4층 우)04512
| 등록번호 : 서울 아00743 등록발행일자 : 2009년 01월 19일

발행인 : 박형미 | 편집인 : 박재곤 | 청소년보호책임자 : 한정규
| 사업자 등록번호 : 214-87-22467 Tel : 02-558-6950

Copyright © 2024 International Data Group. All rights reserved.