복호화가 가능한 Green Blood v2.0 랜섬웨어 분석
2026년 1월부터 활동이 확인된 Green Blood 랜섬웨어 그룹은 남아시아와 아프리카, 남미 일부 국가를 중심으로 공격을 전개하고 있으며, Golang 기반의 랜섬웨어 페이로드를 운영하는 것이 특징이다. 본 게시글에서는 Green Blood 랜섬웨어의 주요 특징과 암호화 방식, 그리고 복호화가 가능한 기술적 이유를 분석하여, 향후 유사한 위협에 효과적으로 대응할 수 있도록 인사이트를 제공하고자 한다.
Green Blood 랜섬웨어 그룹은 다른 랜섬웨어 그룹과 같이 감염된 시스템의 파일을 암호화하고 피해 기업의 민감 데이터를 탈취하며, 몸값이 지불되지 않을 경우 복호화 키를 영구적으로 파기하겠다는 협박성 메시지를 통해 피해자에게 금전 지불을 압박하는 방식을 사용한다.
분석 내용
Green Blood v2.0 랜섬웨어는 실행 초기 단계에서 중복 실행을 방지하기 위해 Mutex를 생성하며, 사용하는 Mutex 이름은 아래와 같다.
|
Mutex 이름 |
|---|
|
Global\\GREENBLOOD_ENCRYPTOR_MUTEX_2A3B4C5D |
[표 1] 중복 실행 방지를 위해 사용하는 Mutex 이름
이후 crypto/rand.Read 함수를 호출해 암호학적으로 안전한 32 바이트 크기의 난수를 생성하며, 이 값은 AES-256 암호화 알고리즘의 Key로 사용된다. 그리고 현재 환경을 식별하기 위한 고유 값인 Machine ID를 생성하는데, 이를 위해 현재 환경의 Host Name, Windows Version, MAC 주소 등의 환경 정보를 수집하며, 이를 기반으로 16 바이트 크기의 Machine ID를 생성한다. 만약 해당 정보 수집 과정에서 실패할 경우에는 현재 시간 정보를 기반으로 Machine ID를 생성한다.
그 후 공격자가 복호화 과정에서 사용할 Recovery Token을 생성하며, 해당 값은 앞서 생성한 32 바이트 크기의 AES-256 암호화 알고리즘 Key와 16 바이트 크기의 Machine ID를 XOR 연산하여 생성한다.

