콘텐츠 개요
- 개요
- 초기 벡터
- 감염 사슬
- .SVG 첨부 파일 분석
- .HTA 파일 분석
- .VBS 파일 분석
- .ps1 파일 분석
- 다운로더/로더 분석
- 안티-VM 기술
- 지속성 기술
- 다운로드 및 로더 기능
- AsyncRAT 페이로드
- MD5 파일
- 빠른 회복 Seqrite 탐지
- MITRE 공격 전술, 기술 및 절차(TTP)
소개 –
악성코드 공격에 SVG 파일 사용이 크게 증가했습니다. 겉보기에 무해해 보이는 이 파일에는 해커가 은밀하게 피싱 공격을 실행하는 데 사용하는 유해한 스크립트가 숨겨져 있을 수 있습니다.
최근, 스페인어로 사법 통지(Judicial Notification) 미끼를 사용하여 콜롬비아 사용자를 표적으로 삼는 공격이 발견되었습니다. 이 캠페인은 지리적 및 기관 정보를 활용하여 피싱 미끼가 대상 피해자에게 더욱 합법적이고 신뢰할 수 있게 보이도록 하는 방식을 보여줍니다. 이 캠페인은 SVG, HTA, VBS 및 PowerShell 단계를 활용하여 로더를 다운로드하고 디코딩한 후, 최종적으로 AsyncRAT을 정상적인 Windows 프로세스에 주입하여 탐지를 피합니다.
초기 벡터 –
캠페인은 "사법 통지"를 가장한 교묘하게 작성된 피싱 이메일을 따릅니다.Juzgado 17 Civil Municipal del Circuito de Bogotá”이는 "보고타 순회법원 제17시 민사법원"을 의미합니다. 보고타는 콜롬비아의 수도이자 최대 도시이며, 법원, 정부 부처, 기타 공무원 등 많은 정부 기관이 이곳에 있습니다.

이메일 본문에는 스페인어로 된 아래 메시지가 포함되어 있습니다.
귀하를 상대로 제기된 소송이 첨부되어 있습니다.
보고타 순회법원 제17시민사법원
2025 년 9 월 11 일
감사합니다.
사법 통지 시스템
이메일은 공식적인 사법 통지문의 스타일에 맞춰 작성되었으며, 공식적인 법률 용어와 기관 명칭을 사용했습니다.
스팸 메일에는 .SVG(Scaler Vector Graphics) 파일이 첨부되어 있습니다. 파일 이름은 "Fiscalia 장군 De La Nacion Juzgado Civil 17.svg"이것은 영어로 "Attorney General's Office Civil Court 17.svg"로 번역됩니다.
이렇게 신중하게 작성된 이메일은 소셜 엔지니어링과 공식적인 것처럼 보이는 내용을 활용해 수신자가 첨부 파일을 열도록 유도하는 감염 사슬의 중요한 진입점입니다.
감염 사슬 –

위의 다이어그램에서 볼 수 있듯이 감염 체인은 제목을 포함하는 사법 피싱 미끼(스페인어)로 시작됩니다. "대법적 요구 – Juzgado 17 Civil Municipal" — 겉보기에 무해한 .SVG 파일을 가지고 다닙니다.
.SVG 파일을 열면 법무부 장관 사무실로 위장한 가짜 웹 페이지로 연결됩니다. 이 웹페이지는 사용자에게 공식 웹사이트에서 중요한 문서를 다운로드하도록 요청합니다. 해당 페이지를 클릭하면 공격자가 제어하는 다운로드가 실행되어 내장된 .HTA 파일이 다운로드됩니다. 또한 Visual Basic 드로퍼(actualiza.vbs)가 실행되어 설치됩니다.
VBS는 PowerShell 다운로더(veooZ.ps1)를 호출하여 인코딩된 blob을 텍스트 파일(Ysemg.txt)로 가져옵니다. 디코딩 후 blob은 classlibrary3.dll로 작성됩니다.
classlibrary3.dll은 모듈 로더 역할을 합니다. 인젝터 구성 요소와 AsyncRAT 페이로드를 가져온 다음, MSBuild.exe에 AsyncRAT를 메모리 내 주입합니다. 신뢰할 수 있는 프로세스 내에서 RAT를 실행함으로써 공격자는 지속성과 은밀성을 확보합니다.
.SVG 첨부 파일 분석 –
SVG(Scalable Vector Graphics)는 XML 코드(텍스트 기반 형식)를 사용하여 도형, 선, 색상 및 텍스트를 표현하는 이미지 파일입니다. JPG나 PNG와 같은 일반 이미지와 달리 SVG는 픽셀을 저장하지 않습니다. 대신 명령어를 저장하는데, 이는 공격자가 악의적인 의도를 쉽게 저장할 수 있는 공간이 될 수 있습니다. 더욱이, 이러한 파일 유형은 많은 기존 보안 솔루션이 이러한 파일에 악성 코드가 있는지 검사하지 않기 때문에 공격자가 FUD(Fully Undetected, 완전 탐지되지 않음) 상태를 유지할 수 있도록 합니다.
이 캠페인을 분석하는 동안 첨부 파일의 SVG 파일이 QuickHeal에 의해 감지되었습니다.Seqrite.

