랜섬웨어 분석 보고서

Mamona 랜섬웨어 분석 보고서

geonwoo9643 2026. 1. 1. 23:24

1. 개요 (Overview)


1.1 분석 배경

Mamona 랜섬웨어(Mammon 변종)는 비대칭 암호화 기술인 X25519와 커스텀 스트림 암호인 HC-128을 결합한 고도의 하이브리드 공격 도구다. 표준 알고리즘의 초기화 루틴을 의도적으로 변형하여 일반적인 복구 도구의 접근을 차단하며, 주로 기업 내부망을 타겟팅하여 데이터 복구를 무력화하는 기만술을 구사한다.


1.2 핵심 요약

  • 하이브리드 암호 체계 : X25519를 통한 세션 키 교환과 고성능 HC-128 스트림 암호를 결합하여 보안성과 속도를 동시에 확보했다.
  • 커스텀 암호 엔진 : 표준 HC-128의 초기화 절차를 SHA-256 기반 확장 루틴으로 재설계하여 분석가의 알고리즘 식별 및 복구 시도를 방해한다.
  • 치명적 설계 결함 : 암호화의 원천이 되는 피해자 개인키가 CryptGenRandom API 호출 시점에 평문(Plaintext) 상태로 노출되는 결함이 존재하여, 메모리/로그 포렌식을 통한 데이터 복구가 가능하다.

 

2. 식별 정보 (Identification)


  • Malware Family: Mamona (Mammon Variant)
  • Filetype: PE32 (Windows Executable)
  • Hash (SHA256): c5f49c0f566a114b529138f8bd222865c9fa9fa95f96ec1ded50700764a1d4e7
  • Extension: .HAes 또는 .crypt
  • Target: Windows Environment

 

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


구분 도구명 (Tool) 용도 (Purpose)
정적 분석 IDA Pro 바이너리 디스어셈블리 및 커스텀 HC-128 로직 분석
행위 분석 Hooking Log API 호출 모니터링 및 CryptGenRandom 기반 키 후보군 추출
검증 도구 Python X25519/HC-128 복구 엔진 구현 및 자동 복호화 검증 (PoC)

 

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


4.1 키 생성 및 관리

Mamona는 하이브리드 암호화 방식을 사용하여 매 실행 시 고유한 키를 생성한다.

  1. X25519 기반 ECDH : 피해자 시스템에서 생성된 32바이트 임시 개인키와 공격자의 하드코딩된 공개키를 사용하여 Shared Secret(공유 비밀값)을 생성한다.
  2. SHA-512 기반 KDF : 생성된 공유 비밀값을 SHA-512 해시 알고리즘에 통과시켜 64바이트 마스터 키를 도출한다.
  3. 대칭키 할당 : 마스터 키의 상위 32바이트는 HC-128 Key로, 하위 32바이트는 IV(초기화 벡터)로 할당되어 엔진에 로드된다.

4.2 커스텀 HC-128 엔진 분석

분석 방해를 위해 표준 HC-128의 내부를 다음과 같이 개조하였다.

  • 변형된 초기화 (sub_4085E0) : Key와 IV를 state[1057..1072] 영역에 배치하며, 비트 길이를 명시적으로 기록하는 독자적인 구조를 가진다.
  • SHA-256 기반 테이블 확장 : 표준 Seed 초기화 대신 SHA-256의 메시지 확장 패턴(\sigma_0, \sigma_1 연산)을 적용하여 초기 P/Q 테이블(각 512워드)을 생성한다.
  • 라운드 연산 및 스트림 생성 : 64회의 초기 라운드를 통해 테이블을 균질화한 후, 64바이트 단위의 키스트림을 생성하여 원본 데이터와 XOR한다.

4.3 파일 처리 및 부분 암호화 정책

I/O 효율성을 극대화하기 위해 파일 크기에 따라 암호화 범위를 차등 적용한다.

파일 크기 범위 암호화 정책 상세 방식
5MB 이하 전체 암호화 파일 전체 영역 파괴
5MB ~ 20MB 부분 스트라이핑 6개 구간에 대해 각 4KB씩 암호화
20MB 초과 고속 암호화 10MB 간격으로 4KB씩 암호화 (최대 70MB)

