1. 개요 (Overview)
1.1 분석 배경
2024년 3월 처음 식별된 DoNex는 Muse 및 DarkRace의 계보를 잇는 최신 리브랜딩 랜섬웨어이다. 주로 엔터프라이즈 환경을 타겟팅하며, MMIO(Memory Mapped I/O) 및 SIMD 최적화 등 고성능 기법을 동원하여 대규모 데이터를 신속하게 암호화하는 것이 특징이다. 본 보고서는 해당 악성코드의 아키텍처 분석과 암호학적 결함을 이용한 데이터 복구 가능성을 다룬다.
1.2 핵심 요약
- 고속 암호화 엔진: 생산자-소비자(Producer-Consumer) 멀티스레딩 모델과 MMIO 기법을 결합하여 I/O 병목 현상을 최소화하였다.
- 알고리즘 기만 전술: 바이너리 내부 상수는 ChaCha20을 표방하나, 실제 라운드 연산에는 Salsa20 회전 상수를 사용하는 기만술을 적용하였다.
- 치명적 설계 결함: 키 확장 과정에서 16바이트 마스터 키가 특정 식별 패턴(expa...nd 1)과 함께 메모리에 평문(Plaintext) 상태로 상주하는 결함이 발견되어, 이를 통한 키 추출 및 복구가 가능하다.
2. 식별 정보 (Identification)
- Malware Family: DoNex (DarkRace / LockBit 3.0 Variant)
- Filetype: PE32 (Windows Executable)
- Hash (MD5): 8a23347b733420472a1ec0a1eeada597
- Hash (SHA256): 0adde4246aaa9fb3964d1d6cf3c29b1b13074015b250eb8e5591339f92e1e3ca
- Extension: .[9-digit Alphanumeric ID] (예: .f58A66B51)
- Ransom Note: Readme.[ID].txt
- Target: Windows Environment (x86/x64)
3. 분석 환경 및 도구 (Tools)
| 구분 | 도구명 (Tool) | 용도 (Purpose) |
| 정적 분석 | IDA Pro | 바이너리 디스어셈블리 및 Salsa20 라운드 함수 분석 |
| 동적 분석 | x64dbg | 런타임 디버깅 및 메모리 내 평문 키 추출 |
| 행위 분석 | Process Monitor | 파일 I/O(MapViewOfFile) 및 뮤텍스 생성 추적 |
| 검증 도구 | Python | Salsa20 복호화 로직 구현 및 메모리 덤프 스캐너(PoC) |
4. 암호화 기술 분석 (Technical Analysis)
4.1 초기화 및 시스템 장악
4.1.1 중복 실행 방지 및 난독화 해제
- 뮤텍스 검사: "CheckMutex"를 생성하여 동일 프로세스의 중복 실행을 차단한다.
- SSE2 기반 설정 복호화: 정적 분석을 방해하기 위해 난독화된 설정 데이터를 SIMD 명령어(_mm_xor_si128)로 실시간 복호화하여 로드한다.

4.1.2 난독화 데이터 복원 및 설정 파싱
DoNex는 바이너리에 하드코딩된 주요 설정값과 암호화 지표를 Base64로 인코딩하여 은닉한다. 실행 시 이를 복원하기 위해 자체적인 디코딩 루틴을 가동한다.
- 데이터 정제 및 검증: 디코딩 전 공백(0x20), CR, LF 등 무효 문자를 제거하여 데이터 무결성을 사전 확보한다.
- 룩업 테이블 기반 복원: 내부 Base64 룩업 테이블을 참조하여 4바이트 인코딩 데이터를 3바이트 바이너리 데이터로 정밀 변환한다.
- 예외 및 오류 처리: 패딩 문자(=) 개수를 검증하여 비정상 데이터 유입 시 특정 에러 코드를 반환하는 등 엄격한 예외 처리 로직을 포함한다.

