사이버 보안 권고가 발표된 Royal 랜섬웨어
Royal 랜섬웨어는 2022년 9월경 등장해 미국 등의 국가에서 중요 인프라를 대상으로 한 공격에 활발히 사용되고 있다. 지난 11월에는 처음으로 LockBit 랜섬웨어를 제치고 사이버 범죄 활동에 가장 많이 사용된 랜섬웨어로 기록됐다. 또한, 최근에는 미국 보안 기관인 CISA에서 Royal 랜섬웨어에 대한 사이버 보안 권고 AA23-061A를 발표하기도 했다.
해당 랜섬웨어에 감염될 경우 암호화된 파일에 ".royal" 확장자를 추가하고 "README.TXT"란 이름의 랜섬노트를 생성한다. 이후, 랜섬노트를 통해 피해자에게 감염된 파일의 복구를 빌미로 랜섬머니를 요구한다.
1. 행위 분석
1.1. 파일 실행 인자값
Royal 랜섬웨어는 “-path”, “-id” 및 “-ep” 인자를 사용한다. [표 1]과 같이 “-path” 인자는 암호화할 경로를 지정하고 “-id” 인자는 랜섬머니 협상 사이트 주소의 접속 ID로 사용하는 값이다. 또한, “-id” 인자와 함께 제공한 문자열이 32자리가 아니면 실행 중인 랜섬웨어를 종료한다. 마지막으로 “-ep” 인자는 암호화할 파일의 크기가 클 경우 얼마나 감염할지를 지정하는 백분율 값이다.
- 인자 사용 예시 : ./[실행파일 이름] [–path] [암호화 대상 경로] [-id] [32 자리 문자열] [-ep] [백분율]
1.2. 시스템 복원 무력화
Royal 랜섬웨어는 [표 2]의 vssadmin 명령어를 실행해 시스템 복원을 무력화한다.
1.3. 파일 암호화
Royal 랜섬웨어를 실행하면 AES-256 암호 알고리즘을 사용해 파일을 암호화하고, 암호화를 완료한 파일은 파일 명에 “.royal” 확장자를 추가한다.
1.3.1. 파일 암호화 비율 조건
또한, 파일 암호화 과정에서 파일 실행 시 입력하는 “-ep” 인자값 및 파일 사이즈에 따라 파일을 암호화하는 비율을 [표 3]과 같이 적용한다.
1.3.2. 암호화 제외 대상 확인
암호화 과정에서 [표 4]에 작성한 경로, 확장자 및 파일은 암호화 대상에서 제외한다.
1.3.3. 암호화 스레드 생성
Royal 랜섬웨어는 파일 암호화 속도 향상을 위해 GetNativeSystemInfo 함수를 사용해서 감염 대상 환경의 프로세서 수를 파악하고, 프로세서 수의 두 배만큼의 스레드를 생성한다.
1.3.4. 리스타트 매니저
Royal 랜섬웨어는 암호화할 대상 파일에 접근할 수 없는 경우 Windows Restart Manager 를 이용해서 해당 파일과 관련이 있는 프로세스 또는 서비스를 종료한다. 이때, 중요 프로세스가 종료되는 것을 방지하기 위해 "explorer.exe"와 자기 자신은 종료 대상에서 제외한다.
1.4. 네트워크
Royal 랜섬웨어를 실행할 때 암호화할 경로가 지정되지 않은 경우 감염 대상 환경에 연결된 네트워크를 감염하며, [그림 4]는 Royal 랜섬웨어로 원격 호스트를 감염한 결과이다.
1.4.1. 공유 네트워크 검색
먼저, GetIpAddrTable 함수로 네트워크 인터페이스를 스캔해 감염 대상 환경과 연결된 IP 주소에 대한 정보를 획득하고 이 중, 네트워크 ID가 다음과 같이 시작하는 IP를 검색한다.
- 검색 대상 네트워크 ID : 192, 10, 100, 172
1.4.2. 원격 호스트 연결
그 다음, 원격 호스트와 연결하기 위한 소켓을 생성하고 SMB 포트로 연결하도록 설정한다. 또한, WSAIoctl 함수로 ConnectEx 의 포인터를 획득한 후, 해당 함수를 호출해 지정된 IP 주소에 연결을 시도한다.
1.4.3. 암호화 대상 제외
마지막으로, 연결된 원격 호스트의 공유 리소스 중 관리 목적 공유 폴더인 ADMIN$과 IPC$의 경우 암호화 대상에서 제외한다.
1.5. 랜섬노트 생성
이후, 암호화를 완료한 디렉토리에는 “README.TXT”란 이름의 랜섬노트를 생성하며, 랜섬머니 협상을 위한 사이트 주소와 접속 ID로 사용할 값을 제공한다. 사이트 주소 이후에 전달하는 접속 ID는 Royal 랜섬웨어를 실행할 때 “–id” 인자에 입력한 32 bytes 크기의 문자열이다.
2. 암호화 구조 상세 분석
Royal 랜섬웨어의 파일 암호화 과정은 [그림 9]와 같다.
2.1. 암호키 생성
Royal 랜섬웨어는 OpenSSL의 RAND_bytes 함수를 사용해 32 Bytes 크기의 랜덤 값을 생성하고 이를 암호키로 사용한다. 암호키 생성 시 사용하는 시드 값은 RAND_seed 함수를 통해 생성한다.
2.2. IV 값 생성
Royal 랜섬웨어는 RAND_bytes 함수를 사용해 16 Bytes 크기의 랜덤 값을 생성하고 이를 IV로 사용한다. 해당 값은 AES 암호화 알고리즘의 CBC 모드에서 사용할 IV 값이다.
2.3. RSA 공개키
랜섬웨어에 하드코딩된 RSA 공개키는 4096 bit의 길이를 가지며, OpenSSL의 BIO (Basic input output) 구조체에 저장해서 사용한다.
2.4. 암호화 정보 (암호키, IV) 암호화
이후, 실행파일 내부에 하드코딩된 상태인 공격자의 RSA 공개키를 가져오고, 파일 암호화에 사용한 암호키와 IV를 RSA-4096 암호 알고리즘으로 암호화한다.
2.5. 파일 암호화
Royal 랜섬웨어는 AES-256 암호화 알고리즘으로 원본 파일을 암호화한다. 그 다음, 암호화된 파일에 앞선 과정에서 암호화한 정보 (암호키, IV)와 원본 파일의 크기 및 암호화에 적용한 백분율 (-ep)을 추가한다.
- 파일 암호화 조건
- 파일 크기가 5.24 MB 보다 작으면 –ep 인자의 값에 관계 없이 100% 암호화한다.
- 파일 크기가 5.24 MB 보다 크면 –ep 인자의 값에 따른 비율을 적용해 암호화한다.
cf) 단, 해당 값이 0이거나 –ep 인자를 사용하지 않은 경우에는 50%의 비율을 적용한다.
2.5.1. 패딩 추가 유무
먼저, 암호화하기 전에 AES 암호화 알고리즘의 블록 크기에 맞춰 원본 파일 크기가 16의 배수인지 확인한 후 패딩을 추가할지 결정한다.
1) 16의 배수인 경우
패딩을 추가하지 않은 채로 원본 파일을 암호화하며, 암호화할 파일 크기는 16의 배수로 내림한 값이다.
- 암호화할 파일 크기 계산식 : (원본 파일 크기 / 16) * 16
2) 16의 배수가 아닌 경우
16의 배수를 맞추기 위해 랜덤한 값으로 패딩을 추가하며, 이 경우 암호화할 파일 크기는 16의 배수로 올림한 값이다.
- 암호화할 파일 크기 계산식 : ((원본 파일 크기 / 16) +1) *16
2.5.2. 암호화 사전 작업
또한, 비동기 방식으로 파일을 암호화하므로 패딩 영역을 포함한 추후에 데이터를 쓸 공간을 [그림 14]와 같이 미리 확보한다.
먼저, 파일 크기가 16의 배수인지를 확인하고 [표 5]의 계산식에 따라 패딩 및 공간 할당을 위한 사이즈를 계산한다.
- 몫 : 파일 크기 / 16
- 암호화된 암호키 + IV 크기 (0x200) / 원본 파일의 크기 (0x8) / -ep 인자 값의 크기 (0x8)
이후, 지정된 크기만큼의 메모리를 할당하며 할당된 주소의 데이터는 초기화하지 않은 채로 사용한다. 마지막으로 파일 크기를 재설정하고 파일 포인터를 파일의 시작 지점으로 이동해 파일 암호화를 준비한다.
2.5.3. 파일 사이즈가 5.24MB 초과하는 경우
파일 크기가 5.24MB를 초과하면 파일 실행 시 전달받은 –ep 인자의 값에 따라 암호화할 데이터 크기를 계산한 후, 간헐적 암호화 방식을 이용해 파일을 암호화한다. 이 과정에서 암호화할 데이터 크기만큼 암호화를 수행한 다음 암호화하지 않을 데이터 크기의 영역은 암호화하지 않는 방식을 10회 반복한다.
cf) 암호화할 데이터 크기는 [표 6]의 계산식에 따라 계산한 후 16의 배수로 내림한 결과이다.
cf) 암호화할 파일의 크기는 원본 파일의 크기가 16의 배수인지에 따라 올림 및 내림을 적용한 값이다.
cf) [표 6]에서 암호화할 데이터 크기는 N으로 나타내고, 계산식에 따른 결과 값은 X로 표현해 설명한다.
3. 결론
Royal 랜섬웨어는 파일을 암호화하는 과정에서 사용한 AES 암호키와 IV 값을 RSA-4096으로 암호화하기 때문에 공격자의 개인키를 확보해야만 복호화할 수 있다. 따라서, 랜섬웨어 감염으로 인한 영향을 줄이기 위해서는 주기적으로 데이터를 백업하고, 백신 프로그램의 실시간 감시 활성화와 항상 최신 버전으로 유지할 것을 권고한다.