Het eerste toegangspunt was een SQL-injectiekwetsbaarheid in een openbare Java-applicatie die op Apache Tomcat draaide . De automatische aanvulfunctie van de applicatie controleerde gebruikersinvoer niet goed, waardoor aanvallers SQL-commando's konden injecteren via een JDBC-verbinding met de Oracle-database . Zoals Huntress-onderzoekers opmerkten, was dit geen nieuw type kwetsbaarheid – SQL-injectie-aanvallen bestaan al tientallen jaren en zijn meestal het gevolg van het niet correct afhandelen van gebruikersinvoer naar de SQL-server . Het feit dat de applicatie een simpel zoekveld niet controleerde, was voldoende om de hele keten van compromittering in gang te zetten.
In plaats van traditionele malwarebestanden op de gecompromitteerde server te plaatsen, gebruikten de aanvallers Oracle's ingebouwde Java Virtual Machine (JVM) en de CREATE JAVA SOURCE-instructie om de volledige post-exploitatie-toolkit te compileren en op te slaan als Java-schema-objecten in de Oracle-database . Deze aanpak maakte de toolkit onzichtbaar voor standaard OS-beveiliging, omdat EDR- en antivirusprogramma's zich richten op processen, binaire bestanden en bestanden op het besturingssysteem – ze inspecteren over het algemeen geen Java-klassen en PL/SQL-wrappers die in Oracle zijn opgeslagen .
De khunt-toolkit bevatte de volgende componenten, elk opgeslagen als een databaseobject:
| Component | Functie |
|---|---|
| KhuntCmd | Laadt cmd.exe en voert willekeurige OS-commando's uit door ze in SQL-instructies te verwerken die naar de database worden gestuurd |
| KhuntHash | Haalt gebruikersnamen en wachtwoordhashes op uit de interne gebruikerstabellen van Oracle en slaat ze op in een bestand |
| KhuntFS / KhuntFS2 | Bestandsverkenner voor het weergeven, lezen, doorzoeken en controleren van bestandsgroottes op het gecompromitteerde systeem |
| KhuntT | Een eenvoudige 'ping'-tool om te bevestigen dat de toolkit is geïnstalleerd en bereikbaar is voordat verder wordt gegaan |
| KhuntUnzip | Hulpprogramma voor het uitpakken van bestanden |
| khunt_ PL/SQL-wrappers* | PL/SQL-wrapperprocedures die worden gebruikt om de onderliggende Java-methoden aan te roepen |
De aanvallers bleven niet steken op databaseniveau. Ze gebruikten de khunt-toolkit om in een meerstappenproces van de databaselaag naar het onderliggende Windows-besturingssysteem te gaan:
cmd.exe /c whoami uit te voeren, waarmee werd bevestigd dat ze met SYSTEM-rechten op de Windows-server draaiden. Dit gaf hen externe code-uitvoering (RCE) van de database naar het OS .reg.exe aan te roepen en de SECURITY- en SYSTEM-register-hives te kopiëren, opgeslagen als khuntSECURITY.hiv en khuntSYSTEM.hiv in F:\Oracle\ .tasklist /svc uit en sloegen de uitvoer op als khunttasks.txt .esentutl.exe om de SAM en een tweede kopie van de SECURITY-hives te kopiëren, opgeslagen als khuntSAM.hiv en khunt_SECURITY.hiv .De geëxfiltreerde register-hives konden offline worden gebruikt om wachtwoordhashes voor alle lokale accounts op het systeem te extraheren en te decoderen .
Het onderzoek van Huntress bracht verschillende kritieke blinde vlekken aan het licht die deze aanval mogelijk maakten:
Op basis van deze aanval beval Huntress de volgende maatregelen aan :
Deze aanval dient als een duidelijke herinnering dat database-engines met ingebouwde programmeeromgevingen (zoals Oracle's JVM) stille aanvalsplatforms kunnen worden wanneer ze worden gecombineerd met slechts één ongevalideerd invoerveld. Beveiligingsteams moeten hun bewaking uitbreiden tot voorbij het besturingssysteem en ook de databaselaag in de gaten houden.