4.1.3 시스템 관리자 권한 확인 로직
DoNex는 백업 삭제 및 서비스 제어와 같은 고권한 작업을 수행하기 전, 프로세스의 권한 수준을 다음과 같은 절차로 정밀 검증한다.
- 토큰 확보: 현재 스레드(OpenThreadToken)에서 토큰을 먼저 찾고, 없으면 프로세스(OpenProcessToken) 수준에서 권한 핸들을 가져온다.
- 기준 생성: AllocateAndInitializeSid를 통해 비교 대상인 관리자 SID(S-1-5-32-544)를 직접 생성한다.
- 그룹 대조: GetTokenInformation으로 추출한 사용자 그룹 목록 중, 관리자 SID와 일치하는 항목이 있는지 EqualSid로 확인한다.
- 최종 활성화 확인: 단순히 그룹에 포함되었는지만 보지 않고, 실제 명령 수행이 가능한 상태인 SE_GROUP_ENABLED 플래그가 켜져 있는지 검증한다.

4.1.4 네트워크 리소스 로드 및 PE 파싱 알고리즘
DoNex는 로컬 장치 외에도 네트워크 공유 폴더 내의 실행 파일 및 설정 데이터를 로드하기 위해 다음과 같은 처리를 합니다.
- 네트워크 강제 연결: CreateFileA로 파일 접근에 실패하면 해당 경로를 공유 폴더로 판단한다. 이후 WNetAddConnection2A를 호출하여 현재 사용자 권한으로 네트워크 연결을 강제 활성화한다.
- 동적 메모리 확보: 파일 크기를 측정한 뒤, 실제 데이터 외에 헤더 파싱을 위한 1,024바이트의 여유 공간을 추가하여 힙(Heap) 메모리를 할당하고 파일 전체를 읽어들인다.
- 수동 PE 구조 분석: 표준 API 대신 오프셋 연산으로 직접 파일을 파싱한다. DOS 헤더의 e_lfanew를 기준으로 PE 헤더를 탐색하며, 섹션 테이블을 참조해 마지막 섹션의 끝 주소를 정확히 산출한다.

4.1.5 파일 아이콘 변경 및 레지스트리 등록
DoNex는 암호화 완료 후 파일 아이콘을 전용 아이콘으로 교체하여 감염 사실을 시각화하고 심리적 압박을 극대화합니다.
- 아이콘 파일 생성: 내부 설정에 포함된 Base64 데이터를 디코딩하여 C:\ProgramData\icon.ico 경로에 실제 아이콘 파일로 저장한다.

- 파일 연결 등록: 레지스트리의 HKEY_CLASSES_ROOT를 조작하여, 암호화된 전용 확장자를 시스템이 새로운 파일 타입으로 인식하도록 강제 연결한다.

- 경로 지정 및 갱신: 해당 파일 타입의 DefaultIcon 값을 생성한 아이콘 경로로 설정한다. 이후 SHChangeNotify API를 호출하여 윈도우 탐색기 전역에 바뀐 아이콘이 즉시 나타나게 한다.

4.2 키 생성 및 관리 (Key Generation)
4.2.1 암호학적으로 안전한 난수 생성
- 보안 컨텍스트 확보: CryptAcquireContextA를 호출하여 암호화 서비스 제공자(CSP)의 핸들을 획득한다. 이때 메모리 내에서 보안성이 보장된 난수를 생성할 수 있는 환경을 설정한다.
- 난수 추출: CryptGenRandom API를 통해 예측이 불가능한 고엔트로피 데이터를 생성한다. 이 데이터는 랜섬웨어의 핵심 알고리즘인 Salsa20 마스터 키를 만드는 원천 데이터로 활용된다.


4.2.2 메모리 내 키 노출 결함
- Salsa20 알고리즘 초기화 과정에서 다음과 같은 구조적 취약점이 존재한다.
- 식별 패턴 노출: 마스터 키를 메모리에 올릴 때 특정 상수와 결합하여 expa [Key_16B] nd 16-byte k 또는 expand 32-byte k 형태로 배치한다.
- 키 탈취 가능성: 이 고정된 문자열 패턴은 메모리 스캔 시 강력한 시그니처(흔적)가 된다. 결과적으로 공격자의 RSA 개인키가 없더라도, 메모리 덤프 분석을 통해 Salsa20 키를 추출하고 파일을 복구할 수 있는 결정적인 단서가 된다.

