
Pubload 악성코드는 2022년 2월 처음 등장해 Bespoke Stager라는 이름으로 보고됐으며 러시아 및 유럽을 대상으로 우크라이나 분쟁과 NATO 관련 보고서로 위장해 유포됐다. 문서 파일로 위장한 EXE를 실행하면 DLL 사이드로딩 방식을 활용해 Pubload가 로드되고 공격자의 C&C 서버와 통신해 악성 동작을 수행한다. 이후에도 Pubload는 지속적으로 다양한 Mustang Panda의 활동에서 발견됐으며 유포 방식은 대부분 국제적인 이슈를 다루는 보고서 및 문서로 위장하는 형태를 채택하고 있다.
Pubload는 실행 시 입력된 파라미터가 특정 문자열(ex - “EdgeBLA”)와 비교해 일치하지 않으면 EXE 및 DLL 파일을 ProgramData 경로에 복사하고 Run 레지스트리와 작업 스케줄러를 이용해 자동 실행을 등록한다. 이때 자동 실행 명령은 EXE 파일이 실행될 때 “EdgeBLA” 문자열이 파라미터로 입력되도록 설정한다. 반대로 문자열이 일치하면 Pubload 내부에 저장된 셸 코드를 복호화 및 실행해 공격자가 운영하는 C&C 서버와 연결을 시도한다.
먼저 Pubload는 기본적으로 파일 복사와 자동 실행 등록 후 셸 코드를 복호화하는 동작 순서를 가진다. 단, 실행 단계에서는 파라미터 입력이 필요 없는 경우와 특정 문자열의 입력을 해야 하는 경우로 분류된다.
파일 실행 유형
1. 파라미터가 없는 경우
실행 시 파라미터 입력이 필요하지 않은 경우는 한 번의 실행으로 파일 복사, 자동 실행 등록 및 셸 코드 복호화를 모두 수행한다.
2. 파라미터가 필요한 경우
정상 EXE 파일을 더블 클릭으로 실행해 파라미터가 입력되지 않으면 Pubload는 파일 복사 및 자동 실행 등록만 수행한 후 종료되며 자동 실행을 등록할 때 특정 문자열을 파라미터로 입력하도록 설정된다. 자동 실행된 Pubload는 파라미터와 하드코딩된 문자열을 비교해 일치하면 셸 코드 복호화를 수행한다.
- 자동 실행 등록 예시 : C:\Users\inca\Desktop\SolidPDFCreator.exe EdgeBLA
Pubload는 자동 실행을 등록하기 전 정상 EXE 파일과 자기 자신(DLL)을 ‘C:\Users\Public’ 또는 ‘C:\ProgramData’ 경로에 복사한다. 파일 복사가 완료되면 Run 레지스트리 및 작업 스케줄러를 모두 사용하거나 Run 레지스트리만을 사용해 자동 실행을 등록한다. 작업 스케줄러를 등록하는 과정에서 cmd.exe 프로세스를 생성하는 데 사용되는 API 이름과 명령어 문자열이 암호화돼 있는 경우가 존재하며 하드코딩된 Key 값과 XOR 연산해 이를 복호화한다.

이후 셸 코드 복호화 단계가 되면 간단한 비트 연산부터 대칭키 암호화 알고리즘까지 다양한 방식을 사용해 내부에 암호화된 데이터를 복호화하고 실행한다. Pubload는 점점 더 복잡한 방식으로 셸 코드를 암호화해 탐지를 회피하고 분석 난이도를 높이고 있다.
셸 코드 복호화 유형
1. 비트 연산
비트 연산의 경우 암호화된 데이터와 복호화 Key 등의 정보를 저장하는 방식에 따라 다양한 케이스가 존재하지만 AND 또는 XOR 등의 간단한 비트 연산을 이용해 바이트 단위로 셸 코드를 복호화하는 공통 구조를 가지고 있다. 그중에서도 두 개의 Key를 이용해 이중으로 XOR 연산을 하거나 고정된 시드 값으로 생성한 랜덤 바이트 배열을 Key로 사용하는 등 복잡성을 높이는 경우도 존재했다.

