Szoftverek obfuszkációja

Hasonló dokumentumok
Deobfuscation of obfuscated software. Kurucsai István

Miért van szükség fordítóprogramokra? Fordítóprogramok célja és szerkezete. Miért van szükség fordítóprogramokra?

Fordító részei. Fordító részei. Kód visszafejtés. Izsó Tamás szeptember 29. Izsó Tamás Fordító részei / 1

A fordítóprogramok szerkezete. Kódoptimalizálás. A kódoptimalizálás célja. A szintézis menete valójában. Kódoptimalizálási lépések osztályozása

Stack Vezérlés szerkezet Adat 2.

sallang avagy Fordítótervezés dióhéjban Sallai Gyula

Bevezetés a programozásba I.

Memóriagazdálkodás. Kódgenerálás. Kódoptimalizálás

Digitális rendszerek. Utasításarchitektúra szintje

Programozási nyelvek (ADA)

Fordító Optimalizálás

OpenCL alapú eszközök verifikációja és validációja a gyakorlatban

Programok értelmezése

Programozás. (GKxB_INTM021) Dr. Hatwágner F. Miklós március 3. Széchenyi István Egyetem, Gy r

Fordítás Kódoptimalizálás

GPU Lab. 4. fejezet. Fordítók felépítése. Grafikus Processzorok Tudományos Célú Programozása. Berényi Dániel Nagy-Egri Máté Ferenc

A szemantikus elemzés helye. A szemantikus elemzés feladatai. A szemantikus elemzés feladatai. Deklarációk és láthatósági szabályok

Programozás I gyakorlat

Adatszerkezetek és algoritmusok

Indexszámítási módszerek; Simpson-paradoxon

A programozás alapjai

Java és web programozás

Intel x86 utasításkészlet + disassembler működése

Podoski Péter és Zabb László

A kódgenerálás helye a fordítási folyamatban. Kódgenerálás I. (kifejezések és vezérlési szerkezetek) A kódgenerálás feladata. Ebben az előadásban...

Programozás alapjai Bevezetés

Programozás alapjai. (GKxB_INTM023) Dr. Hatwágner F. Miklós október 11. Széchenyi István Egyetem, Gy r

Ellátási lánc optimalizálás P-gráf módszertan alkalmazásával mennyiségi és min ségi paraméterek gyelembevételével

Java és web programozás

A JavaScript főbb tulajdonságai

Függvények. Programozás alapjai C nyelv 7. gyakorlat. LNKO függvény. Függvények(2) LNKO függvény (2) LNKO függvény (3)

Programozás alapjai C nyelv 7. gyakorlat. Függvények. Függvények(2)

Programozási alapismeretek 3. előadás

Történeti áttekintés

3. Gyakorlat Ismerkedés a Java nyelvvel

Szoftver karbantartási lépések ellenőrzése

Bevezetés a programozásba I.

1. Bevezetés szeptember 9. BME Fizika Intézet. Szám. szim. labor ea. Tőke Csaba. Tudnivalók. feladat. Tematika. Moodle Házi feladatok

Fordító Optimalizálás

Szoftver-mérés. Szoftver metrikák. Szoftver mérés

Pénzügyi algoritmusok

Programozás. (GKxB_INTM021) Dr. Hatwágner F. Miklós február 18. Széchenyi István Egyetem, Gy r

Objektumorientált programozás C# nyelven

0,424 0,576. f) P (X 2 = 3) g) P (X 3 = 1) h) P (X 4 = 1 vagy 2 X 2 = 2) i) P (X 7 = 3, X 4 = 1, X 2 = 2 X 0 = 2) j) P (X 7 = 3, X 4 = 1, X 2 = 2)

Kifejezések. Kozsik Tamás. December 11, 2016

Operációs rendszerek. 11. gyakorlat. AWK - szintaxis, vezérlési szerkezetek UNIVERSITAS SCIENTIARUM SZEGEDIENSIS UNIVERSITY OF SZEGED

Keresés és rendezés. A programozás alapjai I. Hálózati Rendszerek és Szolgáltatások Tanszék Farkas Balázs, Fiala Péter, Vitéz András, Zsóka Zoltán

1. Bevezetés A C++ nem objektumorientált újdonságai 3

Bevezetés Alapfogalmak Jog

Tuesday, March 6, 12. Hasító táblázatok

Klaszterezés. Kovács Máté március 22. BME. Kovács Máté (BME) Klaszterezés március / 37

