콘텐츠로 이동하기
위협 인텔리전스

Don't@Me: 스키마 어뷰징을 통한 URL 난독화

2023년 5월 22일
Mandiant

보안 상담

보안에 대한 문의사항을 해당 전문가가 상담해 드립니다.

문의하기

*본 아티클의 원문은 2023년 5월 22일 Google Cloud 블로그(영문)에 게재되었습니다.


URL 스키마를 악용하여 URL의 최종 목적지를 난독화하는 기업이 여러 맬웨어 제품군 배포에 활용되고 있습니다. 맨디언트는 이 공격을 'URL 스키마 난독화'로 이름붙여 추적하고 있습니다. 이 기법은 피싱 공격의 성공 가능성을 높이고 로깅 및 보안 도구에서 도메인 추출 오류를 일으킬 수 있습니다. 예를 들어 네트워크 방��� 도구가 URL이 가리키는 서버를 파악하는 데 의존하는 경우 공격자는 이 기법을 통해 탐지를 우회할 수 있습니다. 이 기법을 사용하면 일반적인 URL 구문 분석 로직을 우회할 수 있어 보안 팀은 위협 캠페인과 공격자 인프라에 대한 가시성을 확보하기 어렵게 됩니다. 네트워크를 보호하는 담당자는 URL 스키마를 악용하여 URL을 난독화하는 것이 로깅, 가시성 등 보안 도구에 문제를 일으키는지 확인해야 합니다.

초기 단서

맨디언트는 SMOKELOADER가 URL 목적지를 난독화하는 데 사용하는 기법을 설명하는 @ankit_anubhav트윗을 관찰하였습니다. 맨디언트는 이 기법을 조사하는 과정에서 다양한 맬웨어 변종 배포에 사용되었음을 발견하였습니다. 트윗 내용을 보면 'hxxp://google.com@1157586937'이라는 URL을 예로 들어 Rick Roll 비디오를 여는 것을 설명합니다. 이 트윗에서는 두 가지 난독화 기법을 설명합니다.

  • 대상 서버를 가리기 위해 '@' 기호를 사용하는 경우
  • 대체 호스트명 형식을 사용해 대상 IP 주소를 가리는 것

'@' 기호를 사용하는 것을 먼저 알아보겠습니다. 이를 이해하려면 URL이 어떻게 구조화되고 클릭 시 브라우저에서 파싱되는지 알아야 합니다. RFC1738은 URL의 구조를 문서화합니다. 섹션 3.1(일반적인 인터넷 스키마 구문)에서는 모든 URL의 기본 구조를 설명합니다.

<scheme>//<user>:<password>@<host>:<port>/<url-path>

섹션 3.3(HTTP)에서는 HTTP URL의 형식이 다음과 같은 구조를 따른다고 명시하고 있습니다.

http://<host>:<port>/<path>?<searchpart>

RFC에서는 "사용자 이름이나 비밀번호는 허용되지 않습니다."라고 구체적으로 명시하고 있습니다. 사용자 이름은 '@' 기호 앞의 텍스트로 정의됩니다. 브라우저는 사용자 이름 섹션이 채워진 URL('@' 기호 앞의 모든 것)을 해석할 때 이를 삭제하고 '@' 기호 뒤에 오는 서버로 요청을 보냅니다.

트윗의 URL과 비교하면 URL의 'google.com' 섹션이 사용자 아이디로 처리되고 있음을 알 수 있습니다. 이는 스피어 피싱 캠페인에서 피해자가 링크를 클릭하도록 유도하기 위해 필요에 따라 수정할 수 있습니다. 예를 들어 이를 표적 이메일 주소 도메인으로 바꾸면 피해자를 더 잘 속일 수 있습니다.

다음으로 대체 호스트 형식을 사용하는 것을 알아보겠습니다. 트윗에 소개된 예에서는 숫자 '1157586937'이 호스트로 처리되고 있습니다. 그러나 서버 IP 주소가 정수로 표시되는 경우는 매우 드뭅니다. 이것이 두 번째 난독화 수준입니다.

