Polymorfinen koodi - Polymorphic code
Computing, polymorfinen koodi on koodi, joka käyttää polymorfinen moottori muuttua säilyttäen alkuperäisen algoritmin ehjä - eli koodi muuntaa itseään joka kerta kun se liikkuu, mutta toiminto koodi (sen semantiikka ) ei muutu lainkaan. Esimerkiksi 1+3 ja 6-2 saavuttavat saman tuloksen käyttämällä erilaisia arvoja ja toimintoja. Tietokonevirukset , kuorikoodit ja tietokonematot käyttävät tätä tekniikkaa joskus piilottaakseen läsnäolonsa.
Salaus on yleisin tapa piilottaa koodi. Salausmenetelmän avulla koodin pääosa (jota kutsutaan myös sen hyötykuormaksi) on salattu ja vaikuttaa merkityksettömältä. Jotta koodi toimisi kuten ennen, koodiin lisätään salauksenpurkutoiminto. Kun koodi suoritetaan, tämä toiminto lukee hyötykuorman ja purkaa sen salauksen ennen sen suorittamista vuorostaan.
Salaus ei yksin ole polymorfismia. Saavuttaakseen polymorfisen käyttäytymisen salaus/salauksen purku -pari mutatoidaan jokaisen koodikopion kanssa. Tämä mahdollistaa joidenkin koodien eri versiot, jotka kaikki toimivat samalla tavalla.
Vahingoittava koodi
Useimmat virustentorjuntaohjelmistot ja tunkeutumisen havaitsemisjärjestelmät (IDS) yrittävät löytää haittakoodin etsimällä tietokoneverkon kautta lähetettyjen tiedostojen ja datapakettien kautta . Jos suojausohjelmisto löytää kuvioita, jotka vastaavat tunnettuja tietokoneviruksia tai -matoja, se ryhtyy tarvittaviin toimiin uhan neutraloimiseksi. Polymorfiset algoritmit vaikeuttavat tällaisten ohjelmistojen tunnistamista rikollisesta koodista, koska se mutaattuu jatkuvasti.
Haitalliset ohjelmoijat ovat pyrkineet suojaamaan salatun koodinsa tältä virustarkistusstrategialta kirjoittamalla salaamattoman salauksen purkukoneen (ja tuloksena olevan salatun hyötykuorman) uudelleen aina, kun virus tai mato leviää. Virustentorjuntaohjelmisto käyttää kehittyneitä kuvioanalyysejä löytääkseen taustalla olevia malleja salauksen purkukoneen eri mutaatioista toivoen havaitakseen tällaiset haittaohjelmat luotettavasti .
Emulointia voidaan käyttää polymorfisen hämärtymisen voittamiseen antamalla haittaohjelman purkaa itsensä virtuaalisessa ympäristössä ennen muita menetelmiä, kuten perinteistä allekirjoituksen skannausta. Tällaista virtuaalista ympäristöä kutsutaan joskus hiekkalaatikoksi . Polymorfismi ei suojaa virusta tällaiselta emuloinnilta, jos salattu hyötykuorma pysyy samana riippumatta salauksen purkamisalgoritmin vaihtelusta. Metamorfisia kooditekniikoita voidaan käyttää vaikeuttamaan havaitsemista entisestään, koska virus voi suorittaa ilman, että muistissa olisi koskaan tunnistettavia koodilohkoja, jotka pysyvät vakiona infektiosta infektioon.
Ensimmäinen tunnettu polymorfinen virus on kirjoittanut Mark Washburn. Virus, nimeltään 1260 , on kirjoitettu vuonna 1990. Häkkimies Dark Avenger loi vuonna 1992 paremmin tunnetun polymorfisen viruksen keinona välttää virustentorjuntaohjelmiston mallintunnistus. Yleinen ja erittäin virulentti polymorfinen virus on virusinfektio .
Esimerkki
Tämä esimerkki ei ole oikeastaan polymorfinen koodi, mutta se toimii johdantona XOR -operaattorin kautta tapahtuvaan salauksen maailmaan . Esimerkiksi algoritmissa, joka käyttää muuttujia A ja B mutta ei muuttujaa C, voi olla suuri määrä koodia, joka muuttaa C: tä, eikä sillä olisi vaikutusta itse algoritmiin, jolloin sitä voitaisiin muuttaa loputtomasti ja ilman huomiota mitä lopputuotteesta tulee.
Start: GOTO Decryption_Code Encrypted: ...lots of encrypted code... Decryption_Code: C = C + 1 A = Encrypted Loop: B = *A C = 3214 * A B = B XOR CryptoKey *A = B C = 1 C = A + B A = A + 1 GOTO Loop IF NOT A = Decryption_Code C = C^2 GOTO Encrypted CryptoKey: some_random_number
Salattu koodi on hyötykuorma. Jos haluat tehdä koodista eri versioita, jokaisessa kopiossa muuttuvat C: tä muokkaavat roskat. "Salattu" -koodi ("paljon salattua koodia") voi etsiä koodista Decryption_Code -koodin ja CryptoKey -koodin väliltä ja jokaisesta algoritmista uuden koodin, joka tekee saman. Yleensä kooderi käyttää nolla avain (esimerkiksi: A xor 0 = A) ensimmäisen sukupolven viruksen, mikä helpottaa kooderin, koska tämä avain koodi ei ole salattu. Sitten kooderi toteuttaa inkrementaalisen avainalgoritmin tai satunnaisalgoritmin.
Polymorfinen salaus
Polymorfista koodia voidaan käyttää myös salausalgoritmin luomiseen. Tämän koodin on luonut StringEncrypt -verkkopalvelu. Se ottaa merkkijonon tai tiedoston sisällön ja salaa sen satunnaisilla salauskomennoilla ja luo polymorfisen salauksen koodin jollakin monista tuetuista ohjelmointikielistä:
// encrypted with https://www.stringencrypt.com (v1.1.0) [C/C++]
// szLabel = "Wikipedia"
wchar_t szLabel[10] = { 0xB1A8, 0xB12E, 0xB0B4, 0xB03C, 0x33B9, 0xB30C, 0x3295, 0xB260, 0xB5E5, 0x35A2 };
for (unsigned tUTuj = 0, KRspk = 0; tUTuj < 10; tUTuj++) {
KRspk = szLabel[tUTuj];
KRspk ^= 0x2622;
KRspk = ~KRspk;
KRspk --;
KRspk += tUTuj;
KRspk = (((KRspk & 0xFFFF) >> 3) | (KRspk << 13)) & 0xFFFF;
KRspk += tUTuj;
KRspk --;
KRspk = ((KRspk << 8) | ( (KRspk & 0xFFFF) >> 8)) & 0xFFFF;
KRspk ^= 0xE702;
KRspk = ((KRspk << 4) | ( (KRspk & 0xFFFF) >> 12)) & 0xFFFF;
KRspk ^= tUTuj;
KRspk ++;
KRspk = (((KRspk & 0xFFFF) >> 8) | (KRspk << 8)) & 0xFFFF;
KRspk = ~KRspk;
szLabel[tUTuj] = KRspk;
}
wprintf(szLabel);
Kuten tästä C ++ -esimerkistä näet, merkkijono salattiin ja jokainen merkki tallennettiin salatussa muodossa UNICODE -laajakuvausmuodossa. Käytettiin erilaisia salauskomentoja, kuten bittikohtainen XOR , EI , lisäys, vähennys, bittikierros. Kaikki on satunnaistettua, myös salausavaimet, bittien kiertolaskurit ja salauskomennot. Lähtökoodin voidaan tuottaa C / C ++ , C # , Java , JavaScript , Python , Ruby , Haskell , MASM , FASM ja AutoIt . Satunnaistamisen ansiosta luotu algoritmi on erilainen joka kerta. Ei ole mahdollista kirjoittaa yleisiä salaustyökaluja, ja koottu koodi polymorfisella salauskoodilla on analysoitava joka kerta, kun se salataan uudelleen.
Katso myös
- Merkittävien tietokonevirusten ja matojen aikajana
- Muodonmuutoskoodi
- Itse muuttuva koodi
- Aakkosnumeerinen koodi
- Shellcode
- Ohjelmiston halkeilu
- Turvallisuus halkeilua
- Hämmentynyt koodi
- Oligomorfinen koodi
Viitteet
- ^ Raghunathan, Srinivasan (2007). Virustentorjuntaohjelmiston suojaaminen virushyökkäyksiltä (M.Sc.). Arizonan osavaltion yliopisto. CiteSeerX 10.1.1.93.796 .
- ^ Wong, siipi; Leima, M. (2006). "Metamorfisten moottoreiden metsästys". Lehti tietokonevirologiassa . 2 : 211–229. CiteSeerX 10.1.1.108.3878 . doi : 10.1007/s11416-006-0028-7 .
- ^ Wójcik, Bartosz (2015). Jono- ja tiedostojen salaus
- Spinellis, Diomidis (tammikuu 2003). "Rajoitetun pituisten virusten luotettava tunnistaminen on NP-täydellinen" . IEEE Transactions on Information Theory . 49 (1): 280–4. doi : 10.1109/TIT.2002.806137 .