Összetett programozási tételek Rendezések Keresések PT egymásra építése. 10. előadás. Programozás-elmélet. Programozás-elmélet 10.

és az instanceof operátor

Szenzorhálózatok programfejlesztési kérdései. Orosz György

Maximum kiválasztás tömbben

Kriptográfia I. Kriptorendszerek

Java VIII. Az interfacei. és az instanceof operátor. Az interfészről általában. Interfészek JAVA-ban. Krizsán Zoltán

Széchenyi István Szakképző Iskola

2. Fejezet : Számrendszerek

OOP I. Egyszerő algoritmusok és leírásuk. Készítette: Dr. Kotsis Domokos

Assembly. Iványi Péter

Matematikai programok

... S n. A párhuzamos programszerkezet két vagy több folyamatot tartalmaz, melyek egymással közös változó segítségével kommunikálnak.

6. fejezet: Ciklusok

Programozás alapjai C nyelv 4. gyakorlat. Mit tudunk már? Feltételes operátor (?:) Típus fogalma char, int, float, double

Közgazdaságtan 1. ELTE TáTK Közgazdaságtudományi Tanszék. 3. hét A KERESLETELMÉLET ALAPJAI. HASZNOSSÁG, PREFERENCIÁK

Programozás BMEKOKAA146. Dr. Bécsi Tamás 3. előadás

Online algoritmusok. Algoritmusok és bonyolultságuk. Horváth Bálint március 30. Horváth Bálint Online algoritmusok március 30.

GENERIKUS PROGRAMOZÁS Osztálysablonok, Általános felépítésű függvények, Függvénynevek túlterhelése és. Függvénysablonok

Adminisztrációs feladatok Strukturált programok A C programnyelv elemei

A számok kiírása is alapvetően karakterek kiírásán alapul, azonban figyelembe kell venni, hogy a számjegyeket, mint karaktereket kell kiírni.

Objektum Vezérelt Szoftverek Analízise

Párhuzamos és Grid rendszerek

Nemzetközi team munka indítása

értékel függvény: rátermettségi függvény (tness function)

Emlékeztető: a fordítás lépései. Szimbólumtábla-kezelés. Információáramlás. Információáramlás. Információáramlás.

Szakmai program 2015

Programozási nyelvek a közoktatásban alapfogalmak II. előadás

Programozási nyelvek JAVA EA+GY 1. gyakolat

Java programozási nyelv

Dr. Schuster György február / 32

Bonyolultságelmélet. Monday 26 th September, 2016, 18:50

BASH script programozás II. Vezérlési szerkezetek

Korlátos modellellenőrzés. dr. Majzik István BME Méréstechnika és Információs Rendszerek Tanszék

Matematika. Specializáció évfolyam

Másolásvédelem szoftver vízjelezés és obfuszkálás segítségével

Csoportos üzenetszórás optimalizálása klaszter rendszerekben

Bevezetés a programozásba. 12. Előadás: 8 királynő

egy szisztolikus példa

Szelekció. Döntéshozatal

Mit tudunk már? Programozás alapjai C nyelv 4. gyakorlat. Legnagyobb elem keresése. Feltételes operátor (?:) Legnagyobb elem keresése (3)

Érdekes informatika feladatok

KÖZGAZDASÁGTAN I. Készítette: Bíró Anikó, K hegyi Gergely, Major Klára. Szakmai felel s: K hegyi Gergely június

Programozás alapjai C nyelv 5. gyakorlat. Írjunk ki fordítva! Írjunk ki fordítva! (3)

Egyszerű RISC CPU tervezése

Mérnök informatikus alapképzési szak

Számítógép architektúra

Tartalom Keresés és rendezés. Vektoralgoritmusok. 1. fejezet. Keresés adatvektorban. A programozás alapjai I.

Verifikáció és validáció Általános bevezető

Informatika Rendszerek Alapjai

Átírás:

Szoftverek obfuszkációja Kócsó Balázs Budapesti M szaki és Gazdaságtudományi Egyetem 2014. november 24.

Tartalom Bevezetés: alapfogalmak Anti-reversing Obfuszkáció Deobfuszkáció Obfuszkációs technikák Példák Felületes obfuszkáció (Surface obfuscation) Mély obfuszkáció (Deep obfuscation) Deobfuszkáció kitekintés Összefoglalás Kócsó Balázs (BME) Obfuszkáció 2014. november 24. 2 / 28

