DRM w systemie operacyjnym CROOK-5: Różnice pomiędzy wersjami

Przejdź do nawigacji Przejdź do wyszukiwania
brak opisu edycji
Nie podano opisu zmian
 
(Nie pokazano 1 pośredniej wersji utworzonej przez tego samego użytkownika)
Linia 2: Linia 2:
Przy okazji [[Największa tajemnica CROOK-a|poszukiwań przyczyny nieprawidłowego działania]] niektórych narzędzi pod kontrolą systemu operacyjnego CROOK-5, odnaleziony został wbudowany w niego złożony mechanizm pozwalający ograniczać uruchamianie programów wyłącznie do maszyn, dla których autoryzowano daną ich kopię.
Przy okazji [[Największa tajemnica CROOK-a|poszukiwań przyczyny nieprawidłowego działania]] niektórych narzędzi pod kontrolą systemu operacyjnego CROOK-5, odnaleziony został wbudowany w niego złożony mechanizm pozwalający ograniczać uruchamianie programów wyłącznie do maszyn, dla których autoryzowano daną ich kopię.


Jak się okazało, historia odnalezionych zabezpieczeń sięga dalej, zarówno w czasie jak i przestrzeni, niż piąta wersja systemu operacyjnego z Politechniki Gdańskiej.
Jak się okazuje, historia odnalezionych zabezpieczeń sięga dalej, zarówno w czasie jak i przestrzeni, niż piąta wersja systemu operacyjnego z Politechniki Gdańskiej.


= Pochodzenie =
= Pochodzenie =


Wszystko zaczęło się w Instytucie Informatyki Uniwersytetu Warszawskiego. Pracujące tam MERY-400 działały pierwotnie pod kontrolą systemu operacyjnego SOM-3. Z czasem, kiedy rozwijane w Instytucie oprogramowanie dojrzało do stanu, w którym można je było oferować odpłatnie potencjalnym klientom, pojawił się problem: jak radzić sobie z nielegalnymi kopiami? Rozwiązaniem stała się modyfikacja SOM-3, implementująca stosowne „mechanizmy obronne”.
Wszystko zaczęło się w Instytucie Informatyki Uniwersytetu Warszawskiego. Pracujące tam MERY-400 działały pierwotnie pod kontrolą systemu operacyjnego SOM-3. Z czasem, kiedy rozwijane w Instytucie oprogramowanie dojrzało do stanu, w którym można je było oferować odpłatnie potencjalnym klientom, pojawił się problem: jak radzić sobie z nielegalnymi kopiami? Rozwiązaniem stała się modyfikacja SOM-3, implementująca mechanizmy uniemożliwiające poprawną pracę pirackich wersji chronionych programów.


Rosnąca popularność dojrzałego już wtedy i znacznie nowocześniejszego niż SOM-3 systemu CROOK spowodowała, że narzędzia powstałe w IIUW musiały w końcu zostać przeniesione i na tę platformę. Warunkiem koniecznym było jednak zachowanie istniejących już zabezpieczeń. I tak, po rozbudowaniu oryginalnego rozwiązania o nowe elementy oraz ustaleniu przez zespoły z UW i PG jego ostatecznego kształtu, CROOK wzbogacił się o mechanizm, którego złożoność wygląda imponująco nawet po 30 latach.
Rosnąca popularność dojrzałego już wtedy i znacznie nowocześniejszego niż SOM-3 systemu CROOK spowodowała, że narzędzia powstałe w IIUW musiały w końcu zostać przeniesione i na tę platformę. Warunkiem koniecznym było jednak zachowanie istniejących już zabezpieczeń. I tak, po rozbudowaniu oryginalnego rozwiązania o nowe elementy oraz ustaleniu przez zespoły z UW i PG jego ostatecznego kształtu, CROOK wzbogacił się o mechanizm, którego złożoność wygląda imponująco nawet po 30 latach.
Linia 31: Linia 31:
== Identyfikator systemu ==
== Identyfikator systemu ==


