이 공격의 가장 큰 특징은 파일을 디스크에 저장하지 않는다는 점이었다. 해커들은 오라클의 내장 JVM과 CREATE JAVA SOURCE 명령을 사용해 전체 툴킷을 Java 스키마 객체 형태로 데이터베이스 내부에 컴파일하고 저장했다 . 이렇게 하면 표준 운영체제 수준의 보안 탐지를 완벽히 회피할 수 있다. EDR(엔드포인트 탐지 및 대응)이나 안티바이러스(AV) 도구는 OS의 프로세스, 바이너리, 파일에 집중할 뿐, 오라클 내부에 저장된 Java 클래스와 PL/SQL 래퍼는 일반적으로 검사하지 않기 때문이다 .
khunt 툴킷은 다음과 같은 구성 요소로 이루어져 있으며, 각각이 데이터베이스 객체로 저장됐다:
| 구성 요소 | 기능 |
|---|---|
| KhuntCmd | SQL 문에 포함된 OS 명령어를 데이터베이스에 전송해 cmd.exe를 로드하고 실행 |
| KhuntHash | 오라클 내부 사용자 테이블에서 사용자 이름과 비밀번호 해시를 추출해 파일로 저장 |
| KhuntFS / KhuntFS2 | 손상된 시스템의 파일 목록, 읽기, 검색, 크기 확인 기능을 제공하는 파일 탐색기 |
| KhuntT | 툴킷이 정상 설치되었는지 확인하는 간단한 '핑' 도구 |
| KhuntUnzip | 파일 압축 해제 유틸리티 |
| khunt_ PL/SQL 래퍼* | 기저 Java 메서드를 호출하기 위한 PL/SQL 래퍼 프로시저 |
해커들은 데이터베이스 접근에 그치지 않고, khunt 툴킷을 이용해 다단계로 시스템을 장악했다:
cmd.exe /c whoami 명령을 실행해 Windows 서버에서 최고 수준인 SYSTEM 권한을 획득했으며, 이로써 데이터베이스에서 OS로의 원격 코드 실행(RCE)이 가능해졌다 .reg.exe를 호출, SECURITY와 SYSTEM 레지스트리 하이브(registry hive)를 복사해 F:\Oracle\ 폴더에 khuntSECURITY.hiv 및 khuntSYSTEM.hiv로 저장했다 .tasklist /svc 명령을 실행해 해당 결과를 khunttasks.txt로 저장했다 .esentutl.exe를 사용해 SAM 하이브와 SECURITY 하이브의 추가 복사본을 khuntSAM.hiv, khunt_SECURITY.hiv로 저장했다 .이렇게 탈취된 레지스트리 하이브는 오프라인에서 분석해 시스템의 모든 로컬 계정 비밀번호 해시를 추출하고 해독하는 데 사용될 수 있다 .
Huntress의 조사 결과, 이 공격이 성공할 수 있었던 데는 중대한 보안 사각지대가 존재했다:
Huntress는 이 공격을 바탕으로 다음과 같은 방어 조치를 권고했다 :
이번 공격은 내장된 프로그래밍 환경(오라클 JVM 등)을 가진 데이터베이스 엔진이 단 하나의 검증되지 않은 입력 필드와 결합될 때, 얼마나 은밀한 공격 플랫폼이 될 수 있는지를 극명하게 보여준 사례다. 보안팀은 이제 OS뿐만 아니라 데이터베이스 객체 레이어까지 모니터링 범위를 넓혀야 할 시점이다.