Hvad er Obfuscation?
On oktober 25, 2021 by adminHvad er Code Obfuscation?
Code Obfuscation er processen med at ændre en eksekverbar fil, så den ikke længere er brugbar for en hacker, men stadig er fuldt funktionel. Selv om processen kan ændre de faktiske metodeinstruktioner eller metadata, ændrer den ikke programmets output. For at gøre det klart, at med tilstrækkelig tid og indsats kan næsten al kode omvendt manipuleres. På nogle platforme som Java, Android, iOS eller .NET (f.eks. Xamarin, C#, VB.NET, F#) kan gratis dekompilatorer dog nemt reverse-engineere kildekoden fra en eksekverbar fil eller et bibliotek på næsten ingen tid og uden indsats. Automatiseret kodeobfuskering gør reverse-engineering af et program vanskelig og økonomisk umulig.
Hvorfor bruge en kodeobfusker?
Gennem at gøre et program meget vanskeligere at reverse-engineere kan du beskytte dig mod tyveri af forretningshemmeligheder (intellektuel ejendom), uautoriseret adgang, omgåelse af licenser eller andre kontroller og opdagelse af sårbarheder.
Hvordan virker obfuskering?
Kodeobfuskering består af mange forskellige teknikker, der kan supplere hinanden for at skabe et forsvar i flere lag. Den er mest effektiv for sprog, der skaber en form for instruktioner på mellemniveau som f.eks. Java eller .NET-sprogene som C#, VB.NET, Managed C++, F# osv. Nogle typiske eksempler på teknikker til obfuskering og programsikkerhed omfatter:
Rename Obfuscation
Renaming ændrer navnet på metoder og variabler. Det gør den dekompilerede kildekode sværere for et menneske at forstå, men ændrer ikke programudførelsen. De nye navne kan anvende forskellige skemaer som “a”, “b”, “c”, eller tal, uudskrivelige tegn eller usynlige tegn. Og navne kan overbelastes, så længe de har forskellige anvendelsesområder. Navneobfuskering er en grundlæggende transformation, der anvendes af de fleste .NET- (C# osv.), iOS-, Java- og Android-obfuskeringsværktøjer.
Stringkryptering
I en administreret eksekverbar fil er alle strenge klart opdagelses- og læsbare. Selv når metoder og variabler er omdøbt, kan strenge bruges til at lokalisere kritiske kodeafsnit ved at lede efter strengreferencer inde i binærfilen. Dette omfatter meddelelser (især fejlmeddelelser), der vises for brugeren. For at skabe en effektiv barriere mod denne type angreb skjuler strengkryptering strenge i den eksekverbare fil og genopretter kun deres oprindelige værdi, når det er nødvendigt. Dekryptering af strenge ved kørselstid medfører typisk en mindre ydelsesforringelse ved kørselstid.
Kontrol flow obfuscation
Kontrol flow obfuscation syntetiserer betingede, forgrenende og iterative konstruktioner, der producerer gyldig eksekverbar logik, men giver ikke-deterministiske semantiske resultater, når dekompileret. Mere enkelt sagt får den dekompileret kode til at ligne spaghetti-logik, som er meget vanskelig for en hacker at forstå. Disse teknikker kan påvirke en metodes køretidspræstation.
Instruktionsmønstertransformation
Konverterer almindelige instruktioner, der er skabt af compileren, til andre, mindre indlysende konstruktioner. Der er tale om helt lovlige maskinsprogsinstruktioner, som måske ikke kan afbildes rent til højniveausprog som Java eller C#. Et eksempel er transient variable caching, som udnytter den stack-baserede karakter af Java- og .NET-køretider.
Dummy Code Insertion
Insættelse af kode i den eksekverbare fil, som ikke påvirker programmets logik, men som ødelægger dekompilere eller gør reverse engineered kode meget vanskeligere at analysere.
Fjernelse af ubrugt kode og metadata
Fjernelse af debuginformation, ikke-væsentlige metadata og brugt kode fra programmer gør dem mindre og reducerer de oplysninger, der er tilgængelige for en angriber. Denne procedure kan forbedre køretidspræstationen en smule.
Binary Linking/Merging
Denne transformation kombinerer flere indgående eksekverbare filer/biblioteker til en eller flere udgangsbinære filer. Linking kan bruges til at gøre dit program mindre, især når det bruges sammen med omdøbning og beskæring, Det kan forenkle implementeringsscenarier, og det kan reducere de oplysninger, der er tilgængelige for hackere.
Opaque Predicate Insertion
Obskuer ved at tilføje betingede grene, der altid evaluerer til kendte resultater – resultater, der ikke let kan bestemmes via statisk analyse. Dette er en måde at indføre potentielt ukorrekt kode, som aldrig vil blive udført, men som er forvirrende for angribere, der forsøger at forstå dekompileret output.
Anti-Tamper
En obfuscator kan injicere applikationsselvbeskyttelse i din kode for at verificere, at der ikke er blevet manipuleret med din applikation på nogen måde. Hvis der opdages manipulation, kan den lukke programmet ned, begrænse funktionaliteten, fremkalde tilfældige nedbrud (for at skjule årsagen til nedbruddet) eller udføre en hvilken som helst anden brugerdefineret handling. Den kan også sende en meddelelse til en tjeneste for at give oplysninger om den opdagede manipulation.
Anti-Debug
Når en hacker forsøger at piratkopiere eller forfalske din app, stjæle dine data eller ændre adfærden i et kritisk stykke infrastruktursoftware, vil de næsten helt sikkert begynde med at reverse engineering og gå igennem din applikation med en debugger. En obfuscator kan lægge et lag ind i selvbeskyttelse af applikationen ved at injicere kode til at registrere, om din produktionsapplikation kører i en debugger. Hvis der anvendes en debugger, kan den ødelægge følsomme data (for at beskytte dem mod tyveri), fremkalde tilfældige nedbrud (for at skjule, at nedbruddet var resultatet af en fejlfindingskontrol) eller udføre enhver anden brugerdefineret handling. Den kan også sende en besked til en tjeneste for at give et advarselssignal.
Bør jeg obfuske mit program?
Overvej kraftigt at anvende obfuskering og selvbeskyttelse af app’en på køretid, hvis du frigiver software, der kører i et miljø, der ikke er tillid til, og som har intellektuel ejendom, giver adgang til følsomme oplysninger eller har gated funktionalitet. Obfuscation gør det meget mere difficult for angribere at gennemgå koden og analysere programmet. Det gør det også svært for hackere at fejlfinde og manipulere med dit program. Slutmålet er at tilføje et beskyttelseslag for at gøre det difficult at udtrække eller opdage nyttige oplysninger, f.eks. forretningshemmeligheder (IP), legitimationsoplysninger eller sikkerhedssårbarheder fra et program. Det skal også gøre det vanskeligere at ændre programlogikken eller ompakke et program med ondsindet kode.
Skriv et svar