Ce este ofuscarea?
On octombrie 25, 2021 by adminCe este ofuscarea codului?
Ofuzarea codului este procesul de modificare a unui executabil astfel încât acesta să nu mai fie util pentru un hacker, dar să rămână complet funcțional. În timp ce procesul poate modifica instrucțiunile reale ale metodei sau metadatele, acesta nu modifică rezultatul programului. Pentru a fi clar, cu suficient timp și efort, aproape toate codurile pot face obiectul unui proces de inginerie inversă. Cu toate acestea, pe unele platforme, cum ar fi Java, Android, iOS sau .NET (de exemplu, Xamarin, C#, VB.NET, F#), decompilatoarele gratuite pot face cu ușurință inginerie inversă a codului sursă dintr-un executabil sau dintr-o bibliotecă, practic în foarte puțin timp și fără niciun efort. Ofuscarea automată a codului face dificilă și nefezabilă din punct de vedere economic realizarea ingineriei inverse a unui program.
De ce să folosiți un ofuscător de cod?
Făcând ca o aplicație să fie mult mai dificil de dezinformat, vă puteți proteja împotriva furtului de secrete comerciale (proprietate intelectuală), a accesului neautorizat, a ocolirii licențelor sau a altor controale și a descoperirii de vulnerabilități.
Cum funcționează ofuscarea?
Ofuzarea codului constă în mai multe tehnici diferite care se pot completa reciproc pentru a crea o apărare stratificată. Este cel mai eficient pentru limbajele care creează o formă de instrucțiuni de nivel intermediar, cum ar fi Java sau limbajele .NET, cum ar fi C#, VB.NET, Managed C++, F#, etc. Câteva exemple tipice de tehnici de ofuscare și de securitate a aplicațiilor includ:
Obfuscare prin redenumire
Renumirea modifică numele metodelor și variabilelor. Aceasta face ca sursa descompusă să fie mai greu de înțeles pentru un om, dar nu modifică execuția programului. Noile nume pot utiliza diferite scheme, cum ar fi „a”, „b”, „c”, sau numere, caractere neimprimabile sau caractere invizibile. Iar numele pot fi supraîncărcate atâta timp cât au un domeniu de aplicare diferit. Ofuscarea numelor este o transformare de bază care este utilizată de majoritatea ofuscătorilor .NET (C# etc.), iOS, Java și Android.
Criptarea șirurilor de caractere
Într-un executabil gestionat, toate șirurile de caractere sunt în mod clar detectabile și lizibile. Chiar și atunci când metodele și variabilele sunt redenumite, șirurile de caractere pot fi utilizate pentru a localiza secțiunile critice de cod prin căutarea referințelor la șiruri de caractere în interiorul binarului. Aceasta include mesajele (în special mesajele de eroare) care sunt afișate utilizatorului. Pentru a oferi o barieră eficientă împotriva acestui tip de atac, criptarea șirurilor de caractere ascunde șirurile de caractere în executabil și le restabilește valoarea originală doar atunci când este necesar. Decriptarea șirurilor de caractere în timpul execuției implică, de obicei, o ușoară penalizare a performanței în timpul execuției.
Ofuzarea fluxului de control
Ofuzarea fluxului de control sintetizează construcții condiționale, de ramificare și iterative care produc o logică executabilă validă, dar care dau rezultate semantice nedeterministe atunci când sunt descompuse. Mai simplu spus, face ca un cod descompus să arate ca o logică de spaghete care este foarte greu de înțeles pentru un hacker. Aceste tehnici pot afecta performanța în timp de execuție a unei metode.
Transformarea modelelor de instrucțiuni
Converte instrucțiunile comune create de compilator în alte construcții mai puțin evidente. Acestea sunt instrucțiuni perfect legale în limbajul mașinii care s-ar putea să nu fie mapate în mod curat în limbaje de nivel înalt, cum ar fi Java sau C#. Un exemplu este memoria cache a variabilelor tranzitorii, care exploatează natura bazată pe stivă a timpilor de execuție Java și .NET.
Inserție de cod fictiv
Inserție de cod în executabil care nu afectează logica programului, dar care sparge decompilatoarele sau face codul de inginerie inversă mult mai dificil de analizat.
Îndepărtarea codului nefolosit și a metadatelor
Îndepărtarea informațiilor de depanare, a metadatelor neesențiale și a codului utilizat din aplicații face ca acestea să fie mai mici și reduce informațiile disponibile pentru un atacator. Această procedură poate îmbunătăți ușor performanța în timpul execuției.
Binary Linking/Merging
Această transformare combină mai multe executabile/librari de intrare în unul sau mai multe binare de ieșire. Legătura poate fi utilizată pentru a face aplicația mai mică, în special atunci când este utilizată cu redenumirea și tăierea, Poate simplifica scenariile de implementare și poate reduce informațiile disponibile pentru hackeri.
Opaque Predicate Insertion
Obfuscates by adding conditional branches that always evaluate to known results-results that cannot easily be determined via static analysis. Aceasta este o modalitate de a introduce cod potențial incorect care nu va fi niciodată executat efectiv, dar este derutant pentru atacatorii care încearcă să înțeleagă ieșirea descompusă.
Anti-Tamper
Un obfuscator poate injecta autoprotecția aplicației în codul dumneavoastră pentru a verifica dacă aplicația dumneavoastră nu a fost modificată în vreun fel. În cazul în care este detectată o manipulare, acesta poate închide aplicația, poate limita funcționalitatea, poate invoca blocări aleatorii (pentru a disimula motivul blocării) sau poate efectua orice altă acțiune personalizată. De asemenea, ar putea trimite un mesaj către un serviciu pentru a furniza detalii despre alterarea detectată.
Anti-Debug
Când un hacker încearcă să vă pirateze sau să vă contrafacă aplicația, să vă fure datele sau să modifice comportamentul unei piese critice de software de infrastructură, aproape sigur va începe cu inginerie inversă și cu parcurgerea aplicației dvs. cu un depanator. Un obfuscator poate stratifica autoprotecția aplicației prin injectarea unui cod care să detecteze dacă aplicația dvs. de producție se execută în cadrul unui depanator. În cazul în care este utilizat un depanator, acesta poate corupe date sensibile (protejându-le de furt), poate invoca blocări aleatorii (pentru a ascunde faptul că blocarea a fost rezultatul unei verificări de depanare) sau poate efectua orice altă acțiune personalizată. De asemenea, ar putea trimite un mesaj către un serviciu pentru a oferi un semnal de avertizare.
Ar trebui să îmi ofusc în aplicația mea?
Considerați cu tărie utilizarea ofuscării și a autoprotecției aplicației în timp de execuție dacă lansați un software care rulează într-un mediu neîncredere și care are proprietate intelectuală, oferă acces la informații sensibile sau are funcționalități cu grilă. Ofuscarea face ca atacatorilor să le fie mult mai difficil să revizuiască codul și să analizeze aplicația. De asemenea, face ca hackerilor să le fie greu să depaneze și să manipuleze aplicația. Scopul final este de a adăuga un strat de protecție pentru a face dificilă extragerea sau descoperirea de informații utile, cum ar fi secrete comerciale (IP), credențiale sau vulnerabilități de securitate dintr-o aplicație. De asemenea, ar trebui să facă mai dificilă modificarea logicii aplicației sau reambalarea unei aplicații cu cod malițios.
.
Lasă un răspuns