랜섬웨어 분석 보고서

Akira 랜섬웨어 분석 보고서

geonwoo9643 2026. 2. 6. 04:28

1. 개요 (Overview)


Akira 랜섬웨어는 2024년 11월에 관측된 ChaCha 스트림 암호 기반 랜섬웨어다. Windows CryptoAPI의 CryptGenRandom으로 생성한 암호화 키를 가공 없이 ChaCha State에 직접 사용하며, 표준 ChaCha20 대비 라운드 수를 절반으로 축소한 ChaCha8 변형을 사용한다. 파일 크기의 절반만 암호화하는 부분 암호화 방식으로 속도를 최적화했으며, 534바이트 Footer에 RSA로 암호화된 키 정보를 저장한다.

 

2. 식별 정보 (Identification)


  • Malware Family: Akira
  • Filetype: PE32 (Windows Executable)
  • Hash (SHA256): 2e2ad6392e75d5a5155498c2a76cb373d17ca3ad4ba57c6d33c623fca5e29342
  • Extension: .akira
  • First Seen: 2024-11-05 12:20:13 UTC
  • Target: Windows 기반 시스템 (x64)

 

3. 분석 환경 및 도구 (Tools)


구분 도구명 (Tool) 용도 (Purpose)
정적 분석 IDA Pro ChaCha8 구현 루틴 및 암호화 로직 분석
동적 분석 CryptGenRandom API Hooking (Detours) 실시간 키 및 nonce 추출
행위 분석 Process Monitor 파일 I/O 및 암호화 행위 추적
검증 도구 Python ChaCha8 복호화 스크립트 개발 및 PoC

 

4. 암호화 기술 분석 (Technical Analysis)


4.1 암호화 키 생성

CryptGenRandom(32 bytes) → Key Storage (a1+312)
CryptGenRandom(8 bytes) → Nonce Storage (a1+304)
         ↓
RSA 암호화용 복사본 생성 (Footer 저장)
         ↓
원본 키/논스 유지 (가공 없음)

 

핵심 특징: CryptGenRandom 출력값을 가공 없이 ChaCha State에 직접 사용


4.2 ChaCha State 초기화

state[0-3]   = "expand 32-byte k"  # 상수
state[4-11]  = Key (32 bytes, 8 words from a1+312)
state[12-13] = Counter = 0
state[14-15] = Nonce (8 bytes, 2 words from a1+304)

4.3 커스텀 ChaCha8 구현

라운드 구조

구분 표준 ChaCha20 Akira ChaCha8
Double Rounds 10 4
Quarter Rounds 20 8
블록 크기 64 bytes 64 bytes

 

4번 반복 (Double Round)

Round 1: Column Round + Diagonal Round
Round 2: Column Round + Diagonal Round
Round 3: Column Round + Diagonal Round
Round 4: Column Round + Diagonal Round

 

Keystream 생성

변환된 State + 원본 State = Keystream (64 bytes)
Ciphertext ⊕ Keystream = Plaintext

4.4 파일 암호화 구조 (> 2,000,000 bytes)

graph TD
    A[Original File] --> B[Encrypted Block<br/>Size: File Size / 2]
    A --> C[Plain Text Block<br/>Size: File Size / 2]
    B --> D[Encrypted File]
    C --> D
    E[File Footer<br/>534 bytes<br/>RSA Encrypted Key/Nonce] --> D
**구조 상세**

| Block Type | Size |
|------------|------|
| Encrypted Block | File Size / 2 |
| Plain Text Block | File Size / 2 |
| File Footer | 534 bytes |

4.5 암호화 함수 흐름

암호화 함수
    ↓
키/논스 생성 및 저장
    ↓
ChaCha State 초기화
    ↓
4 Double Rounds 실행
    ↓
Keystream 생성
    ↓
XOR 암호화 (파일 절반만)
    ↓
Footer 추가 (RSA 암호화된 키/논스)

4.6 정적 분석

main 함수

  • 명령줄 인자