악성 .SVG 파일을 실행하면 웹 브라우저에서 웹 페이지가 열립니다.

검찰청 및 시민상담포털 관련 웹페이지나 웹사이트를 흉내 낸 것입니다. 사법정보시스템, 가짜 상담등록번호 등 허위 정보를 추가하여 더욱 진짜처럼 보이게 합니다. 또한 피해자가 문서를 다운로드하도록 유도합니다.
SVG 파일의 코드를 분석하면 아래와 같이 정의된 요소를 볼 수 있습니다.

- 스타일="커서:포인터;" – 이미지에 클릭 가능한 커서를 표시합니다.
- 클릭 시=“openDocument()” – 이는 중요한 정의된 요소입니다. 사용자가 SVG를 클릭하면 브라우저는 JavaScript 함수인 openDocument()를 호출합니다. 함수 정의는 아래와 같습니다.

함수 openDocument() –
- base64로 인코딩된 내장 데이터 허용
- 공격자가 제어하는 "HTML" blob으로 디코딩합니다.
- 해당 blob에 대한 임시 URL 객체를 생성합니다.
- 해당 URL을 새 탭에서 엽니다.
다음 단계 HTML 페이지가 열립니다.

위 HTML 페이지는 공식 "라마 사법(Rama Judicial)" 문서 뷰어로 위장하고 있습니다. 가짜 진행률 표시줄 UI를 사용하여 피해자에게 합법적인 다운로드가 진행 중이라고 믿게 합니다.
로드 시 Base64 blob을 디코딩하고 브라우저가 다운로드하도록 강제합니다. 문서_공식_주가도.HTA 파일. HTA 파일은 임의의 Windows 스크립트를 실행합니다.

이 클라이언트 측 드로퍼(Base64 → Blob → createObjectURL → 강제 .HTA 드로퍼)는 추가 페이로드를 전달하고 실행하기 위한 명확한 단계적 드로퍼입니다.
.HTA 파일 분석 –
HTA 파일에는 많은 정크 코드가 포함되어 있으며, 이 정크 코드 사이에는 base64로 인코딩된 부분이 엄청나게 많은 악성 스크립트 덩어리가 숨겨져 있습니다. 이 base64로 인코딩된 부분은 그림과 같이 디코딩되어 actualiza.vbs라는 이름으로 저장됩니다.

.VBS 파일 분석 –
base64로 디코딩된 파일에도 반복되는 불필요한 줄이 많이 포함되어 있으며, 정리하면 아래와 같습니다.

이 코드는 GftsOTSaty라는 변수 내부에 PowerShell 스크립트를 작성합니다. 실제 PowerShell 코드는 "A" 대신 "9&" 문자를 Base64 인코딩하여 이해하기 어렵게 만들었습니다. 디코딩된 코드는 veooZ.ps1 파일에 저장되며, 이후 실행될 예정입니다.
.ps1 파일 분석 –
PowerShell 스크립트는 dpaste 도메인 URL에 연결하고 "Ysemg.txt"라는 이름의 일반 텍스트 파일을 다운로드합니다.

Ysemg.txt는 원시 텍스트 파일입니다. 이 파일의 내용은 정제되어 base64로 디코딩되었습니다. 그림 11에서 볼 수 있듯이 "$$"는 문자 "A"로 대체되고 base64로 디코딩되어
classlibrary3.dll이라는 이름의 .NET 어셈블리 파일입니다. 스크립트에서 "MSqBIbY"라는 메서드가 호출되고, 일부 값이 이 메서드에 인수로 전달됩니다. 이 경우, 전달된 첫 번째 인수는 그림 11에서 볼 수 있듯이 base64로 인코딩된 문자열입니다.