Anti-reversing technológiák Céljuk, hogy megnehezítsék a programot vizsgálót abban, hogy megértse annak pontos bels m ködését, illetve hogy automatikus eszközökkel vissza tudja fejteni annak forráskódját. Anti-debug techinikák: Debuggerek detektálása Töréspontok detektálása Operációs rendszer függ m ködés Disassemblerek összezavarása Packerek vagy wrapperek használata Obfuszkáció Virtualizáció Ezen technológiák között nehéz az éles határokat meghúzni, ugyanis legtöbbször együtt, egymást támogatva jelennek meg. Kócsó Balázs (BME) Obfuszkáció 2014. november 24. 3 / 28

Obfuszkáció Anti-reversing Fogalma: A kommunikáció szándékos elrejtése azért, hogy a kívülállók számára zavaros, kétértelm vagy nehezen érthet legyen. Szoftverek esetében ezt a kiadott binárisra tudjuk értelmezni, azaz minél nehezebben lehessen megérteni annak pontos m ködését úgy, hogy a program helyesen m ködik. Felhasználása: Illegális szoftvermásolás megakadályozása Értékes algoritmusok védelme Megnehezíteni a támadók számára a kód megértését és visszafejtését Kártékony kódok elrejtése, polimorzmusa "Célja": A deobfuszkáció megakadályozása. Kócsó Balázs (BME) Obfuszkáció 2014. november 24. 4 / 28

Deobfuszkáció Anti-anti-reversing Fogalma: Az obfuszkált kommunikáció visszafejtése olyan formába, mely mindenki számára érthet és egyértelm. Szoftverek esetében ezt az obfuszkált kód vagy bináris visszaállítására tudjuk értelmezni, hogy az az eredetihez hasonló érthet formában elérhet legyen, mint az obfuszkáció el tt. Felhasználása: Obfuszkált kódok visszaállítása, megértése Kártékony kódok analizálása és felismerése "Célja": Az obfuszkációs technológiák kijátszása. Kócsó Balázs (BME) Obfuszkáció 2014. november 24. 5 / 28

Felületes és mély obfuszkáció összehasonlítása Felületes (surfer): szintaktika alapú nem szükséges érteni hozzá a program funkcióit egyszer bizonyos esetekben nagyon jó megoldást nyújt könnyen általánosítható és automatizálható Mély (deep): szemantika alapú a program funkcióinak átalakítása komplex vannak lehet ségek, amikre már a felületes obfuszkáció nem nyújt megoldást nehezen általánosítható, specikus megoldások Kócsó Balázs (BME) Obfuszkáció 2014. november 24. 6 / 28

Obfuszkációs technikák áttekintése Egyszer Adat- és konstansobfuszkáció Ugrási láncok használata Felesleges kód beillesztés Utasítási sorok felcserélése, szétszórt számítások Gyenge Komplex Átlátszatlan feltételek (Opaque predicates) Kód párhuzamosítás Vezérlési-gráf lapítása (Control-ow attening) Önmódosító kódok Virtuális gépek... Hatásos Kócsó Balázs (BME) Obfuszkáció 2014. november 24. 7 / 28

Adatobfuszkáció A programban lév adatok (szövegek vagy számok) sok információt nyújtanak a kódrészek beazonosításához, ezért próbáljuk meg ket elrejteni valahogy. Többféle módszer létezik: El zetesen letárolt értékek védelme, hogy ne lehessen rájuk könnyen keresni egyszer rejtjelezések XOR-olás Szövegtároló tömbök átszervezése Szövegtömbök összevonása és szétszedése Szövegtároló konténerek számának növelése Elemek permutációja Kócsó Balázs (BME) Obfuszkáció 2014. november 24. 8 / 28

Adatobfuszkáció, példa Boolean típusú adatok obfuszkációja Egy adatobfuszkációs technika a változók hasítása (variable splitting). A V boolean változót széthasítjuk p és q integer változóvá a jobb oldalon látható táblázat alapján. Az f() függvény segítségével elkészítjük a beépített boolean típusnak egy másik reprezentációját. g(v ) f(p, q) p q V 2p + q 0 0 Hamis 0 0 1 Igaz 1 1 0 Igaz 2 1 1 Hamis 3 Kócsó Balázs (BME) Obfuszkáció 2014. november 24. 9 / 28

