블로그
home
Nation-State Cyber Actors Analysis Report
home
🇰🇵

[IG-25-4026-CLEAR] CJ Olivenetworks 인증서 악용 악성코드 분석 : 유출된 인증서를 악용한 Kimsuky 그룹의 피싱 캠페인

Classification
TLP:CLEAR
Release Date
2025/05/30
Writer
Jeongtae Kim
Editor
Bohyeong Son
Mihee Kim
Tags
악성코드
북한
Malware
DPRK
Kimsuky
2 more properties

1. 개요

북한 위협 행위자 Kimsuky가 ‘한국기계연구원’공격에 사용한 것으로 추정되는, 기유출된 CJ Olivenetworks 인증서 악용 악성코드 분석(공격에 사용된 Phishing정보는 미확인)
Kimsuky 그룹이 배후로 알려진 ‘Nexaweb* 인증서를 악용한 미국 방산 기업 채용 피싱’ 캠페인과 TTP(Tactic, Technique, Procedure) 유사성이 확인됨
* Nexaweb : 기업용 모바일, 태블릿, 데스크톱 및 웹 애플리케이션의 배포를 위한 소프트웨어 제공 기업
타임스탬프가 존재하는 인증서는 폐기되더라도 유효한 서명으로 인정되어 보안 시스템과 사용자의 신뢰를 쉽게 얻을 수 있어 주의가 필요
○ Kimsuky 그룹은 PebbleDash* 백도어 악성코드 등을 사용해 피해자 시스템 원격 제어 및 추가 악성 행위 수행하는 것으로 알려짐
* PebbleDash : 기문서 ‘[IG-25-4006-O] 북한발 PebbleDash 백도어 악성코드 분석 공유’ 참고
[그림 1] 공격 흐름도

2. 대응방안

○ 메일 열람 시 발신자 메일주소, 첨부된 링크 및 파일 등 신중히 확인 필요
○ 악성 실행 파일은 문서로 위장한 경우가 많아 파일 실행 시 아이콘, 확장자, 유형 등 확인 필요
확장자 확인을 위해 “폴더 옵션 > 보기 탭 > 알려진 파일 형식의 파일 확장명 숨기기” 체크 해제 권장

3. CJ 인증서 악성코드와 Kimsuky 그룹과의 연관성

○ 이번 악성코드 배포 캠페인은 CJ Olivenetworks 인증서를 악용한 Go* 언어로 작성된 실행파일(*.EXE) Dropper와 httpSpy.dll이라는 Backdoor를 사용한 것으로 분석
* GO : 구글에서 개발한 오픈소스 프로그래밍 언어
○ 해당 TTP는 이전 Kimsuky 그룹이 수행했다고 알려진 ‘Nexaweb* 인증서를 악용한 미국 방산 기업 채용 피싱’ 캠페인과 유사한 것으로 확인. 이번 캠페인 또한 북한 Kimsuky 그룹이 배후에 있을 것으로 사료됨
No
유사성
정보
1
Dropper
- Go언어로 작성된 Dropper 사용 - acrobat 로고와 유사한 아이콘 이미지 사용 - 유출된 인증서 악용
2
Backdoor
- httpSpy.dll이라는 이름의 Backdoor 사용
[표 1] 미끼 PDF 생성 및 실행 과정
[그림 2] (좌) Nexaweb 인증서 악용 Dropper / (우) CJ 인증서 악용 Dropper
[그림 3] 동일한 아이콘을 사용하는 Dropper
[그림 4] httpSpy.dll로 동일한 DLL명

4. 악성코드 상세 분석

4.1 20250428 플랜아이 작업계획서 및 작업완료서_기계연 이명화.scr (TYPE: Dropper | MD5: 7ec88818697623a0130b1de42fa31335)

