Początkowym wektorem ataku była podatność SQL injection w publicznie dostępnej aplikacji Java działającej na Apache Tomcat . Funkcja autouzupełniania wyszukiwania nie walidowała poprawnie danych wejściowych, co pozwoliło atakującym wstrzyknąć polecenia SQL przez połączenie JDBC z bazą Oracle . Jak zauważyli badacze z Huntress, nie była to nowa klasa podatności – ataki SQL injection są znane od dziesięcioleci i są zazwyczaj wynikiem nieprawidłowego przetwarzania danych wejściowych . Brak prawidłowej sanityzacji prostego pola wyszukiwania wystarczył, by uruchomić cały łańcuch kompromitacji.
Zamiast wdrażać tradycyjne złośliwe oprogramowanie na skompromitowanym serwerze, atakujący użyli wbudowanej w Oracle maszyny wirtualnej Javy (JVM) i instrukcji CREATE JAVA SOURCE, aby skompilować i przechowywać cały zestaw narzędzi do dalszej eksploatacji jako obiekty schematu Javy w bazie Oracle . To podejście sprawiło, że narzędzie było niewidoczne dla standardowych zabezpieczeń na poziomie systemu operacyjnego, ponieważ EDR i antywirusy skupiają się na procesach, plikach binarnych i plikach – nie analizują one klas Javy i wrapperów PL/SQL przechowywanych w Oracle .
Zestaw khunt zawierał następujące komponenty, każdy przechowywany jako obiekt bazy danych:
| Komponent | Funkcja |
|---|---|
| KhuntCmd | Ładuje cmd.exe i wykonuje dowolne polecenia systemu operacyjnego, osadzając je w instrukcjach SQL wysyłanych do bazy |
| KhuntHash | Wyodrębnia nazwy użytkowników i skróty haseł z wewnętrznych tabel Oracle i zapisuje je do pliku |
| KhuntFS / KhuntFS2 | Eksploratory plików do wyświetlania, odczytywania, wyszukiwania i sprawdzania rozmiarów plików na skompromitowanym systemie |
| KhuntT | Proste narzędzie do „pingowania”, aby potwierdzić, że zestaw jest zainstalowany i dostępny przed kontynuacją |
| KhuntUnzip | Narzędzie do rozpakowywania plików |
| khunt_ wrappery PL/SQL* | Procedury opakowujące PL/SQL używane do wywoływania podstawowych metod Javy |
Atakujący nie poprzestali na dostępie do bazy danych. Użyli zestawu khunt, aby przejść z warstwy bazy danych do systemu operacyjnego Windows w wieloetapowym procesie:
cmd.exe /c whoami, co potwierdziło, że działają z uprawnieniami SYSTEM na serwerze Windows, ustanawiając zdalne wykonanie kodu (RCE) z bazy do systemu operacyjnego .reg.exe i skopiować gałęzie rejestru SECURITY i SYSTEM, zapisując je jako khuntSECURITY.hiv i khuntSYSTEM.hiv w F:\Oracle\ .tasklist /svc i zapisali wynik jako khunttasks.txt .esentutl.exe, aby skopiować gałąź SAM i drugą kopię SECURITY, zapisując je jako khuntSAM.hiv i khunt_SECURITY.hiv .Wyeksfiltrowane gałęzie rejestru mogły być użyte offline do wyodrębnienia i odszyfrowania skrótów haseł dla wszystkich lokalnych kont w systemie .
Dochodzenie Huntress ujawniło kilka krytycznych luk, które pozwoliły na ten atak i uniknięcie wykrycia:
Na podstawie tego ataku Huntress zalecił następujące środki zaradcze :
Ten atak jest wyraźnym przypomnieniem, że silniki baz danych z wbudowanymi środowiskami programistycznymi (jak JVM w Oracle) mogą stać się ukrytymi platformami ataku, gdy połączą się z choćby jednym niesprawdzonym polem wejściowym. Zespoły ds. bezpieczeństwa muszą rozszerzyć swoje monitorowanie poza system operacyjny, aby objąć warstwę obiektów bazy danych.