4.2.3 SIMD 최적화 기반 식별자 생성
효율적인 데이터 변환을 위해 하드웨어 가속 기술을 활용한다.
- SSE2 병렬 변환: _mm_add_epi8과 같은 SSE2 명령어셋을 사용하여 데이터를 8바이트 단위로 병렬 처리한다. 이를 통해 변환 속도를 극대화하여 대량의 데이터를 빠르게 처리한다.
- ASCII 매핑: 생성된 난수 데이터에 MOD 연산을 적용한다. 이를 통해 복잡한 바이너리 데이터를 사람이 읽을 수 있는 인쇄 가능한 ASCII 문자 범위로 정규화한다.

4.2.4 공개키 기반 키 보호 (RSA)
- 최종 암호화: 파일 암호화에 사용된 마스터 키는 공격자의 RSA-4096 공개키로 다시 한번 암호화된다.
- 영역 삽입: 암호화된 키 데이터는 원본 파일의 가장 마지막 부분인 푸터(Footer, 512바이트) 영역에 삽입되어 저장된다.

4.3 멀티스레딩 기반의 고속 암호화 아키텍처
1. 자원 할당 및 병렬 처리 메커니즘
- 스레드 동적 최적화: 내부 설정에 따라 탐색 스레드와 암호화 스레드 수를 조절하여 시스템 성능에 맞는 최적의 공격 속도를 산출한다.
- 동기화 및 제어: CreateMutexA로 작업 큐의 데이터 충돌을 방지하고, CreateSemaphoreA로 스레드 간 작업 흐름을 제어한다.
- 탐지 우회: 스레드 실행 시 의도적인 지연(Sleep)을 주어 CPU 점유율 급증을 막고 보안 솔루션의 감시를 피한다.

2. 드라이브 전수 조사 및 경로 정규화
시스템에 연결된 모든 저장 장치를 암호화 대상으로 삼는다.
- 저장 장치 열거: GetLogicalDriveStringsW와 GetDriveTypeW를 사용하여 로컬 디스크는 물론 네트워크 드라이브까지 모두 식별한다.
- 경로 정규화: 탐색 효율을 높이기 위해 경로 끝의 백슬래시(\)를 제거하는 등 주소를 깔끔하게 정리하여 워커 스레드에 전달한다.

3. 네트워크 공유 탐색 및 확장
- 설정 기반 활성화: 내부 구성 파일의 network_shares 값이 활성화된 경우에만 Winsock을 통해 네트워크 공격을 준비한다.
- 리소스 열거: WNetOpenEnumW와 WNetEnumResourceW를 호출하여 도메인 내의 모든 공유 디스크 리소스를 찾아낸다.
- 강제 연결 및 전파: 식별된 원격 경로에 WNetAddConnection2W로 연결을 시도하며, 성공 시 해당 네트워크 내 파일들을 재귀적으로 암호화한다.


4.4 암호화 알고리즘 분석 (ChaCha20/Salsa20 혼용 엔진)
4.4.1 이원화된 엔진 구조
키 길이에 따라 두 가지 모드를 선택적으로 사용하여 암호화 강도를 조절한다.
- 128-bit 모드: 매직 넘버 expand 16-byte k를 사용하여 빠른 속도로 암호화를 수행한다.
- 256-bit 모드: 매직 넘버 expand 32-byte k를 사용하여 보안성이 더 높은 암호화를 지원한다.
- 알고리즘 코어: 쿼터 라운드(Quarter Round) 함수를 기반으로 하며, 총 10회의 더블 라운드(열/대각선 라운드)를 거쳐 강력한 키 스트림을 생성한다.




4.4.2 기만 전술 및 분석 혼선 유도
정적 분석 결과와 실제 동작 방식을 다르게 설계하여 분석가의 판단을 흐린다.
- 시그니처 기만: 바이너리 내부의 문자열은 ChaCha20와 Salsa20 계열을 동시에 암시하도록 배치한다. 이 때문에 단순한 문자열 추출만으로는 정확한 알고리즘을 파악하기 어렵게 만든다.
- 회전 상수 확인: 실제 라운드 함수의 회전 상수(Rotation Constants)를 정밀 분석한 결과, ChaCha20 표준 상수가 아닌 Salsa20 고유 상수를 사용하는 것으로 최종 확인되었다. 즉, 겉으로는 ChaCha20처럼 보이게 위장하면서 내부적으로는 Salsa20 로직을 가동하는 방식이다.
| 알고리즘 | Rotation Constants (Left Rotate) |
| ChaCha20 | 16, 12, 8, 7 |
| Salsa20 | 7, 9, 13, 18 |