4.4 정적 분석

  • 파일 암호화

 

  • Curve25519 키 교환 함수 (공유 비밀 생성)

 

  • SHA256 Hash 함수 (32바이트 마스터키 생성)

 

  • HC-128 내부 상태 배열 설정 (256-bit Key)

state[1057..1064] ← Key (8 words)
state[1065..1072] ← IV  (8 words)
state[1073]       ← Key 비트 길이 (256)
state[1074]       ← IV 비트 길이  (256)

 

  • HC-128 내부 상태 배열 설정 (256-bit IV) 및 P/Q 테이블 초기화 (각 512워드)

 

  • HC-128 스트림 암호화 함수

 

  • HC-128 키스트림 생성

 

  • 파일 크기에 따른 암호화 방식

파일 크기 a3 = 1 (부분 암호화) a3 = 0 (전체/퍼센트)
≤ 64 bytes 전체 전체
65B ~ 5MB 앞부분 10% 전체
5MB ~ 20MB 6개 구간 × 4KB a2% (최대 70MB)
> 20MB 10MB 간격 × 4KB a2% (최대 70MB)

 

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


5.1 복구 키 확보 방안

암호화의 핵심인 피해자 임시 개인키(32바이트)CryptGenRandom API 호출을 통해 생성된다. 이 시점에 후킹 도구나 메모리 덤프를 활용하면 평문 상태의 키 후보군을 확보할 수 있다. 확보된 개인키와 공격자의 공개키를 조합하면 세션 키를 재구성할 수 있다.


5.2 복호화 알고리즘 구현

확보된 키와 변형된 엔진 구조를 재현하여 데이터를 복구하는 핵심 로직이다.

# [코드 5-1] X25519 및 SHA-512 KDF를 통한 마스터 키 도출
def derive_keys(victim_priv, attacker_pub):
    # ECDH 공유 비밀값 생성
    shared = x25519(victim_priv, attacker_pub)
    # SHA-512 기반 Key(32B) / IV(32B) 분리
    master = hashlib.sha512(shared).digest()
    return master[:32], master[32:64]

# [코드 5-2] 커스텀 HC-128 복호화 엔진 구현 (PoC)
def decrypt_hc128(cipher, key_hex, iv_hex):
    state = alloc_state()
    # 변형된 초기화 루틴 (SHA-256 확장 적용)
    sub_4085E0(state, key_words, 256, 256)
    sub_408220(state, iv_words)
    
    # 파일 크기별 부분 암호화 길이에 맞춰 XOR 복호화
    dec_len = compute_partial_length(len(cipher))
    return sub_408650(state, cipher, dec_len)

5.3 무결성 검증 및 자동화 (Integrity Check)

추출된 여러 키 후보군 중 정답을 식별하기 위해 파일 헤더의 시그니처를 검증한다.

  • 검증 대상 : PNG (\x89PNG), JPEG (\xFF\xD8\xFF), ZIP/Office (PK\x03\x04), PDF (%PDF)
  • 프로세스 : 각 개인키 후보로 복호화 시도 → 헤더 매직 넘버 대조 → 일치 시 복구 확정.

 

6. 요약 및 결론 (Conclusion)


6.1 암호화 워크플로우

  1. 초기화 : 뮤텍스 생성 및 중복 실행 방지.
  2. 키 생성 : CryptGenRandom으로 피해자 개인키 생성 --> X25519 ECDH --> SHA-512 KDF.
  3. 암호화 : 커스텀 HC-128 엔진 가동, 파일 크기별 스트라이핑 정책 적용.
  4. 완료 : 확장자 변경(.HAes / .crypt) 및 결과 저장.


6.2 최종 평가

Mamona 랜섬웨어는 알고리즘 변조를 통해 분석을 어렵게 설계하였으나, 키 생성 과정에서의 개인키 노출이라는 결정적인 설계 결함을 가지고 있다. 침해 사고 발생 시 시스템을 재부팅하지 않고 후킹 로그 또는 메모리 덤프를 확보한다면, 본 보고서에서 제시한 자동 복호화 모델을 통해 원본 데이터를 온전히 복원할 수 있다.