1. 개요
○ 북한발 해킹그룹이 사용하는 것으로 알려진 PebbleDash 악성코드 확보하여 기능 파악을 위해 분석 진행
•
PebbleDash는 과거 Lazarus 그룹에서 사용했으나 최근에는 Kimsuky 그룹에서 사용한 정황 발견됨
○ PebbleDash의 설정 데이터 작성, 지속성 유지 및 실행을 위해, 앞서 로더 등의 다른 악성코드를 실행하는 공격이 있었을 것으로 추정
•
Kimsuky 그룹은 스피어피싱 메일의 첨부 파일을 통해 악성코드를 유포하는 것으로 알려짐
○ PebbleDash는 백도어 악성코드로 C&C 서버와의 통신을 통해 정보 탈취, 명령어 실행 등을 비롯한 총 28가지의 명령을 수행
•
추가로 원격제어 또는 VNC 악성코드를 다운로드하여 실행하는 것으로도 알려짐
[그림 1] PebbleDash 악성코드를 사용한 예상 공격 흐름도
2. 대응방안
○ 메일 열람 시 발신자 메일주소, 첨부된 링크 및 파일 등 신중히 확인 필요
○ 악성 실행 파일은 문서로 위장한 경우가 많아 파일 실행 시 아이콘, 확장자, 유형 등 확인 필요
•
확장자 확인을 위해 “폴더 옵션 > 보기 탭 > 알려진 파일 형식의 파일 확장명 숨기기” 체크 해제 권장
3. 악성코드 상세 분석
3.1. advconf.dll (MD5: 31345cc286bfb2b3edcee6c960f11c3f)
○ DLL 파일 단독 실행이 불가능하기 때문에 이전에 초기 침투 및 과정이 있었을 것으로 추정
•
사전 공격에서 설정 데이터 및 지속성 유지 등록 과정 존재했을 것으로 추정되며 상세 내용은 후술
○ 실행 시 파일 내 숨겨진 페이로드를 XOR Key(0x3E)를 이용해 복호화하고 메모리 할당 후 복사해서 접근
[그림 2] 추가 페이로드 복호화 과정 (복호화 전)
[그림 3] 데이터 복호화 후
3.2. payload.bin (MD5: 815eabbaecd9b763d6c63f6a94c25ac0) - PebbleDash
○ 메모리에 할당된 추가 페이로드는 DLL 형식이며 악성행위는 스레드 생성을 통해 실행되는데, 분석 환경에서 스레드가 제대로 생성되지 않거나 실행 도중 종료되는 이슈가 발생하여 추출한 뒤 정적 분석 위주로 분석 진행
[그림 4] 추가 페이로드 DllMain 함수
○ 이번 파일에서 API 호출 등에 사용되는 문자열은 하드코딩된 문자열을 기반으로 한 치환 방식을 사용해 암호화되었으며, [그림 5]의 알고리즘을 통해 복호화하여 사용
•
이번 파일의 경우 문자열 복호화 시 key_index는 0x16, flag는 0으로 고정하여 사용
[그림 5] 문자열 치환(복호화) 함수 알고리즘
[그림 6] 암호화된 문자열 복호화 예시
○ PebbleDash 동작에 필요한 설정 데이터는 HKLM\SYSTEM\CurrentControlSet\Control\WMI\Security 레지스트리 경로에 GUID 값(9dda1ffas-7afc-9cs6-cc1d-8feaac5cdf764)으로 위장해 사용된 것으로 추정
•
레지스트리 등록 과정이 발견되지 않으며, 레지스트리 미 발견 시 종료하는 특징이 확인되어 사전 공격에서 레지스트리를 등록하는 과정이 있을 것으로 추정
•
GUID 형식에 사용할 수 없는 문자인 ‘s’를 사용한 특징 또한 발견됨
[그림 7] 레지스트리에 저장된 설정 데이터 검색 과정 일부
○ 현재 연결된 세션, 드라이브 수 검색하여 저장한 뒤 드라이브가 추가되는 경우(USB 연결 등) 동작하도록 설정하는 기능 발견됨
○ 설정 데이터에서 읽어온 C2 정보를 이용해 소켓을 구성해 연결 시도하며 5회 이상 연결되지 않을 시 종료
[그림 8] 레지스트리에 저장된 설정 데이터를 이용해 소켓 통신 설정
○ C2와 소켓 통신 성공 시 명령어를 수신하여 작업 수행
•
소켓 통신 시 송수신하는 데이터는 암·복호화 과정을 거치는데 이번 파일의 경우 AES128, Base64 등을 이용하였을 것으로 추정
[그림 9] 명령어 암·복호화 진행 부분
○ 일부 명령(0x20, 0x21, 0x22, 0x26)의 경우 HTTP 프로토콜을 이용한 통신이 발견되며, 아래의 쿼리 구조를 가지지만 실제 통신은 확인하지 못하여 기능 파악 불가
•
쿼리 구조 : page=<%d>mode=<%08x%d>DATA=<%s>
[그림 10] HTTP 통신 함수 일부
○ C2 통신을 통해 수신한 명령어에 따라 [표 1]의 28가지 동작 수행하며 일부 특이사항이 존재하는 명령만 [표 2]에 별도로 상세 설명 작성
명령 | 기능 | 명령 | 기능 |
0x09 | 드라이브 정보 탈취
(유형, 남는 공간, 볼륨 정보) | 0x17 | 현재 작업 디렉토리 위치 설정 |
0x0A | 프로세스 종료 | 0x18 | 파일 정보 탈취 |
0x0B | 파일 다운로드 | 0x19 | 연결 유지 |
0x0C | 파일 삭제 (일반 삭제) | 0x1A | 파일 및 디렉토리 정보 탈취 |
0x0D | 파일 삭제
(파일을 NULL로 덮어씌운 뒤 삭제) | 0x1D | 파일 MAC 시간 및 파일명 변경 |
0x0E | 시스템 정보 탈취
(hostname, adaptersinfo, computername, systeminfo, productinfo) | 0x1E | 파일 속성 변경 |
0x0F | 프로세스 정보 탈취
(ProcessTimes, Module, TokenInformation, Sid, referencedDomainName) | 0x1F | 프로세스 실행 |
0x10 | 커맨드라인 명령 수행 및 결과 탈취
(No Window) | 0x20 | 원격 데스크톱(RD) 세션 현재 상태 확인 |
0x11 | 커맨드라인 명령 수행 및 결과 탈취 | 0x21 | RD 세션에 로그온된 사용자 토큰으로 명령어 실행 |
0x12 | 파일 MAC(Modification, Access, Change) 시간 변경 | 0x22 | RD 세션에 로그온된 사용자 토큰으로 명령어 실행 (SYSTEM 권한 상승) |
0x13 | 파일 업로드(탈취) | 0x23 | 설정 데이터 확인 |
0x14 | 파일 업로드(탈취) 및 삭제 | 0x24 | 설정 데이터 수정 |
0x15 | C2 통신 주기 설정 (입력 값) | 0x25 | 소켓 비차단(논블로킹) 모드 전환 |
0x16 | C2 통신 주기 설정 (입력 값 / 409680000000000h) | 0x26 | 자가 삭제 |
[표 1] PebbleDash 명령(총 28개) 모음
명령 | 상세 기능 |
0x0D | “(0x0C) 파일 삭제” 기능과 다르게 파일을 NULL로 덮어씌운뒤 삭제하는 행위가 발견되는데 이는 파일 복구를 방해하기 위한 목적으로 추정 |
0x10 | “(0x11) 커맨드라인 명령 수행 및 결과 탈취” 기능과 다르게 cmd.exe를 이용해 명령어를 실행할 때 CREATE_NO_WINDOW 옵션을 주어 콘솔 창 없이 실행 |
0x12 | 두 개의 파일 경로를 인자로 받아서 첫 번째 경로의 파일 MAC 시간을 두 번째 경로의 파일 MAC 시간으로 수정 |
0x1D | “(0x12) MAC 시간 변경” 기능과 다르게 단일 파일의 경로를 받아 직접 MAC 시간을 변경하며 PE 파일인 경우에는 TimeStamp도 수정 |
0x22 | “(0x21) RD 세션에 로그온된 사용자 토큰으로 명령어 실행” 기능과 다르게 RD 세션에 로그온된 사용자의 토큰을 복사한 뒤 S-1-16-12288 sid(ML_HIGH)를 부여하는데, 이는 해당 사용자 세션의 무결성 수준을 System Integrity Level로 높여 SYSTEM 권한과 동일한 수준으로 작업 수행 가능하도록 함 |
0x25 | 소켓은 기본적으로 동기 방식인 차단 모드로 동작하기 때문에 데이터 송수신 및 연결이 완료되어야 다른 작업들을 수행할 수 있는데, ioctlsocket API에 FIONBIO 옵션을 주어 비차단 모드로 전환하여 비동기 방식으로 작업 수행 가능 |
0x26 | 레지스트리에 저장된 설정 데이터(HKLM\SYSTEM\CurrentControlSet\Control\WMI\Security의 9dda1ffas-7afc-9cs6-cc1d-8feaac5cdf764 값) 삭제
지속성 유지에 사용된 레지스트리(HKLM\SYSTEM\CurrentControlSet\Control\Lsa\Security Packages)*에서 “advconf” 문자열 검색하여 삭제
advconf.dll 파일을 NULL 데이터로 덮어씌운 뒤 삭제
* LSA\Security Packages에 DLL 등록 시 시스템이 시작될 때마다 Lsass.exe에 DLL이 로드되어 동작하는 기능 악용. 해당 레지스트리는 사전 공격에서 등록했었을 것으로 추정 |
[표 2] PebbleDash 일부 명령 기능 상세 설명
○ 동적 분석이 이루어지지 않아 이후 과정은 직접 확인할 수 없었으나, 2021.11.16. 안랩에서 공개한 Kimsuky 그룹의 APT 공격 분석 보고서 (AppleSeed, PebbleDash)에 따르면 원격 제어를 위한 악성코드나 VNC 악성코드를 추가로 설치하여 공격하는 것으로 알려짐
4. IoC 정보
NO | Type | Data | Info |
1 | MD5 | 31345cc286bfb2b3edcee6c960f11c3f | advconf.dll |
2 | MD5 | 815eabbaecd9b763d6c63f6a94c25ac0 | payload.bin |
3 | GUID | 9dda1ffas-7afc-9cs6-cc1d-8feaac5cdf764 | PebbleDash 설정 데이터
(레지스트리 HKLM\SYSTEM\CurrentControlSet\Control\WMI\Security) |



.png&blockId=1caf216a-760c-80b5-b2f3-e5962b6f009b)


_%ED%95%A8%EC%88%98_%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98.png&blockId=1caf216a-760c-8075-8599-d38aa663f7d9)







