MOŽNOSTI ZAŠČITE PROGRAMSKE OPREME NA MIKRORAČUNALNIKIH INFORMATICA 1/88 UDK 681.3:06:003.6 Nikolaj Zimic Jernej Virant Marjan Bradeško Ivan Pepeinjak Fakulteta za elektrotehniko, Ljubljana IzvleCek : V članku so opisane možnosti zaščite programske opreme na obstoječih mikroračunalnikih. Predstavljene so najpogosteje uporabljene zaščite, stopnja zaščite, ki jo nudijo, napadi nanje in obramba programske opreme pred napadom. Abstract : The paper presents possible protection of software on existing microcomputers. The most often used protection schemes are explained, together with level of protection they enable, the attacks on these schemes and the possibllitles of software defense agalnst such attacks. 1. NAČINI ZAŠČITE PROTI KOPIRANJU 1.1 Uvod Nedovoljeno kopiranje programov na osebnih in hiSnih računalnikih se Je začelo s kopiran­ jem igj;ic. Te zaSčlte so prebijali mladi nade- budneži, ki so to počeli bolj iz zadovoljstva pred prepovedanim kot pa Iz ekonomskih razlogov. S povečanjem moči osebih računalnikov se Je pojavila tudi zahtevna programska oprema, ki lahJcostane tudi nekajkrat več kot strojna opre­ ma. Zato Je zaščita programov postala resen problem. Z množičnim prodorom osebnih računalnikov se Je razmahnilo tudi nedovoljeno kopiranje ali bolje rečeno kraja programov. S krajo programov Je povzročena ogromna škoda avtorjem in proizvajalcent teh programov. Avtorji so se s problemom nedovoljenega kopiranja spopadli na razllCne načine: - pri prbgramlh z velikim številom prodanih kosov so,znižali ceno, tako da kraja prog­ rama postane skoraj nesmisel. - programom so vzdignili ceno, tako da so z nakupom enega kosa plačane tudi morebitne koplje. - programe so zaščitili na razne načine in tako otežili, če že ne preprečili kopiranje. Pri ukradenih programih se pojavljajo še dodatni problemi, kot so garancija in vzdrže­ vanje programov. Pri ukradenih programih ni vzdrževanja, zato so neuporabni za resno delo. 1.2 Problemi zaščite programov proti kopiranju na osebnih računalnikih Pri osebnih rečunalniklh ni več običajnih zaščit programske opreme, ki so prisotne na velikih računalnikih. Pri osebnih računalnikih ima uporabnik vse privilegije in ima dostop do celotnega pomnilnika in do vseh perifernih enot. Procesor tudi nima svoje serijske šte­ vilke, po kateri bi programska oprema ločila računalnike med seboj. Samo kopiranje mora biti s strani sistema dovoljeno, da si lahko uporabnik naredi 'back up' programske opreme. Te zmožnosti omogočajo uporabniku tudi nedovoljeno kopiranje pogramske opreme. Rezultat je enostavno prenašanje programske opreme z enega računalnika na drug računalnik. Programska oprema pač nima možnosti ugotoviti, na katerem računalniku se izvaja. L.3 Načini zaščite programske opreme proti kopiranju Proizvajalci programske opreme so začeli s programskim paketom prodajati še dodatek, ki ga Je zelo težko prekopirati. Pri cenejših verzi­ jah programske opreme Je to kar disketa, ki se razlikuje od običajne diskete in jo programska oprema lahko preverja. To so na primer poškodbe magnetnega materiala na točno določenem mestu ali pa nestandarden zapis na disketi. Pri dražjih paketih se k programski opremi doda modul. Modul se običajno priključi na zunanje vhode. Programska oprema je pisana tako, da brez modula ne deluje. Modul je obi­ čajno zalit v epoksl smolo, kar-otežuje kopi­ ranje modula. 45 1.3.1 Zaščita na disketi Disketa Je običajno medij, na katerem se pro­ daja program. Ista disketa lahko služi še kakor ključ, brez katerega program ne deluje pravil­ no. Tak način zaščite je dokaj poceni, saj zahteva samo spremembo na disketi. Običajna disketa je organizirana po sledeh, to je 40 ali 80 koncentričnih krogov. Vsaka sled je logično razdeljena na sektorje. Pred vsakim sektorjem je poseben zapis (id field), v katerem je kodirana številka sledi, številka strani, številka sektorja in dolžina sektorja. S strani procesorja se v kontroler gibkega diska zapiše samo številka sektorja, sledi • in strani, kontroler pa sam poskrbi, da se bodo podatki pisali ali brali iz pravilnega mesta na disketi. Dodatni zapisi, ki skrbijo za pravilen dostop do sektorja, so običajno procesorju ne­ vidni, lahko pa se jih z direktnim dostopom do kontrolorja prebere. Na disketo se lahko poleg običajnih informa­ cij zapiše dodaten id field, ki pa mu ne sledi sektor. To pomeni, da je na disketi podatek o dodatnem sektorju, ki pa ne obstaja. Pri nor­ malni uporabi diskete z dodanim id fleld-om se le tega ne-opazi. Služi samo za kontrolo pri kopiranju. Pri običajnem formatlranju se doda­ ten Id field ne zapiše, kar prograunski paket kasneje preveri in 'ugotovi', da ni pognan iz originalne diskete. Naslednja možnost je zapis ene sledi več kot je običajno. Disketne enote običajno omogočajo formatlranje diskete na večje število sledi, kot je standardno. Ker operacijski sistem do­ datnih sledi ne uporablja, so le te iz upo­ rabniškega stališča povsem nevidne. Enostavno pa se lahko uporabijo za shranjevanje dodatnih informacij, ki služijo za zaščito proti kopi­ ranju. Zaščita diskete je možna tudi z odstranit­ vijo magnetnga materiala z diskete. To se obi­ čajno naredi z laserjem. To so tako imenovane laserske luknje. Glavna prednost laserskih lukenj pred raznimi zapisi na disketi Je v težjem kopiranju, aaj je potreben fizičen poseg na disketo. Programska oprema preverja napako na disketi. Ce napaka ni na pričakovanem mestu, programska oprema ne deluje pravilno. Preverjanje napake se izvede s pisanjem in branjem sekvence podatkov na poškodovan sektor. Ker je magnetni medij poškodovan, so prebrani podatki spremenjeni. Seveda so podatki spremen­ jeni točno na določenem mestu. Boljša metoda zaščite je z dvema laserskima luknjama na istem sektorju. To pomeni, da imamo na enem sektorju dve točno določeni napaki. S pisanjem in branjem poškodovanega sektorja lahko izmerimo razdaljo med luknjami na prib­ ližno 5% natančno. Natančnost meritve nam do­ loča hitrost vrtenja diskete, ki pa ni popol­ noma enaka pri vseh disketnih enotah. Dolžina se izmeri s preštevanjem pravilno prebranih zlogov med dvema napakama. Na mestu napake disk kontroler Izgubi sinhronizacijo, zato so lahko podatki med dvema napakama pomaknjeni v levo ali desno. Programska oprema tako preverja, če je napaka na sektorju in če je razdalja med dvema napakama pravilna. Disketo, ki je zaščitena z lasersko luknjo, lahko poljubno formatlramo, ne da bi izgubili ključ zaščite. To pomeni, da si lahko naredimo poljubno število kopij, ki služIjo kot back up. Te koplje pa so neuporabne brez originalne diskete, ki je zaščitena z lasersko luknjo. Programsko opremo lahko prekopiramo na trdi disk, seveda pa ne deluje brez originalne dis­ kete. 1.3.2 Zaščita z dodatnim moduiom Nekateri novejši moduli se priključujejo med računalnik in tiskalnik. Ta modul se sproži ob točno določeni sekvenoi in ne moti običajnega dela s tiskalnikom. V mudulu Je običajno nekaj integriranih vezij, ki so zalita v smolo. Ta modul je za uporabnika črna škatla, brez katere programska oprema ne deluje. Modul je običajno avtomat, ki na sprejeto sekvenco podatkov odgovori s točno - določeno sekvenco, ki jo preverja programska oprema. Sekvenca se običajno generlra s psevdo na­ ključnim generatorjem. Zaščita je s stališča kopiranja modula dokaj zanesljiva, saj je pri daljši sekvencl prak­ tično nemogoče ugotoviti način prekodiranja vhodne v izhodno sekvenco. 1.3.3 Zaščita programskih paketov na trdem disku Določeno programsko opremo je možno instali­ rati na trdi disk, tako da le ta ne potrebuje diskete s ključem za normalno delo. Običajno se programsko opremo instalira na trdi disk'z zaščiteno disketo. Na disketi se pri inštalaciji zmanjša števec tako, da Je z eno zaščiteno disketo možno instalirati samo omejeno število kopij. Števec inštalacij se lahko poveča samo v primeru, da se po posebnem postopku onemogoči prej instalirano kopijo na trdem disku. Tak način dela omogoča, da se inštalacijsko disketo, ki je zaščitena, uporablja samo pri inštalaciji. Drugače pa ta disketa služI kot. back up. Pri inštalaciji na trdi disk se običajno v programsko opremo zapišejo informacije o fizič­ nem položaju le te na trdem disku. Pri kopi­ ranju je praktično skoraj nemogoče prekopirati programsko opremo na fizično enake lokacije. Prazen prostor na trdem disku, ki se lahko uporabi za kopiranje, se spreminja pri vsakem brisanju ali pisanju na disk. Tako je samo pri praznem disku enostavno določiti, kam se bodo podatki pri kopiranju pisali. 1.4 Problemi uporabnika pri zaščitenih programskih paketih Zaščita programskih paketov lahko pri nepre­ vidni zaščiti postane dvorezen meč za legalnega uporabnika. To pomeni, da se lahko zaščita obrne proti uporabniku, ki Je programski paket kupil. Problemi nastanejo, če se poškoduje disketa, ki služi kot ključ za pravilno delovanje prog­ rama. To pomeni avtomatsko nekajdnevno neupo­ rabnost programskega paketa. Proizvajalci nam­ reč zamenjajo poškodovano disketo, na kateri je zakodiran ključ, z novo. Problemi se pojavljajo tudi pri dodatnih modulih. Ce Je modul slabo priključen ari če pride do napake pri komunikaciji z modulom, se lahko sproži zaščita, ki je vgrajena v prog­ ramski paket. To ima za posledico prekinitev programa ali pa njegovo nepravilno delovanje, kar pa zmanjšuje zanesljivost, programska opreme. Zaradi zmanjševanja zanesljivosti delovanja programskega paketa se običajno zaščita postavi samo na začetek programa. To seveda olajšuje napad na zaščito in zmanjšuje zanesljivost zaščite. Pri dražjih paketih se poleg programske opreme doda modul. Modul se običajno priključi na serijski, paralelni vmesnik ali med tipkovnico in računalnik. 46 2. NAPADI NA ZAŠČITENE PROGRRAME 2.1 Možnosti 'popravljanja' zaščitenih programov Pri zaščitenih programih vedno obstaja rutina ali skupina rutin, ki preverjajo prisotnost zaščite. Če ključ, ki Je na disketi ali pa v posebnem modulu, ne obstaja, se program običaj­ no prekine ali pa ne deluje pravilno. Eden izmed možnih napadov .na zaščito Je onemogočitev prej omenjenih rutin. Seveda pa Je dokaj zapleteno najti rutine, ki tvorijo zaščito programa. Avtorji rutin seveda poskušajo te rutine čimbolj zakriti. Rutine imajo seveda nekaj značilnosti, ki olaj­ šujejo iskanje. Glavne značilnosti rutin, ki skrbijo za zaščito so: - prve razlike med delovanjem programa pri originalnem ključu in brez, se pojavijo prav v njih. - te rutina kličejo periferne enote, na katere Je priključena zaščita (krmilnik gibkega diska, serijski in paralelni izhod, ...). - včasih vektorji prekinitev kažejo na te rutine, posebno v primeru, če periferne enote delujejo pod prekinitvami. Zanesljivost programske opreme, proti napadu se lahko poveča s testiranjem okolja. To pome­ ni, da programska oprema odkrije programe, ki nadzirajo delovanje programske opreme. Ce prog­ ram odkrije, da Je 'opazovan' ima možnost, da zavede opazovalca. 2.2 Možnosti kopiranja zaščitenih disket Diskete so običajno zaščitene na tri načine: - z nestandardnim zpisom. - s povečanjem števila sledi. - z odstranitvijo magnetnega materiala (tako imenovane laserske luknje) Običajni programi za kopiranje disket ne prepišejo skritih zapisov na disketi. Te lahko prekopirajo programi, ki 'pričakujejo' skrite zapise in naredijo popolno kopijo, ne glede na to, kaj je zapisano na disketi. Dokaj enostavno Je tudi prekopirati sledi, ki Jih običajno ni. Seveda pa moramo prej od­ kriti, da Je programska oprema zaščitena na ta način. Ce Je disketa zaščitena z laserskimi luk­ njami, je le to dokaj težko prekopirati brez drage opreme. Seveda pa ni nujno, da poškodbo povzročimo z laserjem. To poškodbo se lahko povzroči z ostrim predmetom. Pomemben Je le fizičen položaj poškodbe in njena širina. Prva dva primera zaščite Je možno prekopi­ rati popolnoma programsko, brez fizičnega po­ sega v računalnik ali na disketo. Prekopirajo jih tudi aparature, ki so narejene za hitro kopiranje programske opreme. Take aparature namreč ne preverjajo zapisa na disketi, ampak delajo popolno kopijo. 2.3 Možnosti programskega simuliranja zaščitene diskete Napako na disketi, ki je povzročena z laser­ jem, je možno programsko simulirati. To pomeni, da programska oprema ne dobi odgovora z diska ampak iz posebnega programa, ki simulira napa­ ko. Disketo z zaščito lahko programsko analizi­ ramo in Izdelamo algoritem po katerem se spre­ meni zapisani sektor. Če je na sektorju enojna napaka. Je začetek sektorja pravilen, nato pa sledi mesto napake. Na mestu napaka Je prebrana vrednost nesmiselna. Po fizični napaki na dis­ keti spet sledijo podatki, ki so bili zapisani. Ti podatki so zaradi izgube sinhronizacije lahko pomaknjeni. Premik Je mišljen na nivoju bita. Ce je na enem sektorju več laserskih lukenj, pomeni, da Imamo več področij, kjer so prebrani podatki popolnoma nedefinirani. Točno določena pa je razdalja med laserskimi luknjami. Raz­ dalja se lahko izmeri s številom zlogov med dvema napakama. Z laserskimi luknjami zaščiten program lahko prelisičimo s spremembo programa, ki bere sek­ tor. To pomeni, da moramo napisati program, ki simulira zaščiten sektor. Ta program inštali­ ramo kot del sistema tako, da zaščitena prog­ ramska oprema ne opazi spremenjenega branja diskete. Seveda pa se ta program aktivira samo v primeru branja in pisanja na sektor z laser­ skimi luknjami. V vseh ostalih primerih je branje In pisanje običajno. 2.4 Možnosti kopiranja dodatnih modulov Dodatni moduli so običajno vezja, ki so zalita v epoksi smolo. To pomeni da nimamo vpogleda v notranjo zgradbo vezja. Sam algori­ tem je lahko zakodiran tudi v integrirana vezja, kot so naprimer PAL, EPLD, GAL vezja. Ta vezja lahko zaščitimo proti kopiranju a progra­ miranjem posebnega bita v integriranem vezju. To pomeni, da ne moremo prebrati podatkov za programiranje. Podatke za programiranje lahko dobimo le z analizo delovanja Integriranega vezja. Analiza delovanja integiranih vezij oziroma modulov Je dokaj zamudna zaradi velikega šte­ vila možnih kombinacij. To število lahko povečamo s številom notranjih stanj flip-flo- pov. Če imamo v modulu ali v integriranem vezju 10 flip-flopov. Je število notanjh stanj 2 na 10. potenco. Same module oziroma integrirana vezja je dokaj težko prekopirati. Lažje je odkriti rutine, ki uporabljajo modul in Jih spremeniti. 2.5 Možnosti uporabe programskih debugerjev Debuger Je program, ki je namenjen ugotavljanju napak v programski opremi. Omogoča nam sprem­ ljanje izvajanja programa. Tako lahko spremljamo izvajanje programa z .zaščito in brez nje. Iz spremljanja lahko ugo­ tovimo, kje Je jedro zaščite in ga zaobidemo. Z debugerjem lahko iSščemo inštrukcije, ki so vezane na delovanje zaščite. To so naprimer inštrukcije za branje in pisanje, kanala, na katerega je priključen modul za zaščito. V opazovani program lahko postavimo preki­ ni tvene točke, v katerih opazujemo stanje pom­ nilnika in registrov. Iz podatkov na skladu lahko ugotovimo, od kje Je bil določen podpro­ gram klican. Opazujemo lahko tudi ko"munikacljo z dodat­ nimi moduli. Z dobljenimi podatki lahko napi­ šemo program za analizo modula. Po drugi strani pa lahko odkrijemo algoritem, ki skrbi za pre­ verjanje modula. Ta algoritem mora biti ekviva­ lenten algoritmu v modulu. Iz algoritma se lahko brez večjh problemov izdela modul. Nekateri programski paketi imajo vgrajeno preverjanje okolice v kateri delujejo. To po­ meni, da lahko odkrijejo, če delujejo pod kak­ šnim dodatnim programom, ki opazuje njihovo delovanje. Če odkrijejo, da so opazovani, se ha ustrezen način 'branijo'. Spremenijo način delovanja tako, da kar najbolj otežijo sprem­ ljanje dogajanj v računalniku. 47 2.6 Možnosti uporabe emulatorjev Emulatorji so najnevarnejši za zaščitene prog­ rame. Njihovo prisotnost je programsko nemogoče odkriti, ker sonda emulatorja zamenjuje proce­ sor računalnika. Emulator omogoča v realnem času spremljanje programa oziroma dogajanj v pomnilniku ali perifernih enotah. Z emulatorjem dokaj enostavno odkrijemo razliko v delovanju programa, ki ima ključ (modul ali zaščitemo disketo) ali je brez. 3. MOŽNOST UPORABE KRIPTOGRAFIJE Pri običajnih programskih paketih je problem, da mora zaščita delovati tudi proti nedovoljeni uporabi legalnega uporabnika. To pomeni, da uporabnik programski paket normalno uporablja, ne sme pa ga prekopirati v smislu nedovoljene nadaljnje kopije. Pri uporabi kriptografije mora biti ključ za uporabo programa skrit tudi pred legalnim upo­ rabnikom. To pomeni, da mora biti skrit na disketi ali dodatnem modulu. Rezultat je, da je tak način zaščite popolnoma enakovreden prej opisanim načinom. Nekoliko se spremeni način napada, ki mu cilj postane iskanje ključa za dešifriranje programske opreme. Druga možnost bi bila uporaba modula, v katerem bi bil vgrajen postopek in kjuč za dešifriranje programske opreme. Tudi ta možnost Je neuporabna, ker modul lahko služi za dešif­ riranje programske opreme, ki se dešifrirana lahko poljubno kopira. ZAKLJUČEK Zaščita programske opreme ne prenese resnejših napadov. Popolnoma pa zadostuje za preprečev­ anje kopiranja uporabnikom, ki niso vešči v sistemskem programiranju. Postavlja se tudi vprašanje smiselnosti kopiranja programov. Pri nedovoljeni kopiji je pravilno delovanje programske opreme vpraš­ ljivo. Hkrati nam odpade tudi vzdrževanje s strani prodajalca. To sta dva dejavnika, ki govorita v prid nakupu programske opreme, saj se resnejše delo ne more izvajati na programski opremi za katero ne odgovarja avtor. Na Zahodu so strogi zakoni, ki ščitijo avtorje pred krajo programske opreme, vendar Je kraj le preveč, da bi lahko zaupali samo za­ konu . Na nivoju osebnih računalnikov ni zanesljive zaščite programske opreme. Zaščita je odvisna le od iznajdljivosti avtorjev na eni strani in 'lopovov' na drugi strani. Seveda pa to ne pomeni, da lahko vsakdo v kratkem času prebije zaščito v programski opremi.