Tietokonevirusten polymorfismi

Tietokonevirusten polymorfismi ( kreikaksi πολυ-  - monet + kreikan μορφή  - muoto, ulkonäkö) on haittaohjelmien tekijöiden käyttämä erikoistekniikka vähentääkseen klassisten virustorjuntatuotteiden haittaohjelmien havaitsemisastetta .

Menetelmän kuvaus

Polymorfismi koostuu haittaohjelman ohjelmakoodin generoimisesta "lennossa" - jo suorituksen aikana, kun taas itse koodin luovan toimenpiteen ei myöskään tarvitse olla vakio ja muuttuu jokaisen uuden tartunnan myötä. Usein koodin muuttaminen saadaan aikaan lisäämällä lauseita, jotka eivät muuta ohjelmakoodin algoritmia (esimerkiksi NOP -käsky ).

Haittaohjelmakoodin jatkuva muokkaaminen ei salli yleisen allekirjoituksen luomista tietylle haittaohjelmanäytteelle. Tähän mennessä virustentorjuntaohjelmistossa on käytetty tekniikoita, kuten heuristinen analyysi ja emulointi , estämään tätä menetelmää .

Historia

Ensimmäisen tunnetun polymorfisen viruksen kirjoitti Mark Washburn. Virus, jonka nimi oli 1260, luotiin vuonna 1990. Tunnetuimman polymorfisen viruksen esitteli vuonna 1992 bulgarialainen krakkeri Dark Avenger (salanimi), joka loi MtE:n (Mutation Engine) .

Tähän mennessä tunnetaan suuri määrä haittaohjelmia, jotka käyttävät polymorfismia analyysin vaikeuttamiseen ja allekirjoituksen luomiseen.

Algoritmiesimerkki

Algoritmi, joka käyttää muuttujia A ja B, mutta ei käytä muuttujaa C, voi silti toimia, vaikka lisäisit useita erilaisia ​​komentoja, jotka muuttavat muuttujan C sisältöä.

Lähdealgoritmi:

alkaa: GOTO Decryption_Code Salattu: ... paljon salattua koodia ... Decryption_Code: A = Salattu silmukka: B = *A B=B XOR CryptoKey *A=B A=A+1 GOTO Loop JOS EI A = Decryption_Code GOTO Salattu CryptoKey: jokin_satunnainen_luku

Sama algoritmi, mutta lisättynä operaatioita, jotka muuttavat C-muuttujaa:

alkaa: GOTO Decryption_Code Salattu: ... paljon salattua koodia ... Decryption_Code: C=C+1 A = Salattu silmukka: B = *A C=3214*A B=B XOR CryptoKey *A=B C = 1 C=A+B A=A+1 GOTO Loop JOS EI A = Decryption_Code C=C^2 GOTO Salattu CryptoKey: jokin_satunnainen_luku

"Salattu"-osion sisällä oleva koodi voi sitten käsitellä koodin "Decryption_Code"- ja "CryptoKey"-osien välillä ja poistaa "tarpeettomat" toiminnot, jotka muuttavat muuttujaa C. Ennen kuin salauslaitetta käytetään uudelleen, se voi lisätä uusia "tarpeettomia" toimintoja. jotka muuttavat muuttujaa C tai jopa täysin muuttavat algoritmia, mutta niin, että se suorittaa samat toiminnot.

Esimerkki kokoonpanokoodista

Yksi helpoimmista tavoista salata viruksen pääosa on salata se tavu tavulta käyttämällä XOR-toimintoa.

mov cx, koodin_pituus mov si, offset aloituskoodi mov al, xor_avain _silmukka: xor [si+cx], al ;dekoodaustavu silmukka _silmukka ;ota seuraava tavu jmp si  ;...  ;... aloituskoodi: ; tässä on viruksen kehon salattu osa Hän on vastuussa uusien tiedostojen tartuttamisesta ja uuden salauksenpurkumenettelyn muodostaminen ;samaan aikaan uudessa tiedostossa oleva viruksen rungon sama osa on kirjoitettava uudelleen ;salattu, mutta eri avaimella

Uusi salauksenpurkumenettely voidaan muodostaa seuraavilla yksinkertaisilla vaiheilla:

Sanokaamme

lisää eax, 5

voidaan korvata

subeax, -5

ja koodi

mov ax, bx

voidaan korvata

paina bx pop kirves

Suojaustapoja

Tehokas suojaus polymorfisia haittaohjelmia vastaan ​​edellyttää ennakoivien virustentorjuntamenetelmien , kuten heuristisen analyysin ja emuloinnin , käyttöä . Heuristinen analyysi ja emulointi eivät kuitenkaan voi taata polymorfisten haittaohjelmien 100-prosenttista havaitsemista, ja siksi HIPS :n käyttöä suositellaan .

Katso myös

Linkit