Akira 랜섬웨어로 암호화된 파일을 다수의 GPU로 복호화하기

18 hours ago 4

  • 작성자는 Akira 랜섬웨어에 감염된 회사의 데이터를 몸값을 지불하지 않고 복구하는 데 성공
  • 복구 과정에서 사용한 소스 코드GitHub에서 제공
  • Akira 랜섬웨어는 다양한 변종이 존재하며, 2023년 후반부터 활동 중인 변종임
  • 이전 버전(2023년 중반 이전)에는 Avast가 복호화기를 개발할 수 있는 버그가 있었지만, 이 내용이 공개된 후 공격자가 암호화를 업데이트함
  • 랜섬웨어 샘플 해시는 GitHub에서 확인 가능

Akira 랜섬웨어(Linux/ESXI Variant 2024) 파일 복구 방법 요약

해결 접근 방식

초기 분석

  • 랜섬웨어는 나노초 단위의 현재 시간을 시드로 사용
  • Linux의 파일 수정 시간이 나노초 해상도를 가지므로 시드 복구 가능성 발견
  • 수정된 파일의 타임스탬프를 기반으로 브루트포스 접근 시도

복잡한 암호화 과정

  • 랜섬웨어는 4개의 시드 값(나노초 단위 시간) 사용
  • 키 생성은 SHA-256 해시를 1500회 반복 처리
  • VMware VMFS 파일 시스템은 수정 시간을 초 단위로만 저장함
  • 다중 스레드 기반 암호화로 인해 정확한 타이밍 복구 어려움

리버스 엔지니어링

  • 코드가 C++로 작성되어 분석이 어려웠으나, 난독화되지 않음
  • 오류 메시지를 통해 Nettle 라이브러리 사용 확인
  • 랜덤 생성기는 Yarrow256 알고리즘 기반이며 다음과 같은 코드를 사용함
void generate_random(char *buffer, int size) { uint64_t t = get_current_time_nanosecond(); char seed[32]; snprintf(seed, sizeof(seed), "%lld", t); struct yarrow256_ctx ctx; yarrow256_init(&ctx, 0, NULL); yarrow256_seed(&ctx, strlen(seed), seed); yarrow256_random(&ctx, size, buffer); }
  • 키 생성 시 4번의 generate_random() 호출 발생
    • chacha8_key (32바이트)
    • chacha8_nonce (16바이트)
    • kcipher2_key (16바이트) × 2

브루트포스 가능성 검토

주요 전략

  • 두 개의 타임스탬프(t3, t4)를 생성해 시드로 변환 후 난수 생성
  • 난수를 KCipher2 키IV로 사용해 암호화 후 결과와 암호화된 파일 비교

성능 분석

  • 1억 개의 타임스탬프를 변환하는 데 3시간 소요 (CPU 기준)
  • GPU 사용 시 변환 속도 → 6분 이하로 단축
  • 1초 범위에 대해 가능한 쌍은 약 500조 개
  • GPU 최적화 후 RTX 3090에서 초당 15억 회 암호화 처리 가능

VMWare 파일 타입 및 복구 전략

FLAT-VMDK

  • VMDK의 첫 8바이트는 부트로더에서 복구 가능
  • OS 정보를 VMX 파일에서 확인해 동일한 OS 설치 필요

SESPARSE

  • QEMU의 소스 코드에서 파일 헤더 패턴 확인
  • 헤더가 0x00000000cafebabe로 시작

기타 파일

  • NVRAM 파일, VMX 파일, 로그 파일 등에서 초기 타임스탬프 확인 가능

타임스탬프 복구

ESXi 로그

  • ESXi 로그에서 밀리초 단위 실행 시간 기록
  • 밀리초 단위 로그가 없으면 초 단위 시간에서 추정 가능

파일 시스템 수정 시간

  • ESXi의 경우 초 단위 해상도이기 때문에 정확한 시간 추정 어려움

다중 스레드 암호화

  • 파일 암호화는 CPU 코어 수만큼 병렬 처리
  • 파일의 수정 시간은 암호화 완료 시간에 가까움

브루트포스 도구 구현

KCipher2 알고리즘

  • 표준 KCipher2가 아닌 수정된 버전 사용 (Endian 처리 포함)
  • CUDA 사용해 GPU 최적화 진행

성능 개선

  • 공유 메모리 사용해 성능 개선
  • 메모리 복사 제거로 속도 향상
  • 병렬 파일 처리 구현 → 초당 약 15억 회 처리 가능

RTX 3090 vs RTX 4090

  • RTX 4090이 약 2.3배 빠름 → 7일 소요
  • RTX 3090 → 약 16일 소요

복구 단계

1. 타임스탬프 추출

  • stat 명령으로 수정 시간 확인
  • ESXi 로그에서 실행 시작 시간 추출

2. 암호화 데이터 추출

  • VMDK, SESPARSE 등에서 암호화된 블록 추출

3. 서버 속도 측정

  • GitHub의 timing-patch 도구 사용

4. 작업 분할

  • 구성 파일 생성 및 분할
  • GPU에서 병렬 실행 가능하도록 설정

5. GPU 대여 및 실행

  • Runpod → 7일에 약 116달러 비용
  • Vast.ai → 더 저렴하지만 기기 상태에 따라 속도 차이 발생 가능

6. KCipher2 브루트포스 실행

./akira-bruteforce run2 config.json

7. Chacha8 브루트포스 실행

  • 대형 파일의 경우 필요

8. 복호화 실행

./decrypt filename.vmdk <t1> <t2> <t3> <t4>

성능 결과

  • RTX 3090 → 초당 15억 회 처리
  • RTX 4090 → 초당 35억 회 처리
  • 16개의 RTX 4090 사용 시 → 10시간 이내 복구 가능

복구 가능성 및 한계

  • 랜섬웨어 복구 성공 확률은 0.1% 미만
  • 특정 조건이 충족될 경우 복구 가능성 존재
  • 랜섬웨어 변종에 따라 암호화 방식이 변경될 수 있음

결론

  • 랜섬웨어 복구는 매우 어렵지만, 특정한 조건에서는 성공 가능
  • GPU 기반 브루트포스가 핵심 도구
  • 작성자는 복구 코드를 오픈 소스로 공개했지만 추가 지원은 어려움

추가 참고 사항

  • GitHub의 README.md 파일 참고
  • 코드는 특정 클라이언트 상황에 맞춰 작성됨 → 범용 도구 아님
  • 구성 파일 생성, 타이밍 조정 등은 시스템 관리자 수준의 기술 필요

Read Entire Article