Mitä on peittely?
On 25 lokakuun, 2021 by adminMitä on koodin peittely?
Koodin peittely on prosessi, jossa suoritettavaa tiedostoa muokataan niin, että siitä ei ole enää hyötyä hakkerille, mutta se on edelleen täysin toimiva. Vaikka prosessi voi muuttaa varsinaisia menetelmäohjeita tai metatietoja, se ei muuta ohjelman tulostetta. Selvyyden vuoksi todettakoon, että riittävällä ajalla ja vaivalla lähes kaikki koodi voidaan kääntää. Joillakin alustoilla, kuten Javalla, Androidilla, iOS:llä tai .NET:llä (esim. Xamarin, C#, VB.NET, F#), ilmaisilla dekompilaattoreilla voidaan kuitenkin helposti kääntää lähdekoodi suoritettavasta ohjelmasta tai kirjastosta lähes ilman aikaa ja vaivaa. Automaattinen koodin peittäminen tekee ohjelman käänteisestä analysoinnista vaikeaa ja taloudellisesti mahdotonta.
Miksi käyttää koodin peittäjää?
Tekemällä sovelluksen käänteismuokkauksesta huomattavasti vaikeampaa voit suojautua liikesalaisuuksien (immateriaalioikeuksien) varastamiselta, luvattomalta käytöltä, lisensoinnin tai muiden valvontakeinojen kiertämiseltä ja haavoittuvuuksien löytymiseltä.
Miten peittäminen toimii?
Koodin peittäminen koostuu monista eri tekniikoista, jotka voivat täydentää toisiaan luodakseen kerroksittaisen puolustuksen. Se on tehokkainta kielissä, jotka luovat jonkinlaisia välitason ohjeita, kuten Java tai .NET-kielet, kuten C#, VB.NET, Managed C++, F# jne. Tyypillisiä esimerkkejä peittely- ja sovellusturvatekniikoista ovat:
Rename Obfuscation
Renaming muuttaa metodien ja muuttujien nimiä. Se tekee puretusta lähdekoodista vaikeamman ihmisen ymmärtää, mutta ei muuta ohjelman suoritusta. Uusissa nimissä voidaan käyttää erilaisia skeemoja, kuten ”a”, ”b”, ”c” tai numeroita, tulostamattomia merkkejä tai näkymättömiä merkkejä. Nimiä voidaan myös ylikuormittaa, kunhan niillä on eri laajuus. Nimien peittäminen on perusmuodonmuutos, jota useimmat .NET- (C# jne.), iOS-, Java- ja Android-peittäjät käyttävät.
merkkijonojen salaus
Hallitussa suoritettavassa ohjelmassa kaikki merkkijonot ovat selvästi löydettävissä ja luettavissa. Vaikka metodeja ja muuttujia nimetään uudelleen, merkkijonoja voidaan käyttää kriittisten koodiosioiden paikantamiseen etsimällä merkkijonoviittauksia binäärin sisältä. Tämä koskee myös käyttäjälle näytettäviä viestejä (erityisesti virheilmoituksia). Tämäntyyppisten hyökkäysten estämiseksi merkkijonojen salaus piilottaa merkkijonot suoritettavaan tiedostoon ja palauttaa niiden alkuperäisen arvon vain tarvittaessa. Merkkijonojen salauksen purkamisesta ajonaikana aiheutuu yleensä pieni suorituskyvyn heikkeneminen.
Control Flow Obfuscation
Control flow obfuscation syntetisoi ehdollisia, haarautuvia ja iteratiivisia konstruktioita, jotka tuottavat kelvollisen suoritettavan logiikan, mutta tuottavat dekompiloitaessa ei-deterministisiä semanttisia tuloksia. Yksinkertaisemmin sanottuna se saa puretun koodin näyttämään spagettilogiikalta, jota hakkerin on hyvin vaikea ymmärtää. Nämä tekniikat voivat vaikuttaa menetelmän suoritusaikaiseen suorituskykyyn.
Käskymallien muuntaminen
Muunnetaan kääntäjän luomat yleiset käskyt muiksi, vähemmän ilmeisiksi konstruktioiksi. Nämä ovat täysin laillisia konekielisiä käskyjä, jotka eivät välttämättä sovellu puhtaasti korkean tason kieliin, kuten Java tai C#. Yksi esimerkki on ohimenevien muuttujien välimuistitallennus, joka hyödyntää Java- ja .NET-ajoaikojen pinoihin perustuvaa luonnetta.
Väärän koodin lisääminen
Sisältää suoritettavaan tiedostoon koodia, joka ei vaikuta ohjelman logiikkaan mutta rikkoo dekompilaattorit tai vaikeuttaa käänteisesti analysoitavan koodin analysointia huomattavasti.
Käyttämättömän koodin ja metatiedon poistaminen
Korjaustietojen, ei-tarpeellisen metatiedon ja käytetyn koodin poistaminen sovelluksista tekee niistä pienempiä ja vähentää hyökkääjän käytettävissä olevaa tietoa. Tämä menettely saattaa hieman parantaa ajonaikaista suorituskykyä.
Binary Linking/Merging
Tämä muunnos yhdistää useita syötettyjä suoritettavia ohjelmia/kirjastoja yhdeksi tai useammaksi tulostebinääriksi. Linkittämistä voidaan käyttää sovelluksen pienentämiseen, varsinkin kun sitä käytetään uudelleennimeämisen ja karsimisen kanssa, Se voi yksinkertaistaa käyttöönottoskenaarioita ja se voi vähentää hakkerien saatavilla olevaa tietoa.
Opaque Predicate Insertion
Sumuttaa lisäämällä ehdollisia haaroja, jotka evaluoituvat aina tiedossa oleviin tuloksiin-tuloksiin, joita ei voida helposti määrittää staattisen analyysin avulla. Tämä on tapa lisätä mahdollisesti virheellistä koodia, jota ei koskaan todellisuudessa suoriteta, mutta se hämmentää hyökkääjiä, jotka yrittävät ymmärtää dekompiloitua tulostetta.
Anti-Tamper
Obfuskaattori voi pistää sovelluksen itsesuojauksen koodiin todentaakseen, ettei sovellusta ole peukaloitu millään tavalla. Jos peukalointi havaitaan, se voi sulkea sovelluksen, rajoittaa toiminnallisuutta, kutsua satunnaisia kaatumisia (kaatumissyyn häivyttämiseksi) tai suorittaa minkä tahansa muun mukautetun toiminnon. Se voi myös lähettää palveluun viestin, jossa kerrotaan havaitun peukaloinnin yksityiskohdat.
Anti-Debug
Kun hakkeri yrittää kopioida tai väärentää sovelluksesi, varastaa tietojasi tai muuttaa infrastruktuurin kriittisen ohjelmiston käyttäytymistä, hän aloittaa melkein varmasti käänteisellä suunnittelulla (reverse engineering) ja sovelluksen läpikäymisellä debuggerilla. Obfuscator voi lisätä sovelluksen itsesuojauksen lisäämällä koodia, joka havaitsee, suoritetaanko tuotantosovellusta debuggerin sisällä. Jos virheenkorjaajaa käytetään, se voi korruptoida arkaluonteisia tietoja (suojaten niitä varkaudelta), aiheuttaa satunnaisia kaatumisia (naamioidakseen, että kaato oli virheenkorjaustarkastuksen tulos) tai suorittaa muita mukautettuja toimintoja. Se voi myös lähettää viestin palveluun varoitussignaalin antamiseksi.
Pitäisikö minun peittää sovellukseni?
Harkitse voimakkaasti peittämisen ja ajonaikaisen sovelluksen itsesuojauksen hyödyntämistä, jos julkaiset ohjelmiston, joka toimii epäluotettavassa ympäristössä ja jolla on henkistä omaisuutta, joka tarjoaa pääsyn arkaluonteisiin tietoihin tai jolla on porttitoimintoja. Hämäyksen avulla hyökkääjien on paljon vaikeampi tarkastella koodia ja analysoida sovellusta. Se vaikeuttaa myös hakkereiden virheenkorjausta ja sovelluksen peukalointia. Lopputavoitteena on lisätä suojakerros, jonka avulla sovelluksesta on vaikea poimia tai löytää hyödyllistä tietoa, kuten liikesalaisuuksia (IP), tunnistetietoja tai tietoturva-aukkoja. Sen pitäisi myös vaikeuttaa sovelluslogiikan muuttamista tai sovelluksen uudelleen pakkaamista haitallisella koodilla.
Vastaa