Konstans obfuszkáció A konstansok védelme egyszer bb, ugyanis azok nem módosítják értéküket a program futása során. Ha a konstansok pontos értékére nincs szükségünk, tehát ha csak egyenl illetve nem egyenl vizsgálatokat végzünk rajtuk, akkor a hashelés nagyon hatásos módszer. Például: if (x == 42) {...} helyett használjuk if ( hash (x) == 0 x50a2fabfdd276f573ff97ace8b11c5f4 ) {...} A helyes m ködés egyetlen feltétele csak az ütközésmentesség. A hash függvények egyirányúsága miatt az eredeti érték kitalálása legfeljebb csak a program további analízisével lehetséges. Kócsó Balázs (BME) Obfuszkáció 2014. november 24. 10 / 28

Kódobfuszkáció A kódobfuszkáció hatásos módszer a bels m ködés megfejtésének megnehezítésére. Nagyon sokféle lehet ség ennek megvalósítására, de vajon hol érdemes ezt csinálni? 1 Magasabb szint nyelvek forráskódjában? 2 Hardver közeli nyelvek forráskódjában? Kócsó Balázs (BME) Obfuszkáció 2014. november 24. 11 / 28

Kódobfuszkáció A kódobfuszkáció hatásos módszer a bels m ködés megfejtésének megnehezítésére. Nagyon sokféle lehet ség ennek megvalósítására, de vajon hol érdemes ezt csinálni? 1 Magasabb szint nyelvek forráskódjában? 2 Hardver közeli nyelvek forráskódjában? A magasabb szint nyelvek fordítói nagyon sok alkalmazott trükköt kioptimalizálnának, ezért a kódobfuszkációt az alacsony szint (assemblyhez hasonló) nyelven szokták elvégezni. Kócsó Balázs (BME) Obfuszkáció 2014. november 24. 11 / 28

Kódobfuszkáció, példa Egy utasítás helyettesítése több utasítással: Eredeti kód mov esi, 0x0 mov edx, 0x12340000 Obfuszkált kód mov esi, 0x1 dec esi mov edx, 0x12347891 xor dx, dx Kócsó Balázs (BME) Obfuszkáció 2014. november 24. 12 / 28

Kódobfuszkáció, példa Felesleges kódrészek beszúrása: Eredeti kód... mov edx, 0x5555 Obfuszkált kód mov edx, 0x30... mov edx, 0x5555 Kócsó Balázs (BME) Obfuszkáció 2014. november 24. 13 / 28

Kódobfuszkáció, példa NOP-szer kódok beszúrása Eredeti kód mov edx, 0x2014 Obfuszkált kód mov edi, edi mov edx, 0x2014 xchg cx, cx Kócsó Balázs (BME) Obfuszkáció 2014. november 24. 14 / 28

Kódobfuszkáció, példa Elérhetetlen kód beszúrása Eredeti kód mov esi, 0x0 and eax, ebx Obfuszkált kód mov esi, 0x0 jmp _label elérhetetlen kód... _label and eax, ebx Kócsó Balázs (BME) Obfuszkáció 2014. november 24. 15 / 28

Kódobfuszkáció, példa Elágazás beszúrása a következ utasításra Eredeti kód mov esi, 0x0 and edx, 0x012340000 Obfuszkált kód mov esi, 0x0 jmp _label _label and edx, 0x012340000 Kócsó Balázs (BME) Obfuszkáció 2014. november 24. 16 / 28

Kódobfuszkáció, példa Utasítások felcserélése Eredeti kód mov esi, 0x1 dec esi and edx, 0x012347891 Obfuszkált kód mov esi, 0x1 and edx, 0x012347891 dec esi Kócsó Balázs (BME) Obfuszkáció 2014. november 24. 17 / 28

Átlátszatlan feltételek (Opaque predicates) Olyan elágazás-feltételek, melyek mindig igazra vagy hamisra értékel dnek ki, de ezt nehéz belátni a visszafejtett programot vizsgálva. Például: if ( (x + x ^ 2) % 2 == 0) {... /* mindig igaz */ } A hatásossága nagyban függ a választott feltételek bonyolultságától és sokszín ségét l Használhatóak platformfügg specikus értékek is. (Ezekben az esetekben kérdéses lehet a kompatibilitás.) Hatásos a statikus analízissel szemben és viszonylag könny elkészíteni, ezért kedvelt technika. Ennek használatával a vezérlésfolyam bonyolítható. Kócsó Balázs (BME) Obfuszkáció 2014. november 24. 18 / 28