점으로 구분된 4진수 IP 주소는 점으로 구분된 4개의 십진수로 구성된 IPv4 주소의 일반적인 표현이며, 각 십진수는 IP 주소의 8비트를 나타냅니다. 예를 들어 IP 주소 1.2.3.4는 이진수 00000001.00000010.00000011.00000100로 나타낼 수 있습니다.

이렇게 이진수로 표현된 IP 주소는 하나의 큰 이진수로 처리한 다음 십진수로 변환하여 단일 정수로 변환할 수 있습니다. 예를 들어 이진수 00000001.00000010.00000011.00000100는 10진수 16909060이 됩니다.

https://storage.googleapis.com/gweb-cloudblog-publish/images/url-obfuscation-fig1_knkd.max-2000x2000.png

그림 1. IP 1.2.3.4를 십진수로 변환하는 방법

브라우저는 변환을 자동으로 수행합니다. 단일 정수 표현만 사용할 수 있는 것은 아닙니다. 16진수를 점으로 구분된 쿼드 형식으로 입력할 수도 있습니다.

hxxp://google.com@0xC0.0xA8.0x0.0x1

옥탈(Octal)도 가능합니다.

hxxp://google.com@0300.0250.0000.0001

위 두 가지를 혼합하여 목적지를 만들 수도 있습니다.

hxxp://google.com@0xc0.168.0x0.1

도메인을 사용하여 합법적인 목적지처럼 보이게 만들 수도 있습니다.

 

hxxp://legit.banking.site.com@loginportal.onlinebanking.orly/loginPortal.php

이 수준의 난독화를 수행할 수 있는 공개적으로 사용할 수 있는 도구가 있습니다. 예를 들어 Vincent Yiu의 IPFuscator는 혼합 유형 및 패딩된 값을 포함한 다양한 변형을 생성합니다.

오남용 현황 및 사례

바이러스토탈을 참조하면 소개하는 오남용 기법이 처음 등장한 것은 2022년 2월인 것으로 보입니다. URL 스키마 난독화가 계속 사용된 이유는 보안 툴에 의한 탐지를 줄이고 피해자가 링크를 클릭할 확률을 높일 수 있기 때문으로 보입니다.

종종 이 기법은 추가 맬웨어 다운로드에도 사용됩니다. 이러한 공격은 여러 취약점을 악용해 피해자가 코드를 실행하도록 유도하는 것으로 나타났습니다. 가장 많이 사용되는 CVE-2017-0199는 여러 다운로드된 문서에서 CVE-2017-11882와 함께 발견되었습니다. 이 기법을 사용해 실행 권한을 획득하는 LOKIBOT, MATIEX, FORMBOOK, AGENTTESLA 등 다양한 상용 맬웨어 제품군이 발견되었습니다.

이제 실제 사례를 좀 알아보겠습니다. 2023년 2월 바이러스토탈 리트로헌트에서 YARA(부록 참조) 규칙을 사용하는 마이크로소프트 워드 문서의 구성 파일이 발견되었습니다. 공격 체인은 템플릿 인젝션 공격과 익스플로잇을 활용하고 암호화된 텔레그램 채널을 통해 데이터를 유출하는 AGENTTESLA를 드롭하는 등 여러 단계로 이루어졌습니다.


Filename PO.docx
MD5 291f6887bdaf248c7f0cdc9e2c9515cb
SHA-256 7dcbd34116b44f88962e2de72a92849304804fa5141513a35a023f5ab510b3bf

PO.docx는 2023년 2월 6일에 바이러스토탈에서 처음 발견되었습니다. 이 문서에는 파일이 열릴 때 ���행되는 템플릿 인젝션 기법이 포함되어 있어 다음 단계의 맬웨어를 요청합니다. 문서 압축이 해제되면 감염 체인의 다음 단계는 webSettings.xml.rels 파일 내부에서 볼 수 있습니다.

https://storage.googleapis.com/gweb-cloudblog-publish/images/url-obfuscation-fig2_wgwp.max-1000x1000.png

그림 2. webSettings.xml.rels 파일

