Blog

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

Nick Simonian
May 22, 2023
6 min read
|   Last updated: Jul 27, 2023
Threat Intelligence
TTPs
Malware

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이 됩니다.

Showing how the IP 1.2.3.4 translates to a decimal representation
그림 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 파일 내부에서 볼 수 있습니다.

webSettings.xml.rels file
그림 2. webSettings.xml.rels 파일

난독화된

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

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

url obfuscation fig 3

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\.)?{1,256}\.[a-zA-Z0-9()]{1,6}\b(*)

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

url obfuscation fig 4

보안, 로깅, 위협 인텔리전스 도구가 이 정규식을 사용하여 구축된 경우 난독화된 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://[email protected]"

 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://[email protected]"

 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
[email protected]/O
__O.DOC