Wat is Obfuscation?
On oktober 25, 2021 by adminWat is Code Obfuscation?
Code Obfuscation is het proces waarbij een uitvoerbaar programma zodanig wordt gewijzigd dat het niet langer bruikbaar is voor een hacker, maar wel volledig functioneel blijft. Hoewel het proces de feitelijke methode-instructies of metagegevens kan wijzigen, verandert het niets aan de uitvoer van het programma. Om duidelijk te zijn: met voldoende tijd en moeite kan bijna alle code worden omgekeerd. Echter, op sommige platformen zoals Java, Android, iOS, of .NET (bv. Xamarin, C#, VB.NET, F#) kunnen gratis decompilers gemakkelijk de broncode van een executable of library reverse-engineeren in vrijwel geen tijd en zonder inspanning. Geautomatiseerde code obfuscation maakt reverse-engineering van een programma moeilijk en economisch onhaalbaar.
Waarom een codeverduisteraar gebruiken?
Door het reverse-engineeren van een toepassing veel moeilijker te maken, kunt u bescherming bieden tegen diefstal van bedrijfsgeheimen (intellectueel eigendom), onbevoegde toegang, het omzeilen van licenties of andere controles en het ontdekken van kwetsbaarheden.
Hoe werkt codeverduistering?
Codeverduistering bestaat uit veel verschillende technieken die elkaar kunnen aanvullen om een gelaagde verdediging te creëren. Het is het meest effectief voor talen die een vorm van instructies op tussenliggend niveau maken, zoals Java of de .NET-talen zoals C#, VB.NET, Managed C++, F#, enzovoort. Enkele typische voorbeelden van obfuscatie en applicatie beveiligingstechnieken zijn:
Rename Obfuscation
Renaming wijzigt de naam van methoden en variabelen. Het maakt de gedecompileerde broncode moeilijker te begrijpen voor een mens, maar verandert de programma-uitvoering niet. De nieuwe namen kunnen verschillende schema’s gebruiken, zoals “a”, “b”, “c”, of getallen, niet afdrukbare tekens of onzichtbare tekens. En namen kunnen worden overladen zolang ze een ander bereik hebben. Naamverduistering is een basistransformatie die door de meeste .NET- (C#, enz.), iOS-, Java- en Android-verduisteraars wordt gebruikt.
Stringversleuteling
In een beheerde uitvoerbare tekst zijn alle strings duidelijk te ontdekken en te lezen. Zelfs als methoden en variabelen een andere naam krijgen, kunnen strings worden gebruikt om kritieke secties in de code op te sporen door te zoeken naar stringreferenties in de binary. Dit omvat ook berichten (vooral foutberichten) die aan de gebruiker worden getoond. Om een effectieve barrière tegen dit soort aanvallen te vormen, verbergt tekenreeksversleuteling tekenreeksen in het uitvoerbare bestand en herstelt alleen hun oorspronkelijke waarde als dat nodig is. Het ontsleutelen van tekenreeksen tijdens runtime gaat meestal gepaard met een klein prestatieverlies tijdens runtime.
Control Flow Obfuscation
Control Flow Obfuscation synthetiseert voorwaardelijke, vertakkende en iteratieve constructies die geldige uitvoerbare logica produceren, maar die bij decompilatie niet-deterministische semantische resultaten opleveren. Eenvoudiger gezegd: het laat gedecompileerde code eruit zien als spaghetti-logica, die voor een hacker zeer moeilijk te begrijpen is. Deze technieken kunnen van invloed zijn op de runtime-prestaties van een methode.
Instruction Pattern Transformation
Omzetting van veelvoorkomende instructies die door de compiler zijn gemaakt naar andere, minder voor de hand liggende constructies. Dit zijn volkomen legale machinetaalinstructies die misschien niet netjes worden omgezet naar hogere talen zoals Java of C#. Een voorbeeld hiervan is transient variable caching, waarbij gebruik wordt gemaakt van de stackgebaseerde aard van de runtimes van Java en .NET.
Dummy Code Insertion
Invoegen van code in het uitvoerbare bestand die geen invloed heeft op de logica van het programma, maar decompilers breekt of reverse-engineering code veel moeilijker te analyseren maakt.
Verwijdering van ongebruikte code en metadata
Herwijdering van debug-informatie, niet-essentiële metadata en gebruikte code uit toepassingen maakt deze kleiner en vermindert de informatie die beschikbaar is voor een aanvaller. Deze procedure kan de runtime-prestaties enigszins verbeteren.
Binary Linking/Merging
Deze transformatie combineert meerdere invoer-uitvoerbare bestanden/bibliotheken tot een of meer uitvoer-binaire bestanden. Koppelen kan worden gebruikt om uw applicatie kleiner te maken, vooral wanneer het wordt gebruikt met hernoemen en snoeien. Het kan implementatiescenario’s vereenvoudigen en het kan informatie verminderen die beschikbaar is voor hackers.
Opaque Predicate Insertion
Vermomt door conditionele vertakkingen toe te voegen die altijd evalueren naar bekende resultaten-resultaten die niet gemakkelijk kunnen worden bepaald via statische analyse. Dit is een manier om potentieel onjuiste code te introduceren die nooit daadwerkelijk zal worden uitgevoerd, maar die verwarrend is voor aanvallers die proberen de gedecompileerde uitvoer te begrijpen.
Anti-Tamper
Een obfuscator kan applicatie-zelfbescherming in uw code injecteren om te verifiëren dat er op geen enkele manier met uw applicatie is geknoeid. Als geknoei wordt gedetecteerd, kan het de applicatie afsluiten, de functionaliteit beperken, willekeurige crashes oproepen (om de reden van de crash te verhullen), of een andere aangepaste actie uitvoeren. Het kan ook een bericht naar een service sturen om details over het gedetecteerde geknoei te verstrekken.
Anti-Debug
Wanneer een hacker probeert uw applicatie te vervalsen, uw gegevens te stelen of het gedrag van een kritisch stuk infrastructuur software te veranderen, zullen ze vrijwel zeker beginnen met reverse engineering en door uw applicatie heen stappen met een debugger. Een obfuscator kan een laag in de zelfbescherming van de applicatie aanbrengen door code te injecteren om te detecteren of uw productieapplicatie wordt uitgevoerd in een debugger. Als een debugger wordt gebruikt, kan deze gevoelige gegevens corrumperen (om deze te beschermen tegen diefstal), willekeurige crashes veroorzaken (om te verhullen dat de crash het resultaat was van een debug check), of een andere aangepaste actie uitvoeren. Het kan ook een bericht naar een service sturen om een waarschuwingssignaal af te geven.
Moet ik mijn applicatie versluieren?
Overweeg ten zeerste het gebruik van versluiering en runtime app-zelfbescherming als u software uitbrengt die in een onvertrouwde omgeving draait en intellectueel eigendom heeft, toegang tot gevoelige informatie verschaft, of een begrensde functionaliteit heeft. Obfuscatie maakt het voor aanvallers veel moeilijker om de code te controleren en de toepassing te analyseren. Het maakt het hackers ook moeilijk om te debuggen en met uw applicatie te knoeien. Het einddoel is een beschermingslaag toe te voegen om het moeilijker te maken nuttige informatie, zoals bedrijfsgeheimen (IP), referenties of beveiligingslekken uit een toepassing te halen of te ontdekken. Het moet ook moeilijker worden om de logica van een toepassing te wijzigen of een toepassing opnieuw te verpakken met kwaadaardige code.
Geef een antwoord