Polimorf kód

A Wikipédiából, a szabad enciklopédiából
A lap korábbi változatát látod, amilyen Vépi (vitalap | szerkesztései) 2021. április 19., 06:37-kor történt szerkesztése után volt. Ez a változat jelentősen eltérhet az aktuális változattól. (fordítás sablon a szerző alapján)

A számítástechnikában a polimorf kód olyan kód, amely egy polimorf motort használ a mutációhoz, miközben az eredeti algoritmust érintetlenül tartja. Vagyis a kód minden futás közben megváltozik, de a kód funkciója (szemantikája) egyáltalán nem változik meg. Például az 1+3 és a 6-2 ugyanazt az eredményt éri el, miközben különböző értékeket és műveleteket használ. Ezt a technikát néha számítógépes vírusok, shell-kódok és számítógépes férgek használják jelenlétük elrejtésére. [1]

A kódolás elrejtésére a titkosítás a leggyakoribb módszer. Titkosítással a kód törzsét titkosítják, és értelmezhetetlenül fog megjelenni. Ahhoz, hogy a kód a korábbiakhoz hasonlóan működjön, a kódhoz egy visszafejtési funkció kerül hozzáadásra. A kód végrehajtásakor ez a függvény beolvassa a kód törzsét és visszafejti, mielőtt sorra futtatná azt.

A titkosítás önmagában nem polimorfizmus. A polimorf viselkedés elérése érdekében a kódoló és visszafejtő egyaránt a kód minden másolatával mutálódik. Ez lehetővé teszi egyes kódok többféle verzióban létezhessenek, amelyek mindegyike ugyanúgy működik. [2]

Rosszindulatú kód

A legtöbb víruskereső szoftver és behatolás-észlelő rendszer (IDS) megpróbálja megtalálni a rosszindulatú kódot azzal, hogy átvizsgálja a számítógépes hálózatokon keresztül küldött fájlokat és adatcsomagokat. Ha a biztonsági szoftver olyan mintákat talál, amelyek megfelelnek az ismert számítógépes vírusoknak vagy férgeknek, akkor megfelelő lépéseket tesz a fenyegetés semlegesítésére. A polimorf algoritmusok megnehezítik az ilyen szoftverek számára a kártevő kód felismerését, mert az állandóan mutálódik.

A rosszindulatú programozók arra törekedtek, hogy megvédjék titkosított kódjukat ettől a víruskeresési stratégiától úgy, hogy a vírus vagy a féreg minden egyes sokszorozódásakor átírják a titkosítatlan visszafejtő motort (és az eredményül kapott kód törzsét). A vírusirtó szoftver kifinomult mintaelemzéssel keresi meg a mögöttes mintákat a visszafejtő motor különböző mutációi között, remélve, hogy megbízhatóan felismeri az ilyen kártevőket.

Az emulációt fel lehet használni a polimorf elhomályosodás leküzdésére azáltal, hogy hagyják a kártékony programot, hogy elidegenítse önmagát egy virtuális környezetben, mielőtt más módszereket alkalmazna, például a hagyományos aláírás-szkennelést. Az ilyen virtuális környezetet néha homokozónak hívják. A polimorfizmus nem védi meg a vírust az ilyen emulációval szemben, ha a visszafejtett kód törzs ugyanaz marad, függetlenül a visszafejtési algoritmus variációitól. Metamorf kód technikák alkalmazhatóak a felismerés tovább bonyolítása céljából, mivel a vírus lefuthat úgy, hogy egyáltalán nem rendelkezik beazonosítható kódblokkokkal a memóriában, amelyek a fertőzéstől a fertőzésig állandóak maradnának.

Az első ismert polimorf vírust Mark Washburn írta. Az 1260 nevű vírust 1990-ben írták. Egy ismertebb polimorf vírust 1992-ben egy hacker, a Dark Avenger álnéven hozott létre, hogy elkerülje a vírusirtó szoftverek mintázatfelismerését. Gyakori és nagyon fertőző polimorf vírus a Virut fájlfertőző.