4.5 파일 처리 및 부분 암호화 매커니즘
1. 고성능 프로세스 제어 및 파일 점유 해제
파일이 다른 프로그램에 의해 사용 중이라서 암호화가 실패하는 상황을 방지한다.
- Restart Manager 활용: RmStartSession 및 RmGetList API를 통해 현재 파일을 점유하고 있는 프로세스를 정확히 찾아낸다.
- 강제 종료 및 핸들 회수: TerminateProcess로 해당 프로세스를 종료한 후, WaitForSingleObject를 이용해 최대 5초간 대기하며 파일 접근 권한을 완전히 확보한다.


2. 하이브리드 파일 I/O 엔진
시스템 환경에 따라 두 가지 방식의 I/O 엔진을 선택적으로 사용한다.
- MMIO(메모리 매핑) 방식: 파일을 메모리 공간에 직접 매핑(MapViewOfFile)하여 처리한다. 데이터 복사 과정이 생략되어 속도가 압도적이며, 기존의 파일 쓰기 감시 솔루션을 우회하기 유리하다.

- 일반 I/O 방식: 모든 윈도우 환경에서 안정적으로 구동되도록 ReadFile/WriteFile 루틴을 병행한다. 힙 메모리에 최대 1MB 단위의 버퍼를 할당하여 저사양 시스템에서도 끊김 없이 작동한다.

3. 부분 암호화(Striping) 및 후처리
전체 파일을 암호화하는 대신 효율적인 구간 암호화 방식을 채택한다.
- 스트라이핑(Striping) 정책: 파일 크기에 따라 특정 구간만 골라 암호화하여 작업 시간을 단축하고 효율을 극대화한다.
| 파일 크기 범위 | 암호화 구간 수 | 방식 |
| 1MB 이하 | 1 (전체) | 파일 전체 암호화 |
| 1MB ~ 10MB | 1 | 1MB 크기의 단일 구간 암호화 |
| 10MB ~ 100MB | 5 | 5개 지점에서 각 1MB씩 암호화 (총 5MB) |
| 100MB 초과 | 100 | 100개 지점에서 각 1MB씩 암호화 (총 100MB) |
4. 데이터 후처리 및 흔적 소거
- 메타데이터 기록: 암호화 완료 후 파일 끝(Footer)에 RSA로 암호화된 세션 키 정보 등 512바이트의 데이터를 추가한다.
- 안티 포렌식: 확장자를 변경한 뒤 원본 파일의 흔적을 지워 버려, 포렌식 분석을 통한 데이터 복구를 방해한다.

4.6 암호화 제외 대상(Whitelisting) 분류
- 시스템 핵심 폴더: Windows, Program Files, Program Files (x86), AppData, Tor Browser 등을 제외한다. 이는 운영체제의 부팅 상태를 유지하고, 피해자가 복구 협상을 위한 통신 도구(Tor 브라우저)를 사용할 수 있게 하려는 의도이다.
- 부팅 필수 파일: boot.ini, ntldr, ntuser.dat, icon.ico 등은 암호화하지 않는다. 시스템의 치명적인 오류(Fatal Error)를 방지하여 컴퓨터가 켜진 상태를 유지하게 하며, 감염 시각화를 위해 생성한 아이콘 파일도 보존한다.
- 실행 및 라이브러리 확장자: .exe, .dll, .sys, .msi, .drv, .lnk 등의 확장자를 가진 파일은 건드리지 않는다. 각종 소프트웨어의 실행 환경을 파괴하지 않으면서 분석을 방해하려는 목적이다.
4.7 랜섬 노트 및 감염 징후 (Indicators)
- 파일 확장자 변경: 암호화된 파일명 뒤에 고유한 9자리 영숫자 ID가 확장자로 추가된다. (예: document.docx.f58A66B51)
- 랜섬 노트 생성: 각 폴더에 Readme.[ID].txt 형식의 안내 파일을 생성한다.
- 협상 유도: 노트를 통해 Tor 브라우저 전용 링크나 이메일(donexsupport@onionmail.org) 주소를 안내하며, 복구를 조건으로 금전 협상을 요구한다.

