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

[IG-25-4007-O] 북한 Lazarus 그룹의 IPMsg 설치 파일 위장 악성코드 분석 : Analysis of Malware Disguised as IPMsg Installation File of North Korea's Lazarus Group

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

1. 개요

○ 북한 해킹 그룹 Lazarus가 사용한 IP Messenger(IPMsg)* 설치 파일로 위장한 악성코드 확보 후 분석
* IP Messenger : 동일한 네트워크 사용자간 채팅 및 파일 전송 등을 지원하는 무료 네트워크 메신저
○ 악성 설치 파일은 정상 설치 파일과 동일한 파일명 사용하고, 악성 행위 수행 전 정상 설치 파일을 생성 및 실행해 사용자로부터 악성코드 실행을 은폐
○ 여러 악성 DLL들을 파일리스 방식으로 실행해 최대 3개의 C2 서버와 지속적인 통신이 가능하며 유사 백도어처럼 동작하는 것으로 분석
각 DLL 파일은 샌드박스나 자동화 도구에서 단독으로 실행되는 것을 막기 위한 안티리버싱 코드가 존재해 악성코드 분석 방해 및 검사 우회를 시도
○ C2로부터 ZIP 파일로 압축된 악성 DLL을 다운로드 및 실행하여 추가 악성 행위를 수행
[그림 1] 공격 흐름도

2. 대응방안

○ 신뢰할 수 없는 사이트에서의 파일 다운로드 자제 및 공식 다운로드 페이지 이용
○ 다운로드한 파일의 해시 값과 제조사에서 제공하는 해시 값 비교를 통한 무결성 검증

3. 악성코드 상세분석

3.1. ipmsg5.6.18_installer.exe - 로더 복호화 및 실행

○ 악성 설치 파일은 사용자를 속이기 위해 정상 설치 파일과 동일한 파일명을 사용했지만, 파일 정보 및 해시는 [그림 2]이나 [그림 3]과 같이 다른 것으로 확인되었으며 정상 설치 파일의 경우 악성 설치 파일과 달리 디지털 서명 존재
[그림 2] 정상 및 악성 설치 파일 해시 비교
[그림 3] 정상 및 악성 설치 파일 정보 비교
[그림 4] 정상 설치 파일만 존재하는 디지털 서명
○ 내부에서 XOR로 암호화된 데이터가 확인되었고 복호화 후 추출해 데이터를 확인한 결과 Export 디렉토리에서 “ATT_Loader_DLL.dll”이라는 DLL명 정보가 확인
[그림 5] 파일 복호화 알고리즘 일부
[그림 6] 복호화된 PE 파일
[그림 7] ATT_Loader_DLL.dll의 Export 디렉토리
○ 복호화된 DLL은 [표 1]의 과정을 거쳐 파일리스 방식으로 메모리에 로드
단계
행위
1
로드를 위한 가상 메모리 할당
2
PE 데이터를 파싱하여 데이터를 가상 메모리에 복사
3
Relocation 테이블을 파싱해 데이터 재배치
4
Import 테이블을 구성
5
가상 메모리 보호 속성을 변경
6
로드된 DLL의 EntryPoint를 호출
[표 1] 파일리스 로드 과정
[그림 8] 로드된 ATT_Loader_DLL.dll의 EP 호출 코드
○ 이후 PE 헤더를 파싱하여 로드된 DLL의 Export 테이블에서 WinOrgBinW 함수를 검색 후 “3.2 ATT_Loader_DLL.dll”에서 설명할 안티리버싱에 사용되는 “tonimo” 문자열을 파라미터로 전달하여 실행
[그림 9] WinOrgBinW 함수 검색 코드 일부
[그림 10] ATT_Loader_DLL.dll의 WinOrgBinW 함수 실행 코드

3.2. ATT_Loader_DLL.dll - 추가 로더 복호화 및 실행

○ 호출된 WinOrgBinW 함수는 샌드박스 혹은 자동화 도구 등에서 DLL 단독으로 실행되는 것을 막기 위해 전달된 파라미터가 "tonimo" 문자열과 일치하는지 확인하는 안티리버싱 코드가 존재
[그림 11] 안티리버싱 코드
○ 안티리버싱을 통과했다면 %APPDATA% 폴더에 정상 설치 파일과 동일한 해시 값을 가지는 installer.exe 파일을 생성
[그림 12] installer.exe 생성 코드
[그림 13] %APPDATA% 폴더에 생성된 installer.exe
[그림 14] 정상 설치 파일로 확인된 installer.exe
○ 생성한 installer.exe(정상 설치 파일)을 실행해 악성 설치 파일의 실행을 은폐
[그림 15] installer.exe 실행 코드
[그림 16] 악성 설치 파일에 의해 실행된 정상 설치 파일
○ 정상 설치 파일을 실행 후 “3.1 ipmsg5.6.18_intstaller.exe”와 동일한 과정을 통해 데이터 복호화 및 파일리스 방식으로 로드 후 Export 테이블에서 GetsPrintW 함수를 검색 후 호출
○ 로드된 데이터를 추출한 후 확인한 결과 “Loader1.dll”이라는 DLL명 정보 확인
[그림 17] Loader1.dll의 Export 디렉토리
[그림 18] Loader1.dll의 GetsPrintW 함수 실행 코드

3.3. Loader1.dll 분석 - 다운로더 복호화 및 실행