Példa

Ez a példa valójában nem polimorf kód, viszont bevezetésként jól szolgál a titkosítás világába az XOR operátor segítségével. Például, egy olyan algoritmusban, amely használja az A és a B változót, viszont a C változót nem, ott nagy mennyiségű kód lehet, amely megváltoztatja a C változó értékét, és ez nem lenne hatással magára az algoritmusra, lehetővé téve, hogy végtelenszer megváltozzon, figyelmen kívül hagyva azt, hogy mi lesz a végtermék.

  sok titkosított kód
  . . .
Visszafejtési_Kód:
  C = C + 1
  A = Titkosított
Ciklus:
  B = * A
  C = 3214 * A
  B = B XOR TitkosítottKulcs
  * A = B
  C = 1
  C = A + B
  A = A + 1
  UGRÁS Ciklus HA A != Visszafejtési_Kód
  C = C ^ 2
  UGRÁS Titkosított
 TitkosítottKulcs:
  valami_véletlen_szám

A titkosított kód a kód törzse. A kód különböző verzióinak elkészítéséhez minden másolatban megváltoznak a C változót manipuláló értelmezhetetlen sorok. A "Titkosított" részben ("rengeteg titkosított kód") lévő kód megkeresheti a kódot a Visszafejtési_Kód és a TitkosítottKulcs között, valamint minden egyes algoritmust új kódnak, amelyek ugyanezt csinálják. Általában a kódoló nulla kulcsot használ (például, A xor 0 = A) a vírus első generációjához, megkönnyítve ezzel a dolgát, mert ezzel a kulccsal a kód még nincs titkosítva. A kódoló ezután implementál egy inkrementális kulcs vagy egy véletlenszerű algoritmust.

Polimorf titkosítás

A polimorf kód felhasználható titkosító algoritmus létrehozására is. Ez a kód a StringEncrypt[3] online szolgáltatás által lett generálva. Egy karakterláncot, vagy egy fájl tartalmát véletlenszerű titkosítási parancsokkal titkosítja, és polimorf dekódoló kódot generál hozzá az egyik legtámogatottabb programozási nyelv egyikén:

     // 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 int 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);

Amint ebben a C ++ példában láthatja, a karakterláncot titkosították, és minden karaktert titkosított formában tároltak UNICODE formátumban. Különböző titkosítási parancsokat használtak, mint például bitenként XOR, NOT, összeadás, kivonás, bitforgatás. Minden véletlenszerű, a titkosítási kulcsok, a bit forgatási számlálók és a titkosítási parancsok is szintén. A kimeneti kód generálható C / C ++, C #, Java, JavaScript, Python, Ruby, Haskell, MASM, FASM és AutoIt nyelveken. A véletlenszerűségnek köszönhetően a generált algoritmus minden alkalommal más és más. Nem lehet általános visszafejtő programokat írni, és a polimorf titkosítással lefordított kódot minden egyes újra titkosításkor elemezni kell.

Jegyzetek

  1. Raghunathan, Srinivasan (2007). Protecting anti-virus software under viral attacks. M.Sc. Thesis, Arizona State University.[halott link]
  2. Wong, Wing; Stamp, M. (2006). Hunting for Metamorphic Engines. Journal in Computer Virology. Department of Computer Science, San Jose State University.
  3. Wójcik, Bartosz (2015). String & File Encryption

Források

Fordítás

Ez a szócikk részben vagy egészben a Polymorphic code című angol Wikipédia-szócikk ezen változatának fordításán alapul. Az eredeti cikk szerkesztőit annak laptörténete sorolja fel. Ez a jelzés csupán a megfogalmazás eredetét és a szerzői jogokat jelzi, nem szolgál a cikkben szereplő információk forrásmegjelöléseként.

További információk