1. 개요
PlugX는 주로 중국 APT 그룹과 연관된 원격 접근 트로이목마(RAT, Remote Access Trojan)로 알려져 있으며, 장기간 은밀한 침투와 정보 탈취를 목적으로 악성코드가 이용되며, 최근 PlugX 공격 그룹은 동남아시아 및 중동 특정 국가 및 외교와 관련된 Target 형태의 공격에 집중화된 양상을 보이고 있습니다.
본 보고서에서는 1분기에 발견된 주요 PlugX 공격 사례에서 확보한 악성코드 샘플들을 분석한 결과를 설명하고 있습니다. 최근 PlugX 관련 공격은 하나의 정형화된 악성코드가 아니라, 목적에 따라 트리거 파일과 로더 구성은 물론 암호화 방식까지 각기 다르게 커스텀된 양상을 보입니다.
본 분석의 핵심은 PlugX의 광범위한 특성을 설명하는 것이 아니라, 다양한 공격 캠페인에서 관찰된 변종들 사이의 특징적 차이점을 분석하는 데 있습니다. 이를 통해 공격자들이 탐지 회피를 위해 사용한 구체적인 기술적 변화와 그 진화 과정을 상세히 다루고자 합니다.
| 캠페인 명칭 | 주요 타깃 국가 | 미끼 파일 내용 |
|---|---|---|
| BRICS+ Security Summit Campaign | BRICS+ 회원국 외교관, 국제 대테러 기구 및 전문가 | 러시아 외무부(Ministry of Foreign Affairs of the Russian Federation)를 사칭하여 BRICS+ 대테러 컨퍼런스 보고서로 위장 |
| Hội nghị bàn giao công tác(업무 인수인계 회의) | 베트남 | 베트남 공안부(경찰 및 내무 행정)의 인사 이동 관련 내용 위장 |
| Turkish e-Invoice (e-Fatura) | 터키 | 터키 여행사(Jolly Tour) 결제 영수증 위장 |
| OECD Energy Market Implications | OECD 회원국 | 중동 정세 및 에너지 시장 관련 OECD 보고서 위장 |
| Nepal CIAA Impersonation Campaign | 네팔 정부 기관 및 공공 교육 행정직 | CIAA 네팔 수사기관(부정부패조사위원회) 위장 |
2. 트리거 파일 및 미끼 문서
2-1. BRICS+ Security Summit Campaign
- BRICS Report.lnk (바로 가기 파일)
- 러시아 외무부(Ministry of Foreign Affairs of the Russian Federation)를 사칭하여 BRICS+ 대테러 컨퍼런스 보고서로 위장
2-2. Hội nghị bàn giao công tác(업무 인수인계 회의)
- Hội nghị bàn giao công tác.docx.lnk (바로 가기 파일)
- 해당 문장은 베트남 공안부의 인사 이동과 같은 민감한 내용을 위장한 것으로 보입니다. 또한 ‘속보’ 의미로 사용된 “Bất Phong”은 일반적인 표현이 아니며, 베트남어에서는 “Bất ngờ”가 보다 자연스럽다고 판단됩니다. 따라서, 전반적으로 현지 언어 기준에서 어색한 표현으로 베트남인이 아닌 타 국가 언어 사용자가 번역기를 이용했을 것으로 추측됩니다.
2-3. Turkish e-Invoice (e-Fatura)
- e-Fatura.chm (윈도우 도움말 파일)
- 터키 여행사(Jolly Tour) 결제 영수증 위장
2-4. OECD Energy Market Implications
- OECD_Update_on_implications_for_energy_markets_of_events_in_the_Middle_East.lnk (바로 가기 파일)
- 중동 정세 및 에너지 시장 관련 OECD 보고서 위장
2-5. Nepal CIAA Impersonation Campaign
- 6z03.msi (윈도우 설치 파일)
- 네팔의 부패 방지 및 수사 기구인 부정부패조사위원회(CIAA, Commission for the Investigation of Abuse of Authority) 서케트(Surkhet) 지부에서 보낸 공문 위장
3. 행위 분석
3-1. 초기 침투 및 트리거 메커니즘
공격자는 대상 환경에 따라 다양한 형태의 트리거 파일을 활용하여 초기 침투를 시도합니다. 각 파일은 실행 시 내부 스크립트를 통해 후속 단계로 진행됩니다.
- LNK (바로 가기 파일): 문서로 위장하여 사용자의 클릭을 유도, 내부 CMD/PowerShell 명령어 실행
- CHM (윈도우 도움말 파일): HTML 도움말 실행 엔진(
hh.exe)을 통해 악성 스크립트 실행 - MSI (윈도우 설치 파일): 정상적인 소프트웨어 설치 과정으로 위장하여 배포 및 실행
트리거 파일 실행 시 유사 스크립트 비교
| 캠페인 | BRICS+ Security Summit Campaign | Hội nghị bàn giao công tác(업무 인수인계 회의) |
|---|---|---|
| 탐색 대상 파일 | BRICS Report.zip | Hội nghị bàn giao công tác.docx.zip |
| 추출 시작 위치 (Offset) | 714 바이트 | 746 바이트 |
| 추출 데이터 크기 | 1,453,568 바이트 (약 1.45MB) | 2,906,624 바이트 (약 2.9MB) |
| 임시 저장 파일명 | nrtzrghg.kq | jmgszngj.mi |
| 최종 실행 파일 | steam_monitor.exe | Avk.exe |
3-2. 파일 드랍 및 실행 환경 구성
트리거 파일 내부에 포함된 스크립트가 실행되면, 시스템의 특정 경로(%AppData%, %Public% 등)에 악성 행위에 필요한 파일 세트를 드랍합니다.
- 파일 세트 구성:
- 정상 바이너리: 유효한 디지털 서명이 포함된 신뢰할 수 있는 실행 파일
- 악성 DLL: 정상 바이너리가 로드하도록 유도된 이름의 라이브러리 파일
- 암호화된 데이터: 최종 페이로드가 포함된 인코딩/암호화된 바이너리 데이터(
.dat,.bin등)
3-3. DLL Side-Loading 기법
보안 솔루션의 탐지를 우회하기 위해 DLL Side-Loading 기법을 핵심적으로 사용합니다.
- 정상 프로세스 실행: 드랍된 정상 바이너리를 실행하여 보안 솔루션의 화이트리스트 기반 탐지를 우회합니다.
- 악성 DLL 로드: 정상 바이너리가 실행될 때, 동일 경로에 위치한 악성 DLL을 우선적으로 로드하게 됩니다.
- 메모리 복호화: 로드된 악성 DLL은 디스크 상의 암호화된 데이터를 읽어 들여 메모리 상에서 복호화 과정을 수행합니다.
3-4. 최종 페이로드 실행
복호화가 완료된 쉘코드는 메모리 상에서 직접 실행되며, 최종적으로 PlugX 악성코드가 실행됩니다.
- 동작 특성: 파일 형태가 아닌 메모리 상에서만 실행되는 Fileless 방식으로 동작하여 정적 탐지를 회피합니다.
- 주요 기능: C2 서버와 통신을 수립하고 키로깅, 파일 탈취, 원격 제어 등의 명령 제어 기능을 수행합니다.
4. 암호 및 복호화 비교
암호 및 복호화 비교에서 2026년 03월 01일 확인되는 PlugX 악성코드의 경우(md5 20eb9f216a1177ee539a012e6301a93e), 본 보고서에서 언급하고 있는 “Turkish e-Invoice (e-Fatura)”와 거의 흡사하여 본 보고서에서 언급은 하지 않았습니다. 다만 PlugX 공격 그룹은 최근 중동지역에서의 긴장 상태와 관련된 세계적인 이슈 역시 공격을 위한 미끼 파일(Decoy) 형태로 이용하고 있는 실정입니다.
| 캠페인 | BRICS+ Security Summit Campaign | Hội nghị bàn giao công tác | Turkish e-Invoice (e-Fatura) | OECD Energy Market Implications | Nepal CIAA Impersonation Campaign |
|---|---|---|---|---|---|
| 쉘코드 복호화 알고리즘 | XOR | XOR | RC4 | XOR | XOR |
| 쉘코드 복호화 키 | 0x82 | 0x70 | 20251219@@@ | 0x16 | 0xB |
| PlugX 구성 정보 복호화 알고리즘 | RC4 | RC4 | RC4 | RC4 | RC4 |
| PlugX 구성 정보 복호화 키 | CgHFGzl | WqdpseP | qwedfgx202211 | XTrmae | iEYnFBPdx |
| PlugX 구성 정보 복호화 키 길이 | 7 | 7 | 13 | 6 | 9 |
| 키로깅 데이터 암호화 키 | - | - | 0x6F | - | - |
비교 결과에서 PlugX 구성 정보를 RC4 키로 복호화해도 가독성 있는 설정 정보가 보이지 않는 특성이 확인되며, 추가적으로 공격자가 정의한 복호화를 아래 스크립트를 이용한 이후 가독성 있는 설정 정보가 보입니다.
function Decrypt(encrypted_data, head, step):
decrypted_result = empty_list()
current_key = head
for each byte in encrypted_data:
// 1. Decrypt the byte using the current key (starts with 'head')
decrypted_byte = byte XOR current_key
decrypted_result.append(decrypted_byte)
// 2. Roll the key for the next byte
current_key = (current_key + step) % 256
return decrypted_result
5. 침해 지표
MD5
90a58084ada79de2ee86862a0f1d73ba AVKTray.dat
20aacc7193179c8312fc76861bdbf9dd Avk.dll
e7cb954f4bbdbadbd2c0206577621683 Avk.exe
8a1a090b2c5de4a3c31b4062685aff9f BRICS Report.lnk
7a183bd25d190662c3008c794f6cb604 BRICS Report.zip
63271ecd3936ab7081ff02ed57299a28 BaiNetdisk.zip
4bb305b7acbdaaafcf932aa032ed5afc Hội nghị bàn giao công tác.docx.lnk
3f76260dbe617c16f310194338491587 Hội nghị bàn giao công tác.docx.zip
ab56563f3817e31568e487edc232a7ee OECD_6z03.msi
80fc64b636834e85ed58220d456cd5c5 OECD_Update_on_implications_for_energy_markets_of_events_in_the_Middle_East.zip
33bbfa6d5c8a1078e4e260e15d563360 OECE_AVKTray.dat
9e77dea40479abf11fc3894bf50829f7 OECE_Avk.dll
e7cb954f4bbdbadbd2c0206577621683 OECE_Avk.exe
7d66f747a787314ea3b9408e3a019421 ShellFolder.exe
f72810d1c8dfd364820ef3d06f6568f8 ShellFolderDepend.dll
2090db51c5ecd85a553b14ee55f04d34 Shelter.ex
c647e6e683a88af07d861847a18468f8 crashhandler.dll
2fc456f26d853676255dd44d8270b9f3 crashlog.dat
7c1a801cb5ca5b3fca96901eabd52dbf e-Fatura.chm
4e8f302b2a17c3cc64b866acb18424e1 e-Fatura2.chm
f331af4c164a40d13b24def0818e0198 steam_monitor.exe
C2
embwishes.com
winesnmore.net
carhirechicago.com
dalerocks.com
www.360printsol.com
185.219.220.73
91.193.17.117