Pierwszym, kluczowym elementem mechanizmu i jednocześnie tym, co odróżnia wersję zabezpieczenia przygotowaną dla CROOK-a od pierwotnej, dla SOM-3, jest unikalny sprzętowy identyfikator systemu. Potocznie zwany był „numerem procesora” lub „numerem zegara”, w zależności od rodzaju implementacji. Obie jego wersje zrodziły się w Instytucie Okrętowym Politechniki Gdańskiej i tam też powstało pierwsze jego wcielenie. Służy do jednoznacznego zidentyfikowania maszyny, na której uruchamiany jest zabezpieczony program. W systemie operacyjnym przechowywany jest w zmiennej nazwanej w źródłach CROOK-a '''PROCNU'''.
Pierwszym, kluczowym elementem mechanizmu jest identyfikator systemu. W zmodyfikowanym systemie SOM-3 był on zapisany w ciele systemu operacyjnego i różnił się między kopiami dostarczanymi użytkownikom końcowym. Pozwalał więc rozróżnić kopie SOM-3, ale nie maszyny, na których system był uruchamiany. W CROOK-5 identyfikator jest natomiast sprzętowy, a więc związany z konkretnym egzemplarzem komputera. Istnieją dwie implementacje rozwiązania i w zależności od lokalizacji identyfikator potocznie nazywany był „numerem procesora” lub „numerem zegara”. Obie wersje zrodziły się w Instytucie Okrętowym Politechniki Gdańskiej i tam też powstał prototyp pierwszej z nich. W systemie operacyjnym CROOK-5 identyfikator dostępny jest w przestrzeni jądra pod zmienną nazwaną w źródłach '''PROCNU'''.


=== Numer zegara ===
=== Numer zegara ===


[[File:Timer_prom.jpg|thumb|Pamięci PROM na zegarze czasu rzeczywistego]]
[[File:Timer_prom.jpg|thumb|Pamięci PROM na zegarze czasu rzeczywistego]]
W pierwszej, nieco starszej wersji rozwiązania, identyfikator schowany był w [[Zegar czasu rzeczywistego Amepolu|zegarze czasu rzeczywistego]]. Urządzenie to, instalowane jako kolejna jednostka w kanale znakowym, dysponuje również pamięcią PROM, na której zapisany jest bootloader pozwalający „ściągnąć” system operacyjny z dysku do pamięci komputera (poprzez mechanizm [[Wczytywanie binarne|wczytywania binarnego]]). Tuż za znacznikiem końca kodu bootloadera zapisany jest identyfikator systemu, zwany wtedy (ze względu na swoją lokalizację) „numerem zegara”.
W nieco starszej wersji rozwiązania, identyfikator schowany jest w [[Zegar czasu rzeczywistego Amepolu|zegarze czasu rzeczywistego]]. Urządzenie to, instalowane jako kolejna jednostka w kanale znakowym, dysponuje również pamięcią PROM, na której zapisany jest bootloader pozwalający „ściągnąć” system operacyjny z dysku do pamięci komputera (poprzez mechanizm [[Wczytywanie binarne|wczytywania binarnego]]). Tuż za znacznikiem końca kodu bootloadera zapisany jest identyfikator systemu, zwany wtedy (ze względu na swoją lokalizację) „numerem zegara”.


Po uruchomieniu systemu CROOK-5 za pomocą tego bootloadera, sprzętowy licznik adresujący kolejne bajty w pamięci PROM zegara nie zmieniał swojej wartości. Dzięki temu, wysyłając do urządzenia kolejne rozkazy czytania, można kontynuować pobieranie danych. Identyfikator systemu zapisany jest na trzech kolejnych bajtach pamięci PROM. Ich cztery najmłodsze bity zawierają kolejne (od najstarszej) cyfry identyfikatora zapisane w kodzie BCD.
Po uruchomieniu systemu CROOK-5 za pomocą tego bootloadera, sprzętowy licznik adresujący kolejne bajty w pamięci PROM zegara nie zmienia swojej wartości. Dzięki temu, wysyłając do urządzenia kolejne rozkazy czytania, można kontynuować pobieranie danych. Identyfikator systemu zapisany jest na trzech kolejnych bajtach pamięci PROM. Ich cztery najmłodsze bity zawierają kolejne (od najstarszej) cyfry identyfikatora zapisane w kodzie BCD.