Vezérlési-gráf lapítása (Control-ow attening) Minden programhoz készíthet egy vezérlési gráf, hogy mi után mi következik. Általánosságban van egy f függvény (main), amely mindent vezérel és abból történnek még további függvényhívások. A párhuzamos futás megnehezíti az analízist, ugyanis nem tudhatjuk, hogy el ször milyen irányba kell indulni a vizsgálat során. A vezérlési-gráf lapításnak ez az alapötlete. M ködése: 1 a nagy blokkokat törjük szét sok kis blokkra 2 válasszunk egy ún. menetirányítót, akinek az értéke mindig az el z blokk futásától függ 3 így egy nagy blokkból készítettünk egy pontra mindig visszatér sok kis blokkot, melynek megfejtése sokkal több id t vesz igénybe, mint ha szekvenciálisan tudnánk azt olvasni Természetesen az összetartozó blokkokat érdemes mind helyileg, mind a menetirányító logikája szerint elszeparálni. Kócsó Balázs (BME) Obfuszkáció 2014. november 24. 19 / 28

Vezérlési-gráf lapítása (Control-ow attening) A példakód és a vezérélési gráfja: int f( int i, int j) { int a = 1; if (i < j) { a = j; } else do { a *= i - -; } while (i > 0); return a; } Kócsó Balázs (BME) Obfuszkáció 2014. november 24. 20 / 28

Vezérlési-gráf lapítása (Control-ow attening) Az obfuszkált vezérlési gráf: Kócsó Balázs (BME) Obfuszkáció 2014. november 24. 21 / 28

Vezérlési-gráf lapítása (Control-ow attening) Példa menetirányító logikai szeparációjára: Kócsó Balázs (BME) Obfuszkáció 2014. november 24. 22 / 28

Obfuszkációs technikák És ezek tetsz leges kombinációja! Kócsó Balázs (BME) Obfuszkáció 2014. november 24. 23 / 28

Kitekintés: deobfuszkáció típusai Statikus: szintaxis-alapú egyszer bb és gyorsabb nem szükséges a kód futtatása bizonyos esetekben nagyon jó megoldást nyújt különösen hasznos lehet kártékony kódok esetében, ha m ködik Dinamikus: szemantika alapú komplexebb és id igényesebb szükséges lehet a kód futtatása a funkciók megértéséhez (kátékony kódok?) többre képest, mint a statikus obfuszkáció nagyon sok esetben csak ezzel lehet sikereket elérni Kócsó Balázs (BME) Obfuszkáció 2014. november 24. 24 / 28

Összefoglalás: Obfuszkáció vs. Deobfuszkáció Folyamatos versengés Újabb technikák az egyik oldalon újabb technikák a másik oldalon is A szemantikus módszerek egyre nagyobb teret nyernek Kártékony kódoknál fontos lehet, hogy csak statikus eszközökkel ne lehessen felismerni azokat Kócsó Balázs (BME) Obfuszkáció 2014. november 24. 25 / 28

Összefoglalás: Obfuszkáció Nincs tökéletes megoldás Aktív kutatási terület, de kevés az általános megoldás, inkább csak speciális házi megoldások a jellemz ek Kutatások folynak a kriptográai alapokkal megtámogatott obfuszkáció irányába: jelenleg az obfuszkáció csak nehezítés, a visszafejtés id igényét és költségét növelhetjük szükség lenne valamilyen matematikai bizonyosságra adott obfuszkációs technológiához tartozó deobfuszkáció visszavezetése valamilyen ismerten nehéz matematikai problémára mindezt úgy, hogy a program mérete és futásideje ne n jön jelent s mértékben Kócsó Balázs (BME) Obfuszkáció 2014. november 24. 26 / 28

Köszönöm a gyelmet! Kérdések? Kócsó Balázs (BME) Obfuszkáció 2014. november 24. 27 / 28

Felhasznált források Sharath K. Udupa Saumya K. Debray, Matias Madou (2005) Deobfuscation Christian S. Collberg,Member, IEEE Computer Society, Clark Thomborson (2002) Watermarking, Tamper-Proong, and Obfuscation Nguyen Anh Quynh (2013) Machine Code Deobfuscation for Malware Analysis Sebastian Porst, Christian Ketterer (2009) Automated static deobfuscation in the context of Reverse Engineering Bene Máté (2014) Anti-debug technikák kártékony kódokban Kurucsai István (2013) Deobfuscation of obfuscated software Kócsó Balázs (BME) Obfuszkáció 2014. november 24. 28 / 28