--encryption_path: 암호화 대상 경로
--share_file: 공유 파일 목록
--encryption_percent: 파일 암호화 비율 (기본 50%)
-l: 로컬 드라이브만 대상

 

  • 파일 목록 수집

 

  • RSA 공개키 로드 (Microsoft Enhanced RSA and AES Provider)

 

  • 스레드 풀 생성 (CPU 코어 수)

 

  • 파일 목록 순회

 

  • 암호화 함수 호출 (경로, RSA키, 암호화 비율, 네트워크 공유 플래그)

 

  • 암호화 작업 완료 대기

 

  • 소요 시간 출력

 

메인 암호화 State Machine

 

State 2: 암호화 초기화

  • CryptGenRandom 키/논스 생성

 

  • ChaCha State 초기화

 

  • 파일 열기

 

  • 파일 크기 확인

 

암호화 모드 결정 (≤ 2MB → 전체 암호화 / > 2MB → 절반만 암호화)

 

  • 전체 암호화 (≤ 2MB)

 

  • 스팟 암호화

 

  • 절반 암호화 (> 2MB)

 

  • ChaCha8 암호화

 

  • Footer 작성 (1바이트 플래그 + 4바이트 크기 + RSA 암호화된 키/Nonce)

 

  • 파일명 변경 (.akira 확장자 추가)

 

5. 복호화 기술 분석 (Decryption Strategy)


5.1 후킹 기반 키 추출

모니터링 대상 API

  • CryptGenRandom : 키/논스 생성 시점 캡처
  • CreateFileW : 암호화 대상 파일 식별
  • WriteFile : Footer 작성 모니터링

5.2 복호화 스크립트 분석

복호화 로직

# 1. State 초기화
state = [
    0x61707865, 0x3320646e, 0x79622d32, 0x6b206574,  # "expand 32-byte k"
    ...key (8 words)...,
    0, 0,  # counter (64-bit)
    ...nonce (2 words)...
]

# 2. 64바이트 블록 단위 복호화
while pos < encrypted_size:
    state[12] = counter_low
    state[13] = counter_high
    keystream = custom_chacha_block_exact(state)
    plaintext = ciphertext ⊕ keystream
    counter += 1

 

스크립트 기능

  • JSON 파일에서 후킹된 키/논스 자동 추출
  • 다중 키 쌍 지원 (여러 키로 순차 시도)
  • 파일 타입 자동 검증 (JPEG, PNG, 텍스트)

5.3 복호화 검증

자동 파일 타입 검증

  • JPEG : Magic bytes FF D8
  • PNG : Magic bytes 89 50 4E 47
  • 텍스트 : Printable ratio > 80%

 

6. 요약 및 결론 (Conclusion)


6.1 기술적 특징

암호화 메커니즘

구성 요소 구현
키 생성 CryptGenRandom (32 bytes, 가공 없음)
논스 생성 CryptGenRandom (8 bytes, 가공 없음)
스트림 암호 ChaCha8 (4 double rounds)
키 보호 RSA 공개키 암호화
암호화 범위 파일 크기 50% (≤ 2MB)
Footer 534 bytes

 

성능 최적화

  • 라운드 수 감소 : ChaCha20 → ChaCha8 (속도 2배 향상)
  • 부분 암호화 : 파일 절반만 암호화 (I/O 50% 감소)
  • 가공 없는 키 사용 : 추가 연산 제거

6.2 보안 약점

약점 1: 축소된 라운드

  • ChaCha8 (8 quarter rounds)은 표준 ChaCha20 (20 quarter rounds) 대비 보안 강도 감소
  • Cryptanalysis 공격 가능성 증가

 

약점 2: 부분 암호화

  • 파일 절반이 평문 노출
  • 문서/이미지 파일의 경우 내용 일부 복원 가능

 

약점 3: 키 보호 의존성

  • 암호화 키 자체는 강력하나, RSA 공개키만 의존
  • 메모리 덤프/API 후킹 시 키 추출 가능

6.3 복호화 가능 조건

필수 정보

  • 32바이트 ChaCha 키 (가공 전 원본)
  • 8바이트 논스 (가공 전 원본)

 

추출 방법

  • API 후킹: CryptGenRandom 호출 시점 캡처
  • 메모리 덤프: 암호화 프로세스 메모리 분석 (a1+312, a1+304 오프셋)
  • Footer 분석: RSA 개인키 확보 시 복호화 가능