Professional Documents
Culture Documents
PRZYKADOWY ROZDZIA
SPIS TRECI
Hack Proofing
KATALOG KSIEK
KATALOG ONLINE
ZAMW DRUKOWANY KATALOG
TWJ KOSZYK
DODAJ DO KOSZYKA
CENNIK I INFORMACJE
ZAMW INFORMACJE
O NOWOCIACH
ZAMW CENNIK
CZYTELNIA
FRAGMENTY KSIEK ONLINE
Wydawnictwo Helion
ul. Chopina 6
44-100 Gliwice
tel. (32)230-98-63
e-mail: helion@helion.pl
Spis treci
Podzikowania.................................................................................................... 11
Wspautorzy...................................................................................................... 13
Sowo wstpne, wersja 1.5 ................................................................................. 17
Sowo wstpne, wersja 1.0 ................................................................................. 21
Rozdzia 1. Wamywacz kt to taki?............................................................. 23
Wprowadzenie...................................................................................................................23
Co rozumiemy pod pojciem wamania? ......................................................................23
Jaki jest cel wamywania?...........................................................................................24
Czego naley si spodziewa po zawartoci tej ksiki?..................................................25
Klimat i uwarunkowania prawne towarzyszce dziaalnoci hakerw.............................27
Podsumowanie ..................................................................................................................29
Najczciej zadawane pytania (FAQ) ...............................................................................29
Spis treci
5
Metoda penego przegldu ..............................................................................................168
Peny przegld podstawy .....................................................................................169
Wykorzystanie metody penego przegldu do odgadywania hase ..........................170
Niewaciwe zastosowanie poprawnych algorytmw.....................................................173
Niepoprawna wymiana kluczy..................................................................................174
Generowanie skrtw z fragmentw informacji.......................................................175
Korzystanie z krtkich hase do generowania dugich kluczy..................................176
Nieprawidowe przechowywanie kluczy tajnych i prywatnych ...............................176
Amatorskie prby kryptograficzne..................................................................................178
Klasyfikacja szyfrogramu .........................................................................................178
Szyfry monoalfabetyczne..........................................................................................180
Inne sposoby ukrywania informacji..........................................................................181
Podsumowanie ................................................................................................................186
Zagadnienia w skrcie.....................................................................................................187
Najczciej zadawane pytania (FAQ) .............................................................................188
Spis treci
7
Carnivore...................................................................................................................339
Dodatkowe zasoby ....................................................................................................341
Zaawansowane techniki monitorowania .........................................................................341
Ataki typu man-in-the-middle (MITM) ....................................................................341
amanie.....................................................................................................................342
Sztuczki zwizane z przecznikami.........................................................................342
Zmiany wyboru tras ..................................................................................................343
Interfejsy API systemw operacyjnych...........................................................................344
Linux .........................................................................................................................344
BSD...........................................................................................................................346
libpcap.......................................................................................................................346
Windows ...................................................................................................................348
Ochronne rodki zaradcze ...............................................................................................349
Zapewnianie szyfrowania .........................................................................................349
Secure Sockets Layers (SSL)....................................................................................350
PGP and S/MIME .....................................................................................................351
Przeczanie ..............................................................................................................351
Stosowanie technik wykrywania.....................................................................................351
Wykrywanie lokalne .................................................................................................351
Wykrywanie sieciowe...............................................................................................352
Podsumowanie ................................................................................................................354
Zagadnienia w skrcie.....................................................................................................355
Najczciej zadawane pytania (FAQ) .............................................................................357
Spis treci
9
Analiza protokow...................................................................................................538
Zakcenia elektromagnetyczne i wyadowania elektrostatyczne ............................540
Analiza wewntrznej budowy produktu: ataki na obwody elektryczne..........................541
Inynieria wsteczna urzdzenia ................................................................................541
Podstawowe techniki: typowe formy ataku ..............................................................542
Techniki zaawansowane: usuwanie warstwy ywicy epoksydowej
oraz rozmywanie obudowy ukadu scalonego........................................................546
Kryptoanaliza i metody zaciemniania.......................................................................548
Potrzebne narzdzia.........................................................................................................550
Zestaw pocztkowy...................................................................................................550
Zestaw zaawansowany..............................................................................................551
Przykad: wamanie do nonika danych uwierzytelniajcych iButton............................553
Eksperymentowanie z urzdzeniem..........................................................................553
Inynieria wsteczna odpowiedzi losowej ..............................................................554
Przykad: wamanie do akceleratora E-commerce NetStructure 7110 Accelerator........556
Otwarcie urzdzenia..................................................................................................557
Pobranie systemu plikw ..........................................................................................557
Inynieria wsteczna generatora hase........................................................................560
Podsumowanie ................................................................................................................561
Zagadnienia w skrcie.....................................................................................................562
Najczciej zadawane pytania (FAQ) .............................................................................564
10
Skorowidz......................................................................................................... 661
Rozdzia 9.
Cigi formatujce
Wprowadzenie
Na pocztku lata 2000 roku wiat bezpieczestwa komputerowego zosta brutalnie
powiadomiony o istnieniu nowego typu luk w oprogramowaniu. Ta podklasa luk, znana
jako bdy cigw formatujcych, zostaa przedstawiona szerokiej publicznoci 23 czerwca 2000 roku, wraz z przesaniem na list dystrybucyjn Bugtraq exploita demona usugi FTP o nazwie WU-FTPD (Washington University FTP Daemon). Atak wykorzystujcy opublikowany exploit umoliwia zdalnemu wamywaczowi uzyskanie dostpu do
systemu w trybie administracyjnym na wzach obsugujcych demona WU-FTPD i to
z pominiciem jakiegokolwiek uwierzytelniania, o ile konfiguracja serwera dopuszczaa
anonimowe transmisje FTP (co jest w przypadku wikszoci systemw opcj domyln). Atak by grony, poniewa serwery WU-FTPD byy powszechnie stosowanymi
serwerami FTP w Internecie.
Ale gwn przyczyn szoku wiata komputerowego nie bya bynajmniej wiadomo,
e w Internecie dziaay dziesitki tysicy wzw podatnych na ataki umoliwiajce
uzyskanie dostpu zdalnego i przejcie cakowitej kontroli nad systemem. Prawdziwym
powodem bya natura samej luki i jej powszechno w oprogramowaniu komputerowym dowolnego przeznaczenia. wiat ujrza wic zupenie now metod wykorzystywania bdw programistycznych uwaanych wczeniej za mao znaczce. Zademonstrowano, e moliwe s ataki wykorzystujce bdy cigw formatujcych.
Luka zwizana z cigiem formatujcym pojawia si wwczas, gdy programista przekazuje dane pobrane z zewntrz do funkcji jako parametr definiujcy posta
cigu formatujcego funkcji (lub jego fragmentu). W przypadku WU-FTPD parametr polecenia SITE EXEC protokou FTP by przekazywany bezporednio do funkcji .
Trudno byo o lepszy zarys koncepcji ataku: atakujcy mg natychmiast i automatycznie pozyska uprawnienia administracyjne na podatnych wzach.
288
Zanim exploit ujrza wiato dzienne, bdy zwizane z cigami formatujcymi uwaane
byy za co najwyej z aczkolwiek nieszkodliw praktyk programistyczn nieeleganckie uproszczenie wynikajce z popiechu sowem nic, co mogoby zagraa
bezpieczestwu. Do tej pory bd tego rodzaju mg w najgorszym razie spowodowa
289
zaamanie demona usugi, rwnoznaczne z atakiem odmowy obsugi. wiatek ludzi zwizanych z zabezpieczeniami dosta nauczk. Bdy te przyczyniy si do zaatakowania niezliczonej liczby serwerw sieciowych.
Jak ju wspomniano, luki zwizane z cigami formatujcymi zostay ujawnione po raz
pierwszy w czerwcu 2000 roku. Exploit WU-FTPD zosta napisany przez osobnika znanego pod pseudonimem tf8 i by datowany 15 padziernika 1999. Przy zaoeniu, e dziki temu exploitowi niektrzy hakerzy uwiadomili sobie rol niepoprawnego wykorzystania cigw formatujcych, mieli oni ponad 8 miesicy na opracowanie i napisanie kodu
exploitw wymierzonych w inne oprogramowanie, niekoniecznie w serwery WU-FTPD.
To zreszt tylko ostrone szacunki, oparte na zaoeniu, e opublikowany exploit demona WU-FTPD by pierwszym tego rodzaju atakiem. Nie ma jednak na to adnych
dowodw; komentarze, ktrymi opatrzony by exploit nie wskazyway bynajmniej, aby
autor odkry now metod atakw.
Krtko po ujawnieniu saboci wynikajcych z bdnego stosowania cigw formatujcych pojawio si kilka exploitw atakujcych innego typu aplikacje. W czasie pisania tej ksiki opublikowano ju dziesitki scenariuszy atakw wykorzystujcych cigi formatujce. Naley do tej liczby doda nieznan liczb atakw nieujawnionych.
Wedug oficjalnej klasyfikacji bdy cigw formatujcych nie zasuguj na wydzielenie
dla nich osobnej kategorii i plasowane s wrd pozostaych bdw programistycznych,
takich jak bdy przepenienia bufora czy hazard wykonania. Bdy cigw formatujcych mona zakwalifikowa jako bdy walidacji danych wejciowych; zasadniczo s
one skutkiem nadmiernej wiary programistw w poprawno danych pochodzcych spoza
aplikacji i przekazywania tych danych jako parametrw definiujcych cig formatujcy funkcji operujcej na cigach znakowych.
W tym rozdziale Czytelnik zostanie wprowadzony w problematyk bdw cigw
formatujcych, zapozna si z ich przyczynami i pozna sposoby ich wykorzystania
przez wamywaczy. W rozdziale zaprezentowane zostan konkretne luki tego rodzaju
wystpujce w rzeczywistych systemach; Czytelnik zapozna si te z procesem przygotowywania i przeprowadzania ataku wykorzystujcego cig formatujcy na
wze zdalny.
290
291
Poniewa funkcja nie wie ile parametrw otrzyma, s one odczytywane ze stosu procesu w miar postpu przetwarzania cigu formatujcego (czyli po napotkaniu kolejnego specyfikatora formatu), przy czym rozmiar pobieranej ze stosu wartoci uzaleniony jest od okrelanego specyfikatorem typu danych. W poprzednim przykadzie
w cigu formatujcym osadzony zosta pojedynczy element symbolizujcy zmienn typu cakowitego. Funkcja spodziewa si, e drugim przekazanym do funkcji parametrem bdzie zmienna korespondujca z elementem . W komputerach opartych na
architekturze Intel 0x86 (ale nie tylko) parametry wywoania funkcji wstawiane s na
stos podczas tworzenia ramki stosu dla wywoywanej funkcji. Kiedy funkcja odwouje
si do parametrw wywoania, odwouje si do danych umieszczonych na stosie poniej ramki stosu.
W poprzednim akapicie pojawi si termin poniej; ma on opisywa lokalizacj danych, ktre zostay umieszczone na stosie przed umieszczeniem na nim danych,
o ktrych powiedzielibymy, e znajduj si powyej. W procesorach Intel 0x86
stos ronie w d. Dlatego w tej i podobnych architekturach adres szczytu stosu
zmniejsza si w miar jego rozbudowy. W takich architekturach dane lokalizowane
jako umieszczone poniej innych danych bd miay wysze od nich adresy.
Fakt, e numerycznie wysze adresy pamici mog znajdowa si w niszych partiach stosu powoduje czste nieporozumienia. Naley zapamita, e pozycja na
stosie opisywana jako wysza od innej pozycji oznacza, e dane, o ktrych mowa
znajduj si bliej szczytu stosu, co nie przeszkadza im mie niszych adresw.
W prezentowanym przykadzie do funkcji przekazany zosta parametr korespondujcy z okrelonym w cigu formatujcym elementem parametr bdcy
liczb cakowit. Znakowa dziesitna reprezentacja tej liczby (10) zostaa w cigu wynikowym wstawiona w miejsce tego elementu.
Konstruujc cig wynikowy funkcja pobierze z odpowiedniego obszaru stosu
warto typu cakowitego i potraktuje j jako zmienn korespondujc z elementem
zdefiniowanym w cigu formatujcym. Nastpnie funkcja dokona konwersji
binarnej wartoci do postaci cigu znakowego, ktrego format okrelany jest postaci
specyfikatora formatu; efekt konwersji zostanie wstawiony do sformatowanego cigu
wyjciowego. Jak za chwil si okae, powysze kroki podejmowane s niezalenie od
tego, czy programista rzeczywicie przekaza do funkcji drugi parametr wywoania. Jeeli
wywoanie nie zawierao parametrw odpowiadajcych elementom cigu formatujcego, jako parametry potraktowane zostan dane funkcji wywoujcej funkcj ,
poniewa znajduj si one w odpowiednich obszarach stosu.
292
Wrmy do naszego przykadu: zamy, e w procesie rozwoju aplikacji podjto decyzj, e na ekranie wywietlany bdzie jedynie statyczny cig znakowy, ale zapomniano usun z cigu formatujcego symbol specyfikatora formatu. Takie wywoanie funkcji wygldaoby nastpujco:
&'()*
"+, '&
Kiedy program zainicjuje wywoanie tej funkcji, nie bdzie ona wiedzie, e lista
parametrw wywoania nie zawieraa zmiennej odpowiadajcej elementowi . Podczas
konstrukcji cigu funkcja odczyta liczb cakowit z obszaru stosu, w ktrym
znajdowaaby si odpowiednia zmienna (gdyby programista j przekaza) pobierze
4 bajty lece poniej ramki stosu. Przy zaoeniu, e meneder pamici wirtualnej dopuci wykonanie takiego odwoania, funkcja zostanie wykonana poprawnie, a przypadkowe 4 bajty znajdujce si w odpowiednim obszarze pamici zostan zinterpretowane i wywietlone jako liczba cakowita.
Efekt ten jest pokazany na poniszym wydruku:
!"#
$%
293
W powyszym przykadzie zamiast cigu formatujcego do funkcji przekazywany jest od razu drugi parametr (czsto jest to parametr przekazany w wierszu
polece). Gdy teraz uytkownik jako parametr wywoania programu poda cig odpowiadajcy specyfikatorowi formatu, zostanie on jako taki potraktowany przez funkcj
:
!"#
$%
-./.01231
Jeeli zmienna
zawiera dane pobierane z zewntrz (np. identyfikator uytkownika, ktry spowodowa nieudan prb logowania do systemu), powysza sytuacja moe
zosta w prosty sposb zamieniona w powan luk.
294
295
Jeeli dane pobierane przez uytkownika s osadzane w cigu przekazywanym pniej jako cig formatujcy funkcji
, rozmiar cigu wynikowego moe zosta
zmieniony przez zastosowanie specyfikatorw wypeniajcych. Przykadowo, jeeli
wamywacz ma moliwo wczenia do cigu formatujcego dla funkcji
specyfikatora , cig wynikowy skonstruowany przez t funkcj bdzie o okoo
100 bajtw duszy od zakadanego przez programist. Za pomoc wypeniajcych specyfikatorw formatu mona konstruowa cigi na tyle dugie, e ich skopiowanie do
bufora spowoduje jego przepenienie. Mona w ten sposb omin ograniczenia dugoci danych wejciowych nakadane przez programist i sprowokowa wykonanie
w imieniu procesu-ofiary dowolnego kodu (patrz rozdzia 8.).
Ten sposb wykorzystania cigw formatujcych nie bdzie omawiany w niniejszym
rozdziale. Cho angauje on specyfikatory formatu do nadpisania pewnych obszarw
pamici, specyfikatory te powoduj jedynie wyduenie cigu, ktrego kopiowanie do
bufora docelowego daje zwyke przepenienie bufora. Ten rozdzia jest natomiast powicony atakom przy uyciu wycznie specyfikatorw formatu, bez odwoywania si
pniej do innych technik wamaniowych wykorzystujcych bdy programistyczne,
takich jak ataki przepenienia bufora. Opisana powyej sytuacja moe natomiast zosta
wykorzystana do przeprowadzenia czystego ataku cigu formatujcego, ktrego rezultatem bdzie zapis do wybranego obszaru pamici.
Odmowa obsugi
Najprostszym atakiem wykorzystujcym cig formatujcy jest atak polegajcy na unieruchomieniu atakowanego procesu przez sprowokowanie bdnego odwoania do pamici, czyli typowy atak odmowy obsugi. Spowodowanie bdu wykonania programu za
porednictwem cigu formatujcego jest rzecz stosunkowo nieskomplikowan.
Ot niektre specyfikatory formatu wymagaj przekazania do funkcji jako wartoci
zmiennych korespondujcych poprawnych adresw pamici. Jednym z takich specyfikatorw jest , ktry zostanie przedyskutowany i wykorzystany w dalszej czci rozdziau. Innym tego rodzaju specyfikatorem jest specyfikator , wymagajcy przekazania wskanika do cigu bajtowego zakoczonego bajtem zerowym. Jeeli wamywacz
podstawi zoliwie cig formatujcy zawierajcy jeden z tych specyfikatorw a do funkcji
nie zostan przekazane istniejce adresy pamici, proces zostanie zatrzymany w wyniku
prby odwoania si do pamici wskazywanej przez przypadkowe wartoci znajdujce si na stosie. Moe to spowodowa odmow obsugi, przy czym atak tego rodzaju
nie wymaga angaowania adnych zaawansowanych rodkw.
W samej rzeczy, ju wczeniej jeszcze zanim og zda sobie spraw z powagi zagroenia wiadomo byo o problemach powodowanych podawaniem specyficznych
cigw formatujcych. Byo na przykad powszechnie wiadomo, e przekazanie cigu
jako parametru jednego z polece klienta IRC BitchX powoduje zaamanie tego programu. Jednak, wedug informacji, ktre posiadam, a do opublikowania exploita
demona WU-FTPD nikt nie zdawa sobie sprawy, e taki bd mona ukierunkowa
i wykorzysta do wasnych celw.
Niewiele wicej mona napisa o zaamywaniu procesw za porednictwem spreparowanych cigw formatujcych. Istniej za to duo ciekawsze i bardziej przydatne metody wykorzystania tych cigw do wamywania si do systemw komputerowych.
296
Zapis do pamici
W treci rozdziau ju kilkakrotnie pojawia si wzmianka o specyfikatorze . Zadaniem tego specyfikatora jest oznaczanie dugoci konstruowanego cigu w czasie dziaania programu. Zmienn korespondujc z tym specyfikatorem jest adres. Kiedy funkcja
montujca cig napotyka w cigu formatujcym specyfikator , pod adresem przekazanym jako parametr korespondujcy z tym specyfikatorem zapisywana jest liczba znakw skadajcych si na dotychczasow posta cigu wynikowego.
Obecno takiego specyfikatora ma powany wpyw na bezpieczestwo, umoliwia on
bowiem modyfikacje pamici programu. Ta cecha specyfikatora jest kluczowa dla
powodzenia atakw wykorzystujcych cigi formatujce i umoliwia wykonanie na komputerze-ofierze dowolnego kodu.
297
298
299
na stosie przez atakujcego. Zakadajc, e dane pobierane od uytkownika przekazywane dalej jako cig formatujcy nie s obcinane, atakujcy moe sprowokowa odczyt
przez funkcj znacznych obszarw stosu, a dotrze ona do wartoci zgodnych
z jego zamierzeniami lub przez niego tam umieszczonych. Wtedy w cigu umieszczany
jest element , powodujcy zapis pewnej liczby pod podsunitym adresem.
Adresy osadzane w samym cigu formatujcym nie mog zawiera bajtw zerowych,
s one bowiem zwykymi cigami znakowymi i pierwszy bajt zerowy sygnalizuje koniec takiego cigu. Nie oznacza to, e w atakach tego rodzaju nie mog by w ogle
stosowane adresy zawierajce zerowe bajty musz by one jedynie umieszczone na stosie poza cigiem formatujcym, w innych zmiennych lokalnych. Tylko w ten
sposb atakujcy ma moliwo wykorzystania w ataku z uyciem cigu formatujcego adresw z bajtami zerowymi.
Konstruowanie wartoci
Atakujcy moe te manipulowa wartoci, ktra ma by zapisana pod docelowym adresem pamici. Aby zwikszy liczb znakw, z ktrych skada si wynikowy cig konstruowany przez , mona stosowa specyfikatory wypeniajce:
&&;
)
<
W powyszym przykadzie element wstawiony do cigu formatujcego to specyfikator formatu z okreleniem wypenienia. Wypenienie to sygnalizuje funkcji ,
e reprezentacja liczby cakowitej w cigu wynikowym ma zajmowa 10 znakw.
!"#
$%
)
Dziesitna reprezentacja liczby 10 nie wymaga oczywicie a dziesiciu znakw, dlatego reszta wypenienia to znaki spacji. Ta waciwo funkcji moe zosta
wykorzystana przez atakujcego do regulowania wartoci zapisywanej przez specyfikator bez potrzeby konstruowania bardzo dugich cigw formatujcych. Wartoci
zapisywane w pamici procesu s zwykle niewielkie i mog by z powodzeniem regulowane wanie specyfikatorami z wypenieniem.
300
Stosujc wielokrotne zapisy za porednictwem elementw atakujcy mog wykorzysta modszy bajt zapisywanej wartoci i z kilku takich bajtw skonstruowa wiksze
sowo. W taki sposb moliwa jest konstrukcja wartoci caego sowa maszynowego,
takiego jak adres, przy uyciu stosunkowo niewielkich liczb zapisywanych w wyniki
przetwarzania specyfikatora . Atakujcy musi wtedy podsun adres kadego zapisu przesunity wzgldem poprzedniego o jeden bajt.
Wykorzystujc cztery elementy i podsuwajc 4 adresy, atakujcy konstruuje docelow warto z najmodszych bitw zapisywanych wartoci (patrz rysunek 9.1).
Rysunek 9.1.
Adres skonstruowany
przy uyciu czterech
osobnych zapisw
301
Co nadpisywa
Dysponujc moliwoci konstruowania dowolnej wartoci w niemal dowolnym miejscu pamici, musimy zada sobie pytanie co (jaki adres) powinno zosta nadpisane?
Majc do dyspozycji niemal kady adres, haker dysponuje wieloma moliwociami.
Moe on na przykad nadpisa adres powrotny funkcji skadowany na stosie wtedy
taki atak ma efekt podobny do ataku przepeniajcego bufor. Nadpisanie adresu powrotnego funkcji moe bowiem doprowadzi do wykonania odsunitego przez wamywacza kodu. Jednak w przeciwiestwie do atakw przepeniajcych bufor, moliwoci
wamywacza korzystajcego z cigw formatujcych nie ograniczaj si do nadpisywania
adresw powrotnych.
302
Nie wszystkie pliki binarne podlegajce atakom zapisywane s w formacie ELF. Wamywaczom zostaj wtedy zwyczajne wskaniki funkcji, bdce zreszt atwym celem.
Wskaniki funkcji s zmiennymi tworzonymi przez programist; ich obecno w programie warunkuje powodzenie ataku. Funkcja musi zosta wywoana za porednictwem
wskanika tylko wtedy moe zosta wykonany podsunity przez atakujcego kod.
303
Wieci z podziemia
304
305
polecenia.
2. Funkcja
przekazuje polecenie klienta do funkcji
, interpretujcej i kontrolujcej poprawno parametrw
polecenia.
3. Funkcja
wykrywa bd i przekazuje komunikat o bdzie
oraz cig polecenia do funkcji
. Cig polecenia przekazywany
Wida wyranie, e zdalny klient moe zoliwie spreparowa dane, ktre zostan przekazane jako cig formatujcy do funkcji . Cig zawierajcy te dane przekazywany jest do serwera jako parametr dyrektywy . Nawizujc poczenie z usug
i przesyajc szkodliwy cig formatujcy, atakujcy moe przeforsowa zapis wasnych
danych do pamici procesu.
Testowanie wykorzystujce
przypadkowe cigi formatujce
Po zlokalizowaniu w kodzie rdowym potencjalnych luk zwizanych z cigami formatujcymi naleaoby podj prb ich wykorzystania i pokaza, e jest ono moliwe w wyniku podawania spreparowanych cigw formatujcych i obserwacj reakcji
serwera.
306
Jeeli program zawiera potencjalne bdy cigw formatujcych, mona wykry ich
obecno poprzez sprowokowanie pewnych zachowa programu, ktre bd wskazywa na obecno takich luk. Jeeli podatny program wywietla posta wynikow konstruowanych cigw, ich istnienie jest oczywiste. Jeeli natomiast podatny program nie
udostpnia sformatowanego cigu, jego obecno moe by sygnalizowana reakcjami
programu na niektre specyfikatory formatujce.
Jeeli po przekazaniu na wejcie programu cigu proces zaamuje si, jest prawdopodobne, e zaamanie spowodowane zostao prb zapisu wartoci liczbowej pod
nieprawidowym adresem odczytanym ze stosu. Na tej podstawie mona identyfikowa
podatne programy nawet jeeli nie wywietlaj efektw konstrukcji cigu wystarczy przekazywa do nich pewne specyfikatory formatu. Jeeli proces zaamuje si, albo
jeeli nie wypisuje niczego i sprawia wraenie zawieszonego, mona zaryzykowa twierdzenie, e jest podatny na ataki wykorzystujce cig formatujcy.
Wrmy do przykadu: serwer zwraca klientowi sformatowany, wynikowy cig jako
jeden z elementw odpowiedzi. Znacznie upraszcza to prac wamywacza szukajcego
sposobu na przeniknicie do serwera. Poniszy wydruk zawiera przykadowy komunikat
serwera rwhoisd, ktrego tre wskazuje na istnienie w nim bdu cigu formatujcego:
!"#
$%
=0/1
(= J-;3)/)
*C(F
I
J-;3;.;
&'
()
/0I
"7= 7)+4-./.0/3A/4"
W powyszym przykadzie nawizanie poczenia z usug i przesanie do niej specyfikatora formatu wewntrz parametru podejrzanego o wystpowanie w roli cigu formatujcego spowodowao doczenie do odpowiedzi serwera cigu 1073743563
w miejscu, gdzie w przekazanym cigu znajdowa si specyfikator . Wywietlona
liczba ujemna jest po prostu dziesitn interpretacj 4 bajtw pamici stosu znajdujcych si przypadkiem tam, gdzie funkcja spodziewaa si obecnoci parametru korespondujcego ze specyfikatorem . Jest to jawne potwierdzenie obecnoci w kodzie serwera bdu cigu formatujcego.
Po zidentyfikowaniu luki na podstawie zarwno analizy kodu rdowego, jak i odpowiedzi serwera, trzeba si zastanowi nad moliwoci jej wykorzystania. Ta konkretna
luka nadaje si do wykorzystania przez zdalnego klienta za porednictwem sieci. Atak
nie wymaga przy tym przejcia procedury uwierzytelniajcej i prawdopodobnie moe
doprowadzi do przejcia przez uytkownika zdalnego kontroli nad komputerem obsugujcym serwer.
W przypadkach takich jak ten (w ktrych program wywietla sformatowany cig wynikowy) atakujcy ma moliwo odczytania zawartoci pamici stosu i zdobycia w ten
sposb dodatkowych informacji przydatnych w kocowym ataku. W prezentowany poniej sposb atakujcy moe odczytywa cae sowa pamici:
!"#
$%
=0/1
(= J-;3)/)
*C(F
I
J-;3;.;
&*+*
/0I
"7= 7)@*2/3
&*+**+*
307
Narzdzia i puapki
308
W tym przykadzie klient odczyta jedno, dwa, trzy a nastpnie cztery sowa pamici
stosu. Wydruk wynikowy zosta sformatowany tak, e nadaje si do automatycznej analizy przez program atakujcy. Prawidowo skonstruowany program atakujcy moe wykorzysta odpowiedzi serwera do rekonstrukcji penej zawartoci stosu procesu serwera.
Program taki mgby odczytywa zawarto pamici stosu a do momentu napotkania
na stosie samego cigu formatujcego i na tej podstawie obliczy podan lokalizacj specyfikatora w cigu formatujcym.
(= J-;3)/)
*C(F
I
J-;3;.;
&*+**+**+**+**+**+**+**+**+**+**+**+**+**+**+*
*+**+**+**+**+**+**+**+**+**+*,,,,,
/0I
"7= 7)@*2/3@M.M@@M./@
*M0@M01@*2/3@*2/3@*2@M0A/@*2/3
@
*2/@**A0@*21@M0@*2/@*2/@0@**/@
M00@*2/@3@AA./1"@//13*+*
W tym przykadzie klient zmusi funkcj do przeszukania duego obszaru stosu tak, aby atakujcy mg okreli pooenie na stosie cigu formatujcego. Wytuszczone znaki to pierwsze znaki przekazanego do serwera cigu formatujcego,
zawierajcego przetworzone przez funkcj specyfikatory formatu. Jeeli atakujcy osadzi na pocztku cigu formatujcego adres, moe, wstawiajc w miejsce specyfikatorw element , wymusi zapis pod adresem pamici przekazanym w cigu
formatujcym.
309
Przekazywany przez serwer obraz stosu atwo poddaje si analizie, poniewa jest formatowany zgodnie ze specyfikatorem formatujcym . Specyfikator formatuje kade sowo maszynowe jako 8-znakowy cig szesnastkowej reprezentacji tego
sowa poprzedzony cigiem . Kada taka reprezentacja jednego sowa pamici stosu
moe by przekazana do jednej ze standardowych funkcji jzyka C, takich jak ",
zwracajcej odpowiadajc temu cigowi zmienn typu cakowitego.
Podstawowym celem ataku jest wykonanie wasnego kodu. Aby to osign, wamywacz
musi nadpisa te obszary pamici, ktrych zawarto bdzie pniej wykorzystywana
jako adres kolejnych instrukcji programu. Jednym z takich obszarw jest adres powrotny funkcji. Czytelnik ju wie, e adres ten jest gwnym celem atakw przepeniajcych
bufor przepenienie bufora alokowanego na stosie moe spowodowa modyfikacj
przechowywanej rwnie na stosie wartoci adresu powrotnego funkcji. W prezentowanym ataku nadpisany zostanie take wanie adres powrotny funkcji to najwygodniejsze rozwizanie.
Atak ma wic spowodowa nadpisanie adresu powrotnego umieszczanego na stosie
w momencie wywoywania funkcji
. W binarnej wersji aplikacji rwhoisd
wykorzystywanej do konstrukcji tego przykadu adres powrotny tej funkcji znajduje si
w czasie jej wykonywania pod adresem 0xbffff8c8. Adres ten bdzie naszym celem.
Kiedy program atakujcy zdoa ju zlokalizowa na stosie cig formatujcy, powinien
skonstruowa nowy cig formatujcy, zawierajcy w odpowiednich miejscach specyfikatory , tak aby sprowokowa zapis do odpowiednich komrek pamici. Mona w tym
celu wykorzysta specyfikatory takie jak , ktre bd pochania wybrane obszary stosu. Program atakujcy konstruuje cig automatycznie, opierajc si na efektach dziaania funkcji !"
.
310
311
312
)
(=*4&&
4(=97E6D9&&
+ ,+,
(
&&(P
,"(
(=
"
!$N<
N
*
313
314
315
316
Podsumowanie
Bdy cigw formatujcych s jednymi z nowszych narzdzi hakerskiego warsztatu.
Techniki wamaniowe polegajce na wykorzystywaniu bdw programistycznych stay
si w cigu ostatnich kilku lat bardzo wyrafinowane. Jednym z powodw takiego stanu
rzeczy jest to, e po prostu wiksza liczba hakerw, a wic wicej par oczu analizuje
i wyszukuje saboci w kodach rdowych wszelkich programw. Dziki temu atwiej
dzi zdoby informacje dotyczce istoty wszelkiego rodzaju luk oraz sposobu dziaania
specyficznych funkcji systemowych.
Generalnie wamywacze stosunkowo niedawno spostrzegli moliwoci tkwice w prostych i powszechnych bdach programistycznych. Funkcje z rodziny oraz
zwizane z ich niepoprawnym stosowaniem bdy istniay od lat ale do niedawna
nikt nie zorientowa si, e mog one zosta wykorzystane nawet do uruchomienia na
zdalnej maszynie dowolnego kodu. Wraz z atakami cigw formatujcych pojawiy si
inne nowe techniki, takie jak nadpisywanie struktur funkcji (nadpisywanie
wskanikw przy wywoaniu
317
Zagadnienia w skrcie
Istota bdw cigw formatujcych
Bdy cigw formatujcych wynikaj z niewiadomoci programistw,
318
319