스크립트의 두 번째 인수는 %JkQasDfgrTg%이지만 다른 명령을 확인하면(아래 스니펫 참조) 두 번째 인수로 .vbs 파일 경로를 전달하는 것을 볼 수 있습니다.
![]()

그림 11에서 두 번째 인수로 전달되는 파일 경로에서 “\”는 “$“로 대체되었으며, 이는 .net 파일에서도 다시 대체됩니다.
다운로더-로더 분석 –
디코딩된 파일은 스크립트에 전달된 인수를 통해 하나의 URL을 가져오는 .NET dll이며, 내장된 URL이 하나 있습니다. 정적 코드를 확인하면, 기본적으로 다운로더 파일로 보이지만, 모든 것이 제대로 작동하는지 확인하는 몇 가지 다른 검사 기능이 있으며, 특정 상황에서는 맬웨어의 지속성을 강화하려고 시도할 수도 있습니다.
해당 파일은 심하게 난독화되어 있으며, XOR 연산과 이동 연산 루프를 사용하여 난독화된 값을 디코딩합니다.

이전에 말했듯이 두 번째 인수는 vbs 스크립트의 파일 경로가 되는데, 여기서 "\"는 "$"로 바뀌고, dll 파일은 다시 값을 바꾸고 파일 경로를 적절하게 만듭니다.
안티-VM 기술:

코드에서 VirtualBox 및 VMware 관련 프로세스를 확인하는 분석 방지 트릭이 발견되었습니다. 먼저 yktfr 변수가 4인지 확인하고, 4이면 실행 중인 프로세스를 확인하고, VM 관련 프로세스가 발견되면 해당 프로세스가 존재하는지 확인합니다. 이 경우에는 0이므로 무시됩니다.
지속 기술:
네 번째 인수에 "1"이 있는지도 확인합니다. 1이면 셸에서 실행되는 연결(concatenation)을 통해 PowerShell 스크립트를 생성합니다(그림 15). 하지만 이 경우에는 앞서 언급했듯이 0입니다.
PowerShell 스크립트는 지속성을 유지하기 위해 실행 레지스트리에 vbs 파일을 추가합니다.

마찬가지로 값이 3이면 시작 폴더에 .lnk 바로가기 파일을 삭제합니다. 이것 역시 공격자가 많이 사용하는 지속성 기술입니다.
다운로드 및 로더 기능:

text5의 값은 역순으로 dpaste URL로 디코딩됩니다. 이 URL은 먼저 포맷된 후, "webClient.DownloadString(text5)"를 통해 base64 코드와 stars를 포함하는 txt 파일 형태로 다운로드되어 text4에 저장됩니다. 역순으로 실행하면 base64로 인코딩된 MZ 마커인 TVqQ를 볼 수 있습니다. 다음 단계에서 DLL은 stars를 A로 바꿉니다. 이제 새로운 PE 파일이 생성되었습니다.

이 파일 역시 .NET dll입니다. 비슷한 방식으로 파일이 하나 더 다운로드되지만, 이 경우 URL이 첫 번째 인수입니다. 이 파일은 단순히 역순으로 base64로 인코딩된 .NET 실행 파일이며, text7 변수에 저장됩니다. text7 파일은 실제로 AsyncRAT 파일이며, 이에 대해서는 나중에 설명하겠습니다.

아래 그림(그림 18)과 같이, 새로 다운로드한 dll(text4에 저장됨)은 AppDomain.CurrentDomain() 함수를 통해 로드되고, 두 개의 인수가 전달되는 메서드가 호출됩니다. 호출되는 함수를 확인하면(그림 19), 두 개의 인수가 필요한데, 하나는 주입될 코드이고 다른 하나는 주입될 코드입니다.

따라서 새로운 dll은 MSBuild.exe에 AsyncRAT 페이로드를 주입하는 인젝터 역할을 합니다.
아래는 인젝터 dll의 스니펫입니다. \uFDD0 함수에는 모든 인젝션 관련 함수가 있습니다.