Pierwszy bajt:
Pierwszy bajt:
Linia 69: Linia 69:


[[File:Mega_eprom_id.jpg|thumb|EEPROM pamięci MEGA]]
[[File:Mega_eprom_id.jpg|thumb|EEPROM pamięci MEGA]]
Późniejsze, ostateczne rozwiązanie używa do przechowywania identyfikatora ostatniego słowa pamięci PAS (zrealizowanej na kościach EEPROM) w [[Pamięć MEGA|pamięci MEGA]] Amepolu. System operacyjny wczytuje go podczas startu:
Późniejsze, ostateczne rozwiązanie używa do przechowywania identyfikatora ostatniego słowa pamięci stałej (zrealizowanej na kościach EEPROM) w [[Pamięć MEGA|pamięci MEGA]] Amepolu. System operacyjny wczytuje go podczas startu:


<pre>
<pre>
Linia 117: Linia 117:
Pola oznaczone kolorem czerwonym nie są przez programistę wypełniane, w szczególności nie jest wypełniane pole '''SYSID'''.
Pola oznaczone kolorem czerwonym nie są przez programistę wypełniane, w szczególności nie jest wypełniane pole '''SYSID'''.


Lokalizacja adresów jest w zasadzie dowolna, jednak z założenia o niejawności powinny znajdować się one w odległych miejscach programu, tak, aby możliwie dobrze ukryć dane pod nimi zapisane przed wzrokiem intruza. Jedyną wymuszoną lokalizacją jest adres słowa zawierającego '''A1+C'''.
Lokalizacja adresów jest w zasadzie dowolna, jednak z założenia o niejawności powinny znajdować się one w odległych miejscach programu, tak, aby możliwie dobrze ukryć przed wzrokiem intruza dane pod nimi zapisane. Jedyną wymuszoną lokalizacją jest adres słowa zawierającego '''A1+C'''.