!!! DoNex ransomware warning !!!
>>>> Your data are stolen and encrypted
The data will be published on TOR website if you do not pay the ransom
Links for Tor Browser:
<http://g3h3klsev3eiofxhykmtenmdpi67wzmaixredk5pjuttbx7okcfkftqd.onion>
>>>> You need contact us and decrypt one file for free on these TOR sites...
Tox ID Contact: 2793D009872AF80ED9B1A461F7B9BD6209744047DC1707A42CB622053716AD4BA624193606C9
Mail (OnionMail) Support: donexsupport@onionmail.org
>>>> Warning! Do not DELETE or MODIFY any files, it can lead to recovery problems!
4.8 정리 및 자가 삭제 (Cleanup & Self-Deletion)
1. 시스템 이벤트 로그 소거
내부 설정값(delete_eventlogs)이 활성화되어 있으면 OpenEventLogA와 ClearEventLogA API를 호출한다. 이를 통해 윈도우의 핵심 로그 항목인 Application, System, Security 기록을 강제로 삭제하여, 침해 사고 분석 시 전문가가 참조할 로그를 인멸한다.

2. 활동 흔적 및 프로세스 종료
WinExec를 이용해 taskkill 명령을 실행한다. 현재 실행 중인 cmd.exe와 conhost.exe를 강제로 종료함으로써 악성 스크립트 실행 흔적을 지우고, 분석가가 열어둔 콘솔 창까지 닫아버리는 효과를 노린다.

3. 자가 삭제 및 시스템 재부팅
모든 증거를 인멸하기 위한 마지막 단계를 수행한다.
- 지연 삭제 기법: ping 127.0.0.1 명령으로 의도적인 지연(Delay)을 만든다. 그 후 실행에 사용된 배치 파일(1.bat)과 악성코드 본체 파일을 함께 삭제한다.
- 강제 재부팅: 설정(shutdown_system)에 따라 shutdown -r -f -t 0 명령을 실행한다. 시스템을 강제 재부팅함으로써 메모리에 남아 있을 수 있는 평문 키 데이터와 악성코드 잔재를 완전히 소멸시킨다.

