정정 안내 (2026-09-28) 초판은 VS Code 터널 C2를 MITRE ATT&CK 기법 T1219.002로, 2026년 v19에서 신규 등재된 것으로 적었다. 실제로는 T1219.001(IDE Tunneling)이며 2025년 4월 v17에 이미 등재돼 있었다. 침해 기관을 '체코'로 특정했으나 ESET 원문은 '중앙유럽 소재'로만 밝혔고, 일본 경찰청(NPA) 경보 발표일과 Campaign A 분류 주체 서술도 원문과 달라 함께 고쳤다.
2024년 8월 27일, 중앙유럽 외교 연구소 직원이 OneDrive 링크에서 받은 ZIP 압축 파일을 열었다. 안에는 "The EXPO Exhibition in Japan in 2025.docx.lnk" 라는 파일 하나. 워드 아이콘처럼 보였지만 실제로는 LNK 단축 아이콘이었고, 클릭과 동시에 ANEL 백도어가 설치됐다. 6일 뒤인 9월 2일, 같은 기관에서 Chrome 자격증명·쿠키·세션 데이터가 외부로 빠져나갔다.
이 사건은 1년 뒤인 2025년 1월 8일, 일본 경찰청(NPA)이 발표한 5년 캠페인의 일부였다. NPA는 그날 처음으로 공격자 이름을 공식 명시했다. MirrorFace. 중국 연계 사이버 첩보 조직이며, 2019년부터 일본 정부·정치인·반도체·항공우주 분야를 표적으로 삼아 왔다는 분석. AkaiRyū(붉은 용)라 명명된 이 캠페인은 MirrorFace가 처음으로 일본 밖, 그것도 유럽으로 작전 영역을 확장한 결정적 전환점이었다.
정체
| 항목 | 내용 |
|---|
| 별칭 | MirrorFace, Earth Kasha |
| MITRE Group ID | G1054 |
| 추정 소속 | 중국 연계 (PRC-aligned) |
| 활동 시기 | 2019년 – 현재 |
| 모(母)조직 | menuPass (APT10, G0045)의 하위 클러스터로 평가 |
MITRE는 G1054 페이지에서 "표적·도구·인프라가 menuPass 우산 아래 있다고 평가되는 중국 연계 사이버첩보 행위자"로 정의한다. menuPass는 ATT&CK 공식 명칭이고, 한국 보안 업계에서는 APT10이라는 이름이 더 익숙하다. 2009년부터 활동한 중국 국가배후 조직이며, MirrorFace는 그 기조에서 분기한 일본 특화 운영 단위로 본다.
활동 패턴
MirrorFace의 시그니처는 세 가지로 압축된다.
일본 특화 미끼. 6년간 거의 모든 스피어피싱 메일이 일본어로 작성됐다. 첨부 파일명·압축 파일명·LNK 위장 이름까지 일본 정치 일정·국제 행사·학술 컨퍼런스 같은 시의성 있는 주제를 사용했다. AkaiRyū 캠페인에서 사용한 "Expo 2025" 미끼가 대표적이다. 2025년 오사카에서 개최되는 이 박람회는 2024년 8월 시점에서 유럽 외교관이 클릭할 만한 가장 자연스러운 주제였다.
APT10 전용 도구의 부활. ANEL(UPPERCUT)은 APT10이 2014년부터 사용하다 2018–2019년경 폐기한 것으로 추정되던 백도어다.
ESET 분석에 따르면 MirrorFace는 2024년 6월 캠페인부터 이 ANEL을 다시 꺼냈다. 폐기됐다고 알려진 도구의 재사용은 보안 솔루션의 시그니처가 갱신되지 않았다는 점을 노린 의도적 선택이다.
탐지 회피 적층. 침투 후 단계에서 일반 탐지 도구가 들여다보지 못하는 영역을 적극 활용한다. Windows Sandbox 안에서 AsyncRAT을 실행해 호스트 EDR의 시야에서 격리한다. MSBuild 같은 정상 개발 도구로 페이로드를 실행하고, Visual Studio Code 터널 기능을 C2 통신 채널로 전용한다. VSCode 터널 악용은 MITRE ATT&CK의 T1219.001(IDE Tunneling) 범주에 해당하는 사례다.
캠페인 6년: A → B → C → AkaiRyū
Campaign A (2019–2023): 정치 첩보
NPA가 분류한 첫 번째 단계는 정치·미디어 분야 첩보가 중심이었다. 주력 도구는 LODEINFO — 자체 개발 백도어. 이 시기에는 ANEL이 사용되지 않았기 때문에 외부에서는 한동안 LODEINFO 운영자를 "APT10 분파"가 아닌 별개 조직으로 분류했다. MirrorFace라는 이름이 처음 붙은 것도 이 시기다.
Campaign B (2023년 2월–10월): 산업 표적 + N-day 악용
NPA가 분류한 두 번째 단계는 9개월간 압축적으로 전개됐다. MirrorFace는 인터넷 노출 경계 장비 취약점 3건을 연쇄적으로 사용했다. Array Networks SSL VPN의 CVE-2023-28461, Fortinet FortiOS의 CVE-2023-27997, Citrix NetScaler ADC의 CVE-2023-3519. 모두 사전 인증 RCE — 자격증명 없이 외부에서 바로 코드 실행이 가능한 클래스다. 표적은 반도체·제조·항공우주로 옮겨갔고, 일본의 첨단 산업 기술 정보가 핵심 수집 대상이었다.
Campaign C (2024–): 학계·싱크탱크 + ANEL 회수
2024년 6월부터 다시 스피어피싱 중심으로 회귀했지만, 이번에는 LODEINFO 대신 ANEL을 들고 왔다. 표적은 학계·싱크탱크·미디어. 이 변화는 두 가지를 시사한다. LODEINFO가 EDR 탐지 시그니처에 충분히 노출됐다는 판단, 그리고 폐기됐다고 알려진 ANEL이 오히려 탐지 공백 지대라는 계산.
Operation AkaiRyū (2024년 8–9월)
ESET이 추적한 AkaiRyū는 Campaign C의 일환이지만 표적이 일본 밖이라는 점에서 별도 분기로 다뤄진다. 시작은 2024년 6월 20일 일본 연구 기관 침해였다. 이후 8월 26일 중앙유럽 외교 연구소로 이어졌고, 8월 27일 LNK 클릭, 28–30일 후속 도구 배포, 9월 2일 Chrome 데이터 탈취가 발생했다. 침해된 기관은 단 1곳, 머신은 2대. 규모로 보면 작지만, 이 사건이 의미를 갖는 것은 MirrorFace가 일본 밖 표적을 처음 다뤘다는 점이다.
2025년 3월 이후: 대만 확장
Trend Micro가 2025년 3월 탐지한 캠페인은 일본·대만 정부 기관을 동시 표적으로 삼았다. ROAMINGMOUSE라는 매크로 드로퍼가 새로 등장했고, ANEL은 Beacon Object File(BOF) 인메모리 실행 명령이 추가된 버전으로 업그레이드됐다.
BOF 도입은 운영 관점에서 두 가지를 바꾼다. 첫째, 후속 익스플로잇 모듈을 ANEL에 직접 흡수해 별도 페이로드를 디스크에 떨어뜨릴 필요가 없어진다. EDR이 의존하는 파일 시스템 이벤트 자체가 발생하지 않는다. 둘째, BOF는 본래 Cobalt Strike 에이전트의 확장 모듈로 설계됐지만 컴파일된 C 프로그램이라는 본질만 같다면 다른 백도어에도 이식 가능하다. MirrorFace는 ANEL을 Cobalt Strike 수준의 모듈러 도구로 끌어올린 셈이다. 같은 시기 SharpHide(레지스트리 기반 도구)를 통해 NOOPDOOR 2단계 백도어를 띄운 것도 동일한 기조로 읽힌다.
사용 도구
| 도구 | 시기 | 특징 |
|---|
| ANEL (UPPERCUT) | 2014–2018, 2024– | APT10 전용 백도어. 2024년 부활 후 BOF 인메모리 실행 명령 추가 |
| LODEINFO | 2019–2024 | Campaign A·B 주력. MirrorFace 자체 개발 백도어 |
| NOOPDOOR (HiddenFace) | 2023– | 모듈러 백도어. Campaign B·C 후속 단계 |
| ROAMINGMOUSE | 2025– | Excel VBA 매크로 드로퍼. ANEL 컴포넌트 전달 |
| AsyncRAT | 2024– | 오픈소스 RAT. Windows Sandbox 격리 실행으로 호스트 EDR 회피 |
ANEL은 2014–2018년 APT10 본진이 사용하다 LODEINFO에 자리를 내주고 폐기된 것으로 보였다. 2024년 6월 ESET이 새로 발견한 ANEL은 v5.5.4–5.5.5 빌드로, 명령어·네트워크 프로토콜은 과거 변종과 호환됐다. 같은 코드베이스를 보관해 온 운영자가 같은 조직 내부에 있었다는 정황 증거이며, MirrorFace가 APT10 우산 아래 있다는 평가의 핵심 근거다.
MITRE ATT&CK 매핑 — 일본 정부 침투 시나리오
이 흐름의 마지막 단계인 VSCode 터널 악용은 2025년 4월 발표된 MITRE ATT&CK v17에 T1219.001(IDE Tunneling)로 분리·등재된 기법이다. 정상 개발자 도구의 원격 터널 기능을 C2로 전용하면 EDR이 보는 이벤트는 합법적인 code.exe 실행으로 남는다. 도메인 기반 차단도 *.devtunnels.ms 같은 Microsoft 인프라를 막아야 하므로 실무에서 광범위 차단이 어렵다.
한국·아시아 관점
MirrorFace의 한국 직접 표적 보고는 현재까지 공개된 자료에 없다. 그러나 2025년 3월 대만 확장이 시사하는 바는 명확하다. 동아시아의 친미·민주주의 진영, 그중에서도 반도체·항공우주·외교 분야가 표적 패턴에 들어 있다는 것이다. AhnLab ASEC은 2025년 4월 APT 트렌드 보고서에 MirrorFace를 처음 등재했으며, 이는 한국 보안 업계의 관찰 단계 진입 신호다.
한국 표적 APT 지형에서 MirrorFace의 위치를 가늠하면 비교 대상이 분명해진다. Kimsuky가 13년간 북한 기조로 한국 정부·연구기관·언론을 노려 온 행위자라면, MirrorFace는 같은 시기 중국 기조로 일본·대만·외교 분야를 노린 행위자다. 두 그룹 모두 스피어피싱 + 자체 백도어 + 장기 잠복이라는 운영 골격을 공유하지만, MirrorFace 쪽이 산업 첩보(반도체·항공우주) 비중이 더 짙다.
또한 Salt Typhoon이 미국 통신사 9곳을 합법 감청 인프라로 1년간 장악한 사건처럼 중국 연계 조직의 동시다발 작전 패턴을 보면 MirrorFace의 일본·대만 활동이 한국에 동일하게 시도될 가능성을 배제하기 어렵다. ANEL처럼 "폐기됐다고 알려진 도구의 부활"은 한국 EDR 운영자에게 시그니처 만료 정책의 한계를 보여 준다. 미관측 기간에도 행위 기반 탐지 룰은 유효성을 잃지 않는다.
탐지 — 일본 경찰청이 짚은 샌드박스·VS Code 로그
MirrorFace의 은닉 수법을 두고 공개된 공식 탐지 자료로는 일본 경찰청이 경보에 붙인 별첨 자료 2건이 있다. 샌드박스 자료에 따르면 공격자는 호스트의 작업 스케줄러로 .wsb 구성 파일을 읽어 Windows Sandbox를 띄우고, C:\Users 폴더를 쓰기 가능한 공유 폴더로 연결한다. ESET이 AkaiRyū에서 본 구조도 같다. 예약 작업이 무작위 이름의 .wsb 파일을 인자로 Windows Sandbox를 실행했고, 이 기능은 수동으로 켠 뒤 재부팅해야 동작한다. 경찰청이 검증한 호스트 쪽 기록 가운데 보안 로그 이벤트 ID 4648에는 계정 도메인 NT VIRTUAL MACHINE과 프로세스 이름 vmcompute.exe가 남는다. Hyper-V-Compute/Operational 로그의 이벤트 2500은 호스트가 샌드박스 안에서 실행시킨 명령과 실행 계정(WDAGUtilityAccount)을, Hyper-V-Worker/Operational 로그의 이벤트 301은 공유된 폴더 경로를 기록한다.
프로세스 생성 감사를 켜 둔 환경이라면 보안 로그 이벤트 ID 4688에서 WindowsSandbox.exe 실행과 명령줄에 들어간 .wsb 파일 경로까지 보인다. 반면 샌드박스 내부의 파일 생성, 레지스트리 변경, 예약 작업 등록은 호스트 이벤트 로그에서 확인되지 않았다고 경찰청은 밝혔다. ESET은 MirrorFace가 배포한 도구를 지우고 Windows 이벤트 로그도 삭제한다고 보고했다. 로그가 지워지면 그 전에 호스트 밖으로 수집된 사본만 남는다. 파일 쪽에서는 ESET 보고서 목록의 ANEL 로더, 미끼 LNK, 악성 .wsb 구성 파일이 모두 같은 탐지명을 받았다. 그 이름이 Win32/MirrorFace.A다.
VS Code 자료는 ANEL 감염 뒤 악성코드가 내려받은 VS Code CLI로 개발 터널을 여는 경우를 다룬다. 경찰청 분석에서는 사용자 프로필 폴더에 .vscode와 .vscode-server 폴더가 숨김 속성으로 생긴 사례가 있었다. 보안 로그 이벤트 ID 5379의 TargetName 항목에 vscode-cli-0.vscode-cli가 기록된 사례도 있었고, 같은 이름의 일반 자격 증명이 Windows 자격 증명 관리자에 남기도 했다. Microsoft-Windows-PowerShell/Operational 로그에는 원격으로 실행한 PowerShell 명령 기록이 남은 경우가 있었다. 터널 서버는 .vscode\cli\servers\Stable-…\server\node.exe로 실행됐고, 터널에서 터미널을 열자 그 자식 프로세스로 pwsh.exe가 떴다. 경찰청은 파일 이름이 바뀔 수 있다는 점도 함께 짚었다.
SigmaHQ의 공개 룰 'Visual Studio Code Tunnel Shell Execution'은 바로 이 부모·자식 관계를 조건으로 삼는다. 부모가 \servers\Stable- 경로 아래 node.exe이고, 자식이 VS Code 셸 통합 스크립트를 실행하는 PowerShell이거나 bash·WSL이면 걸린다. 네트워크에서는 터널 접속 때 global.rel.tunnels.api.visualstudio.com이나 *.devtunnels.ms 같은 Microsoft 도메인으로 통신이 생긴다. 경찰청은 업무 시간 밖이나 VS Code를 쓰지 않는 부서에서 나온 이 통신이 로그에 남을 수 있다고 봤다. SigmaHQ의 'DNS Query To Visual Studio Code Tunnels Domain' 룰은 .tunnels.api.visualstudio.com으로 끝나는 DNS 질의를 잡는다. MITRE ATT&CK은 AkaiRyū의 VS Code 원격 터널 악용을 IDE 터널링 기법의 절차 사례로 올렸다. 이 기법의 탐지 전략 DET0133 가운데 Windows 분석 AN0375는 Sysmon 이벤트 1(프로세스 생성)·11(파일 생성)과 터널 도메인으로 나가는 연결을 함께 본다.
참고 자료
관련 글 더 보기
안내 및 법적 고지
AI 활용 안내
이 글은 AI(Claude)의 도움을 받아 작성되었습니다.
인용된 통계와 사례는 참고 자료에 명시된 출처에 근거하며, 설명을 위한 일부 표현은 각색되었습니다.
면책 조항
본 글은 보안 인식 제고를 위한 교육 목적으로 작성되었습니다.
언급된 공격 기법을 실제로 시도하는 행위는 「정보통신망법」, 「형법」 등에 따라
처벌받을 수 있으며, 본 블로그는 이에 대한 법적 책임을 지지 않습니다.