A kiadott programjainkat érdemes megvédeni külsÅ‘ behatásoktól. Ilyen külsÅ‘ behatás lehet például az, ha a bináris fájl tartalmát megváltoztatják, hogy kártékony kódot csempésszenek bele. Az ilyen jellegű támadások ellen megoldás lehet, ha a programjainkat digitális aláÃrással látjuk el. Mivel a digitális aláÃrás az adott program integritását is tanúsÃtja, ezért az aláÃrást követÅ‘ módosÃtások esetén a CLR tudni fogja, hogy a programot módosÃtották. Az integritásellenÅ‘rzésen megbukott szerelvény nem fog betöltÅ‘dni a memóriába.
A digitális aláÃrásból két tÃpus létezik. A "gyengébb" tÃpus csak a fenti funkció ellátására alkalmas. Az "erÅ‘sebb" tÃpus a program készÃtÅ‘jét is név szerint azonosÃtja. Ehhez azonban egy kód aláÃrására kiállÃtott digitális aláÃrás kell, aminek a kibocsátóját az operációs rendszer is ismeri. Ezen fajta aláÃrás ára kibocsátónként jelentÅ‘sen eltérhet.
Védelem a módosÃtások ellen
Bármelyik .NET szerelvény ellátható digitális aláÃrással, ami lehetÅ‘vé teszi a kód fordÃtás utáni módosÃtásának felismerését. A megoldás könnyen aktiválható. A projekt tulajdonságaiban a Signing fülön be kell kapcsolni a "Sign the assembly" lehetÅ‘séget.
A legördülÅ‘ listából betölthetünk digitális aláÃrást, vagy készÃthetünk újat. Új aláÃrás készÃtésekor a program fel fog dobni egy ablakot amiben megadhatjuk az aláÃrást tároló fájl nevét és a hozzá tartozó védelmi jelszót.1
A digitális aláÃrással a szerelvény kap egy extra védelmi réteget, amit Strong Name-nek neveznek. Ha a programunk több szerelvénybÅ‘l áll, akkor minden szerelvényt el kell látni Strong Name-el. Ha ezt elmulasztjuk, akkor fordÃtási hibát kapunk. A fordÃtási hiba a leggyengébb láncszem-elv miatt következik be: Az egész védelem nem ér semmit alkalmazás szinten, ha egy komponems szabadon módosÃtható. Ezáltal az alkalmazás sértetlensége nem garantálható.
Védelem visszafejtés ellen
Egy korábbi fejezetben láthattuk, hogy a szerelvények kódjai visszafejthetÅ‘ek C# programokká. Ezt a digitális aláÃrás sem gátolja meg. Ha ez a célunk, akkor más technológiát kell alkalmazni.
A legegyszerűbb megoldás, hogy megtiltjuk a felhasználói végszerzÅ‘désben a program visszafejtését, módosÃtását és egyebeket. Ez egy jogi megállapodás, ami alapján ha ezt a felhasználó megsérti és ebbÅ‘l nekünk kárunk származik, akkor a bÃróságon kérhetünk kártérÃtést.
Azonban ez csak akkor ér valamit, ha tudjuk, hogy ki módosÃtotta a programot, illetve a bÃróságon egy ilyen ügy igen sokáig el tud húzódni és nem biztos, hogy megéri szimplán csak egy megállapodásra bÃzni a programunk biztonságát.
Komolyabb megoldás, ha a kódot obfuszkáljuk. Az obfuszkáció egy olyan eljárás, mely a program eredeti funkcionalitásának megÅ‘rzésével (esetleg tolerálható teljesÃtménycsökkenés árán) a programkódot úgy változtatja meg, hogy annak visszafejtése esetén nehéz legyen következtetni az általa leÃrt logikára.
.NET esetén ilyen célra a Dotfuscator alkalmazható, ami egy fizetÅ‘s termék. Létezik ingyenes változata is, ami ingyenes személyes használatra. Az ingyenes változat a Visual Studio telepÃtÅ‘jével is telepÃthetÅ‘, vagy beszerezhetÅ‘ a https://www.preemptive.com/products/dotfuscator/downloads cÃmrÅ‘l.
A program ingyenes változatának telepÃtése után regisztráció szükséges a használathoz, amihez az e-mail cÃmünk kell.
Sajnos az ingyenes változat tudása kimerül abban, hogy a tárgykódban átnevezi változókat, osztályneveket és metódusokat. A teljes verzió azonban a vezérlési szerkezeteket is képes átrendezni, illetve a programba kódolt szövegek visszafejtését is megnehezÃti.
Egy másik eszköz szintén ilyen célra az eazfuscator.net, ami hasonló tudással rendelkezik. A program rendelkezik egy kipróbálható próbaverzióval, ami 30 napig használható. Letölteni vagy megvásárolni a https://www.gapotchenko.com/eazfuscator.net/download cÃmrÅ‘l lehet.
-
Ha a programunk verzió követÅ‘ rendszer alatt van tartva, akkor a verziókövetÅ‘ rendszerbe ne töltsük fel az aláÃrást.↩