[그림 1] AES-256 암호화 Key와 Machine ID를 XOR 연산하여 Recovery Token을 생성하는 루틴
암호화 준비
Green Blood v2.0 랜섬웨어는 실제 파일 암호화를 수행하는 Worker와 암호화 대상을 탐색하여 암호화 대상 파일 큐에 등록하는 Worker, 두 종류의 Worker를 생성한다.
암호화 대상을 탐색하는 Worker는 GetLogicalDrives API를 호출하여 사용자 환경에 존재하는 드라이브의 비트 마스크 값을 획득하고, 해당 값을 기반으로 하드 디스크 드라이브와 같은 고정 드라이브를 암호화 대상 드라이브로 선정한다. 이후 선정된 고정 드라이브의 디렉토리를 재귀적으로 순회하며 대상이 디렉토리인 경우에는 랜섬 노트를 생성하고, 대상이 파일인 경우에는 암호화 대상 파일 여부를 확인한다.
우선 파일 확장자가 “.tgbg”인지 확인하여 이미 암호화가 완료된 파일인지 확인하며, 이미 암호화가 완료된 파일에 대해서는 추가적인 암호화를 수행하지 않는다. 반면, 암호화되지 않은 파일인 경우에는 해당 파일의 확장자를 소문자로 변환한 뒤, 암호화 제외 대상 확장자 목록과 비교해 암호화 제외 대상 여부를 판단한다.
|
암호화 제외 대상 파일 확장자 |
|---|
|
exe, dll, sys, drv, ocx, cpl, scr, msi, msu, cab, mui, mun, edb, jrs, log, tmp, temp, lnk, url, pif |
[표 2] 암호화 제외 대상 확장자 (20개)
그리고 암호화 대상 확장자 목록과 다시 비교해 최종적으로 암호화 대상 파일 여부를 결정하며, 암호화 대상 파일로 확인될 경우 해당 파일을 암호화 대상 파일 큐에 등록한다.
|
암호화 대상 파일 확장자 |
|---|
|
doc, xls, ppt, pdf, txt, rtf, odt, ods, odp, csv, xml, yml, sql, mdf, ldf, mdb, dbf, myd, myi, frm, ibd, bak, old, arc, bck, bkf, log, err, inf, ini, cfg, cpp, hpp, css, php, ps1, vbs, jpg, png, gif, bmp, psd, mp3, wav, mp4, avi, mov, wmv, mkv, flv, m4a, aac, zip, rar, tar, bz2, tgz, vmx, vhd, iso, img, pst, ost, eml, msg, mae, trn, dmp, wal, key, pem, crt, pfx, p12, cer, pub, gpg, pgp, asc, ora, rsp, msi, lnk, htm, sln, lck, docx, xlsx, pptx, json, yaml, back, log1, log2, info, conf, java, html, jpeg, tiff, indd, flac, vmdk, vhdx, dump, priv, accdb, error, audit, prefs, mssql, db, py, js, ts, go, rs, cs, vb, pl, sh, ai, 7z, gz, xz, sqlite, backup, config, csproj, vbproj, sqlite3, archive, journal, vcxproj, pbxproj, propertiesshell, settings, c, h, xcodeproj |
[표 3] 암호화 대상 확장자 (140개)
파일 확장자가 존재하지 않더라도 파일 크기가 100 바이트 이상인 경우에는 암호화를 수행한다. 단, MS Office 임시 파일과 같이 파일명이 “~”로 시작하는 파일은 암호화 대상에서 제외한다.
실제 파일 암호화를 수행하는 Worker는 총 50개가 생성되어 병렬로 실행되며, 각 Worker는 암호화 대상 파일 큐로부터 파일 하나를 수신한 뒤 해당 파일에 대해 암호화 함수를 호출하는 방식으로 동작한다.
파일 암호화
파일 암호화 단계에서는 대상 파일의 크기를 확인하며, 파일의 크기가 50GB 이상인 경우에는 해당 파일에 대해 암호화를 수행하지 않는다. 이후 암호화 대상 파일의 전체 경로 뒤에 “.tmp”를 붙여 Write-Only 모드로 임시 파일을 생성하고, 각 파일마다 crypto/rand.Read 함수를 호출하여 16바이트 크기의 난수를 생성한다. 그리고 이를 파일의 최상단에 저장한다. 해당 난수 값은 현재 파일을 암호화하는 데 사용되는 AES-256 암호화 알고리즘의 IV 값이며, 파일마다 서로 다른 IV 값이 사용된다.
이후 랜섬웨어 실행 초기에 생성한 32바이트 크기의 Key를 기반으로 CTR 모드의 AES-256 암호화 알고리즘을 사용해 파일을 암호화한다. 파일 암호화는 1MB 단위로 수행되며, 암호화가 완료된 후에는 생성한 tmp 파일의 확장자를 “.tgbg”로 변경해 최종 암호화 파일을 생성하며 기존 원본 파일은 삭제한다.

[그림 2] AES-256 암호화 알고리즘(CTR 모드)을 사용하여 파일을 암호화하는 루틴
암호화가 완료된 파일의 구조는 다음과 같다. 파일의 최상단에는 현재 파일의 AES-256 암호화에 사용된 IV 값이 저장되며, 그 뒤에는 암호화된 파일 데이터가 순차적으로 위치한다.

