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

> Clean Markdown view of GeekNews topic #19776. Use the original source for factual precision when an external source URL is present.

## Metadata

- GeekNews HTML: [https://news.hada.io/topic?id=19776](https://news.hada.io/topic?id=19776)
- GeekNews Markdown: [https://news.hada.io/topic/19776.md](https://news.hada.io/topic/19776.md)
- Type: GN+
- Author: [neo](https://news.hada.io/@neo)
- Published: 2025-03-16T09:51:06+09:00
- Updated: 2025-03-16T09:51:06+09:00
- Original source: [tinyhack.com](https://tinyhack.com/2025/03/13/decrypting-encrypted-files-from-akira-ransomware-linux-esxi-variant-2024-using-a-bunch-of-gpus/)
- Points: 11
- Comments: 1

## Summary

작성자는 Akira 랜섬웨어에 감염된 데이터를 몸값을 지불하지 않고 복구하는 데 성공했으며, 복구 과정에서 사용한 소스 코드를 GitHub에 공개했습니다. 랜섬웨어는 나노초 단위의 현재 시간을 시드로 사용하여 암호화하며, 이를 기반으로 브루트포스 접근을 통해 복구를 시도했습니다. GPU를 활용한 최적화로 복구 속도를 크게 향상시켰으며, RTX 4090을 사용하면 10시간 이내에 복구가 가능하지만, 랜섬웨어 복구 성공 확률은 0.1% 미만입니다.

## Topic Body

- 작성자는 Akira 랜섬웨어에 감염된 회사의 데이터를 **몸값을 지불하지 않고 복구하는 데 성공**함  
- 복구 과정에서 사용한 **소스 코드**는 [GitHub](https://github.com/yohanes/akira-bruteforce)에서 제공  
- Akira 랜섬웨어는 다양한 변종이 존재하며, 2023년 후반부터 활동 중인 변종임  
- 이전 버전(2023년 중반 이전)에는 Avast가 복호화기를 개발할 수 있는 버그가 있었지만, 이 내용이 공개된 후 공격자가 암호화를 업데이트함  
- 랜섬웨어 샘플 해시는 [GitHub](https://github.com/rivitna/Malware/blob/main/Akira/Akira_samples.txt)에서 확인 가능  
  
### Akira 랜섬웨어(Linux/ESXI Variant 2024) 파일 복구 방법 요약  
  
#### 해결 접근 방식  
##### 초기 분석  
- 랜섬웨어는 **나노초 단위의 현재 시간**을 시드로 사용  
- Linux의 파일 수정 시간이 나노초 해상도를 가지므로 시드 복구 가능성 발견  
- 수정된 파일의 타임스탬프를 기반으로 **브루트포스** 접근 시도  
  
##### 복잡한 암호화 과정  
- 랜섬웨어는 **4개의 시드 값**(나노초 단위 시간) 사용  
- 키 생성은 **SHA-256 해시**를 1500회 반복 처리  
- VMware VMFS 파일 시스템은 수정 시간을 초 단위로만 저장함  
- 다중 스레드 기반 암호화로 인해 정확한 타이밍 복구 어려움  
  
#### 리버스 엔지니어링  
- 코드가 C++로 작성되어 분석이 어려웠으나, 난독화되지 않음  
- 오류 메시지를 통해 **Nettle 라이브러리** 사용 확인  
- 랜덤 생성기는 Yarrow256 알고리즘 기반이며 다음과 같은 코드를 사용함  
  
```c  
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 브루트포스 실행  
```bash  
./akira-bruteforce run2 config.json  
```  
  
##### 7. Chacha8 브루트포스 실행  
- 대형 파일의 경우 필요  
  
##### 8. 복호화 실행  
```bash  
./decrypt filename.vmdk &lt;t1&gt; &lt;t2&gt; &lt;t3&gt; &lt;t4&gt;  
```  
  
#### 성능 결과  
- RTX 3090 → 초당 **15억 회 처리**  
- RTX 4090 → 초당 **35억 회 처리**  
- 16개의 RTX 4090 사용 시 → **10시간 이내 복구 가능**  
  
#### 복구 가능성 및 한계  
- 랜섬웨어 복구 성공 확률은 **0.1% 미만**  
- 특정 조건이 충족될 경우 복구 가능성 존재  
- 랜섬웨어 변종에 따라 암호화 방식이 변경될 수 있음  
  
#### 결론  
- 랜섬웨어 복구는 매우 어렵지만, 특정한 조건에서는 성공 가능  
- GPU 기반 브루트포스가 핵심 도구  
- 작성자는 복구 코드를 오픈 소스로 공개했지만 추가 지원은 어려움  
  
#### 추가 참고 사항  
- GitHub의 `README.md` 파일 참고  
- 코드는 특정 클라이언트 상황에 맞춰 작성됨 → 범용 도구 아님  
- 구성 파일 생성, 타이밍 조정 등은 시스템 관리자 수준의 기술 필요

## Comments



### Comment 35948

- Author: neo
- Created: 2025-03-16T09:51:07+09:00
- Points: 1

###### [Hacker News 의견](https://news.ycombinator.com/item?id=43365083) 
- 누군가 랜섬웨어의 "제한된 수명"에 대해 언급했음. 이로 인해 다른 피해자에게는 영향이 없다는 의견을 삭제했지만, 이에 대한 답변을 게시함
  - 잘못된 정보임. 제한된 것은 피해자가 파일을 복구할 수 있는 공격의 수임
  - 저자가 이 공격을 사용한 유일한 사람이라고 생각한다면 그것도 잘못된 생각임
  - The Ransomware Hunting Team이라는 책을 추천함. 피해자들이 파일을 복구하는 과정의 뒷이야기를 다룬 흥미로운 책임

- 왜 타임스탬프를 사용하는지에 대한 질문이 있었음
  - 오해하지 말길 바라며, 사용하지 않는 것이 기쁘지만 초보적인 실수처럼 보임
  - 내가 놓친 것이 있는지, 아니면 범죄를 선택하지 않는 사람들이 더 많은 것인지 궁금함

- 이 글은 읽기 좋았고, 과정에 대한 호기심을 만족시킬 만큼의 적절한 세부사항을 담고 있었음
  - 저자가 이 과정을 고안하고 흥미로운 세부사항을 제공한 것에 큰 찬사를 보냄

- 애플리케이션이 기본적으로 샌드박스화된다면 랜섬웨어 문제는 줄어들 것임

- "내 미니 PC CPU에서 초당 100,000 타임스탬프를 랜덤 바이트로 계산하는 속도를 추정했음 (모든 코어를 활용하여)"
  - 미니 PC에 대한 더 많은 세부사항을 알고 싶음. 프로세서, RAM, 가격, 팬리스인지 궁금함

- 처음 65k를 KCipher2로 암호화하고 나머지를 다른 것으로 암호화하는 이유가 무엇인지 궁금함. 이상해 보임

- "이것을 게시한 후 공격자들이 암호화를 다시 변경할 것이라고 예상함"
  - 그들이 이를 인지한다면, 왜 게시하는 것인지 궁금함. 인터넷 명성을 위해 이렇게 상세한 복호화기를 제공하는 것은 무책임해 보임
  - 흥미로운 읽을거리이며 지적 호기심이 자극되지만, 세부사항을 비공개로 유지하는 것이 커뮤니티 전체에 더 나을 것임

- "내 인도네시아 블로그에 랜섬웨어에 대해 글을 쓸 때마다 많은 사람들이 랜섬웨어 도움을 요청함"
  - 랜섬웨어가 복구 가능한지 확인하는 것만으로도 몇 시간의 노력과 시간이 소요될 수 있음 (예: 악성코드가 난독화/보호된 경우)
  - 그러니 무료로 해달라고 요청하지 말라는 의견임
  - 그럼 비용을 청구하라는 의견임
