악성코드 분석
GenieLocker 랜섬웨어 분석
GenieLocker는 2026년 3월 해커 그룹 Toy Ghouls의 러시아 대상 사이버 공격 과정에서 처음 발견됐다. 공격은 대상 기업의 외부 협력사 네트워크에서 취약점을 이용해 내부에 침입한 후 자격 증명 등을 수집하고 정상 유틸리티인 PsExec를 사용해 랜섬웨어를 실행한 것으로 전해진다. 해당 그룹이 기존에는 LockBit과 Babuk 등 알려진 랜섬웨어에 의존했지만 맞춤형 랜섬웨어인 GenieLocker를 자체 개발해 사용하기 시작했다. GenieLocker는 파일은 암호화하지만 랜섬노트가 존재하지 않고 데이터 탈취 및 이중 갈취 전술을 사용하지 않으며 전용 사이트도 운영하지 않는다.
실행 옵션
GenieLocker는 실행 시 짝수 길이의 패스워드를 필수로 입력해야 하며 입력된 패스워드는 SHA256 해시 값을 검증해 실행 유무를 결정한다. 정확한 패스워드가 입력되지 않으면 동작하지 않고 즉시 종료된다. 이 외에도 암호화 비율, 암호화 경로 및 로그 파일 생성 등의 옵션을 지원하며 [표 1]에서 각 옵션의 목록을 확인할 수 있다.
- 사용법 : GenieLocker.exe <password> [options] [path]
![[표 1] 실행 옵션](/api/media/file/8c5e0a886f3d72483a1ee595c90dd98fd14e76d016fbed453f2351c2ac5aa4cb-3lxpcqbbnqFAI9gXE5WroRUPaDwDeO.png)
분석 방지 루프
패스워드 검증이 완료되면 500ms를 주기로 분석 방지 검사를 반복 수행하며 하나라도 조건이 충족되면 바로 랜섬웨어 프로세스를 종료한다. 활성화된 창과 부모 프로세스를 스캔해 분석 관련 도구를 검색하거나 IsDebuggerPresent 함수로 디버거를 탐지할 뿐만 아니라 디버깅 중 활성화될 수 있는 옵션과 예외 발생 시의 VEH(Vectored Exception Handling) 호출 유무 검사도 수행한다.
PEB 힙 오류 검사 플래그
PEB(Process Environment Block)의 NtGlobalFlag는 디버깅 과정에서 힙 오류 검사를 활성화할지 결정하는 역할을 한다. [표 2]는 NtGlobalFlag에 저장될 수 있는 값과 의미를 나타내며 각 플래그 중 하나라도 활성화된 경우 디버깅 중인 것으로 간주한다.
![[표 2] PEB NtGlobalFlag 값 목록](/api/media/file/1a3a3a1ea78dc94a9f844cab930ece2a3f95e6064dd9e5757c6175fbe9a4f21e-g1XXZo1TwqS7wvz02n4wGwOEtlbcqS.png)
하드웨어 중단점 검사
디버깅 과정에서 하드웨어 중단점이 설정되면 스레드 컨텍스트의 Dr0 부터 Dr3 필드에 중단점이 설정된 주소가 저장된다. 분석 방지 루프는 해당 필드의 값을 감시해 하나라도 0이 아닌 값이 저장되면 디버깅 중인 것으로 간주한다.
![[그림 1] 하드웨어 중단점 유무 검사 코드](/api/media/file/31e7a38b3213bf3ea3c5205a0e702df8bbe2b0b5b464c5e2a6ff018d7223de00-9eFCb42JaZxqIymRREKMqunOi2n2uA.png)
VEH 호출 검사
프로그램 동작 중 예외가 발생하면 윈도우는 VEH를 호출해 오류나 예외 상황을 처리한다. 하지만 디버거가 존재할 경우 VEH 호출 전에 디버거가 먼저 예외를 가로채 먼저 처리하며 정상적으로 처리될 경우 VEH가 호출되지 않는다. 이러한 특정을 이용해 의도적으로 EXCEPTION_SINGLE_STEP(0x80000004) 예외를 발생시킨 후 VEH가 해당 예외를 받는지 검사한다.
![[그림 2] 예외 발생 및 VEH 호출 검사 코드](/api/media/file/02ef30167de9aeeab86a574f55b65b9814fd6e9c01f49febc8e745c0490c189b-dAmXnCKCFLZvs2NVFwtYsq0Hqj4BQ9.png)
암호화
분석 방지 루프가 반복적으로 검사를 수행하는 동시에 랜섬웨어는 파일 암호화를 수행한다. 먼저 암호화할 파일이 다른 프로세스에 사용 중일 경우 수정할 수 없기 때문에 관련된 프로세스와 서비스를 모두 종료한 후 모든 드라이브 또는 지정된 경로에서 암호화할 파일을 탐색하면서 제외 대상을 필터링한다.
![[표 3] 암호화 제외 목록](/api/media/file/2b9891ff9ad55c44cb445274274ea82aa6efe5e005e698b090dd73d6d84a915c-BLpo5eRTNVJzWmLkVETtwk5J4cLXud.png)
암호화는 대상 파일을 16mb(0x1000000) 크기의 청크로 분할한 후 일부 청크를 암호화하는 부분 암호화 방식을 사용한다. 파일의 크기가 500mb(0x1F400000) 이하인 경우에는 첫 번째 청크만을 암호화하며 500mb 초과 파일은 암호화 비율에 따라 암호화 청크 수를 계산한 후 첫 번째를 포함해 그 수만큼 무작위로 선택한다. 각 청크의 암호화는 파일 별로 무작위로 생성된 랜덤 키(file_key)를 이용해 XChaCha20 암호화를 수행하며 이 때 사용된 키는 X25519 알고리즘으로 생성된 공유 비밀키로 다시 암호화 후 파일 끝 footer에 저장된다. 그리고 공유 비밀키를 유도할 수 있는 임시 공유키도 footer에 저장해 공격자가 본인의 개인키로 복호화할 수 있도록 구성한다.
![[그림 3] 암호화 과정](/api/media/file/71c661b100228a670ea39f92875da7cda30f630e94152cd42fe0f4187714618c-FmF6AktZnnsMqdXUMt0TZOn1OqgH6H.png)
암호화된 파일 끝 footer에는 암호화된 file_key와 임시 공개키 외에도 청크 정보를 담고 있는 암호화된 메타데이터가 존재하며 해당 메타데이터는 암호화 비율, 전체/암호화 청크 수 및 선택된 청크의 비트맵 등 복호화에 필요한 정보를 저장하고 있다.
![[그림 4] footer 구조](/api/media/file/2fa5b47267eb71e23e64f5383b6f4e0cefc980328e170bf6e8bd65c41bfd9cb0-mu5flRUqZeFHcC7WYHRcnxcyaGzHS0.png)
GenieLocker는 공격자가 정확한 패스워드로 직접 실행해야 하기 때문에 해당 랜섬웨어에 감염되면 이미 공격자가 침입에 성공한 이후이며 추가 피해를 발생시킬 수 있다. 또한 파일을 암호화한 후에는 별도의 랜섬노트를 생성하지 않고 전용 사이트가 없어 추적 또는 파일 복구가 불가능해 주의가 필요하다. 따라서 주기적으로 중요한 파일을 백업하고 보안 프로그램과 OS를 항상 최신 버전으로 유지할 것을 권고한다.
상기 악성코드는 잉카인터넷 안티바이러스 제품 TACHYON Internet Security 6.0에서 진단 및 치료가 가능하다.
![[그림 5] TACHYON Internet Security 6.0 진단 및 치료 화면](/api/media/file/894aa1ab813846346a0b18f53e88ce58aa0c0bfbde238740a1fbbbe40c3c82fb-FtP4jH3Slfb9ONpJ9Youqck8sAI7EF.png)