[그림 3] 암호화 후의 파일 구조
안티 포렌식 및 자가 삭제 기능
Green Blood v2.0 랜섬웨어는 사용자의 복구를 방해하기 위해 총 7개의 안티 포렌식 기능과 자가 삭제 기능을 사용한다. 먼저 현재 프로세스가 관리자 권한으로 실행 중인지 여부를 확인 후, 관리자 권한이 존재하는 경우에는 사전에 정의된 7개의 명령어를 순차적으로 실행하며, 관리자 권한이 없는 경우에는 해당 명령어를 실행하지 않고 해당 절차를 생략한다.
|
Index |
안티 포렌식 명령어 및 의미 |
|---|---|
|
1 |
vssadmin delete shadows /all /quiet |
|
모든 볼륨 섀도우 복사본 삭제 |
|
|
2 |
wbadmin delete catalog -quiet |
|
Windows 백업 카탈로그 삭제 |
|
|
3 |
bcdedit /set {default} recoveryenabled no |
|
Windows 복구 환경 비활성화 |
|
|
4 |
bcdedit /set {default} bootstatuspolicy ignoreallfailures |
|
부팅 실패 상태 무시 설정 |
|
|
5 |
wmic shadowcopy delete |
|
WMI 기반 볼륨 섀도우 복사본 삭제 |
|
|
6 |
reg add “HKLM\SOFTWARE\Policies\Microsoft\Windows Defender\Real-Time Protection” /v DisableRealtimeMonitoring /t REG_DWORD /d 1 /f |
|
Windows Defender 실시간 감시 비활성화 |
|
|
7 |
netsh advfirewall set allprofiles state off |
|
Windows 방화벽 모든 프로필 비활성화 |
[표 4] 복구를 방해하기 위해 사용하는 안티 포렌식 명령어 (7개)
이후 Temp 경로에 “cleanup_greenblood.bat” 이름의 배치 파일을 생성하고 이를 실행하여 자가 삭제 기능을 수행한다. 해당 배치 파일은 5초 동안 대기한 뒤 랜섬웨어 실행 파일을 삭제하며, 삭제에 실패할 경우에도 반복적으로 재시도하도록 구성되어 있다. 마지막 단계에서는 자신을 실행한 배치 파일 또한 삭제한다.
복호화 가능성
Green Blood v2.0 랜섬웨어는 각 파일마다 서로 다른 IV 값을 사용하지만 대칭키 기반의 AES-256 암호화 알고리즘을 사용하고, 암호화 알고리즘의 Key는 랜섬웨어 실행 초기에 한 번 생성된 이후 모든 파일 암호화 과정에서 동일하게 사용된다. 또한 Key는 현재 시스템 정보를 기반으로 생성된 16바이트 크기의 Machine ID와 XOR 연산을 수행하여 Recovery Token을 생성하는 데 사용되므로, 이를 역연산할 경우 높은 확률로 파일 복호화에 필요한 Key를 복원할 수 있다.

[그림 4] 랜섬 노트에 명시된 Recovery ID 및 Machine ID
복호화 방법은 다음과 같다. 랜섬 노트에 포함된 Recovery ID 값에서 “GREEN-BLOOD-” 문자열을 제외한 뒤의 32 바이트 크기의 데이터를 XOR 연산에 사용할 값으로 준비한 후, 함께 명시된 16바이트 크기의 Machine ID와 XOR 연산을 수행하면 현재 환경에서 파일 암호화에 사용된 AES-256 Key를 복원할 수 있다. 그리고 복원한 Key와 각 파일의 최상단에 저장된 16 바이트 크기의 IV 값을 사용해 AES-256 CTR 모드의 복호화 알고리즘을 적용하면, 높은 확률로 파일 데이터를 정상적으로 복구할 수 있다.

[그림 5] Recovery ID 기반 XOR 연산을 이용한 AES-256 암호화 Key 복원 및 파일 복호화 결과
안랩 대응 현황
안랩 제품군의 진단명과 엔진 날짜 정보는 다음과 같다.
[V3 진단]
- Ransomware/Win.GreenBlood.C584923 (2026.01.31.01)
- Ransomware/Win.GreenBlood.C584449 (2026.02.05.02)
- Ransom/MDP.Event.M1785 (2017.11.23.00)
- Ransom/MDP.Decoy.M1171 (2016.07.14.02)
- Ransom/MDP.Event.M1875 (2018.03.09.00)
- Ransom/MDP.Event.M4353 (2022.07.05.00)
- Ransom/MDP.Behavior.M2813 (2020.03.24.03)
- Ransom/MDP.Delete.M1105 (2016.05.18.02)
- Ransom/MDP.Event.M1946 (2018.06.06.00)
- Ransom/MDP.Event.M4807 (2024.02.08.02)
[EDR 진단]
- Execution/EDR.Malware.M10459 (2022.08.12.03)
- Connection/EDR.Event.M11768 (2024.06.11.00)