1. 개요
본 보고서는 최근 활동이 포착된 Gunra 랜섬웨어의 윈도우 및 리눅스 버전을 분석함으로써 위협 행위의 전반을 이해하고, Genian EDR이 이를 효과적으로 탐지할 수 있는지 검증하기 위해 작성되었습니다.
‘Gunra’는 올 4월 처음 활동이 포착된 신종 랜섬웨어입니다. Gunra 랜섬웨어는 악명 높은 Conti 랜섬웨어와 코드 구조가 일부 유사한 것으로 확인되었습니다.
Conti는 과거 러시아어권 랜섬웨어 그룹이 개발한 변종으로, 2022년 내부 소스코드가 유출된 이후 Black Basta, Royal 등 다수의 변종 그룹이 등장하는 계기가 되었습니다.
Gunra는 Conti 유출 코드 일부를 재활용하여 빠른 암호화 속도를 구현하고, ChaCha20 대칭키 알고리즘으로 데이터를 암호화한 뒤 해당 키를 다시 RSA-2048 공개키로 암호화하는 이중 암호화 구조를 사용합니다.
이로 인해 피해자는 복호화 키 없이는 이론적으로 데이터를 복구할 수 없으며, 피해 복구 난이도가 매우 높은 위협으로 평가됩니다.
2. 분석
2.1 윈도우 랜섬웨어 바이너리 분석
2.1.1 디렉터리 파일 탐색 및 암호화
랜섬웨어가 실행되면 동일한 랜섬웨어가 시스템에서 중복 실행되지 않도록 하기 위해 난수 문자열을 기반으로 한 뮤텍스를 생성합니다.
랜섬웨어는 스레드를 생성한 후 'GetLogicalDriveStrings' API를 호출하여 시스템의 논리 드라이브를 식별합니다. C 드라이브만 존재할 경우, 'C:\Users' 하위 디렉터리를 순회하며 파일을 검색합니다.
랜섬웨어는 'FindFirstFileW' 함수를 사용하여 디렉터리 내 파일을 순차적으로 열거합니다. 이 과정에서 디렉터리 명, 파일명, 그리고 파일 확장자를 검사합니다.
구분 | 이름/확장자 | 설명 |
디렉터리 | tmp | 임시 디렉터리 |
디렉터리 | winnt | 구버전 윈도우 경로 |
디렉터리 | temp | 임시 디렉터리 |
디렉터리 | thumb | 썸네일 폴더 |
디렉터리 | $Recycle.Bin | 휴지통 디렉터리 |
디렉터리 | $RECYCLE.BIN | 휴지통 디렉터리(대문자) |
디렉터리 | System Volume Information | 시스템 복원 관련 |
디렉터리 | Boot | 부팅 관련 |
디렉터리 | Windows | 윈도우 시스템 디렉터리 |
디렉터리 | Trend Micro | 백신 관련 경로 |
확장자 | .exe | 실행 파일 |
확장자 | .dll | 라이브러리 파일 |
확장자 | .lnk | 바로가기 파일 |
확장자 | .sys | 시스템 드라이버 |
확장자 | .msi | 설치 패키지 |
파일명 | R3ADM3.txt | 랜섬노트 파일 |
파일명 | CONTI_LOG.txt | 특정 로그 파일 |
디렉터리 명, 파일명, 그리고 파일 확장자를 검사하여 조건에 해당하지 않는 경우, 해당 파일명을 암호화 대상 파일 배열에 추가하는 기능을 수행합니다.
파일 암호화 함수는 병렬 처리를 위해 로컬 스레드풀을 생성하여 실행됩니다. 암호화 함수에서는 전역 배열에 암호화 대상 파일명이 존재하는지 확인하고, 해당 파일명이 “stopmarker”일 경우 해당 디렉터리에 대한 암호화 작업을 수행하지 않습니다.
2.1.2 암호화 키 설정
랜섬웨어는 파일 암호화에 사용할 키 설정을 위해 먼저 RSA 공개키를 시스템에 import(로드)하는 과정을 수행합니다. 이후 실제 암호화에 사용되는 대칭키 암호화를 위한 용도로 사용됩니다.
이후 CryptGenRandom 함수를 두 차례 호출하여 ChaCha20 State에 사용될 Key 값과 Nonce 값을 생성합니다.
CryptGenRandom을 통해 생성된 Key 값과 Nonce 값을 적용하여 최종 ChaCha20 State를 구성합니다.
완성된 ChaCha20 State를 이용하여 파일 암호화를 수행합니다. 이때 ChaCha20 키(offset+128)는 CryptEncrypt 함수를 사용하여 RSA 공개키로 암호화한 뒤, 암호화된 파일의 헤더에 기록합니다. 이를 통해 랜섬웨어는 암호화에 사용된 대칭키를 외부에 노출하지 않으면서도, 공격자만 복호화할 수 있는 구조를 갖추게 됩니다.
2.1.3 랜섬 노트
랜섬웨어는 시스템 내 모든 디렉터리를 순회하며 R3adm3.txt 파일을 생성합니다.
해당 파일에는 피해자가 공격자에게 연락할 수 있도록 qTox ID 또는 이메일 주소가 포함되어 있으며, 암호화된 파일을 복호화하려면 지시에 따라야 한다는 협박 문구가 포함되어 있습니다.
2.1.4 파일 암호화
“2.1.2 암호화 키 설정” 단계에서 생성된 ChaCha20 키를 통하여 덧셈/배타적 논리합(ADD/XOR/ROTL) 연산이 반복하여 파일 암호화를 진행합니다. 암호화가 완료되면 “MoveFileW” API를 통하여 랜섬 확장자(CRYPT)를 추가합니다. 추가 기능으로는 'stopmarker' 파일이 식별된 경우, 해당 디렉토리의 암호화를 수행하지 않습니다.
2.1.5 볼륨 섀도우 복사본(Volume Shadow Copy) 삭제
해당 랜섬웨어는 시스템 복원 기능을 무력화하고 사용자 복구 가능성을 차단하기 위해 VSS(Volume Shadow Copy) 목록을 조회하고, 이를 삭제하는 과정을 포함하고 있습니다.
WQL(WMI Query Language) 쿼리를 사용하여 시스템 내 존재하는 볼륨 섀도우 복사본을 조회합니다.
“SELECT * FROM Win32_ShadowCopy” 이 쿼리는 Win32_ShadowCopy WMI 클래스에서 모든 VSS 객체를 가져오는 명령으로, 이후 삭제 대상 식별에 사용됩니다.
WQL 결과로 얻은 각 ShadowCopy 객체에 대해 다음과 같은 형식의 삭제 명령어를 생성하여 실행합니다.
2.2 리눅스 랜섬웨어 바이너리 분석
2.2.1 인자 값 설정
리눅스 환경에서 동작하는 랜섬웨어는 공격자가 의도한 대로 암호화 작업을 유연하게 제어할 수 있도록, 명령행 인자를 통해 실행 시 다양한 설정 값을 전달받는 구조로 구현되어 있습니다.
테스트는 --threads, --path, --exts, --keyfile을 설정하여 진행하였습니다.
옵션 이름 | 설명 |
--help, -h | 사용 가능한 옵션 출력 |
--threads, -t | 암호화에 사용할 스레드 수 |
--path, -p | 암호화 대상 디렉터리 경로 |
--exts, -e | 암호화할 파일 확장자 목록 (예: .docx,.pdf) |
--ratio, -r | 암호화 비율 (예: 1이면 모든 데이터, 2면 절반 등) |
--keyfile, -k | RSA 공개키 PEM 파일 경로 |
--store, -s | 암호화된 ChaCha20 키를 저장할 디렉터리 |
--limit, -l | 암호화 용량 제한 (단위: GB, 0이면 전체 암호화) |
2.2.2 파일 탐색
랜섬웨어는 파일 시스템 내의 암호화 대상을 탐색하기 위해 readdir() 함수를 활용합니다. 이 함수는 지정된 루트 디렉터리에서 시작하여, 그 하위에 존재하는 모든 디렉터리와 파일들을 순차적으로 확인할 수 있도록 해줍니다.
탐색 과정에서 각 항목에 대해 디렉터리인지 여부를 검사하며, 만약 디렉터리가 발견될 경우에는 현재 탐색 중인 함수를 재귀적으로 호출하여 해당 디렉터리 내부까지 계속해서 탐색을 진행합니다.
파일일 경우에는 해당 파일의 이름이 명령행 인자를 통해 전달된 --exts 또는 -e 옵션에 명시된 암호화 대상 확장자 목록에 포함되는지 여부를 확인합니다.
확장자가 지정된 조건에 부합할 경우, 별도의 pthread(스레드)를 생성하여 암호화 함수를 비동기적으로 실행함으로써 병렬 처리 방식으로 파일 암호화를 수행합니다.
2.2.3 파일 암호화
암호화 대상 파일 또는 디스크에 접근하기 위해 먼저 해당 경로에 대한 파일 디스크립터를 획득합니다.
이후, 암호화에 사용할 ChaCha20 키와 nonce는 현재 시간을 시드로 하여 난수 기반으로 생성됩니다. 생성된 ChaCha20 키 블록은 RSA 공개키를 이용해 암호화되며, 이 과정을 통해 공격자만이 복호화에 필요한 개인키를 이용해 대칭키를 복원할 수 있도록 합니다.
파일 또는 디스크의 실제 암호화는 chacha20_xor() 함수를 통해 수행됩니다. 이 함수는 먼저 chacha20_init_state()를 호출하여 내부 상태를 초기화한 뒤, 전체 데이터 버퍼를 64바이트 단위로 분할하여 ChaCha20 스트림 블록을 생성합니다. 이후 각 블록은 입력 데이터와 XOR 연산을 통해 암호화되며, 결과는 출력 버퍼에 저장됩니다.
파일 암호화가 완료된 이후에는 ‘rename’ API를 통하여 “.ENCRT” 확장자를 추가합니다.
2.3 Genian EDR 분석
[윈도우]
2.3.1 IoC 탐지
기본적으로 Genian EDR에서는 Gunra 랜섬웨어가 생성되는 즉시, IoC 기반 탐지를 통해 이를 식별할 수 있습니다. 대응으로 프로세스 종료 및 제거를 수행합니다.
2.3.2 문서 확장자 Rename 임계치 초과
Gunra 랜섬웨어는 ChaCha20 암호화 방식으로 파일을 암호화한 후, ‘MoveFileW’ API를 이용하여 암호화된 파일에 랜섬웨어 전용 확장자를 추가하는 방식을 사용합니다.
이와 같은 확장자 변경 행위는 다수의 문서 파일에 대해 연속적으로 발생하며, Genian EDR에서는 이를 '문서 확장자 Rename 임계치 초과'라는 이름의 이상 행위로 탐지합니다.
2.3.3 볼륨 섀도우 복사본(Volume Shadow Copy) 삭제
Gunra 랜섬웨어는 복구 기능을 무력화하기 위해 WQL(WMI Query Language) 쿼리를 사용하여 시스템 내 존재하는 볼륨 섀도우 복사본을 조회하고 이를 제거하는 행위를 수행합니다.
바이너리 분석을 통해 해당 랜섬웨어가 "SELECT * FROM Win32_ShadowCopy" 쿼리를 통해 VSS 목록을 수집한 뒤, WMIC.exe를 이용해 각 복사본을 삭제하는 명령을 실행하는 것을 확인할 수 있었습니다.
Genian EDR에서는 이러한 행위를 탐지하기 위해, 볼륨 섀도우 복사본을 삭제하는 프로세스를 모니터링하고 'Shadowcopy 삭제' 이상 행위 룰을 통해 이를 탐지합니다.
cmd.exe /c WMIC.exe shadowcopy where "ID='{VSS ID}'" delete |
2.3.4 랜섬노트 분석
Gunra 랜섬웨어는 암호화가 완료된 각 디렉터리마다 랜섬노트 파일을 생성하는 특성을 가지고 있습니다.
Gunra 랜섬웨어는 디렉터리 단위로 R3adm3.txt와 같은 랜섬노트가 반복적으로 생성되는 동작을 확인할 수 있었습니다.
Genian EDR에서는 동일한 이름의 파일이 시스템 내에서 몇 건 생성되었는지를 이벤트 기준으로 추적할 수 있어, 이를 통해 총 몇 개의 디렉터리가 암호화되었는지 정량적으로 파악할 수 있습니다.
이 정보는 감염 범위 확인 및 복구 우선순위 결정에 유용하게 활용될 수 있습니다.
[리눅스]
2.3.5 IoC 탐지
기본적으로 Genian EDR에서는 Gunra 랜섬웨어가 실행되는 즉시, IoC 기반 탐지를 통해 이를 식별할 수 있습니다. 대응으로 프로세스 종료 및 제거를 수행합니다.
3. 결론
[윈도우]
Gunra 랜섬웨어는 실행 즉시 ChaCha20 알고리즘을 이용해 파일을 암호화한 뒤, 확장자를 변경하고 각 디렉터리에 랜섬노트를 생성하는 등의 행위를 수행합니다. 이후 시스템 복구를 방해하기 위해 WMI(WQL) 쿼리를 사용하여 볼륨 섀도우 복사본을 탐색하고 삭제합니다.
이러한 행위는 모두 Genian EDR의 이상 행위 기반 탐지 기능에 의해 효과적으로 감지됩니다.
특히 아래와 같은 주요 탐지 항목을 통해 공격 행위 전체를 추적할 수 있습니다:
- IoC 기반 랜섬웨어 실행 탐지
- 볼륨 섀도우 복사본 삭제 (Shadowcopy 삭제)
- 다수의 문서 확장자 변경 (문서 확장자 Rename 임계치 초과)
- 랜섬노트 반복 생성 (동일 파일명 다수 생성 감지)
또한 Genian EDR의 안티랜섬웨어 모듈이 활성화된 상태라면, 탐지 즉시 암호화 시도를 차단하고, 손상된 파일에 대해 실시간 복구까지 수행할 수 있습니다.
결론적으로, Genian EDR은 Gunra 랜섬웨어의 주요 악성 행위 전반을 실시간으로 탐지하고, 침해 범위 확인 및 대응에 필요한 핵심 정보를 효과적으로 제공합니다.
[리눅스]
리눅스용 Gunra 랜섬웨어는 공격자가 명령행 인자를 통해 암호화 대상 경로, 처리할 파일 확장자, 암호화 비율, RSA 공개키 경로 등을 유연하게 지정할 수 있도록 설계되어 있습니다. 암호화 과정은 ChaCha20 대칭키 알고리즘과 RSA 공개키 기반 키 보호 방식을 결합한 하이브리드 암호화 방식으로 수행되며, 병렬 스레드를 활용해 빠른 속도로 대량의 파일을 암호화할 수 있습니다.
Genian EDR은 해당 위협을 IoC 기반 탐지를 통해 즉시 식별할 수 있으며, 정책 설정에 따라 자동으로 프로세스를 종료하고 악성 파일을 제거하여 실시간 차단이 가능합니다.
차후에는 Windows 환경에서와 같이 확장자 변경 등 주요 악성 행위를 식별할 수 있는 행위 기반 탐지 룰도 단계적으로 확대 적용될 예정입니다.
4. IoC(MD5)
- 844E3B0D066E7DA30E704BE770C26E5E
- 94b68826818ffe8ceb88884d644ad4fc
글쓴이. 백은광
지니언스 컨설팅부에서 고객사에서 발생되는 악성코드/위협 분석을 담당하고 있습니다.