5. 복호화 기술 분석 (Decryption Strategy)
분석 결과, DoNex는 키 생성 시점의 데이터를 메모리에 평문으로 남겨두는 치명적인 결함이 확인되었다. 이를 활용하여 암호화된 파일을 복구할 수 있는 기술적 근거를 수립한다.
5.1 복구 키 확보 방안 (Memory Forensics)
랜섬웨어 프로세스가 살아있거나 시스템이 재부팅되지 않은 상태라면, 메모리 포렌식을 통해 키를 추출하는 것이 가능하다.
- 메모리 덤프: 실행 중인 랜섬웨어 프로세스의 메모리 전체를 덤프(Dump)하여 분석 데이터를 확보한다.
- 키 시그니처 검색: 앞서 확인된 Salsa20의 매직 넘버인 expand 16-byte k 또는 expand 32-byte k 패턴을 메모리 내에서 검색한다.
- 실제 키 추출: 해당 패턴 바로 뒤에 위치한 데이터가 파일 암호화에 사용된 실제 마스터 키이다. 이 키를 확보하면 공격자의 RSA 개인키 없이도 파일을 원상복구 할 수 있다.
def scan_key_from_memory(data: bytes) -> bytes:
# Salsa20 16-byte 키 모드 상수 ("expand 16-byte k")
# 메모리 패턴: "expa" (4B) + [KEY 16B] + "nd 1" (4B)
sig_start, sig_end = b"expa", b"nd 1"
offset = 0
while True:
offset = data.find(sig_start, offset) # "expa" 탐색
if offset == -1: break
# 키 위치: 상수 사이에 존재하는 16바이트 추출
key_candidate = data[offset+4 : offset+20]
# 뒷부분 상수 "nd 1" 검증으로 오탐 방지
if data[offset+20 : offset+24] == sig_end:
return key_candidate # 마스터 키 발견
offset += 1
return None
5.2 복호화 알고리즘 (Decryption Logic)
- 키 및 Nonce 설정: 메모리 포렌식으로 확보한 Salsa20 마스터 키와 DoNex가 고정적으로 사용하는 Zero Nonce(모든 값이 0으로 채워진 Nonce)를 준비한다.
- 스트림 재생성: 준비된 키와 Nonce를 Salsa20 알고리즘에 입력하여, 암호화 당시와 동일한 키 스트림을 다시 생성한다.
- XOR 복호화: 생성된 키 스트림을 암호화된 파일 구간(Striping 구간)에 대조하여 XOR 연산을 수행한다. 이 과정을 통해 변조된 데이터는 원본 상태로 복구된다.
def _salsa20_block_128(key, nonce, counter):
# ... (State 초기화 생략) ...
# [분석] 20 라운드 수행: Salsa20 표준 회전 상수 (7, 9, 13, 18) 확인
for _ in range(10):
x[4] ^= ((x[0]+x[12])<<7 & 0xFFFFFFFF) | ((x[0]+x[12])>>25);
x[8] ^= ((x[4]+x[0]) <<9 & 0xFFFFFFFF) | ((x[4]+x[0]) >>23);
x[12]^= ((x[8]+x[4]) <<13& 0xFFFFFFFF) | ((x[8]+x[4]) >>19);
x[0] ^= ((x[12]+x[8])<<18& 0xFFFFFFFF) | ((x[12]+x[8])>>14);
# ... (나머지 라운드 생략) ...
return struct.pack("<16I", *x)
5.3 무결성 검증 (Integrity Check)
- 키 유효성 판단: 메모리에서 추출한 여러 후보 키 중 실제 파일 암호화에 사용된 유효한 키를 가려내기 위한 과정이다.
- 파일 헤더 대조: 복호화된 데이터의 앞부분을 분석하여 원본 파일 형식의 고유 식별값인 **매직 넘버(PNG, PDF, ZIP 등)**가 나타나는지 대조한다.
- 전체 복구 확정: 복호화 결과물의 시그니처가 표준 파일 포맷과 정확히 일치할 경우, 해당 키를 유효한 것으로 확정하고 시스템 내 모든 암호화 파일에 대해 복구를 진행한다.
def detect_extension(header: bytes) -> str:
# 주요 파일 포맷 매직 넘버 정의
signatures = [
(b"\x89PNG\r\n\x1a\n", ".png"),
(b"\xff\xd8\xff", ".jpg"),
(b"%PDF", ".pdf"),
(b"PK\x03\x04", ".zip"),
]
# 복호화된 헤더와 매직 넘버 대조
for magic, ext in signatures:
if header.startswith(magic):
return ext # 매칭 성공 (복구 완료)
return ".bin"
6. 요약 및 결론 (Conclusion)
6.1 암호화 워크플로우 (Workflow)
- 초기화: CheckMutex를 생성하여 중복 실행을 방지하고, 콘솔 창을 은폐한다. 이후 이벤트 로그 및 볼륨 섀도 복사본을 삭제하는 안티 포렌식 작업을 수행한다.
- 키 생성: CryptGenRandom API를 호출하여 16바이트 또는 32바이트의 난수 키를 생성한다. 이 데이터는 Salsa20 알고리즘의 핵심인 State(상태 행렬) 구성에 사용된다.
- 암호화 수행: 생산자-소비자(Producer-Consumer) 모델을 가동하여 시스템 내 파일을 고속으로 탐색한다. 효율성을 위해 메모리 매핑(MMIO) 기술을 활용하며, Salsa20 알고리즘으로 파일의 특정 구간만 부분 암호화한다.
- 작업 완료: 암호화가 끝나면 파일 최하단(Footer)에 RSA로 암호화된 키 블록을 저장한다. 마지막으로 파일 확장자를 고유 ID 형태로 변경하여 감염 사실을 명시한다.
6.2 최종 평가 (Final Assessment)
DoNex 랜섬웨어는 메모리 매핑과 멀티스레딩 기술을 결합하여 고속 암호화를 수행하는 고도화된 위협이지만, 분석 결과 16바이트 대칭키가 메모리 내에 평문 시그니처 형태로 노출되는 치명적인 구조적 결함이 존재함이 확인되었다. 비록 자가 삭제와 재부팅을 통해 흔적 소거를 시도하며 정밀한 분석을 방해하려 하나, 침해 사고 발생 직후 시스템을 재부팅하지 않고 메모리 덤프를 확보한다면 노출된 키를 추출하여 공격자의 도움 없이도 데이터를 온전히 복구할 수 있다.
7. 대응 및 예방 가이드 (Mitigation)
- 초동 조치: 감염 의심 시 절대 전원을 끄거나 재부팅하지 말아야 한다. 즉시 네트워크 연결을 차단한 상태에서 메모리 덤프(Memory Dump)를 최우선으로 획득해야 하며, 이는 랜섬웨어 프로세스가 종료되기 전에 반드시 완료해야 한다.
- EDR 및 보안 정책 설정: vssadmin을 통한 섀도 복사본 삭제나 SHEmptyRecycleBinA 호출 등 악성 행위를 실시간 모니터링해야 한다. 특히 짧은 시간 내에 수많은 파일에 대해 MapViewOfFile을 수행하는 비정상적인 프로세스를 차단하도록 보안 정책을 강화한다.
- 접근 제어 및 경로 차단: 초기 침투 경로가 되는 RDP 및 SMB 포트에 대해 엄격한 접근 통제를 실시하고, 모든 계정에 다중 인증(MFA)을 적용하여 외부 공격자의 무단 침입을 사전에 예방한다.
부록: 침해 지표 (Appendix: IOC & Rules)
| 구분 | Type | Value (Indicator) | 비고 |
| Hash | MD5 | 8a23347b733420472a1ec0a1eeada597 | Sample Hash |
| Mutex | String | CheckMutex | 중복 실행 방지 |
| String | donexsupport@onionmail.org | 공격자 연락처 | |
| File | Note | Readme.[ID].txt | 랜섬 노트 |
[표 1] DoNex 주요 침해 지표 (IOC)
| Tactic | ID | Name | Description |
| Defense Evasion | T1027 | Obfuscated Files or Information | 런타임에 코드 섹션을 동적으로 복호화 |
| Defense Evasion | T1112 | Modify Registry | 레지스트리 조작 (탐지 회피) |
| Impact | T1486 | Data Encrypted for Impact | Salsa20 알고리즘을 이용한 파일 암호화 |
| Impact | T1490 | Inhibit System Recovery | 섀도 복사본 및 백업 삭제 |
[표 2] MITRE ATT&CK TTPs 매핑
rule Windows_Ransomware_DoNex {
meta:
author = "Analysis Team"
description = "Detects DoNex Ransomware via Salsa20 constants & Mutex"
severity = "High"
strings:
$mutex = "CheckMutex" ascii wide
$salsa_const_part1 = "expa" ascii
$salsa_const_part2 = "nd 1" ascii
$api_map = "MapViewOfFile" ascii
$api_recycle = "SHEmptyRecycleBinA" ascii
condition:
uint16(0) == 0x5A4D and
$mutex and
($salsa_const_part1 and $salsa_const_part2) and
$api_map
}
[코드 1] 탐지 시그니처 (YARA Rule)
'랜섬웨어 분석 보고서' 카테고리의 다른 글
| Donut 랜섬웨어 분석 보고서 (0) | 2025.12.29 |
|---|---|
| Babuk 랜섬웨어 분석 보고서 (0) | 2025.12.26 |
| Beast 랜섬웨어 암호 및 복호화 기술 분석 보고서 (0) | 2025.12.19 |
| MedusaLocker (BabyLockerKZ) 랜섬웨어 분석 보고서 (0) | 2025.12.13 |
| SINOBI 랜섬웨어 암호화 및 복호화 기술 분석 보고서 (0) | 2025.12.11 |