DLL-kaping: definitie, tutorial en preventie
Bij DLL-kaping voegen cyberaanvallers malafide code toe aan een applicatie om de manier te beïnvloeden waarop libraries met dynamische links (DLL's) worden geladen. Bij een van de grootste hacks uit de geschiedenis van de federale Amerikaanse overheid, waarbij gegevens van verschillende ministeries werden gelekt (de aanval was waarschijnlijk afkomstig uit Rusland), was sprake van DLL-kaping. Bij DLL-kaping worden Windows-platforms aangevallen. Met één geïnfecteerd bestand kan schade worden toegebracht aan het volledige systeem. Met veilige programmeer-practices kan DLL-kaping echter worden voorkomen. Daarnaast is het belangrijk dat u weet hoe u DLL-kaping kunt detecteren en erop kunt testen, zodat u bedreigingen op afstand kunt houden. Een sterk securitynetwerk en goed getraind personeel kunnen hierbij helpen.
Wat is DLL-kaping?
Bij DLL-kaping plaatsen aanvallers een geïnfecteerd bestand op uw computer. Dit bestand wordt vervolgens uitgevoerd wanneer de applicatie die gevoelig is voor DLL-kaping wordt geladen. Het is een cyberaanvalsmethode waarbij een geïnfecteerd bestand binnen de zoekparameters van een applicatie wordt geïnjecteerd. Wanneer een gebruiker vervolgens probeert een bestand uit die directory te laden, wordt in plaats daarvan het geïnfecteerde DLL-bestand geladen. Het geïnfecteerde bestand komt in actie wanneer de applicatie wordt geladen. DLL-bestanden zijn vaak al standaard op een computer geladen. Veel applicaties met DLL-bestanden laden automatisch tijdens het opstarten, waardoor de hele computer gevaar loopt. Elke keer dat het bestand met de malafide code wordt geladen, krijgen hackers namelijk toegang tot de computer.
Wat zijn DLL-bestanden?
DLL-bestanden zijn alleen op Microsoft-besturingssystemen te vinden en bevatten de resources die een applicatie nodig heeft om correct te worden uitgevoerd. Veel van de functies van een Windows-besturingssysteem worden mogelijk gemaakt door de library met dynamische links, legt Microsoft uit. DLL-bestanden worden meestal geopend wanneer een applicatie wordt geladen. Deze bestanden dienen om programma’s uit te voeren en de ruimte op de harde schijf efficiënt te gebruiken. DLL-bestanden worden vaak voor de uitvoering van meer dan één programma gebruikt. Dit houdt in dat via één cyberaanval met DLL-kaping met één geïnfecteerd bestand meerdere programma’s kunnen worden verstoord en geschaad.
Hoe werkt DLL-kaping?
Voor een geslaagde uitvoering van Windows-applicaties wordt gebruikgemaakt van DLL-zoekprotocollen. Door een payload-DLL in de directory van de doelapplicatie te plaatsen, kan de applicatie worden misleid om het geïnfecteerde bestand in plaats van het legitieme bestand te laden. De DLL-zoekvolgorde van Microsoft-applicaties is openbaar en kan daarom relatief eenvoudig worden geraadpleegd en misbruikt. Voor een effectieve DLL-kaping moet aanvallers ervoor zorgen dat de doelapplicatie het geïnfecteerde bestand eerder vindt dan het legitieme DLL-bestand. De applicatie voert namelijk het eerste bestand uit dat bij het opstarten wordt gevonden. Dit kan op de volgende manieren worden gedaan:
- Ze kunnen een Trojaans DLL-bestand plaatsen in een directory die eerder dan de legitieme library wordt doorzocht.
- Bij het voorladen van DLL's wordt een geïnfecteerde DLL met dezelfde naam als een onduidelijk gespecificeerde DLL geplaatst, waardoor eerst in de malafide DLL wordt gezocht.
- Met DLL-omleiding kan de DLL-zoekvolgorde worden gewijzigd zodat het programma wordt gedwongen de malafide DLL uit te voeren in plaats van de legitieme.
- Geïnfecteerde DLL-bestanden kunnen worden geplaatst door middel van supply chain-aanvallen, phishing en social engineering. Hoe hoger in de hiërarchie van bevoegdheden een bestand wordt geplaatst, hoe meer toegang de threat actor krijgt tot het systeem.
Als een volledig pad van verwante DLL-bestanden niet is gespecificeerd, gebruiken Windows-applicaties standaard specifieke DLL-zoekprotocollen. De directory waarvandaan de applicatie wordt geladen, is dan de eerste die wordt doorzocht. Bij DLL-kaping wordt een geïnfecteerd DLL-bestand op deze locatie geplaatst, zodat het eerder dan de systeem-directory wordt gevonden en gebruikt. Dit wordt DLL-zoekvolgordekaping genoemd. Malafide DLL-bestanden bevatten vaak een digitale handtekening die de doelapplicatie nabootst. De bestanden worden daardoor als authentiek aangemerkt en niet gedetecteerd, met als gevolg dat de geïnfecteerde DLL-bestanden kunnen worden overgedragen. Deze bestanden kunnen vervolgens de hele supply chain binnendringen.
Een DLL-kapingsaanval detecteren
Het Windows-programma Process Explorer kan een DLL-kapingspoging detecteren. Het werkt door in real time alle bestandssystemen te tonen die worden geladen. Met behulp van de juiste filters kunnen gebruikers DLL-bestanden vinden die er niet thuishoren. Volg hiervoor deze stappen:
- Installeer en laad Process Explorer.
- Zoek de doelapplicatie van de vermoedelijke DLL-kapingsaanval op.
- Druk op ctrl + L en pas een filter toe dat ervoor zorgt dat alleen actieve bestanden worden weergegeven met een pad dat eindigt op .dll door op Add en vervolgens Apply te klikken.
- Druk op ctrl + L en pas een filter toe voor "directory: naam niet gevonden" door de voorwaarde "Result: NAME NOT FOUND" in te stellen. Klik dan op Add en vervolgens op Apply. U krijgt nu de bestanden te zien die worden geladen buiten de systeemdirectory.
- Druk op ctrl + L om een extra filter toe te passen zodat alleen DLL-bestanden binnen de directory van de applicatie worden weergegeven door de voorwaarde "Path is [path address]" te gebruiken. Klik dan op Add en vervolgens op Apply.
DLL-kaping voorkomen
Software-developers bevinden zich in een unieke positie om DLL-kaping te voorkomen. Ze kunnen namelijk de exacte locatie van alle DLL-bestanden opgeven zodat Windows geen gebruik hoeft te maken van het standaard DLL-zoekpadprotocol. Het is ook belangrijk om antivirussoftware up-to-date te houden. DLL-injectiepogingen worden vaak niet opgemerkt, maar een goede antivirussoftware vormt een essentiële verdedigingslinie die op zijn minst een deel van de DLL-kapingspogingen zal blokkeren. Monitor uw cybersecurity constant. Controleer en scan uw netwerk en ecosysteem regelmatig op kwetsbaarheden. Een Windows DLL-kaping is alleen mogelijk wanneer het geïnfecteerde bestand in het ecosysteem terechtkomt. Dit gebeurt vaak doordat een medewerker malware opent. Door medewerkers voor te lichten over waarschuwingssignalen die duiden op phishing-aanvallen of social engineering, kunt u voorkomen dat DLL-aanvallers voet aan de grond krijgen. Dit zijn een paar best practices op security-gebied:
- Stel een policy inzake informatiebeveiliging op en houd het up-to-date.
- Stuur verdachte e-mails door naar security-experts voordat u ze opent of er interactie mee hebt.
- Schakel multi-factor authenticatie in voor logins.
- Implementeer een professionele risicobeheersingsoplossing.
Voorbeelden van werkwijzen
Om een DLL-kaping te kunnen uitvoeren, gaan kwaadwillenden op zoek naar zwakke plekken in de DLL. Vaak zal het gaan om DLL's die ontbreken binnen applicaties. De traditionele DLL-zoekvolgorde is als volgt:
- De directory waarvandaan de applicatie wordt geladen wordt doorzocht.
- De huidige directory wordt doorzocht.
- De systeemdirectory wordt doorzocht.
- De Windows-directory wordt doorzocht.
- De directories in de PATH-omgeving worden doorzocht.
Bij een DLL-kaping wordt het malafide bestand in een van deze directories geplaatst, vóór het legitieme DLL-bestand. Bij een andere werkwijze worden AppInit-DLL's gebruikt om aangepaste DLL's te creëren die overal virtueel kunnen worden geladen. Hiervoor worden de volgende stappen gevolgd:
- Er wordt een malafide DLL gegenereerd.
- De LoadAppInit_DLLs-instelling wordt op "TRUE" gezet.
- De malafide DLL wordt door de AppInit geleid.
- Het proces wordt uitgevoerd om de DLL te injecteren.
Er kan ook een Trojaanse DLL worden geplaatst met behulp van DLL-forwarding, waarbij de geïnfecteerde DLL fungeert als schakel in het proces. Deze methode ziet er als volgt uit:
- DLL en de functies ervan worden geanalyseerd.
- De functies die moeten worden onderschept en gewijzigd, worden geïdentificeerd.
- Deze functies worden geïmplementeerd in een geïnfecteerde DLL.
- De resterende functies worden naar de oorspronkelijke DLL doorgestuurd.
- De naam van de oorspronkelijke DLL wordt gewijzigd.
- Imports worden doorgestuurd naar de DLL met de gewijzigde naam.
- De oorspronkelijke DLL wordt vervangen door de geïnfecteerde DLL.
- De naam van de geïnfecteerde DLL wordt gewijzigd in die van de oorspronkelijke DLL.
Voorbeelden van bekende DLL-kapingsgevaren
DLL-kaping vindt al jarenlang plaats. Het blijft een cybersecuritybedreiging voor Windows-besturingssystemen. Een paar voorbeelden van bedreigingen:
- APT41: maakt gebruik van zoekvolgordekaping
- FinFisher: varianten gebruiken DLL-zoekvolgordekaping
- Chaes: zoekvolgordekaping om malafide DLL-payloads te laden
- Astaroth: gebruikt zoekvolgordekaping om zichzelf te lanceren
- BOOSTWRITE: benut het laden van een legitiem .dll-bestand
- BackdoorDipolomacy: maakt gebruik van zoekvolgordekaping
- HinKit: mechanisme voor persistente zoekvolgordekaping
- Crutch: persistente zoekvolgordekaping via zoekmachines
- Downdelph: escaleert bevoegdheden via de zoekvolgordekaping van .exe-bestanden
- InvisiMole: zoekvolgordekaping om geïnfecteerde DLL te lanceren tijdens het opstarten
- HTTPBrowser: verstoort de DLL-laadvolgorde
- Ramsey: kaapt verouderde Windows-applicaties
- menuPass: maakt gebruik van DLL-zoekvolgordekaping
- ThreatGroup-3390: gebruikt DLL-zoekvolgordekaping om een payload te verspreiden
- Whitefly: zoekvolgordekaping voor infectie met malafide DLL
- RTM: zoekvolgordekaping om TeamViewer te verstoren
- Tonto team: verstoort een legitieme Microsoft-executable om een malafide DLL te laden
- Melcoz: gebruikt DLL-kaping om securitycontroles te omzeilen
Mitigatie
De volgende methoden kunnen worden gebruikt om DLL-kaping te voorkomen:
- Audits: audit-tools als PowerUp kunnen pogingen van DLL-zoekvolgordekaping detecteren en corrigeren.
- Laden van libraries beperken: sta het laden van remote DLL's niet toe en schakel de veilige DLL-zoekmodus in, zodat het systeem wordt gedwongen meer beperkingen toe te passen bij het zoeken naar DLL-bestanden.
- Uitvoeringspreventie: gebruik oplossingen voor applicatiebeheersing om mogelijk malafide software die wordt uitgevoerd via DLL-zoekvolgordekaping te detecteren en blokkeren.
Testen op DLL-kaping
Bij het testen op DLL-kaping worden vergelijkbare detectiemethoden gebruikt in programma’s als Windows Process Explorer. Om te testen op gekaapte DLL-bestanden, filtert u op .exe-en .dll-bestanden waarvoor "NAME NOT FOUND" wordt aangegeven. Dit is meestal een signaal van een DLL-kapingspoging. Een ander product, dat DLLSpy heet, gebruikt drie verschillende methoden om DLL-kaping te detecteren: statisch, dynamisch en recursief. Bij statische testen worden alle bestande met het pad .dll of .dll in het uitvoeringsproces van een applicatie gelokaliseerd. Bij dynamische testen worden alle modules gescand om te bepalen of er een schrijfmachtiging is binnen de DLL-locaties en te controleren dat deze niet overschreven is. De recursieve engine scant alle eerder geanalyseerde DLL-processen om eventuele extra geladen DLL's te vinden en hun kwetsbaarheden vast te stellen.
Referenties
Russian Hackers Broke Into Federal Agencies, U.S. Officials Suspect. (Mei 2021). The New York Times.
What Is a DLL? (September 2021). Microsoft.
Process Explorer v16.43. (Augustus 2021). Microsoft.
AppInit DLLs and Secure Boot. (Januari 2021). Microsoft.
PowerUp: A Usage Guide. (Juni 2014). Harmj0y.
Cyberark/DLLSpy. (2021). GitHub, Inc.