1) 파일 정보
○ CJ Olivenetworks의 인증서 악용 샘플 ‘20250428 플랜아이 작업계획서 및 작업완료서_기계연 이명화.scr’는 스피어 피싱을 통해 WinRAR 압축파일(*.RAR)로 배포된 것으로 추정
[그림 5] WinRAR 압축 파일 내부
○ 파일 포맷 확인 결과, 악성코드는 Go 언어로 빌드된 64-bit 실행파일로 확인
[그림 6] Go 언어로 빌드된 실행 파일
○ 공격자는 MS Screen Saver 파일(.SCR)이 윈도우 내부적으로 실행파일(.EXE)과 동일하게 실행되는 점을 악용해 사용자에게 익숙하지 않은 확장자로 실행파일임을 은닉
○ PDF 뷰어인 Acrobat 로고와 유사한 아이콘 사용해 PDF 문서로 위장하여 사용자가 악성코드를 실행하도록 유도
※ ‘20250428 플랜아이 작업계획서 및 작업완료서_기계연 이명화.scr’ 이하 sample.exe로 칭함
[그림 7] PDF 파일로 위장한 악성코드
○ 해당 파일은 이전 Kimsuky 그룹이 수행한 피싱 캠페인에서 사용된 Go 언어로 빌드된 Dropper와 동일한 아이콘을 사용하는 것으로 확인
No
캠페인
MD5
1
이전
aa8936431f7bc0fabb0b9efb6ea153f9
2
확보
7ec88818697623a0130b1de42fa31335
[표 2] Kimsuky 그룹이 이전에 사용한 Dropper 정보
[그림 7] 동일한 아이콘을 사용하는 Dropper
○ 파일 속성에서 유출된 CJ Olivenetworks의 디지털 서명이 확인되었고, 해당 서명에는 타임스탬프가 존재하여 인증서가 폐기되더라도 유효한 서명으로 인정되어 보안 시스템과 사용자의 신뢰를 쉽게 얻을 수 있어 주의가 필요
[그림 9] 유효한 CJ Olivenetworks 디지털 서명
2) 실행 흐름
○ (악성 행위 수행 방식) 악성코드는 Go언어의 파일 임베딩 기능을 사용하여 빌드 과정에서 image/icon.png(미끼 PDF)와 image/image.png(악성 DLL)를 .rdata섹션에 임베딩 후, embed.FS.ReadFile 함수로 읽어와 악성 행위를 수행하는 방식을 사용
[그림 10] 미끼 PDF 데이터 및 파싱 코드
[그림 11] 악성 DLL 데이터 및 파싱 코드
○ (미끼 PDF 생성 및 실행) 임베드된 image/icon.png는 [표 3]의 과정에 따라 처리되며, 생성된 미끼 문서는 한국기계연구원의 IP 접근 허용 요청 관련 내용으로 확인
No
행위
1
임베드된 ‘image/icon.png’(미끼 PDF) 획득
2
현재 실행파일 경로 획득 후, 확장자를 .pdf로 변경
3
현재 경로에 미끼 PDF 생성 후 열기
[표 3] 미끼 PDF 생성 및 실행 과정
[그림 12] 생성된 미끼 PDF
[그림 13] 생성된 미끼 PDF 내용
[그림 14] 미끼 PDF 생성 코드
○ (자기 자신 삭제) 미끼 문서 생성 후 오픈소스 모듈을 사용하여 자기 자신을 삭제해 실행 흔적 제거
[그림 15] 사용된 자가 삭제 오픈소스 Go 모듈
○ (악성 DLL 드롭 및 실행) 임베드된 image/image.png는 [표 4]의 과정에 따라 처리되며, rundll32.exe을 사용해 %PUBLIC%에 생성된 config.dat(악성 DLL)의 Export 함수를 실행
No
행위
1
임베드된 image/image.png(악성 DLL) 획득
2
C:\Users\Public 폴더에 config.dat으로 악성 DLL 파일 생성
3
rundll32.exe를 사용해 악성 DLL의 hello 함수 실행
[표 4] 악성 DLL 생성 및 실행 과정
[그림 16] 악성 DLL 생성 및 실행 코드
[그림 18] Dropper에 의해 실행된 악성 DLL

4.2 config.dat (TYPE: Backdoor | MD5: 580d7a5fdf78dd3e720b2ce772dc77e9)