Struktura może być oczywiście implementowana w dowolnym języku programowania. Poniżej przykład użycia jej w programie przeznaczonym dla assemblera ASSM. Poszczególne fragmenty znajdują się w różnych miejscach pliku ze źródłem:
Struktura może być oczywiście implementowana w dowolnym języku programowania. Poniżej przykład użycia jej w programie przeznaczonym dla assemblera ASSM. Poszczególne fragmenty znajdują się w różnych miejscach pliku ze źródłem:
Linia 177: Linia 177:
* załaduj zawartość '''A2''' (=A3+C) i oblicz '''A3''',
* załaduj zawartość '''A2''' (=A3+C) i oblicz '''A3''',
* załaduj zawartość '''A2+1''' (=A1+C) i sprawdź poprawność '''A1''',
* załaduj zawartość '''A2+1''' (=A1+C) i sprawdź poprawność '''A1''',
* załaduj zawartość '''A3''' (=A2+C0 i sprawdź poprawność '''A2''',
* załaduj zawartość '''A3''' (=A2+C) i sprawdź poprawność '''A2''',
* załaduj zawartość '''A3+1''' (=SYSID) i zapisz tymczasowo w rejestrze,
* załaduj zawartość '''A3+1''' (=SYSID) i zapisz tymczasowo w rejestrze,
* załaduj zawartość '''A3+2''' (=S+C), oblicz '''S''', załaduj wartość znajdującą się pod tym adresem, dodaj do niej różnicę '''A2-A1''' i zapisz ponownie pod '''S'''.
* załaduj zawartość '''A3+2''' (=S+C), oblicz '''S''', załaduj wartość znajdującą się pod tym adresem, dodaj do niej różnicę '''A2-A1''' i zapisz ponownie pod '''S'''.
Linia 212: Linia 212:
Niezależnie od wyniku weryfikacji w polu '''SECRET_M''' programu zapisywana jest arytmetyczna negacja obliczonej różnicy identyfikatorów. Oznacza to, że program użytkowy może sprawdzić, czy został uruchomiony na „właściwej” maszynie, poprzez porównanie '''SECRET_M''' z zerem, a w przypadku niezgodności podjąć dodatkowe akcje. Przykładem jest edytor tekstów EXM, którego nielegalne kopie odmawiają zapisywania zbiorów.
Niezależnie od wyniku weryfikacji w polu '''SECRET_M''' programu zapisywana jest arytmetyczna negacja obliczonej różnicy identyfikatorów. Oznacza to, że program użytkowy może sprawdzić, czy został uruchomiony na „właściwej” maszynie, poprzez porównanie '''SECRET_M''' z zerem, a w przypadku niezgodności podjąć dodatkowe akcje. Przykładem jest edytor tekstów EXM, którego nielegalne kopie odmawiają zapisywania zbiorów.


== Działanie nielegalnej kopii programu ==
== Ograniczenie działania nielegalnej kopii programu ==


[[File:Destroyer_addr.png|frame|Obszary pamięci procesu atakowane przez zabezpieczenia w systemie CROOK-5]]
[[File:Destroyer_addr.png|frame|Obszary pamięci procesu atakowane przez zabezpieczenia w systemie CROOK-5]]
Linia 228: Linia 228:
* Prawdopodobieństwo, że wywołanie czytania ze strumienia zniszczy komórkę pamięci w przestrzeni procesu wynosiło: ''ilość zaalokowanych stron / 4096''. Czyli programy większe były bardziej narażone na skutki działania zabezpieczenia.
* Prawdopodobieństwo, że wywołanie czytania ze strumienia zniszczy komórkę pamięci w przestrzeni procesu wynosiło: ''ilość zaalokowanych stron / 4096''. Czyli programy większe były bardziej narażone na skutki działania zabezpieczenia.


Rysunek obok pokazuje w jakie obszary w przestrzeni procesu system operacyjny „trafia" losowymi adresami. Generator liczb pseudolosowych czerpał entropię z informacji o tym, w jakim momencie okresu pracy planisty systemu operacyjnego nastąpiło wywołanie systemowe czytania ze strumienia. Ocena jakości generatora nie ma sensu w warunkach emulacji, ponieważ parametry czasowe pracy takiego systemu odbiegają znacznie od prawdziwej maszyny.
Rysunek obok pokazuje w jakie obszary w przestrzeni procesu system operacyjny trafia losowymi adresami. Generator liczb pseudolosowych czerpał entropię z informacji o tym, w jakim momencie okresu pracy planisty systemu operacyjnego nastąpiło wywołanie systemowe czytania ze strumienia. Ocena jakości generatora nie ma sensu w warunkach emulacji, ponieważ parametry czasowe pracy takiego systemu odbiegają znacznie od prawdziwej maszyny.


Podsumowując: Nielegalne kopie programów uruchomione w systemie CROOK-5  są w pamięci powoli, sukcesywnie niszczone. Rezultaty takiego niszczenia są na tyle przypadkowe i różnorodne, że nieświadomy zabezpieczeń użytkownik będzie najprawdopodobniej podejrzewał niesprawność systemu komputerowego lub błąd w programie. Ale na podejrzeniach jego możliwości się kończą, bo do autorów „wadliwego” programu raczej się o pomoc nie zgłosi. Kopia programu na dysku pozostaje oczywiście nienaruszona.
Podsumowując: Nielegalne kopie programów uruchomione w systemie CROOK-5  są w pamięci powoli, sukcesywnie niszczone. Rezultaty takiego niszczenia są na tyle przypadkowe i różnorodne, że nieświadomy zabezpieczeń użytkownik będzie najprawdopodobniej podejrzewał niesprawność systemu komputerowego lub błąd w programie. Ale na podejrzeniach jego możliwości się kończą, bo do autorów „wadliwego” programu raczej się o pomoc nie zgłosi. Kopia programu na dysku pozostaje oczywiście nienaruszona.
Linia 234: Linia 234:
== Autoryzacja programów ==
== Autoryzacja programów ==


Umieszczenie stosownej struktury danych w programie jest tylko „przygotowaniem terenu”. Obserwacja zachowań systemu operacyjnego pokazuje, że pole '''SYSID''' musi jeszcze zostać w specyficzny sposób wypełnione. Służy do tego dodatkowe narzędzie: '''UZDAT'''.
Umieszczenie stosownej struktury danych w programie jest tylko przygotowaniem terenu. Obserwacja zachowań systemu operacyjnego pokazuje, że pole '''SYSID''' musi jeszcze zostać w specyficzny sposób wypełnione. Służy do tego dodatkowe narzędzie: '''UZDAT'''.


Wywołanie go bez parametrów pozwala sprawdzić, jaki jest numer procesora maszyny:
Wywołanie go bez parametrów pozwala sprawdzić, jaki jest numer procesora maszyny:
Linia 244: Linia 244:
</pre>
</pre>


Zachowanie to jest o tyle ciekawe, że identyfikator systemu nie jest informacją dostępną dla programu użytkowego wprost. Narzędzie używa sztuczki korzystającej z faktu, że system operacyjny w trakcie ładowania zabezpieczonego programu zapisuje pod '''SECRET_M''' różnicę między numerem systemu zapisanym w programie, a znanym sobie, uprzednio wymieszanym numerem procesora. '''UZDAT''' jest „zabezpieczonym” programem - zawiera strukturę danych go identyfikującą, ale w polu '''SYSID''' wpisane ma '''0'''. '''SECRET_M''' jest więc po uruchomieniu programu ustawione przez system operacyjny na '''SYSID''' wymieszane funkcją '''GEN()'''. Ponieważ funkcja ta jest odwracalna i programowi znane są wartości '''C''', '''A3''' i '''A2''', '''UZDAT''' może z '''SYSID''' obliczyć faktyczny numer procesora.
Zachowanie to jest o tyle ciekawe, że identyfikator systemu nie jest informacją dostępną dla programu użytkowego wprost. Narzędzie używa sztuczki korzystającej z faktu, że system operacyjny w trakcie ładowania zabezpieczonego programu zapisuje pod '''SECRET_M''' różnicę między numerem systemu zapisanym w programie, a znanym sobie, uprzednio wymieszanym numerem procesora. UZDAT jest „zabezpieczonym” programem - zawiera strukturę danych go identyfikującą, ale w polu '''SYSID''' wpisane ma '''0'''. '''SECRET_M''' jest więc po uruchomieniu programu ustawione przez system operacyjny na '''SYSID''' wymieszane funkcją '''GEN()'''. Ponieważ funkcja ta jest odwracalna i programowi znane są wartości '''C''', '''A3''' i '''A2''', '''UZDAT''' może z '''SYSID''' obliczyć faktyczny numer procesora.


Pozostaje jeszcze pytanie dlaczego CROOK-5 nie niszczy '''UZDAT''', skoro ten ma wpisany niepoprawny, zerowy identyfikator systemu? Autor narzędzia, znając oczywiście zachowanie CROOK-a, zabezpieczył się przed jego niszczycielskimi zapędami używając do czytania danych wyłącznie ekstrakodów transmisji blokowych, które nie wyzwalają procedury nadpisującej zawartość pamięci procesu.
Pozostaje jeszcze pytanie dlaczego CROOK-5 nie niszczy UZDAT, skoro ten ma wpisany niepoprawny, zerowy identyfikator systemu? Autor narzędzia, znając oczywiście zachowanie CROOK-a, zabezpieczył się przed jego niszczycielskimi zapędami używając do czytania danych wyłącznie ekstrakodów transmisji blokowych, które nie wyzwalają procedury nadpisującej zawartość pamięci procesu.


Podobne użycie odwrotności funkcji '''GEN()''' ma miejsce w kolejnym zastosowaniu narzędzia. Podając jako parametr nazwę zbioru z zabezpieczonym programem można sprawdzić, dla jakiej maszyny został on autoryzowany:
Podobne użycie odwrotności funkcji '''GEN()''' ma miejsce w kolejnym zastosowaniu narzędzia. Podając jako parametr nazwę zbioru z zabezpieczonym programem można sprawdzić, dla jakiej maszyny został on autoryzowany:
Linia 281: Linia 281:
== Identyfikator systemu ==
== Identyfikator systemu ==


Atak na identyfikator systemu wymaga najmniej zaangażowania, ale jest jednocześnie najmniej elastyczny. Zakładając, że komuś udałoby się uzyskać wiedzę o istnieniu i lokalizacji numeru procesora lub numeru zegara, mógł on przygotować „klon” innego komputera i z powodzeniem uruchamiać na nim oprogramowanie zakupione dla klonowanej maszyny. Choć mało elastyczne, rozwiązanie to nie jest pozbawione praktycznego zastosowania - dwóch lub więcej użytkowników systemu mogło „umówić” się i dzielić kosztami oprogramowania. Atak ten ma jedną silną cechę: nie wymaga absolutnie żadnej wiedzy na temat tego, jak mechanizm zabezpieczeń działa.
Atak na identyfikator systemu wymaga najmniej zaangażowania intelektualnego, ale jest jednocześnie najmniej elastyczny. Zakładając, że komuś udałoby się uzyskać wiedzę o istnieniu i lokalizacji numeru procesora lub numeru zegara, mógł on przygotować „klon” innego komputera i z powodzeniem uruchamiać na nim oprogramowanie zakupione dla klonowanej maszyny. Choć mało elastyczne, rozwiązanie to nie jest pozbawione praktycznego zastosowania - dwóch lub więcej użytkowników systemu mogło „umówić” się i dzielić kosztami oprogramowania. Atak ten ma jedną silną zaletę: nie wymaga absolutnie żadnej wiedzy na temat tego, jak mechanizm zabezpieczeń naprawdę działa.


W praktyce wymaga on podjęcia różnych kroków dla różnych lokalizacji identyfikatora. W przypadku numeru procesora zapisanego w pamięci MEGA należy ponownie zaprogramować kości pamięci EEPROM, co jest procedurą stosunkowo prostą w realizacji. W przypadku zegara czasu rzeczywistego operacja jest o tyle utrudniona, że kości PROM są jednokrotnie programowalne. Trzeba więc zakupić nowe kości pamięci, a do ich zaprogramowania użyć narzędzia potencjalnie trudniej dostępnego niż tego dla pamięci EEPROM.
W praktyce wymaga on podjęcia różnych kroków dla różnych lokalizacji identyfikatora. W przypadku numeru procesora zapisanego w pamięci MEGA należy ponownie zaprogramować kości pamięci EEPROM, co jest procedurą stosunkowo prostą w realizacji. W przypadku zegara czasu rzeczywistego operacja jest o tyle utrudniona, że kości PROM są jednokrotnie programowalne. Trzeba więc zakupić nowe kości pamięci, a do ich zaprogramowania użyć narzędzia potencjalnie trudniej dostępnego niż tego dla pamięci EEPROM.
Linia 287: Linia 287:
== System operacyjny ==
== System operacyjny ==


Ataki na system operacyjny wymagają największej wiedzy, są najtrudniejsze w realizacji, ale dają najlepsze rezultaty. Raz złamany CROOK-5 zawsze już uruchomi dowolny program, przeznaczony dla dowolnego innego komputera. Można rozpatrzyć dwa różne podejścia. W obu przypadkach atakujący musi przede wszystkim zdeassemblować i przeanalizować jądro systemu. O ile deassemblacja nie stanowi problemu, a analiza, choć żmudna, ma ten sam poziom skomplikowania co i dziś, o tyle śledzenie działania systemu wymaga podejścia do niego „z zewnątrz”. A praktycznie jedyną technologią, która pozwalała na to w latach '80 było użycie pulpitu technicznego MERY-400. To czyni z zadania iście syzyfową pracę.
Ataki na system operacyjny wymagają największej wiedzy, są najtrudniejsze w realizacji, ale dają najlepsze rezultaty. Raz złamany CROOK-5 zawsze już uruchomi dowolny program, przeznaczony dla dowolnego innego komputera. Można rozpatrzyć dwa różne podejścia. W obu przypadkach atakujący musi przede wszystkim zdeasemblować i przeanalizować jądro systemu. O ile deasemblacja nie stanowi problemu, a analiza, choć żmudna, ma ten sam poziom skomplikowania co i dziś, o tyle śledzenie działania systemu wymaga podejścia do niego „z zewnątrz”. A jedyną w praktyce dostępną technologią, która pozwalała na to w latach '80 było użycie pulpitu technicznego MERY-400. To czyni z zadania iście syzyfową pracę.


Dodatkowo, po odpowiednim „poprawieniu” systemu operacyjnego czeka na intruza jeszcze jedna niespodzianka. CROOK-5, zarówno podczas startu, jak i cyklicznie, w trakcie działania, sprawdza swoją sumę kontrolną. Ostatnim krokiem musi więc być odnalezienie gdzie i jak liczona jest wspomniana suma i albo jej poprawienie, albo zablokowanie tego mechanizmu.
Dodatkowo, po odpowiednim „poprawieniu” systemu operacyjnego czeka na intruza jeszcze jedna niespodzianka. CROOK-5, zarówno podczas startu, jak i cyklicznie, w trakcie działania, sprawdza swoją sumę kontrolną. A z niewłaściwą sumą kontrolną odmówi uruchomienia się. Ostatnim krokiem musi więc być odnalezienie gdzie i jak liczona jest wspomniana suma i albo jej poprawienie, albo zablokowanie również tego mechanizmu.


Atak można przypuścić z dwóch stron:
Atak można przypuścić z dwóch stron:
Linia 298: Linia 298:
== Program użytkowy ==
== Program użytkowy ==


Atak na program użytkowy jest o tyle prostszy od ataku na jądro CROOK-a, że śledzenie wykonywania procesu w systemie można przeprowadzić za pomocą debuggera '''DEBU''' dostarczanego wraz z CROOK-iem, co jest znacznie efektywniejsze, niż używanie pulpitu technicznego. Jedyny problem polega na tym, że bez wiedzy z zewnątrz trudno jest odnaleźć sprytnie schowaną między linijkami programu strukturę danych, która w programie używana jest (w najlepszym wypadku) jednorazowo, a i to tylko w jednym jej punkcie.
Atak na program użytkowy jest o tyle prostszy od ataku na jądro CROOK-a, że śledzenie wykonywania procesu w systemie można przeprowadzić za pomocą debuggera DEBU dostarczanego wraz z CROOK-iem, co jest znacznie efektywniejsze, niż używanie pulpitu technicznego. Problem polega na tym, że bez żadnej podpowiedzi trudno jest odnaleźć sprytnie schowaną między linijkami programu strukturę danych, która w najlepszym wypadku używana jest jednokrotnie, a i to tylko w jednym jej punkcie.


Ostatecznym rezultatem ataku jest natomiast „złamany” program, który nie tylko jest już na zawsze gotowy do użycia na danej maszynie, ale zadziała również na innych komputerach. Po niewątpliwie czasochłonnym rozgryzaniu zabezpieczeń po stronie jednego programu użytkowego dostaje się też przepis, który bez wysiłku pozwala odblokowywać inne programy. Wystarczy tylko:
Ostatecznym rezultatem ataku jest natomiast „złamany” program, który nie tylko jest już na zawsze gotowy do użycia na danej maszynie, ale zadziała również na innych komputerach. Po niewątpliwie czasochłonnym rozgryzaniu zabezpieczeń jednego programu użytkowego dostaje się też przepis, który bez wysiłku pozwala odblokowywać kolejne programy. Wystarczy bowiem tylko:


* nadpisać słowo '''IC0-1''' dowolną, różną od znajdującej się tam, wartością,
* nadpisać słowo '''IC0-1''' dowolną, różną od znajdującej się tam, wartością,

Menu nawigacyjne