- 작성자는 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 파일 참고
- 코드는 특정 클라이언트 상황에 맞춰 작성됨 → 범용 도구 아님
- 구성 파일 생성, 타이밍 조정 등은 시스템 관리자 수준의 기술 필요