Zaštita programskih proizvoda
Uvod
- „Sam pojam intelektualnog vlasništva označava posebna, specifična, prava koja imaju autori, izumitelji i ostali nositelji intelektualnog vlasništva. Intelektualno vlasništvo, znači, nije neko konkretno, materijalno vlasništvo nad nekim predmetom, već pravo odnosno skup ovlaštenja koje pravni poredak zemlje priznaje nositelju intelektualnog vlasništva.“ [1]
- Intelektualni kapital je ukupnost intelektualne imovine (nematerijalne imovine) i intelektualnih potencijala tvrtke koje ona koristi za stvaranje novih vrijednosti.
- Intelektualna imovina zajedno sa intelektualnim kapitalom je kumulativno znanje u posjedu tvrtke, a jedan dio te imovine je u patentima i softveru.
- Rad je fokusiran na zaštitu dijela intelektualne imovine koja se odnosi na softver. S obzirom da je danas neovlašteno korištenje i neovlaštena distribucija programskog koda ogroman problem za sve proizvođače softvera, u ovom radu biti će prikazani oblici borbe protiv tog problema, od normativne zaštite, biti će obrađene tehnike reverznog inženjerstva u svrhu razumijevanja problema s tehničke strane i težine implementacije zaštite, do softverskih i fizičkih metoda sprječavanja reverznog inženjerstva, kopiranja, piratiziranja i ostalih zlouporaba.
- Područje koje obuhvaća ova tematika je ogromno i problem ga je cjelovito i potpuno obuhvatiti a ne zastraniti u opsegu rada.
- Razvoj brzog Interneta u svemu tome samo „pogoršava“ situaciju, procjene su da je broj ilegalnih prema legalnim kopijama softvera na tržištu u odnosu četiri prema jedan i to su podaci nad kojima se treba zamisliti.
Normativna zaštita
Preduvjet za kvalitetnu zaštitu softvera je definiranje zakonske osnove koja regulira autorska prava i prava korištenja autorskih djela. U nastavku su prikazani oblici pravne zaštite sa zakonima koji definiraju to područje, gdje su navedeni i pojedini članci zakona koji konkretiziraju problematiku. --Mladen Hosni
Oblici pravne zaštite softvera su :
- zaštita autorskim pravom,
- Zakon o autorskom pravu i srodnim pravima – (NN 167/03) :
- Članak 5. :
- (2) Autorska djela jesu osobito: jezična djela (pisana djela, govorna djela, računalni programi)
- Članak 7. :
- (1) Zbirke samostalnih autorskih djela, podataka ili druge građe kao što su enciklopedije, zbornici, antologije, baze podataka i sl., koje prema izboru ili rasporedu sastavnih elemenata čine vlastite intelektualne tvorevine njihovih autora, zaštićene su kao takve.
- (2) Zaštita koju uživa zbirka iz stavka 1. ovoga članka ne proteže se na njezin sadržaj i ni na koji način ne utječe na prava koja postoje na autorskim djelima i predmetima srodnih prava uvrštenim u tu zbirku.
- (3) Baze podataka, po ovom Zakonu, jesu zbirke uređene po određenom sustavu ili metodi, čiji su elementi pojedinačno pristupačni elektroničkim ili drugim sredstvima.
- (4) Zaštita koja je ovim Zakonom predviđena za baze podataka ne odnosi se na računalne programe koji su korišteni za izradu ili rad baza podataka pristupačnih elektroničkim sredstvima.
- Članak 9. :
- (1) Autor djela je fizička osoba koja je autorsko djelo stvorila.
- (2) Autoru pripada autorsko pravo na njegovu autorskom djelu činom samog stvaranja autorskog djela.
- Članak 13. :
- (1) Autorsko pravo sadržava moralna prava autora, imovinska prava autora i druga prava autora.
- (2) Autorskim pravom štite se osobne i duhovne veze autora s njegovim autorskim djelom (moralna prava autora), imovinski interesi autora u pogledu njegovoga autorskog djela (imovinska prava autora) i ostali interesi autora u pogledu njegovoga autorskog djela (druga prava autora).
- (3) Za svako korištenje autorskog djela autoru pripada naknada, ako ovim Zakonom ili ugovorom nije drukčije određeno.
- Članak 15. :
- (1) Autor ima pravo biti priznat i označen kao autor djela.
- (2) Osoba koja javno koristi autorsko djelo dužna je pri svakom korištenju naznačiti autora, osim ako autor u pisanom obliku izjavi da ne želi biti naveden ili ako način pojedinoga javnog korištenja autorskog djela onemogućava navođenje autora.
- Članak 18. :
- Autor ima isključivo pravo sa svojim autorskim djelom i koristima od njega činiti što ga je volja, te svakoga drugog od toga isključiti, ako zakonom nije drukčije određeno. To pravo obuhvaća, osobito:
- pravo reproduciranja (pravo umnožavanja),
- pravo distribucije (pravo stavljanja u promet),
- pravo priopćavanja autorskog djela javnosti,
- pravo prerade.
- Autor ima isključivo pravo sa svojim autorskim djelom i koristima od njega činiti što ga je volja, te svakoga drugog od toga isključiti, ako zakonom nije drukčije određeno. To pravo obuhvaća, osobito:
- Članak 41. :
- (1) Autorsko pravo je nasljedivo.
- (2) Nasljednicima autora pripadaju sva prava koja bi pripadala autoru, ako ovim Zakonom nije drukčije određeno.
- (3) Na sva druga pitanja u svezi s nasljeđivanjem autorskog prava, koja nisu uređena ovim Zakonom, primjenjuju se opći propisi o nasljeđivanju.
- Članak 44. :
- (1) Autor može za drugoga osnovati pravo iskorištavanja autorskog djela ili mu prepustiti ostvarivanje autorskog prava ugovorom, davanjem odobrenja (dozvole) za korištenje ili drugim pravnim poslom.
- Članak 75. :
- Autorsko djelo stvoreno u radnom odnosu, po ovom Zakonu, označava djelo koje za vrijeme trajanja radnog odnosa kod određenog poslodavca stvori autor – zaposlenik izvršavajući svoje obveze ili po uputama toga poslodavca. Odnosi u pogledu autorskog djela stvorenog u radnom odnosu uređuju se ovim Zakonom, ugovorom o radu ili drugim aktom kojim se uređuje radni odnos.
- Članak 99. :
- Autorsko pravo traje za života autora i sedamdeset godina nakon njegove smrti, bez obzira kada je autorsko djelo zakonito objavljeno, ako ovim Zakonom nije drukčije određeno.
- Članak 107. :
- Računalni program je zaštićen kao jezično djelo po ovom Zakonu ako je izvoran u smislu da predstavlja vlastitu intelektualnu tvorevinu svog autora. Pojam računalni program obuhvaća izražaj računalnog programa u bilo kojem obliku uključujući ipripremni dizajnerski materijal. Ideje i načela na kojima se zasniva bilo koji element računalnog programa, uključujući i ona na kojima se zasnivaju njegova sučelja, nisu zaštićena autorskim pravom.
- Članak 108. :
- Ako je računalni program stvorio zaposlenik u izvršavanju svojih obveza ili slijedeći upute poslodavca, poslodavac je isključivo ovlašten izvršavati sva imovinska prava na tako stvorenom programu, ako ugovorom nije drugačije određeno.
- Članak 112. :
- Povreda prava na računalnom programu čini se osobito:
- 1. bilo kojom radnjom distribucije primjerka računalnog programa za koji se zna ili ima razloga vjerovati da je to primjerak kojim je povrijeđeno tuđe pravo,
- 2. posjedovanjem, u komercijalne svrhe, primjerka računalnog programa za koji se zna ili ima razloga vjerovati da je to primjerak kojim je povrijeđeno tuđe pravo,
- 3. bilo kojom radnjom distribucije ili posjedovanjem u komercijalne svrhe bilo kojeg sredstva čija je jedina namjena olakšati neovlašteno uklanjanje tehničkog uređaja koji služi za zaštitu računalnog programa ili osujetiti rad toga uređaja.
- Članak 189 propisuje visine kazni za oblike kršenja zakona
- Članak 5. :
- Zakon o autorskom pravu i srodnim pravima – (NN 167/03) :
- Zakon o izmjenama i dopunama zakona o autorskom pravu i srodnim pravima NN 080/2011 (stupa na snagu datumom pristupanja Hrvatske EU)
- zaštita patentnim pravom,
- Zakon o patentu NN 173/03; 87/05; 76/07
- Članak 5:
- Ne smatraju se izumima u smislu stavka 1. ovoga članka, osobito:
- otkrića, znanstvene teorije i matematičke metode,
- estetske tvorevine,
- pravila, upute i metode za izvođenje umnih aktivnosti,igara ili za obavljanje poslova,
- prikazivanje informacija i
- računalni programi.
- Ne smatraju se izumima u smislu stavka 1. ovoga članka, osobito:
- Patentna zaštita u RH ne postoji, ali u sklopu doktrine „tehnical effects“ može se i softveru odobriti patent.
- Članak 5:
- Zakon o patentu NN 173/03; 87/05; 76/07
- zaštita licencom,
- licencom kao zakonskim dokumentom se definira ili ograničava pravo korištenja softvera prema pravilima licenčnog ugovora
- puno kontradiktornosti sa zakonskom regulativom
- zaštita poslovnom tajnom,
- zaštita zakonom o žigu,
- zaštita zakonom o industrijskom obličju,
- zakon o pravu na pristup informacijama (NN 172/03, 144/10),
- Zakon o elektroničkom potpisu (NN 10/02, 80/08) i iz
- Zakon o elektroničkim komunikacijama (NN 73/08) - čl. 99-110 (Glava 12, Zaštita podataka i sigurnost elektroničkih komunikacija).
- U širem smislu ima još čitav niz zakona koji štite intelektualno vlasništvo, od Zakona o trgovini, Zakona o trgovačkim društvima, Zakona o radu, Zakona o lijekovima...
- Pravna teorija i legislativa ne prati razvoj tehnologije dovoljnom brzinom i prilagođavanje zakona novonastalim problemima je sporo. Pravni propisi su općenito definirani i teško je uklopiti specifične probleme u brzo razvijajućoj informatičkoj industriji u njih, tako da dio problema proizlazi i iz toga.
Reverzno inženjerstvo
„Reverzni je inženjering proces otkrivanja tehnoloških principa uređaja, objekta ili sustava kroz analizu njegove strukture, funkcije i operacije. Često uključuje podršku (npr. mehaničkih uređaja, elektroničkih komponenti ili programa) odvojeno i analiziranje njegovog rada u detalje kako bi se koristili u održavanju, ili pokušati napraviti novi uređaj ili program koji obavlja isti zadatak, bez kopiranja bilo čega od originala.
Reverzni inženjering potječe iz analize hardvera za komercijalne ili vojne potrebe. Svrha je utvrditi odluke o dizajniranju završnih proizvoda sa malo ili bez dodatnog znanja o postupcima uključenima u proizvodnju originala. Iste tehnike se trenutno istražuju za sustave aplikacija za naslijeđivanje, ne za potrebe industrije ili vojske, nego radije da bi se zamijenila netočna, nepotpuna ili na bilo koji način nedostupna dokumentacija.“[2]
Reverzno inženjerstvo kao proces ima široku definiciju primjene, od hardvera do softvera, a o ovom radu je isključivo promatrano s aspekta softvera, mogućih koristi u zaštiti programskih proizvoda i zlouporaba koje se svakodnevno dešavaju.
Proces reverznog inženjerstva definiran je našoj zakonskoj regulativi i to u Zakon o autorskom pravu i srodnim pravima – (NN 167/03) članak 110. :
- (3) Osoba koja ima pravo koristiti kopiju računalnog programa, ovlaštena je bez odobrenja nositelja prava, promatrati, proučavati ili ispitivati rad programa radi utvrđivanja ideje i načela na kojima se zasniva bilo koji element programa, ako to čini prilikom izvođenja bilo koje od radnji učitavanja, prikazivanja, izvođenja, prenošenja ili pohranjivanja računalnog programa, koju je ovlaštena poduzimati.
Tu je definirano u članku 111. i dekompajliranje za određene potrebe. Svaki binarni zapis koji možete pokrenuti je čitljiv i u konačnici razumljiv (u protivnom ga računalo ne može izvršavati). Reverzno inženjerstvo je proces rada sa binarnim programskim kodom u svrhu razumijevanja programske logike i podataka, koji se često zloupotrebljava u svrhu postizanja bilo materijalne koristi posjedovanjem vašeg intelektualnog vlasništva bilo nanošenja štete. Pozitivne strane reverznog inženjerstva su:
- Proizvodnja vlastitih alata za nadmudrivanje i identifikaciju zaštita
- Vraćanje upotrebljivog koda kod izgubljenih projekata
- Identifikacija i razumijevanje kako je određena funkcionalnost primjenjena
- Debagiranje grešaka koje se teško nalaze
- Izvršavanje analize potencijalno zlonamjernih programa
Najčešće vrste zlouporaba softvera su:
- tampering – mijenjanje softvera u svrhu davanja pristupa drugima ili promjena funkcionalnosti. Brisanje zabrana ili pristupa skrivenim opcijama.
- piratstvo – napadač radi neautorizirane kopije i prodaje ih
- reverzno inženjerstvo – izvlačenje koda u svrhu krađe intelektualnog vlasništva, povjerljivih informacija i algoritama
- umetanje ranjivosti – umetanje zloćudnog koda, virusa ili ostalih zloćudnih kreacija u piratske verzije
Otvorena priroda konvencionalnih računalnih okruženja dozvoljava lako promatranje i izmjenu koda koji se izvršava. Za rješavanje tog problema razvijaju se različite tehnike koje otežavaju i onemogućavaju razumijevanje i promjenu izvršnog koda. Usprkos ogromnim naporima i sredstvima u zaštiti, ne postoje potpuno učinkovite metode i tehnologije koje rješavaju taj problem, već se sve svodi na donekle uspješne pokušaje zaštite, dok s druge strane reverzni inženjering pokazuje zavidne rezultate u svojim ciljevima i tu je jedino upitna motivacija, količina vremena, novca i tehnologije koji netko želi izdvojiti.
U nastavku će biti prikazane najčešće korištene tehnike reverznog inženjerstva i odgovori na te sve češće i žešće napade. Činjenica je da ima platformi i programskih jezika koji su lakši i jednostavniji za analizu i napade od drugih, a i određene platforme su češće meta napada od drugih. --Mladen Hosni
Tehnike reverznog inženjerstva
Samo reverzno inženjerstvo u ovom kontekstu je proces rada na binarnom ili prevedenom (kompajliranom) kodu programa u svrhu razumijevanja, poboljšavanja, promjene ili zlouporabe logike i/ili podataka.
Alati pomoću kojih se reverzno inženjerstvo izvodi je skup specijaliziranih softverskih programa kao što su debuggeri, disasembleri i dekompajleri pomoću kojih se ispituju sekvence instrukcija koje se izvršavaju u računalu. Ti alati i tehnike se mogu podijeliti u dvije glavne kategorije i to u alate za dinamičku analizu koja se radi kod softvera u vrijeme izvršavanja u računalu i statičku analizu koja se izvodi nad spremljenom kopijom podataka i izvršnog koda. Isto tako možemo podijeliti i set tehnika i alata koji su usmjereni na sprječavanje reverznog inženjerstva.
Osnovna podjela tehnika reverznog inženjerstva je slijedeća :
- Alati za dinamičku analizu
- Debugeri
- Damperi
- Virtualni strojevi
- Ostali alati
- Alati za statičku analizu
- Disasembleri i dekompajleri
- Ostali alati
U nastavku biti će nekoliko riječi o svakoj od spomenutih tehnika.
Alati za dinamičku analizu
Debugeri
Najčešće korišteni alat u dinamičkoj analizi je debuger, koji je u ustvari alat za otkrivanje i uklanjanje grešaka za vrijeme testnog izvođenja programa. Upravo zbog njegove mogućnosti provjere memorije, podataka i datoteka koje program koristi, idealan je za reverzno inženjerstvo.
Postavljanje kontrolnih točaka (breakpoint) na kojima se izvođenje programa zaustavlja, izvođenje pojedinačnih instrukcija (stepping) kod izvođenja daje nam uvid u stanje varijabli i logiku programa nakon proizvoljnog seta instrukcija, te se na taj način relativno lako može otkriti i ugrađeni zaštitni mehanizam. Obzirom da današnji programi koriste ogroman broj instrukcija, korištenje debagera ipak traži dosta vremena za otkrivanje ranjivosti.
Damperi
Damper je vrsta softvera koja pokupi sadržaj radne memorije koji koristi određeni program nad kojim radimo analizu, te taj sadržaj spremi na disk za daljnje proučavanje. Na taj način, u kombinaciji sa ostalim alatima za reverzno inženjerstvo, može se doći do vrijednih informacija o radu programa.
Virtualni strojevi
Softverska implementacija hardvera naziva se virtualni stroj. On predstavlja izoliranu i kontroliranu okolinu u kojoj se vrlo uspješno može vršiti ispitivanje i reverzni inženjering osobito kod programa koji imaju ugrađenu zaštitu protiv debugiranja.
Ostali alati
Uobičajena je primjena u reverznom inženjerstvu i alata za praćenje registrija (kod Windows OS-a) i datotečnog sustava, mrežnog prometa, ulazno/izlaznih jedinica itd., gdje također se može doći do informacija o programskoj logici, podacima koji se spremaju, te korištenju određenih algoritama zaštite. Često se koriste i heksadecimalni editori za lakše čitanje binarnog koda itd...
Alati za statičku analizu
Disasembleri i dekompajleri
Disasembler je vrsta softvera koja čita kopiju programa spremljenog na disk i prevodi ga u asemblerski kod. Asemblerski kod je lakši za razumijevanje i analizu od heksadecimalnog ili binarnog koda. Većina debagera u sebi sadrži i opciju disasembliranja sa ili bez određenih optimizacija koda.
Dekompajler slično kao i disasembler ima funkciju prevođenja strojnog koda ali u viši programski jezik. Najčešće taj kod nije sličan originalnom kodu, ali je bit u vraćanju funkcionalnosti napadnutog programa i otkrivanju ranjivosti.
Ostali alati
Prije spomenuti heksadecimalni editori su jedan od alata koji je redoviti pratilac svih pokušaja reverznog inženjerstva. Pogodni su za traženje određenih sekvenci u izvršnom kodu, traženje stringova i ostalih interesantnih detalja za napadača. Ima tu još čitav niz alata za analizu instalacijskih paketa softvera, traženje ključeva, brute force probijanja zaštita, generatora ključeva... čije bi analiziranje odnijelo puno vremena i prostora. Može se generalno reći da je tu mašta, onih koji rade reverzno inženjerstvo, na zavidnom nivou.
Tehnike onemogućavanja reverznog inženjerstva
Osnova onemogućavanja dinamičkog reverznog inženjerstva je bazirana oko detekcije debagera, detekcije virtualnih strojeva te zaštite memorije. Kod statičkog reverznog inženjerstva zaštita se bazira oko enkripcije, maskiranja i raznih vrsta transformacija.
Onemogućavanje se može implementirati direktno, programiranjem, ili korištenjem specijaliziranih alata nezavisnih proizvođača namijenjenih zaštiti od reverznog inženjerstva.
Osnovna podjela tehnika onemogućavanja reverznog inženjerstva je slijedeća[3]:
- spriječavanje dinamičke analize
- detekcija debbugera
- spriječavanje statičke analize
- enkripcija
- maskiranje (obsfukacija)
- leksičke transformacije
- transformacije kontrolnog tijeka
- transformacije podataka
U nastavku će biti iznijet kratak pregled nabrojenih tehnika zaštite.
Sprječavanje dinamičke analize
Detekcija debagera
Jedna od zaštitnih mjera protiv dinamičke analize programa je detekcija debagera i poduzimanje odgovarajućih protumjera. Poželjno je kod pokretanja programa provjeriti da li je debager aktivan i u tom slučaju poduzeti neke korake.
Tehnike detektiranja debagera su izvrsno dokumentirane na slijedećoj adresi [4] i njihovo detaljno opisivanje bi uzelo previše prostora. Kao protumjere, može se poduzeti niz radnji, od upozorenja, prestanka rada programa, pa do izmjene načina ponašanja programa. Detektiranje debagera je zavisno od operacijskih sustava i potrebno je dobro proučiti načine detekcije te u obzir uzeti i promjene kod novijih verzija operacijskih sustava.
Sprječavanje statičke analize
Enkripcija
„Enkripcija (engl. encription) ili šifriranje je proces u kriptografiji kojim se vrši izmjena podataka tako da se poruka, odnosno informacije, učine nečitljivim za osobe koje ne posjeduju određeno znanje (ključ).“ [5]
Enkripcijom se može dio koda zaštititi na način da se pretvori u nešto nečitljivo za svakoga tko pokuša vidjeti ili promijeniti taj dio koda. Tehnike koje se koriste su najčešće interne procedure za enkripciju/dekripciju koje su aktivne tijekom izvršavanja programa i rade dekripciju ili cijelog programa u memoriju prilikom izvršavanja ili dekriptiraju samo potrebne dijelove. Ostaje opet problem ranjivosti kod dinamičke analize a i značajna je degradacija resursa zbog intenzivnih operacija enkripcije/dekripcije.
Obsfukacija
„Obfuskacija je tehnika zaštite izvornog koda programa koja ga izmjenjuje tako da on bude teško razumljiv. Obfuskacijom, programski kod mijenja svoj izgled i postaje nerazumljiv, a funkcija mu ostaje očuvana.“ [6]
Maskiranje ili obsfukacija je tehnika kojom pokušavamo učiniti dijelove programskog koda manje razumljivima u svrhu ometanja napadača. Tu tehniku možemo raščlaniti na tri podkategorije i to leksičke transformacije, transformacije kontrolnog tijeka i transformacije podataka.
Slijedeći primjer najbolje ilustrira navedenu tehniku:
Slika 1. Primjer obsfukacije (izvor: [7], strana 7)
Postoji čitav niz alata za obsfukaciju tako da se programer može koncentrirati na svoj dio posla, a na alatima je da odrade ostalo.
Leksičke transformacije
Tehnika kojom se skrivaju razni identifikatori, imena rutina, varijabli, skrivanje tekstualnih dijelova unutar programa, a sve u svrhu otežavanja analize i nalaženja ranjivosti.
Transformacije kontrolnog tijeka
Kontrolni tijek ili logika određenog dijela programa se može učiniti namjerno komplicirana ili nerazumljiva, a sve u svrhu zaštite. Razna grananja, puno petlji sa kompliciranim izračunima relativno jednostavnih matematičkih uvjeta, uvjetni skokovi bez direktnih adresa i njihovo izračunavanje i modificiranje, te razbijanje logičkih dijelova može otežati reverzni inženjering.
Transformacije podataka
Različita maskiranja i promjene načina zapisivanja (ili čak enkripcija) ulazno/izlaznih podataka ima također za cilj „zbuniti protivnika“ i ako ne onemogućiti, a ono bar usporiti pokušaje razbijanja zaštita.
Na sreću, na tržištu postoji čitav niz alata za zaštitu programskih proizvoda koji mogu ubrzati i automatizirati procese zaštite, jer ručno pisanje i implementacija zaštite traži često puno vremena. No, treba imati na umu da je većina tih alata dobro poznata i nad njma je također izvršen reverzni inženjering...
Sve te naprijed navedene tehnike se mogu koristiti pojedinačno i/ili zajedno na neograničen broj kombinacija. Izdavanje čestih novih zakrpa programa također može biti jedan od faktora koji usporava pokušaje probijanja zaštite. Uz sve to postoji i čitav spektar tehničkih mjera i uređaja za zaštitu programskih proizvoda koje treba obavezno primjenjivati. Treba uzimati u obzir i degradaciju performansi računala kod složenih modela zaštite.
U cijeloj borbi oko zaštite ostaje još jedan veliki problem, a to je dinamička analiza. Nemamo još uvijek nikakve garancije da smo time uspjeli zaštititi naš proizvod na tržištu. --Mladen Hosni
Metode zaštite softvera
Kod zaštite softvera je najveći problem primjenjivost zakonskih mjera u praksi. Neovisno kako je softver zakonski zaštićen, u praksi je teško otkriti prekršitelje i još teže dokazati krivicu. Zbog takve situacije je razvijateljima softvera lakše i „bezbolnije“ spriječiti piratstvo ugradnjom tehnoloških zaštitnih mjera u svoj softver, nego kasnije pokušavati goniti prekršitelje licenčnog sporazuma. Kod zaštite softvera koriste se različite hardverske i softverske metode. Zadaća svih tih metoda je da od korisnika zahtijevaju neku vrstu autentikacije prije nego što mu se omogući korištenje istog. Korisnik mora imati poseban hardver koji se spoji na neki od komunikacijskih portova računala (LPT, CIM ili USB) ili neku vrstu registracijske datoteke ili registracijsku šifru koju mora upisati tijekom instalacije programa. U svim tim načinima zaštite pokušava se šifrirati ili zakomplicirati izvršni kod programa tako da se onemogući razbijanje zaštite. Opisat ćemo neke od hardverskih, ali i softverskih načina zaštite programskih proizvoda.
Zaštita pomoću sklopovskog ključa (Dongle)
Zaštita pomoću sklopovskog ključa rjeđe se koristi, jer je skuplja u odnosu na programske metode zaštite. Sastoji se od toga da se sa svakom kopijom programa pakira i poseban uređaj koji se mora priključiti na neki I/O port na računalu (najčešće USB) kako bi se program mogao pokrenuti. Princip rada više-manje je jednostavan: program prilikom pokretanja šalje poruke na računalni ulaz na kojem se treba nalaziti sklopovski ključ, i ukoliko ne dobije odgovor s tog ulaza, neće se pokrenuti. Preporučljivo je kriptirati poruke koje šalju program i sklopovski ključ jedan drugome. Nešto bolja izvedba je da se na ključ stavi EPROM čip, na kojem je upisan dio kôda neophodan za rad programa, što čini bilo kakav pokušaj probijanja zaštite gotovo nemogućim, jer je u takvom slučaju (gotovo) nemoguće pokrenuti program bez odgovarajućeg ključa. Osobe koje se bave probijanjem zaštite obično su unaprijed upoznati s programskim podrškama i API pozivima, pa je puno bolje koristiti vlastiti programski kôd za ostvarivanje komunikacije sa sklopovskim ključem. Problem je s ovim načinom zaštite što postoje razni programi imitatori koji glume sklopovske ključeve (eng. emulator) za pojedine vrste. Oni imitiraju prisustvo sklopovskog ključa, te mogu prevariti program. Ukoliko ne postoji dostupan imitator, još jedan način probijanja je ubacivanje imitacijskog kôda izravno u program. Ovo se može spriječiti višestrukim CRC provjerama protiv izmjena u programu i u datoteci i u memoriji.
Funkcije u EPROM-u su enkriptirane i dekriptiraju se direktno u radnu memoriju kod izvršavanja programa. Na taj način je bez originalnog „donglea“ praktički nemoguće probiti zaštitu jer dio koda jednostavno nedostaje. Usprkos opisanim prednostima, dongle uređaji se danas skoro više uopće ne koriste, a razlozi su:
- komplicirana instalacija, često je potreban poseban upravljački softver (engl. driver) za ispravan rad „dongle“ ključa
- visoka cijena, svakom korisniku je osim primjerka aplikacije potrebno isporučiti i poseban primjerak „donglea“
- nemogućnost distribucije softvera preko Interneta.
Slika 2. skinuta sa [8]
Zaštita pomoću instalacijskog medija
Način zaštite aplikacije gdje se softver distribuira na mediju na koji je moguće pisati podatke kao što je meki ili tvrdi disk ili izbrisivi optički disk (CD-RW). U posebnoj datoteci na instalacijskom mediju je zapisan brojač instalacija programa. Nakon svake uspješne instalacije brojač se poveća i ponovno zapiše u istu datoteku. Kad se dostigne određeni broj instalacija, program više nije moguće instalirati s tog medija. Za ispravan rad ove zaštite, datoteka s brojačem mora biti enkriptirana tako da joj je što teže promijeniti sadržaj, a sam medij mora biti što teže kopirati. Možemo reći da se ipak radi o zastarjelom pristupu zaštite te se rijetko koristi, ali ga je ipak vrijedno spomenuti.
Zaštita optičkih medija protiv neovlaštenog kopiranja
Koristi se više vrsta zaštite CD/DVD medija protiv kopiranja i svi programi koji se isporučuju na tome mediju koriste takvu zaštitu. Najjednostavniji oblik zaštite je u obliku provjere da li se ispravan medij nalazi u optičkom čitaču. Tako se može spriječiti kopiranje i pokretanje programa s tvrdog diska računala, ali je također nemoguće razlikovati originalni od ilegalno kopiranog medija. Čak i takva jednostavna zaštita je korisna jer onemogućava softverske pirate da rade tzv. „ripanje“ originalnog programa. Kompliciranije zaštite protiv kopiranja optičkih medija se obično rade tako da se na originalni medij snimi informacija koju je nemoguće kopirati pomoću komercijalno dostupnog softvera za kopiranje istih. Veliki dio softvera provjerava „labelu“ medija koji se trenutno nalazi u čitaču. Ako se za „labelu“ medija koriste nestandardni znakovi, to može zbuniti većinu softvera za kopiranje optičkih medija. Zaštita medija se često izvodi tako da se provjeri da li su na prisutne sve datoteke. Posebno se provjeravaju datoteke koje se najčešće uklanjaju prilikom „ripanja“ CD-a. Do sada se takvi način zaštite nisu pokazali posebno efikasnima. Bio je primjer zaštite medija koji je proglašen kao najjači. Da bi slučajno uklanjanje bilo omogućeno jednostavnim lijepljenjem naljepnice na određenom mjestu, a što kreator nije računao kao opciju, već se isključivo orijentirao na softverski pristup razbijanje zaštite.
Slika 3. skinuta sa: [9]
Zaštita upotrebom registracijskog ključa
Najrašireniji način zaštite računalnih programa danas je zaštita pomoću registracijskog broja/ključa, odnosno serijskog broja. Programeri koriste zaštitu s registracijskim ključem na više načina, ovisno o potrebi, neki od kojih su:
Fiksna registracijska šifra
Ovo je najjednostavniji način zaštite s registracijskim ključem, iako se generalno ovaj tip zaštite kombinira s nekim drugima, koji će biti objašnjeni kasnije. Prednost je ovog načina zaštite što ispravan registracijski broj ne mora biti čuvan u memoriji za usporedbu s unesenim registracijskim brojem, jer je integriran s programskim kodom. Međutim, ovo olakšava posao probijanja, jer sve što je potrebno je saznati taj jedan i jedini, jedinstveni, registracijski ključ. Zbog toga se ovom metodom ne zaključava program u cjelini, već se zaključavaju pojedine njegove funkcije, tako da pri samom upisu registracijskog ključa točno upisan ključ ne otključava odmah cijeli program, već da se pojedini dijelovi programa otključavaju što kasnije, po mogućnosti pri pokretanju programa, ili, još bolje, tek kad se pojedina od tih funkcija koristi. Ako se funkcija dodatno enkodira nakon korištenja, onda program neće nikad biti dekodiran u memoriji u cijelosti, pa izravno dohvaćanje segmenata iz memorije pri pokušaju probijanja zaštite neće puno pomoći.
Slika: primjer unosa registracijskog ključa
Promjenjiva registracijska šifra
Za razliku od prethodne metode, ovdje ne postoji jedinstveni registracijski ključ, već programer smišlja matematički algoritam kojem se kao varijable predaju informacije o korisniku koje je prethodno unio, a algoritam izračunava iz tih podataka registracijski ključ, koji se onda u memoriji uspoređuje s registracijskim ključem koji je korisnik upisao na upit. U ovom slučaju, dakle, jedinstven je matematički algoritam koji računa registracijski broj, dok je registracijski broj varijabilan. Jačina zaštite uglavnom će ovisiti o znanju programera i kompleksnosti algoritma, no ipak, ova metoda probija se relativno lako praćenjem aktivnosti memorije (jer se izračunati registracijski ključ sprema u memoriju radi usporedbe) i praćenjem izvođenja programa liniju po liniju koda, te praćenjem stanja memorijskih resursa, registara i stanja stoga. Za postizanje snažnije zaštite, može se algoritam izraditi tako da korisničko ime i registracijski broj moraju kombinirani davati određeni rezultat. Međutim, bez provjere registracijskog broja, postoji cijeli niz mogućih kombinacija koje daju traženo rješenje, pa se to može iskoristiti prilikom probijanja zaštite i izmisliti registracijski broj po vlastitoj želji. Jedno od mogućih rješenja ovog problema je da se u program implementira skriveni dodatni algoritam koji će naknadno provjeravati točnost registracijskog broja.
Serijski broj ovisan o hardveru
Ova metoda poprilično je neugodna za probijanje, jer je zavisna o računalu na kojem se instalira program, pa čak i da se uspije probiti zaštitu i napraviti piratsku verziju programa, ta piratska verzija neće moći raditi niti na jednom računalu osim onog na kojem je program probijen. Pri registraciji programa dohvaća se dodatno neki podatak s računala domaćina koji je jedinstven baš za to računalo, primjerice serijski broj tvrdog diska i sl., te se to kombinira dodatno s korisničkim imenom, nazivom kompanije itd. (da bi program smjela koristiti samo jedna osoba), i izračunava se registracijski broj pomoću posebnog algoritma, te uspoređuje s upisanim registracijskim brojem (kao u prethodnoj metodi). Veoma je bitno da se sakrije dio kôda u kojem se dohvaćaju sistemske informacije, kao i dio gdje se provjerava ispravnost registracijskog broja.
Zaštita programa pomoću registracijske datoteke
Registracijske datoteke imaju istu ulogu kao i registracijske šifre, a prednost im je količina informacija koju je moguće spremiti u njih. Registracijska datoteka može sadržavati informacije o korisniku, registracijsku šifru za autentikaciju korisnika, ključeve za dekriptiranje enkriptiranih dijelova izvršnog koda aplikacije i sl. registracijska datoteka je obično enkriptirana tako da je nemoguće pročitati i promijeniti njen sadržaj. U takvoj datoteci može biti zapisan dio izvršnog koda aplikacije tako ako datoteka ne postoji ili je neispravno dekriptirana, aplikaciji nedostaje dio koda i ne može ispravno raditi. U registracijsku datoteku je moguće pohraniti podatke o hardveru korisnikovog računala i na taj način je potrebna jedinstvena datoteka za svako računalo. Kao i kod registracijskih šifri, iz aplikacije je moguće ukloniti dio koda koji provjerava ispravnost registracijske datoteke. Kako bi se to otežalo, provjera ispravnosti datoteke se ugrađuje u više mjesta u programu i informacije u datoteci se koriste za šifriranje dijelova izvršnog koda.
Provjera ključa putem Interneta
Noviji programi koriste ovu moderniju i sofisticiraniju varijantu provjere ispravnosti registracije. Program prikuplja registracijske informacije od korisnika, zatim ih šalje na poslužitelj putem Interneta, poslužitelj provjerava podatke (uspoređuje ih s podacima u bazi podataka), te šalje izvještaj u kojem piše da li su podaci točni ili ne natrag klijentu. Nešto naprednije od ovoga je konstantna slučajna provjera registracije (što naravno zahtijeva stalnu vezu prema Internetu). Ukoliko program „sazna“ da je ilegalno registriran, šalje poruku s podacima o korisniku proizvođaču programa putem Interneta. Ovakvu verifikaciju nije uputno koristiti za bilo koji program. Pošto je za ovakvu vrstu provjere potrebna stalna veza prema Internetu, preporučljivo je ovaj tip zaštite koristiti s programima koji koriste Internet vezu u svom radu. Ovakva zaštita međutim može se probiti ako se može „uvjeriti“ program da je poslužitelj potvrdio registraciju. To bi značilo da osoba koja probija zaštitu presretne komunikaciju između programa i poslužitelja, te programu da lažne informacije. Ispravak ovog nedostatka može biti, recimo, da server uz potvrdu o uspješnoj registraciji šalje i djelić kôda potreban za rad neke enkodirane funkcije programa, ili primjerice ključ za dekodiranje tih određenih zaključanih funkcija. Ovaj tip zaštite preporučljivo je kombinirati sa zaštitom korištenjem sistemskih informacija (npr. serijski broj tvrdog diska, MAC adresu mrežne kartice, temeljem serijskog broja matične ploče...), tako da svako računalo ima svoj registracijski broj, kako se prilikom pokušaja probijanja zaštite ne bi mogao iskoristiti točan registracijski broj za otključavanje zaključane funkcije. Dobar je način da se ograniči broj upotreba registracijskog ključa na jednu.
Programi za automatsku zaštitu
Uz programersku zaštitu, koju piše i postavlja sâm programer programa koji se zaštićuje, danas postoji niz komercijalnih programa za automatsku zaštitu (trenutno na tržištu postoji preko stotinu takvih programa dostupno), koji integriraju svoje funkcije sa ciljnom aplikacijom i implementiraju generičku zaštitu, a te funkcije uključuju sve od kompresije ciljnog programa i instalacijskog paketa, kontrolirane dekompresije, enkodiranja zasebnih funkcija ili cijelog programa, automatske zaštite registracijskim ključem, kriptiranja ključa, vremenskih ograničenja, pa do korištenja trikova sprečavanja praćenja izvođenja programa (eng. antidebugging) i sprečavanja dohvaćanja asemblerskog kôda iz izvršne datoteke (eng. antidisassembling). Ovakvi programi namijenjeni su programerima koji nisu dovoljno vješti u implementiranju vlastite programske zaštite, ili jednostavno nemaju vremena ili volje truditi se previše oko ovog segmenta razvoja programskog proizvoda. Jasna je stvar da je i dalje najbolja zaštita originalna zaštita izrade od strane programera, uz pretpostavku da je programer dovoljno vješt u području zaštite i da zna što radi (što najčešće nije slučaj). Razlog tomu je što je dosta ljudi iskusnih u probijanju zaštite često upoznato s funkcionalnostima postojećih komercijalnih programa za automatsku zaštitu, pa uz informaciju koji je program korišten za svrhu zaštite, znaju gdje potražiti slabu točku. Ujedno, po Internetu kruže i programi za automatsko probijanje ovakve zaštite, pa i to predstavlja svojevrstan problem. No, opet, kakva god bila situacija, među velikim brojem ovih programa, postoje neki koji, uz pametno korištenje, nude vrhunsku zaštitu koju je iznimno teško probiti. Neki od programa za zaštitu su „SafeNet“, „ExeShield“, „StarForce“... --Dejan Drabić
Zaključak
Krađa softvera usporava IT inovacije, otvaranje novih radnih mjesta i ekonomski rast. Neovisno o tome što je zakonski definirano intelektualno vlasništvo te što je normativno kao takvo zaštićeno, a kako je izuzetno teško ući u trag kradljivcima, razvijateljima ostaju jedino mogućnosti primjene metoda i tehnika zaštite svojih programskih proizvoda. Same tehnike svode se na već poznata rješenja, kako hardverska, tako i softverska. No, odabir istih vezan je ponajviše uz financijsku isplativost, potrebom obzirom na raširenost softvera ili autorovim nadahnućem, odnosno željom da utroši više resursa na zaštitu. Kako su metode „krekiranja“ sve lakše, a dostupnost putem Interneta doista sveprisutna, ostaje ipak pozitivna činjenica novih mogućnosti korištenja tih tehnologija i u sferi zaštite. Tako će autori koja svoja rješenja nude putem oblaka imati ipak lakšu kontrolu i manju potrebu zaštite, a obzirom na uslužni aspekt, tako će oni drugi koji izdaju instalacije imati prigodu iskoristiti internet kao komunikacijski alat zaštite svojih programa. Sama hardverska zaštita jest dobra, ali ipak za usko specijaliziran softver, obzirom da je autorima uvijek interes što lakše distribucije proizvoda, pa time takav vid zaštite rjeđe susrećemo. Kombinacija korištenja web servisa također je dobar dio moguće implementacije zaštite, jer tako se jedan dio funkcionalnosti može uvijek držati na strani autora, a koji je neophodan korisniku kako bi aplikacija funkcionirala. Tako ukraden softver ne bi ispravno funkcionirao. Što opet nije praktično za aplikacije tipa AutoCad i slično. Iz svega vrijedi zaključiti kako ne postoje apsolutne tehnike zaštite programskih proizvoda te kako je i svijest potrošača bitan faktor u sprečavanju krađe. --Dejan Drabić
Literatura
- Zakon o autorskom pravu i srodnim pravima - NN 167/03
- Zakon o izmjenama i dopunama zakona o autorskom pravu i srodnim pravima - NN 080/2011
- Zakon o patentu NN 173/03; 87/05; 76/07
- http://www.openrce.org/reference_library/anti_reversing 30.12.2011
- http://www.symantec.com/connect/articles/windows-anti-debug-reference 30.12.2011
- http://www.ethicalhacker.net/content/view/152/2/ 29.12.2011
- http://www.codeproject.com/KB/security/AntiReverseEngineering.aspx 29.12.2011
- http://sigurnost.lss.hr/images/dokumenti/lss-pubdoc-2010-11-006.pdf 28.12.2011
- http://www.cs.auckland.ac.nz/courses/compsci725s2c/archive/termpapers/lche.pdf 28.12.2011
- http://www.uploads.pnsqc.org/2011/papers/T-74_Frederiksen-paper.pdf 29.12.2011
- CarNet i LS&S, Zaštita softvera, CCERT-PUBDOC-2004-04-71, http://www.seminarskirad.biz/seminarski/zastita_softvera.pdf
- Software Protection, Wikipedia, http://en.wikipedia.org/wiki/Copy_protection
- A History Of Software Protection, Edge Online, http://www.edge-online.com/features/ahistory-copy-protection
Autori
Mladen Hosni Dejan Drabić