Kujutage ette, et olete veetnud kuid revolutsioonilise algoritmi täiustamisega, aga kui oma rakenduse avaldate, saab iga pettur, kellel on tasuta dekompilaator, piiluda ja teie saladuse varastada. Siin tulebki mängu koodi hägustamine – praktika, mida on aastakümneid arendatud, et muuta igaühe jaoks, kes üritab programmi sisemusse piiluda, asjad keeruliseks. See pole maagia, vaid kunst, mis muudab selge ja loetava teksti tõeliseks loogiliseks labürindiks, mis arvuti jaoks on küll täiesti arusaadav, kuid ajab inimese tähelepanu kõrvale.
80ndatel ja 90ndatel, kui C ja assemblerkeel valitsesid, ajendas neid tehnikaid vajadus kaitsta intellektuaalomandit . Tänapäeval, veebi- ja mobiilirakenduste massilise kasutuselevõtuga, on võitlus pidev. Oluline on selgitada, et hägustamine ei ole krüpteerimine; kuigi krüpteerimise kasulikkuseks on vaja võtit, võimaldab hägustamine koodil normaalselt töötada, kuid muudab selle mõistmise ründaja jaoks uskumatult aeglaseks ja kulukaks .
Millest täpselt hägustamine koosneb?
Põhimõtteliselt hõlmab see lähtekoodi krüpteeritud versiooniks muutmist. Eesmärk on takistada pahatahtlikel isikutel haavatavuste otsimist või funktsioonide kopeerimist. Turvalises arenduses rakendatakse seda pärast vigade parandamist staatilise analüüsi abil, lisades täiendava kaitsekihi. Põhimõtteliselt on eesmärk muuta pöördprojekteerimiseks vajalik aja- ja vaevakulu nii suureks, et ründaja loobuks.
Hämamise üksikasjalikud meetodid ja tehnikad
Programmi keerulisemaks muutmiseks on palju viise, mõned lihtsamad kui teised, kuid kõigil on sama eesmärk: analüütikut segadusse ajada.
- Identifikaatorite ümbernimetamine: See on hämamise põhiolemus. See seisneb kirjeldavate nimede muutmises, näiteks
calcularImpuesto()mõttetute asjade jaoks, näiteksa1_z9(). See teeb seda eesmärki on võimatu järeldada muutujast või funktsioonist esmapilgul. - Voolu ümberkorraldamine: Käskude struktuuri muudetakse loogikat muutmata. Koodiplokkide liigutamine või lausete järjekorra muutmine põhjustab Järjestikune lugemine on kaos.
- Surnud koodi süstimine: Lisatakse ridu, mis ei tee absoluutselt mitte midagi (üleliigsed juhised), või lisatakse vale kood, mis juhib analüütiku valele teele. See on nagu panemine lõksud teel nii et ründaja raiskab aega.
- Juhtimisstruktuuride ümberkujundamine: Muuda a
if-elseKlassikaline teostus keeruka kolmikoperaatori või pesastatud struktuuride abil muudab teostuse sujuvamaks palju vähem etteaimatav. - Konstantide asendamine: Otsese arvu, näiteks 5, asemel kasutatakse samaväärset avaldist, näiteks
(100 / 20)Seega jääb tegelik väärtus samaks operatsiooni taha peidetud. - Andmete krüpteerimine ja kodeerimine: Tekstistringe saab peita Base64 või XOR-võtme abil, deobfuseerides neid ainult täpse täitmise hetkel, nii et need ei ilmu staatilises analüüsis.
- Andmete ja metaandmete manipuleerimine: Märkide ümberpööramine stringis või kogu silumisteabe eemaldamine aitab koodi loetavamaks muuta. palju krüptilisem dekompileerimisel.
Hämamise duaalsus: kaitsjad vs ründajad
Asi pole ainult ilus ja ilus; hämamine on kahe teraga mõõk. Ühelt poolt kasutavad arendajad seda piraatluse tõkestamiseks ja oma litsentside kaitsmiseks. Teiselt poolt kasutavad pahavara loojad seda oma viiruste viirusetõrjetarkvarale nähtamatuks muutmiseks. Siin tulevadki mängu keerukamad kontseptsioonid:
- Polümorfne pahavara: See muudab oma välimust iga uue nakatumise korral, kasutades muutuvaid krüpteerimisvõtmeid, mis võimaldab tal kindlat allkirja pole mida skannerid suudavad tuvastada.
- Metamorfne kood: See läheb sammu edasi ja kirjutab igas põlvkonnas ümber oma sisemise struktuuri, muutes selle iga eksemplar on ainulaadne.
- Failita tehnikad: Pahatahtlik kood käivitub otse RAM-is, vältides kokkupuudet kõvakettaga ja möödudes seega suuremast osast traditsioonilised turvakontrollid.
JavaScripti ja veebi ainulaadne väljakutse
Veebikeskkonnas on probleemiks see, et kood töötab kliendi peal, st kasutaja brauseris. Liiga suure kriitilise loogika delegeerimine esiotsale on tõsine arhitektuuriline viga. Ründajad saavad koodi hägususe vähendamiseks ja andmete valideerimise vigade leidmiseks kasutada selliseid tööriistu nagu Chrome DevTools või JSNice. Seetõttu on kuldreegel, et kogu kriitiline valideerimine peaks toimuma serveris , kasutades hägusust ainult täiendusena, et muuta skriptide vargus raskemaks.
Professionaalsed tööriistad koodi turvamiseks
Kõige selle käsitsi tegemine oleks hullumeelsus, seega on olemas väga võimsad automatiseeritud tööriistad. Java ja Androidi ökosüsteemide jaoks paistab silma ProGuard , samas kui .NET-maailmas on väga levinud Dotfuscator . C või C++-ga töötavatele inimestele on LLVM Obfuscator ideaalne valik. Pythoni valdkonnas on meil PyArmor ja JavaScripti jaoks pakub Jscrambler täiustatud enesekaitse- ja silumisvastaseid võimalusi.
Tarkvarakaitse areng ja tulevik
Tehnoloogia ei seisa paigal ja tehisintellekt hakkab mängima olulist rolli. Juba räägitakse tehisintellektil põhinevast hägustamisest , kus algoritmid õpivad, millised koodi osad on kõige haavatavamad ja rakendavad dünaamiliselt kõige tõhusamat tehnikat. Samuti on tekkimas läbipaistmatud predikaadid (avaldised, mille tõesus on kompileerimise ajal teada, kuid ründaja jaoks mitmetähenduslikud) ja konfidentsiaalne andmetöötlus, mis võimaldab krüpteeritud andmeid töödelda ilma dekrüpteerimata. Isegi kvantarvutusele vastupanu osutavaid meetodeid kavandatakse , ennetades tuleviku masinate töötlemisvõimsust.
Kuidas kaitsta end pahatahtliku hägustatud koodi eest
Turvaanalüütikute jaoks nõuab hägustamise vastu võitlemine üleminekut signatuuripõhiselt tuvastamiselt käitumuslikule analüüsile . Oluline pole mitte see, milline kood välja näeb, vaid see, mida see teeb. Põhjaliku logimisinfrastruktuuri rakendamine, mälu kohtuekspertiisi tegemine süstide tuvastamiseks ja liivakasti analüüsi aja pikendamine (üle 30 minuti) on peamised strateegiad keerukuse kihtide taha peituda püüdva pahavara tabamiseks.