1) 파일 정보
○ %PUBLIC% 폴더에 드롭된 config.dat은 sample.exe와 달리 서명이 없는 64-bit DLL 파일로 확인
○ Virustotal 등록 엔진 일부에서 코드 가상화 패커인 VMProtect 진단 결과가 확인되었고 내부 확인 결과 다량의 연산 명령어로 난독화되어 있는 것으로 분석
[그림 20] Virustotal 조회 시, VMProtect 진단 결과
[그림 21] 난독화가 적용된 코드
○ 내부 데이터 확인 결과, 원본 DLL명은 httpSpy.dll으로 확인되었는데, 이전 Kimsuky 그룹의 피싱 캠페인에서 사용한 Backdoor 악성코드에서도 동일한 이름이 사용된 것이 확인됨
[그림 22] 확인된 원본 DLL 명
2) 실행 흐름
○ 확보 샘플의 경우, VMProtect로 추정되는 가상화 기반 난독화로 인해 분석에 어려움이 있어 Kimsuky 그룹이 이전 캠페인에서 사용한 샘플을 확보하여 추가적인 분석 진행
No
캠페인
MD5
1
이전
537806c02659a12c5b21efa51b2322c1
2
확보
580d7a5fdf78dd3e720b2ce772dc77e9
[표 5] Kimsuky 그룹이 이전에 사용한 Backdoor 정보
○ (문자열 복호화) 내부에서 사용되는 문자열은 .rdata 섹션에 위치한 데이터과 스택 내의 데이터를 조합한 후 XOR과 덧셈 연산을 통해 복호화하는 것으로 분석
[그림 23] 문자열 복호화 루틴
○ (동적 API 주소 획득) 복호화된 함수명을 사용해 FNV-1a 해시를 계산하고 해당 값을 사용해 DLL Base로부터 Export Table에 접근하여 API 주소를 획득하는 방식을 사용
[그림 24] FNV-1a 해시 계산 코드
○ (실행 준비) SetUnhandledExceptionFilter로 모든 예외 처리 핸들을 초기화 및 SetErrorMode를 사용해 에러 처리 관련 알림을 비활성화한 후, CreateThread를 사용해 새로운 스레드를 생성하여 악성 행위를 수행
[그림 25] 실행 준비 후 스레드 생성
○ (지속성 확보) 자신의 토큰을 확인 통해 권한에 따라 2가지 방식으로 지속성을 확보
No
유형
권한
데이터
1
SERVICE
관리자 O
MicrosoftEdgeInstaller
2
REG
관리자 X
HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\MSEdgeInstaller
[표 6] 지속성 확보
[그림 26] 지속성 확보 - 레지스트리
[그림 27] 지속성 확보 - 서비스
○ (설정 파일 생성) 악성코드는 C2 주소를 복호화하고, ADS(Alternate Data Streams)*를 사용하여 파일을 생성하면 탐색기에서는 보이지 않는다는 점을 악용하여 파일 시스템에 저장
* ADS : NTFS 파일 시스템의 기능으로, 하나의 파일에 여러 데이터 스트림을 붙일 수 있음
[그림 28] 명령어를 통해 확인한 설정 파일 내용
○ (감염 사실 전송) 내부에서 winhttp.dll 내의 API들을 사용해서 [표 7]의 주소와 통신을 시도. HTTP를 사용하여 공격자에게 악성코드 감염 사실을 공지하는 행위 확인
분석 당시 해당 C2 주소에 대한 DNS 쿼리 요청은 실패하여 추가 분석 진행 불가
유형
정보
C2
hxxp[:]//gsegse.dasfesfgsegsefsede.o-r[.]kr/login.php
[표 7] C2 주소
[그림 29] C2 통신 API 로그
[그림 30] DNS 쿼리 실패 로그
○ (명령어 실행) 이후, [표 8]의 POST 요청을 통해서 C2와 통신하며 [표 9]의 명령을 수행
유형
정보
POST
_sessionchk=ck_param_auto&_logininfo=login_unknown&_pkgparam=01AD8D96
[표 8] POST 요청 문자열
[그림 31] POST 요청 로그
명령어 코드
기능
0x64
명령 실행, 명령 실행 결과 전송
0x65
파일 다운로드
0x66
파일 업로드
0x67
프로세스 생성
0x69
파일 삭제
0x6a
스크린샷, 스크린샷 파일 업로드
0x6b
설정 데이터를 전송
0x6c
설정 데이터 업데이트
0x6d
지정된 호스트 및 포트에 연결
0x6e
일정 시간 정지
0x6f
파일 타임스탬프 변경
0x70
종료 및 흔적 제거
0x72
명령 실행, 기능은 명령어 0x64와 동일
[표 9] 명령어 정보
[그림 39] 명령어 실행 코드 일부

5. IoC 정보

NO
Type
Data
Info
1
MD5
01e349800e4c04fd58f7d20c52e12daa
스피어피싱으로 전달된 RAR 압축파일
2
MD5
7ec88818697623a0130b1de42fa31335
20250428 플랜아이 작업계획서 및 작업완료서_기계연 이명화.scr
3
MD5
580d7a5fdf78dd3e720b2ce772dc77e9
config.dat
4
MD5
c05022f6827c6c99b21f01a44c704a25
20250428 플랜아이 작업계획서 및 작업완료서_기계연 이명화.pdf
4
MD5
aa8936431f7bc0fabb0b9efb6ea153f9
Automation Manager JD(LM HR II).scr
5
MD5
537806c02659a12c5b21efa51b2322c1
zt1fbtn.on5l
6
C2
hxxp[:]//gsegse.dasfesfgsegsefsede.o-r[.]kr/login.php
C2 통신
7
C2
hxxp[:]//gsegse.dasfesfgsegsefsede.o-r[.]kr/login.php/_sessionchk=ck_param_auto&_logininfo=login_unknown&_pkgparam=01AD8D96
C2 통신
8
REG
HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\MSEdgeInstaller
지속성 확보

6. 참고자료

IGLOO Corp. 2025. All rights reserved.