○ 호출된 WinOrgBinW 함수는 전달된 문자열이 “evolic”인지 확인하는 안티리버싱 코드 이후 앞선 파일들과 유사한 [표 2]의 동작을 수행하는 스레드를 생성
○ 로드된 데이터를 추출한 후 확인한 결과 “Dll64.dll”이라는 DLL명 정보가 확인
단계
행위
1
파일리스로 실행할 데이터 복호화
2
복호화한 파일을 파일리스로 로드 후 실행
3
Export 테이블에서 GetWindowSizedW 함수를 검색
4
GetWindowSizedW 함수에 “0701” 문자열을 전달하여 호출
[표 2] Loader1.dll 행위
[그림 19] 스레드 생성 코드
[그림 20] Dll64.dll의 GetWindowSizedW 함수 호출 코드
[그림 21] Dll64.dll의 Export 디렉토리

3.4. Dll64.dll 분석 - 다운로더(유사 백도어)

○ 호출된 GetWindowSizedW 함수는 “0701” 문자열을 생성할 스레드에 전달해 앞선 파일들과 달리 전달된 문자열 길이를 체크하는 안티리버싱 수행
[그림 22] 생성할 스레드로 “0701”를 전달
[그림 23] 전달된 문자열 길이를 체크하는 안티리버싱 코드
○ 이후 해당 문자열 사용해 C2 통신 시 사용할 [표 3]과 같은 구성의 ID를 생성
Loader1.dll 전달 문자열
버전 정보
무작위 문자 10자리
“0701”
“64”
“qUqq67805L”
[표 3] DNS Query를 시도한 도메인
[그림 24] ID 생성 코드 일부
[그림 25] C2 통신을 위한 ID 생성
○ C2 통신에 사용할 주소는 하드 코딩된 3개의 주소 중 하나가 무작위로 선택되지만, 확보한 샘플에는 3개 모두 동일한 주소(hxxps://cryptocopedia[.]com/upgrade/latest.asp)가 사용
해당 주소 외의 다른 주소가 추가적으로 사용되었을 가능성 존재
[그림 26] 동일한 주소로 하드 코딩된 C2
[그림 27] 무작위 C2 선택 코드
○ 통신은 무작위 문자열 길이로 표현되어 전달되는 [표 4]의 Code 정보를 통해 데이터 교환이 이루어지며, 네트워크상에서 악성 행위를 숨기기 위해 base64 인코딩과 무작위 문자열을 사용해 데이터를 난독화
Code
정보
10
C2와의 연결을 위해 감염 사실 공지
7
추가 악성 행위를 수행할 파일 다운로드 정보 요청
12
다운로드 파일의 악성 행위 수행 결과 전송
11
디버깅 용 에러 문자열 전송
[표 4] C2 통신에 사용되는 Code 정보
[그림 28] 난독화된 패킷 데이터
[그림 29] base64 인코딩 코드
[그림 30] 무작위 문자열 생성 코드 일부
○ C2 통신을 통해 감염 정보를 전송한 악성코드는 C2에서 latest.asp 파일 데이터를 획득 후 복호화를 통해 다운로드할 파일의 MD5, 파일 크기, 수신 크기 등의 정보를 확인하고 [표 5]의 flag를 설정
Flag
상태
행위
0
C2에서 의미 있는 데이터 획득에 실패한 경우 C2에서 획득한 데이터가 “0x00 0x00”로 시작하는 경우
C2 변경
1
C2에서 획득한 데이터가 “0x01 0x00”로 시작하는 경우
현재 C2에서 재시도
2
C2에서 획득한 데이터의 복호화 및 파싱에 성공한 경우
추가적인 데이터 획득
-1
C2에서 획득한 데이터가 “0x0d 0x00”로 시작하는 경우
프로세스 종료
[표 5] 사용된 flag 정보
[그림 31] flag에 의해 분기되는 코드 일부
○ 다운로드 파일 정보 데이터를 성공적으로 파싱한 후 flag 2가 설정되었다면 [표 6]의 과정을 따라 추가 파일을 다운로드
No
정보
1
C2로 Code 7 패킷을 전송하여 다운로드 시작을 공지
2
파일 다운로드
3
C2로 Code 7 패킷을 전송하여 다운로드 완료를 공지
4
MD5를 계산하여 무결성 확인
[표 6] 파일 다운로드 및 처리 과정
[그림 32] Code 7 패킷 전송 코드 일부
[그림 33] 파일 다운로드 코드 일부
[그림 34] MD5 검증 코드 일부
○ C2 서버가 닫혀있어 다운로드 파일에 획득이 불가능하여 이후 동작 분석을 진행
[그림 35] C2 서버 DNS 쿼리 실패 로그
○ 다운로드 파일에서 ZIP 파일의 시그니처 문자열 “PK” 검색을 수행하는 것으로 보아 해당 파일은 압축 파일로 사료되며, 압축 해제 후 파일리스 방식으로 메모리에 로드 후 Export 함수를 실행하고 그 결과를 Code 12 패킷을 사용해 전송하는 것으로 분석
[그림 36] PK 문자열 검색 코드
[그림 37] fileless로 로드하는 코드
[그림 38] Export 함수 실행 코드 일부
[그림 39] 실행 결과 전송 코드 일부
○ 무한루프와 무작위 Sleep과 함께 C2와 지속적으로 통신하며 악성 행위를 수행
[그림 40] 무한루프를 통한 C2 통신 코드 일부

4. IoC 정보

NO
Type
Data
Info
1
MD5
a7b23cd8b09a3ce918a77de355e9d3e5
ipmsg5.6.18_installer.exe
2
MD5
a31f8f6e6078f9f59d195e3e2f29d1b3
ATT_Loader_DLL.dll
3
MD5
8459e1c6f6c1d3996b3a86146eb961bf
Loader1.dll
4
MD5
d4e2bd08c8366be665e54592dec1a7ce
Dll64.dll
5
C2
hxxps://cryptocopedia[.]com/upgrade/latest.asp
추가 악성코드 다운로드

5. 참고자료

IGLOO Corp. 2025. All rights reserved.