난독화된


 
URL(hxxp://dgdf000000ghfjfgh000000fghfghg0000000fhfghfg000000sdgfggdf00000gdfge00000rtdfgdf00000gdfg@647601465/56.doc)

이 다운로드되고 열립니다. 이 URL은 난독화 해제 시 hxxp://38.153.157.57/56.doc입니다. 템플릿 인젝션으로 인해 마이크로소프트 워드에서 다음과 같은 네트워크 요청이 이루어집니다. 네트워크 트래픽에는 난독화가 존재하지 않으며 사용자 이름 필드가 제거되고 IP 주소의 정수 표현이 점으로 구분된 쿼드 형식으로 변경되었습니다.

 

https://storage.googleapis.com/gweb-cloudblog-publish/images/url-obfuscation-fig3_xepn.max-800x800.png

Filename 56.doc
MD5 fd3ef9f75b0be31f0a482f60a387cb76
SHA-256 1b93a3abb08c33bea46795890d311a201daa56080c4c14eda338eea19a4b4625

 

다운로드된 문서인 56.doc는 2023년 2월 6일에 바이러스토탈에서 처음 발견되었습니다. PO.docx가 발견된 날짜와 같습니다. 56.doc는 CVE-2017-11882를 익스플로잇하여 hxxp://38.153.157.57/156/vbc.exe를 다운로드 및 실행하는 RTF 파일입니다. PO.docx와 달리 URL 난독화 기술은 사용하지 않았습니다.


Filename vbc.exe
MD5 cea776885d515fe1e88bccb71c016af3
SHA256 d8be588eb6eedc59b033c43150cf324fb8e56050e359b47da8017f4c47d264da

이 봇은 내부적으로 'NNbHhH.exe'라는 이름을 가지고 있으며 봇 ID와 토큰 '6010275350:AAH4W3CDRhQk0wgfyhQ_jITTy3QYmrxdDbw'으로 텔레그램을 통해 탈취한 데이터를 전송하는 AGENTTESLA입니다.

탐지

복잡한 정규식(RegEx)을 작성할 때 처음부터 새로 만드는 것은 어렵고 시간이 많이 걸리는 작업입니다. 또한, 사용자가 알지 못하는 잠재적인 엣지 케이스(비정상적이지만 유��한 입력 시나리오)가 있을 수 있습니다. 이런 이유로 많은 개발자가 복잡한 정규식 작성을 시작하기 전에 재사용할 수 있는 공개적으로 사용 가능한 정규식을 검색하는 것을 선호합니다.

흥미롭게도 RegEx에 대한 StackOverflow 게시물은 이런 기법을 사용하여 URL을 찾는 데 실패합니다. StackOverflow 답변에 표시된 RegEx는 다음과 같습니다.

 

https?:\/\/(www\.)?[-a-zA-Z0-9@:%._\+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b([-a-zA-Z0-9()@:%_\+.~#?&//=]*)

Regx101에서 해당 정규식을 사용하면 난독화된 URL을 놓치는 것으로 나타납니다.

 

https://storage.googleapis.com/gweb-cloudblog-publish/images/url-obfuscation-fig4_slcu.max-800x800.png

보안, 로깅, 위협 인텔리전스 도구가 이 정규식을 사용하여 구축된 경우 난독화된 URL을 성공적으로 식별하거나 구문 분석을 할 수 없습니다.

방어자의 경우 네트워크 트래픽 분석에서 이 기법이 사용 중인 것으로 표시되지 않습니다. 브라우저는 이 구문을 사용해 URL로 이동하라는 요청을 받으면 요청을 실행하기 전에 자동으로 유효한 대상으로 변환합니다. 따라서 네트워크 트래픽을 분석하면 난독화된 URL을 볼 수 없습니다.

그러나 YARA나 AV/EDR 같은 파일 기반 분석을 사용하면 프로세스 실행 로그와 마찬가지로 URL 스키나 난독화를 사용하는 도구를 발견할 수 있습니다. 프로그램이 난독화된 URL을 가리키는 파워쉘의 invoke-WebRequest 모듈과 같은 것을 실행하는 경우 난독화된 URL이 로그에 표시됩니다. 파일에서 이를 감지하는 것과 관련해서는 오피스 문서, RTF 및 PDF에서 이를 찾을 있는 YARA 규칙이 포함되어 있습니다.

결론

URL 스키마 난독화는 현재 피싱 링크부터 템플릿 인젝션에 이르기까지 다양한 방식으로 맬웨어를 배포하는 데 악용되고 있습니다. 방어자는 보안 툴링 및 로깅 시스템이 올바른 지표를 탐지, 식별, 구문 분석하여 RFC를 준수하지 않는 형식을 사용하여 방어를 우회하지 않도록 보장해야 합니다. 다른 지표 대신에 제공된 YARA 규칙을 사용하여 URL 스키마 난독화를 탐지하면 그 자체가 악성 지표가 될 수 있으므로 침입을 탐지하고 방지하는 데 도움이 됩니다. 끝으로 본 포스팅 작성에 도움을 준 Connor McLaughlin과 Jared Wilson에게 감사의 말씀을 전합니다.

부록

YARA 룰

 
rule M_Hunting_ObfuscatedURL_DottedQuad
{
 meta:
   author = "Mandiant"
   description = "Finds URL Schema Obfuscation of the format http://loremipsum@1.2.3.4"
 strings:
   $doc = {d0 cf 11 e0}
   $pdf = {25 50 44 46 2D}
   $docx = {50 4b 03 04}
   $rtf = {7b 5c 72 74}
     $url = /https?:\/\/[\w\d\-\_]{1,255}\@\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}(\:\d{1,5})?/ nocase
   condition:
     ($doc at 0 or $docx at 0 or $pdf at 0 or $rtf at 0) and filesize < 3MB and $url
}
 
rule M_Hunting_ObfuscatedURL_Integer
{
 meta:
   author = "Mandiant"
   description = "Finds URL Schema Obfuscation of the format http://loremipsum@16909060"
 strings:
   $doc = {d0 cf 11 e0}
   $pdf = {25 50 44 46 2D}
   $docx = {50 4b 03 04}
   $rtf = {7b 5c 72 74}
     $url = /https?:\/\/[\w\d\-\_]{1,255}\@\d{8,10}(\:\d{1,5})?/ nocase
   condition:
     ($doc at 0 or $docx at 0 or $pdf at 0 or $rtf at 0) and filesize < 3MB and $url
}

 

rule M_Hunting_ObfuscatedURL_DottedQuadHex
{
 meta:
   author = "Mandiant"
   description = "Finds URL Schema Obfuscation of the format http://loremipsum@0x01.0x02.0x03.0x04"
 strings:
   $doc = {d0 cf 11 e0}
   $pdf = {25 50 44 46 2D}
   $docx = {50 4b 03 04}
   $rtf = {7b 5c 72 74}
     $url = /https?:\/\/[\w\d\-\_]{1,255}\@0x[a-fA-F0-9]{1,2}\.0x[a-fA-F0-9]{1,2}\.0x[a-fA-F0-9]{1,2}\.0x[a-fA-F0-9]{1,2}(\:\d{1,5})?/ nocase
   condition:
     ($doc at 0 or $docx at 0 or $pdf at 0 or $rtf at 0) and filesize < 3MB and $url
}
 

맬웨어 제품군


AGENTTESLA hxxp://OASOSIDFOSWEROEROOWRWERWEREW
WW0W83W338W83WOWRWWRWRWRW9W9R9W9R
9WR9W9RW9R9W9R9W9R0WR7RR7W7RW7RRW7R
66WSD6DSD6S6D6DSD66D6S@39209
5676/58..........................58.......................doc
LOKIBOT hxxp://xzcbbsjjfhjsdjzazazasvxcvnbbzaszxccvx@3
92133367/xzswqqazzza_sxcvbnzazazzzzzzza_zxas
dazzzasdzczxc/xzzzcv_qazzxcs.doc
FORMBOOK hxxp://ZZZJOOIOIOSDP99090SDXDdad9SDED990
00DF00DF0SDF00DF0XCCXC0V00S0FDS0F0DF00S
SZZZZZZZZ0X0C0XCZZXC0X@392117348/22u.22u.
22u.doc
MATIEX hxxp://WEEEERRRRRRRRRRRPPPOOOOSSSSSSSO
OOOOPPWEEEEEEEOOOOOOOCCVVVVVVVVOVV
VVVVVVVVVVVVVVOOOOOO@104.168.32.152/O
__O.DOC

-Mandiant, 작성자: Nick Simonian

게시 위치