Ik heb de betreffende blogpost geschreven, goed om te zien dat het ook hier een discussie heeft aangezwengeld.
Een paar dingen die in dit topic worden besproken:
Door Anoniem:
ik had verwacht dat DLL hijacking nu wel inmiddels opgelost zou zijn. niets lijkt minder waar:
Er zijn verschillende vormen van DLL hijacking; de variant die in de blogpost wordt besproken is de 'zwakste' variant. Je kunt ~300 ondertekende Windows-executables willekeurige code laten uitvoeren, maar de voorwaarde is wel dat je deze executables naar een speciale map (buiten system32) kopieert. Hiermee kun je doorgaans geen privilege escalation of persistentie bereiken, maar wel 'execution'. Waarom een kwaadaardige DLL via een vertrouwde .exe uitvoeren beter is dan een kwaadaardige .exe uitvoeren, is dat sommige AV-software dit mogelijk minder snel oppikt, en met name in bedrijfsomgevingen beperkingen (zoals bijv. AppLocker) zou kunnen omzeilen.
De reden dat dit niet is 'opgelost' is dat het een hardnekkig probleem is dat redelijk diep in het DLL-model is ingebakken. By design laden veel .EXEs hun DLLs van hun huidige pad in, en voor verschillende redenen (backwards compatibility / performance / legacy tools / etc.) wordt vaak de legitimiteit van die DLLs niet gecheckt. Microsoft zou overigens anno 2020 wel iets meer z'n best kunnen doen om DLLs te checken, naar mijn bescheiden mening.
Door Anoniem:
maar met zoveel binaries std vulnerable, lijkt het dus kinderlijk eenvoudig om 'administrator' te worden op windows 10?
De beschreven truc in het tweede deel van de post betreft UAC-omzeiling, wat lijkt op (maar niet hetzelfde is als) privilege escalation. Als je Windows 10 in een niet-bedrijfsomgeving hebt geinstalleerd, dus bijvoorbeeld thuis, is het account wat je gebruikt meestal ook meteen het administrator account. Als een .exe iets wil doen waar extra privileges voor nodig zijn, krijg je normaal gesproken het UAC-scherm dat vraagt om bevestiging. Hoewel soms irritant, voorkomt dit Windows XP-achtige toestanden waarin ieder proces kan doen en laten wat het wil. Een kwaadaardige macro kan bijvoorbeeld niet zomaar allerlei systeembestanden of registersleutels aanpassen zonder dat jij (=de administrator) dit expliciet toelaat.
De truc in de blogpost laat zien dat als de uitvoerende gebruiker tevens administrator is, je UAC kunt omzeilen, en alsnog extra privileges kan krijgen. Voor malware betekent dit dat je zonder interactie van de gebruiker je bijna alles op een systeem kunt veranderen, zolang je de gebruiker maar zover krijgt jouw initiele code uit te voeren (bijvoorbeeld via een kwaadaardige macro).
In bedrijfsomgevingen is dit doorgaans beter opgezet, en is de uitvoerende gebruiker meestal niet automatisch ook administrator. Dit betekent dat je een ander account (met administratorprivileges) die UAC-toestemming moet geven. Om deze reden is het dus geen privilege escalation: als je een 'gewone' gebruiker bent, kun je niet opeens administrator worden.
Hoe kun je dit voorkomen? Ten eerste raad ik aan UAC-beveiliging op het hoogste niveau te zetten, wat deze specifieke truc voorkomt. Ten tweede is het altijd raadzaam (ook op je thuiscomputer) om niet standaard alles vanaf een administratoraccount uit te voeren.