verduistering
Wat is verduistering?
verduistering betekent iets moeilijk te begrijpen maken. Programmeercode wordt vaak versluierd om intellectueel eigendom of bedrijfsgeheimen te beschermen, en om te voorkomen dat een aanvaller een propriëtair software programma reverse engineering.
het versleutelen van alle of een deel van de code van een programma is een verduisteringsmethode. Andere benaderingen omvatten het verwijderen van potentieel onthullende metadata, het vervangen van klasse-en variabelnamen door betekenisloze labels en het toevoegen van ongebruikte of betekenisloze code aan een toepassingsscript. Een tool genaamd een obfuscator zal automatisch eenvoudige broncode omzetten in een programma dat op dezelfde manier werkt, maar is moeilijker te lezen en te begrijpen.
helaas gebruiken kwaadaardige codeschrijvers deze methoden ook om te voorkomen dat hun aanvalsmechanismen worden gedetecteerd door antimalware-gereedschappen. De 2020 SolarWinds aanval is een voorbeeld van hackers met behulp van verduistering om verdediging te ontwijken.
Deobfuscatietechnieken kunnen worden gebruikt om de obfuscatie te reverse engineeren of ongedaan te maken. Deze technieken omvatten program slicing, waarbij de programmacode wordt vernauwd tot alleen de relevante verklaringen op een bepaald punt in het programma. Compiler optimalisatie en programmasynthese zijn twee andere deobfuscation technieken. Obfuscation is bedoeld om reverse engineering moeilijk te maken en niet de moeite waard.
Hoe werkt verduistering?
verduistering in computercode maakt gebruik van complexe omwegzinnen en redundante logica om de code moeilijk te begrijpen voor de lezer. Het doel is om de lezer af te leiden met de ingewikkelde syntaxis van wat ze lezen en het moeilijk te maken voor hen om de ware inhoud van het bericht te bepalen.
met computercode kan de lezer een persoon, een computerapparaat of een ander programma zijn. Obfuscation wordt ook gebruikt om antivirus tools en andere programma ‘ s die sterk afhankelijk zijn van digitale handtekeningen om code te interpreteren gek. Decompilers zijn beschikbaar voor talen zoals Java, besturingssystemen zoals Android en iOS, en ontwikkeling platforms zoals .NET. ze kunnen automatisch reverse engineer broncode; obfuscation is bedoeld om het moeilijk te maken voor deze programma ‘ s om hun decompileren ook doen.
code obfuscation gaat niet over het veranderen van de inhoud van de oorspronkelijke code van een programma, maar eerder over het maken van de aflevermethode en presentatie van die code meer verwarrend. Obfuscation verandert niet hoe het programma werkt of de einduitvoer.
wat volgt is een voorbeeld fragment van normale JavaScript-code:
var greeting = 'Hello World';greeting = 10;var product = greeting * greeting;
hetzelfde fragment in versluierde vorm ziet er zo uit:
var _0x154f=;var _0x52df=function(_0x159d61,_0x12b953){_0x159d61=_0x159d61-0x122;var _0x154f4b=_0x154f;return _0x154f4b;};(function(_0x19e682,_0x2b7215){var _0x5e377c=_0x52df;while(!!){try{var _0x2d3a87=-parseInt(_0x5e377c(0x129))*parseInt(_0x5e377c(0x123))+-parseInt(_0x5e377c(0x125))*parseInt(_0x5e377c(0x12e))+parseInt(_0x5e377c(0x127))*-parseInt(_0x5e377c(0x126))+-parseInt(_0x5e377c(0x124))*-parseInt(_0x5e377c(0x12f))+-parseInt(_0x5e377c(0x128))*-parseInt(_0x5e377c(0x12b))+parseInt(_0x5e377c(0x12a))*parseInt(_0x5e377c(0x12d))+parseInt(_0x5e377c(0x12c))*parseInt(_0x5e377c(0x122));if(_0x2d3a87===_0x2b7215)break;else _0x19e682(_0x19e682());}catch(_0x22c179){_0x19e682(_0x19e682());}}}(_0x154f,0x1918c));var greeting='Hello\x20World';greeting=0xa;var product=greeting*greeting;
de versluierde versie is bijna onmogelijk te volgen met behulp van het menselijk oog.
Obfuscatietechnieken
obfuscatie omvat verschillende methoden. Vaak worden meerdere technieken gebruikt om een gelaagd effect te creëren.
gecompileerde programma ‘ s die geschreven zijn in programmatalen, zoals C# en Java, zijn gemakkelijker te verdoezelen. Dit komt omdat ze tussenliggende-niveau instructies die over het algemeen gemakkelijker te lezen. In tegenstelling, C++ is moeilijker te verdoezelen, omdat het compileert naar machine code, wat moeilijker is voor mensen om mee te werken.
enkele veelvoorkomende verduisteringstechnieken omvatten de volgende technieken::
- hernoemen. De obfuscator verandert de methoden en namen van variabelen. De nieuwe namen kunnen niet-afdrukbare of onzichtbare tekens bevatten.
- verpakking. Dit comprimeert het hele programma om de code onleesbaar te maken.
- Controlestroom. De decompiled code is gemaakt om te lijken op spaghetti logica, die ongestructureerd en moeilijk te onderhouden code waar de lijn van de gedachte is verduisterd. De resultaten van deze code zijn niet duidelijk, en het is moeilijk om te zeggen wat het nut van de code is door ernaar te kijken.
- transformatie van het Instructiepatroon. Deze aanpak neemt gemeenschappelijke instructies gemaakt door de compiler en ruilt ze voor meer complexe, minder gemeenschappelijke instructies die effectief hetzelfde doen.
- invoegen van Dummy-code. Dummy code kan worden toegevoegd aan een programma om het moeilijker te lezen en reverse engineeren, maar het heeft geen invloed op de logica of het resultaat van het programma.
- metagegevens of verwijdering van ongebruikte code. Ongebruikte code en metadata geven de lezer extra informatie over het programma, net als annotaties op een Word-document, dat hen kan helpen het te lezen en te debuggen. Het verwijderen van metadata en ongebruikte code laat de lezer met minder informatie over het programma en de code.
- invoegen van ondoorzichtig predicaat. Een predicaat in code is een logische uitdrukking die waar of onwaar is. Ondoorzichtige predicaten zijn voorwaardelijke vertakkingen — of if-then statements — waar de resultaten niet gemakkelijk kunnen worden bepaald met statistische analyse. Het invoegen van een ondoorzichtig predicaat introduceert onnodige code die nooit wordt uitgevoerd, maar is verwarrend voor de lezer die probeert de gedecompileerde uitvoer te begrijpen.
- Anti-debug. Legitieme software engineers en hackers gebruiken debug tools om code regel voor regel te onderzoeken. Met deze tools kunnen software engineers problemen met de code herkennen, en hackers kunnen ze gebruiken om de code te reverse engineren. IT-security Pro ‘ s kunnen anti-debug tools gebruiken om te identificeren wanneer een hacker een debug-programma uitvoert als onderdeel van een aanval. Hackers kunnen anti-debug tools draaien om te identificeren wanneer een debug tool wordt gebruikt om de wijzigingen die zij maken aan de code te identificeren.
- anti-sabotage. Deze tools detecteren code die is geknoeid met, en als het is gewijzigd, het stopt het programma.
- String encryptie. Deze methode maakt gebruik van encryptie om de strings in het uitvoerbare te verbergen en herstelt alleen de waarden wanneer ze nodig zijn om het programma uit te voeren. Dit maakt het moeilijk om te gaan door middel van een programma en zoeken naar bepaalde strings.
- omzetting van de Code. Dit is het herordenen van routines en branches in de code zonder een zichtbaar effect op het gedrag.
hoe het succes van obfuscatie te meten
het succes van obfuscatiemethoden kan worden gemeten aan de hand van de volgende criteria:
- kracht. De mate waarin getransformeerde code bestand is tegen geautomatiseerde deobfuscatiepogingen bepaalt de sterkte. Hoe meer moeite, tijd en middelen het kost, hoe sterker de code is.
- differentiatie. De mate waarin getransformeerde code verschilt van het origineel is een andere maatstaf van hoe effectief het is. Enkele manieren om differentiatie te beoordelen zijn:
- het aantal predicaten dat de nieuwe code bevat.
- de diepte van de overerving boom (DIT) — een metriek die wordt gebruikt om de complexiteit van de code aan te geven. Een hoger DIT betekent een complexer programma.
- kosten. Een kostenefficiënte verduisteringsmethode zal nuttiger zijn dan een methode die duur is, vooral als het gaat om hoe goed het schaalt voor grotere toepassingen.
- complexiteit. Hoe meer lagen de obfuscator toevoegt, hoe complexer het programma zal zijn, waardoor de obfuscation meer succes.
voordelen van verduistering
de belangrijkste voordelen van verduistering zijn als volgt::
- geheimhouding. Verduistering verbergt de waardevolle informatie in code. Dit is een voordeel voor legitieme organisaties op zoek naar code te beschermen tegen concurrenten en aanvallers. Omgekeerd, slechte acteurs profiteren van de geheimhouding van verduistering om hun kwaadaardige code te verbergen.
- efficiëntie. Sommige obfuscation technieken, zoals ongebruikte code verwijderen, hebben het effect van het krimpen van het programma en waardoor het minder resource intensief te draaien.
- beveiliging. Verduistering is een ingebouwde beveiligingsmethode, soms aangeduid als toepassing zelfbescherming. In plaats van een externe beveiligingsmethode te gebruiken, werkt het binnen wat wordt beschermd. Het is zeer geschikt voor het beschermen van toepassingen die draaien in een niet-vertrouwde omgeving en die gevoelige informatie bevatten.
nadelen van verduistering
een van de belangrijkste nadelen van verduistering is dat het ook in malware wordt gebruikt. Malwareschrijvers gebruiken het om antivirusprogramma ‘ s te ontwijken die code scannen op specifieke functies. Door het verduisteren van deze functies, de malware lijkt legitiem om de antivirussoftware.
veelgebruikte technieken die malware-auteurs gebruiken zijn::
- exclusief or (XOR). Een bewerking die gegevens verbergt door XOR-waarden toe te passen op code, zodat alleen een getraind oog het kan ontcijferen.
- ROT-13. Een instructie die code vervangt voor willekeurige tekens.
met obfuscatie, in plaats van het ontwikkelen van nieuwe malware, herverpakken auteurs veelgebruikte, commodity attack methoden om hun eigenschappen te verhullen. In sommige gevallen, kwaadaardige acteurs omvatten leverancier – specifieke technieken.
een ander nadeel van verduistering is dat het code moeilijker kan maken om te lezen. Bijvoorbeeld, code die de string encryptie verduisteringsmethode gebruikt vereist decryptie van de strings tijdens runtime, wat de prestaties vertraagt.
verduistering en SolarWinds
een aanval op SolarWinds, een softwaremaker voor IT-beheer en-monitoring in Austin, Texas, die vermoedelijk al in September 2019 begon, resulteerde in een groot aantal andere bedrijven en overheidsinstanties. De aanval werd ontdekt in December 2020 en wordt toegeschreven aan Russische hackers. Het in eerste instantie gecompromitteerd SolarWinds ‘ Orion IT management platform.
de aanvallers gebruikten Sunburst malware, die obfuscation, machine learning en AI technieken combineerde om een backdoor te plaatsen in software-updates voor het Orion platform. Om hun inspanningen te verhullen en bypass verdediging, ze veranderde audit logs, verwijderde bestanden en programma ‘ s na gebruik en vervalste activiteit om het te laten verschijnen als legitieme toepassingen op het netwerk.
deze aanval op de bevoorradingsketen is vermoedelijk meer dan een jaar onopgemerkt gebleven. De malware ingevoegd in de Orion-code lag slapend en verborgen totdat gebruikers gedownload van de geà nfecteerde updates. Het vervolgens verspreid via het netwerk onopgemerkt en besmet een lange lijst van organisaties met behulp van Orion.
verduistering is een van de vele technieken die hackers gebruiken om in IT-systemen te breken. Meer informatie over het verdedigen tegen verschillende soorten cybersecurity-aanvallen vindt u in de diepgaande cybersecurity planningsgids van TechTarget.