2. 암호화 알고리즘
시간이 지남에 따라 단순한 비트 연산에서 Triple DES와 AES 등의 복잡한 암호화 알고리즘을 사용하는 방향으로 발전했으며 외부 라이브러리를 사용하지 않고 각 알고리즘의 단계를 직접 구현했다. 또한 직접 구현한 암호화 알고리즘이 정상적으로 동작하는 범위에 한해서 일부 단계를 수정해 분석을 더 어렵게 하고 있다.

셸 코드 실행 유형
복호화된 셸 코드를 실행하는 유형으로는 세 가지로 분류된다.
1. CreateThread
복호화된 셸 코드는 새로운 메모리 공간에 복사한 후 VirtualProtect 함수를 이용해 PAGE_EXECUTE(0x10) 권한을 부여하고 새로운 스레드에 셸 코드의 포인터로 전달해 실행된다.

2. CallBack 함수
또 다른 방법으로는 콜백 함수를 호출하는 특정 윈도우 API를 사용해 셸 코드가 콜백 함수로서 호출되도록 유도하는 방식을 사용한다. 셸 코드의 주소를 EnumFonts와 같은 API의 콜백 함수 포인터로 전달하고 해당 API를 호출한다.
- 콜백 함수를 호출하는 API : EnumFontsW, EnumPropsExW, LineDDA, ChooseColorW 등

3. 직접 호출
마지막으로는 별도의 추가 과정 없이 복호화된 셸 코드의 주소를 직접 호출(call)함으로써 실행하는 방식도 존재한다.
복호화된 셸 코드가 실행되면 먼저 후속 동작에 필요한 API를 동적으로 로드한다. 로드할 API의 이름은 ROR13 해시 값으로 하드코딩돼 있으며 특정 DLL의 익스포트 섹션에 직접 접근해 Name Table에서 해시 값이 일치하는 API를 검색하고 Address Table에서 해당 API의 주소를 복사하는 방식을 사용한다.


이후 로드된 API로 시스템 정보를 수집해 데이터 구조체로 만든 후 XOR 암호화한다. 암호화된 데이터는 앞에 TLS 헤더(0x17, 0x3, 0x3)와 데이터 크기를 추가해 TLS 패킷을 생성하고 공격자가 운영하는 C&C 서버로 전송된다.


C&C 서버와 통신에 성공한 후 서버로부터 패킷을 수신하면 TLS 패킷 구조에 따라 먼저 TLS 헤더와 데이터 크기를 확인한다. TLS 패킷으로 확인되면 데이터 크기만큼 암호화된 데이터를 XOR 복호화해 암호화된 셸 코드와 복호화 Key를 추출하고 이를 이용해 셸 코드를 다시 복호화한다. 복호화된 셸 코드는 직접 호출해 실행한다.


Pubload 악성코드는 정상 파일과 함께 DLL 사이드로딩으로 실행되고 공격자 C&C 서버와 통신하는 과정에서 TLS 헤더를 추가해 패킷을 위장하는 등 사용자 모르게 악성 동작을 수행함으로써 주의가 필요하다. 따라서 출처가 불분명한 메일 열람이나 첨부 파일 실행을 지양하고 운영체제 및 보안 솔루션을 최신 상태로 유지하는 것을 권장한다.
상기 악성코드는 잉카인터넷 안티바이러스 제품 TACHYON Internet Security 6.0에서 진단 및 치료가 가능하다.


'분석 정보 > 악성코드 분석 정보' 카테고리의 다른 글
| 태국을 대상으로 유포되는 Yokai 백도어 (0) | 2025.12.24 |
|---|---|
| DLL 사이드 로딩으로 실행하는 ToneShell 백도어 (0) | 2025.12.24 |
| 오픈 소스 코드를 이용하는 Phantom Stealer (0) | 2025.12.24 |
| Github에 공개된 CyberEye RAT 빌더 (2) | 2025.08.29 |
| 소프트웨어 설치 파일로 위장한 Sainbox RAT (1) | 2025.07.25 |