AsyncRAT 페이로드-
AsyncRAT은 C#으로 작성된 원격 액세스 트로이 목마(RAT)입니다. 키 입력 로깅, 추가 페이로드 실행 또는 삽입, 명령 및 제어(C&C) 등 일반적인 RAT 및 데이터 탈취 기능을 제공하며, 정확한 기능은 임베디드 구성에 따라 달라집니다. .NET으로 컴파일된 바이너리이며, 본 연구에서는 코드가 난독화되지 않아 쉽게 분석할 수 있습니다. AsyncRAT의 주요 용도는 데이터를 탈취하여 C&C로 전송하는 것입니다. 분석된 이 페이로드에서 주목할 만한 몇 가지 사항은 다음과 같습니다.
- 지속성을 생성하기 위해 현재 프로세스가 상승된 권한으로 실행 중인지 확인합니다.
- 예인 경우 – schtasks /create /f /sc onlogon /rl highest /tn “ 명령을 사용하여 예약된 작업을 만듭니다. ” /tr “ ”
- 아니요인 경우 registry-HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\ 아래에 경로를 작성합니다.
- Anti-Analysis, Anti-VM, Amsi-bypass 검사가 있습니다.
- 이름이 "DcRatMutex_qwqdanchun"인 Mutex가 있는지 확인합니다.
- 감염된 컴퓨터에 웹캠이 있는지 확인합니다. 웹캠이 발견되면 맬웨어는 나중에 이를 감시 또는 감시 목적으로 사용할 수 있습니다.
- 실행 중인 프로세스를 반복하고 Taskmgr.exe, ProcessHacker.exe 등과 같은 프로세스 모니터링 및 분석 도구를 종료합니다.
- HWID, OS, 사용자 권한, 카메라 존재 여부, 바이러스 백신 정보 등 시스템 세부 정보를 수집합니다.
- C2에 연결을 설정합니다.
- C2 서버에서 보낸 플러그인을 동적으로 로드하고 실행합니다.
- 수집된 데이터를 MessagePack 객체로 안전하게 압축하여 TLS 연결을 통해 전송합니다(대용량 메시지는 전송 전에 청크로 분할됩니다).
파일 MD5 –
b1ed63ee45ec48b324bf126446fdc888
817081c745aa14fcb15d76f029e80e15
6da792b17c4bba72ca995061e040f984
f3b56b3cfe462e4f8a32c989cd0c5a7c
5fad0c5b6e5a758059c5a4e633424555
fe0fc2949addeefa6506b50215329ed9
빠른 회복 Seqrite 탐지 –
트로이 목마.인젝터CiR
HTML.Asyncrat.49974.GC
스크립트.트로이.49969.GC
백도어.MsilFC.S13564499
Trojandownloader.AgentCiR
MITRE 공격 전술, 기술 및 절차(TTP)
| 전술(ATT&CK ID) | 기술/하위 기술(ID) | 순서 |
| 초기 액세스(TA0001) | T1566.001 | 악성 .svg 첨부 파일이 열렸습니다. |
| 실행(TA0002) | T1218.005 / T1059.001 | SVG가 .hta를 삭제/실행 → PowerShell |
| 실행(TA0002) | T1059.005 | HTA는 actualiza.vbs를 작성하고 실행합니다. |
| 지속성(TA0003) | T1547.001 | HKCU\…\Run 아래에 Run 키를 추가합니다. |
| 지속성(TA0003) | T1053.005 | Schtasks onlogon 작업을 생성합니다. |
| 방어회피(TA0005) | T1027 | Base64 / 역방향 문자열 / 정크 난독화 |
| 방어회피(TA0005) | T1562.001 | 보안/모니터링 도구를 죽입니다. |
| 방어회피(TA0005) | T1055 | MSBuild.exe에 AsyncRAT를 주입합니다. |
| 방어회피(TA0005) | T1497 | VM/샌드박스 WMI 및 프로세스 확인(VM에서 종료) |
| 방어 회피 / 충격 (TA0005 / TA0006) | T1112 / T1070 | 특정 레지스트리 키를 삭제/정리합니다. |
| 디스커버리(TA0007) | T1057 | 실행 중인 프로세스를 열거합니다 |
| 디스커버리(TA0007) | T1082 / T1012 | 시스템 정보를 수집하고 레지스트리를 읽습니다. |
| 컬렉션(TA0009) | T1125 | 웹캠 존재 여부 확인 |
| 명령 및 제어(TA0011) | T1071 / T1573 | MsgPack을 사용한 TLS 래핑 TCP |
| C2 및 모듈형 기능(TA0011) | T1105 | 인젝터 및 페이로드 모듈 다운로드 |
| C2 및 모듈형 기능(TA0011) | T1543 / T1609 | 레지스트리에서 플러그인을 필요에 따라 로드합니다. |
| 유출(TA0010) | T1041 | 암호화된 C2(청크)를 통해 데이터를 전송합니다. |


