You are on page 1of 42

IDZ DO

PRZYKADOWY ROZDZIA
SPIS TRECI

Hack Proofing

KATALOG KSIEK
KATALOG ONLINE
ZAMW DRUKOWANY KATALOG

TWJ KOSZYK
DODAJ DO KOSZYKA

Autor: praca zbiorowa


Tumaczenie: Bartomiej Garbacz, Przemysaw Szeremiota
ISBN: 83-7197-890-1
Tytu oryginau: Hack Proofing Your Network,
Second Edition
Format: B5, stron: 696

Chcesz powstrzyma hakerw? Zosta jednym z nich.


Aby zabezpieczy swoj sie, sprbuj si do niej wama.

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

Zaktualizowane i rozszerzone wydanie bestsellerowej ksiki, napisanej przez


specjalistw od zabezpiecze i wama do systemw komputerowych. Jej autorzy
udowadniaj, e nie mona myle o zabezpieczeniach, jeli nie pozna si najpierw
zagroe.
Podstawy bezpieczestwa sieciowego. Zapoznasz si ze wskazwkami
dotyczcymi znajdowania luk w zabezpieczeniach istniejcych i projektowanych
systemw.
Siedem podstawowych kategorii atakw. Odmowa obsugi, wyciek informacji,
dostp do systemu plikw, dezinformacja, dostp do plikw specjalnych/baz
danych, zdalne uruchomienie kodu i rozszerzenie uprawnie.
Rnicowanie prewencyjne. Dowiesz si, w jaki sposb porwnywa pliki,
biblioteki i programy oraz jakie informacje mona w ten sposb uzyska.
Typowe algorytmy szyfrujce. Twoje zaszyfrowane dane i twoje zaszyfrowane
hasa czy s rzeczywicie bezpieczne?
Saby punkt: acuchy formatujce. Jedna z najnowszych technik wama:
wamania z uyciem acuchw formatujcych.
Bezpieczne tunele. Naucz si tworzy bezpieczne tunele suce do przesyania
danych i rozpoznawa uytkownika przy uyciu OpenSSH.
Zabezpiecz swj sprzt. Hardware take moe stanowi saby punkt. Poznaj
techniki wama sprztowych.
Ryan Russell chce Ci przekaza wane przesanie: To, o czym nie wiesz, stanowi dla
Ciebie zagroenie'. W swojej ksice przekazuje praktyczn wiedz o technikach
wama do systemw, technikach, ktre mog by wykorzystane take przeciwko
Tobie Kevin Mitnick.

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

Rozdzia 2. Reguy bezpieczestwa .................................................................... 31


Wprowadzenie...................................................................................................................31
Znaczenie znajomoci zasad bezpieczestwa ...................................................................32
Zabezpieczenia po stronie klienta s nieskuteczne ...........................................................33
Strony komunikacji nie mog bezpiecznie wymienia kluczy kryptograficznych
bez dostpu do pewnej wsplnej informacji...................................................................34
Nie mona cakowicie zabezpieczy si przed szkodliwym kodem .................................37
Kady szkodliwy kod moe zosta przeksztacony w celu uniemoliwienia
jego detekcji na podstawie sygnatury .............................................................................39
Zapory sieciowe nie stanowi penego zabezpieczenia przed atakami.............................41
Inynieria spoeczna....................................................................................................43
Ataki na serwery publiczne.........................................................................................43
Bezporedni atak na zapor sieciow .........................................................................44
Luki po stronie klienta ................................................................................................45
Kady system wykrywania wama (IDS) moe zosta oszukany ...................................45
Tajne algorytmy kryptograficzne nie s bezpieczne .........................................................47
Szyfrowanie bez klucza nie jest szyfrowaniem jest kodowaniem ...............................49
Hasa przechowywane po stronie klienta nie s bezpieczne, chyba e chroni je inne haso ....50
System aspirujcy do miana bezpiecznego musi by poddany
niezalenemu audytowi bezpieczestwa ........................................................................53
Zabezpieczanie przez ukrywanie jest nieskuteczne ..........................................................55
Podsumowanie ..................................................................................................................56
Zagadnienia w skrcie.......................................................................................................57
Najczciej zadawane pytania (FAQ) ...............................................................................59

Hack Proofing Your Network. Edycja polska

Rozdzia 3. Klasy atakw................................................................................... 61


Wprowadzenie...................................................................................................................61
Klasyfikacja atakw ..........................................................................................................61
Odmowa obsugi .........................................................................................................62
Wyciek informacji ......................................................................................................70
Dostp do systemu plikw ..........................................................................................75
Dezinformacja.............................................................................................................77
Dostp do plikw specjalnych i baz danych ...............................................................81
Zdalne uruchomienie kodu .........................................................................................84
Rozszerzanie uprawnie .............................................................................................86
Metody testowania systemw pod ktem luk w zabezpieczeniach...................................88
Dowd istnienia luki ...................................................................................................88
Standardowe techniki analizy .....................................................................................92
Podsumowanie ................................................................................................................100
Zagadnienia w skrcie.....................................................................................................102
Najczciej zadawane pytania (FAQ) .............................................................................103

Rozdzia 4. Metodologia .................................................................................. 105


Wprowadzenie.................................................................................................................105
Metodologie analizy luk w zabezpieczeniach.................................................................106
Analiza kodu rdowego .........................................................................................106
Analiza kodu binarnego ............................................................................................109
Znaczenie przegldu kodu rdowego...........................................................................110
Wyszukiwanie niebezpiecznych funkcji...................................................................110
Techniki inynierii wstecznej..........................................................................................116
Deasemblery, dekompilatory, debuggery .................................................................121
Czarne skrzynki...............................................................................................................125
Ukady elektroniczne ................................................................................................126
Podsumowanie ................................................................................................................127
Zagadnienia w skrcie.....................................................................................................128
Najczciej zadawane pytania (FAQ) .............................................................................129

Rozdzia 5. Rnicowanie ................................................................................ 131


Wprowadzenie.................................................................................................................131
Na czym polega rnicowanie?.......................................................................................131
Po co porwnywa? ..................................................................................................134
Zagldanie w kod rdowy......................................................................................135
Narzdzia automatyzujce porwnywanie plikw..........................................................140
Narzdzia porwnujce pliki ....................................................................................141
Edytory szesnastkowe...............................................................................................143
Narzdzia monitorujce system plikw ....................................................................146
W poszukiwaniu innych narzdzi .............................................................................151
Utrudnienia......................................................................................................................152
Sumy kontrolne i skrty............................................................................................153
Kompresja i szyfrowanie ..........................................................................................154
Podsumowanie ................................................................................................................155
Zagadnienia w skrcie.....................................................................................................156
Najczciej zadawane pytania (FAQ) .............................................................................157

Rozdzia 6. Kryptografia................................................................................... 159


Wprowadzenie.................................................................................................................159
Podstawy kryptografii .....................................................................................................160
Historia......................................................................................................................160
Rodzaje kluczy szyfrujcych ....................................................................................160
Standardowe algorytmy kryptograficzne ........................................................................162
Algorytmy symetryczne............................................................................................162
Algorytmy asymetryczne ..........................................................................................166

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

Rozdzia 7. Nieoczekiwane dane wejciowe...................................................... 191


Wprowadzenie.................................................................................................................191
Dlaczego nieoczekiwane dane wejciowe stanowi zagroenie .....................................192
Identyfikacja sytuacji zagroonych nieoczekiwanymi danymi.......................................193
Aplikacje i narzdzia lokalne....................................................................................193
HTTP i HTML ..........................................................................................................193
Nieoczekiwane dane w zapytaniach SQL.................................................................196
Uwierzytelnianie aplikacji ........................................................................................199
Kamufla...................................................................................................................203
Techniki wyszukiwania i eliminacji luk..........................................................................205
Testowanie metod czarnej skrzynki ........................................................................205
Korzystanie ze rde................................................................................................209
Filtracja odkaanie danych ..................................................................................210
Oznaczanie znakw specjalnych nie zawsze wystarcza ...........................................210
Perl ............................................................................................................................211
Cold Fusion (Cold Fusion Markup Language) .........................................................212
ASP ...........................................................................................................................212
PHP ...........................................................................................................................213
Ochrona zapyta SQL...............................................................................................213
Usuwa po cichu czy informowa o bdnych danych? ...........................................214
Funkcja obsugi niepoprawnych danych...................................................................215
Zastpowanie etonami.............................................................................................215
Korzystanie z zabezpiecze oferowanych przez jzyki programowania ........................216
Perl ............................................................................................................................216
PHP ...........................................................................................................................217
ColdFusion (Cold Fusion Markup Language) ..........................................................218
ASP ...........................................................................................................................218
MySQL .....................................................................................................................219
Narzdzia zwizane z nieoczekiwanymi danymi wejciowymi .....................................219
Web Sleuth................................................................................................................219
CGIAudit...................................................................................................................219
RATS ........................................................................................................................220
Flawfinder .................................................................................................................220
Retina ........................................................................................................................220
Hailstorm...................................................................................................................220
Pudding .....................................................................................................................220
Podsumowanie ................................................................................................................221
Zagadnienia w skrcie.....................................................................................................221
Najczciej zadawane pytania (FAQ) .............................................................................223

Hack Proofing Your Network. Edycja polska

Rozdzia 8. Przepenienie bufora....................................................................... 225


Wprowadzenie.................................................................................................................225
Dziaanie stosu ................................................................................................................225
Obraz stosu................................................................................................................229
Osobliwoci stosu .....................................................................................................229
Ramka stosu ....................................................................................................................230
Wprowadzenie do ramki stosu..................................................................................230
Przykadowy program: przekazywanie parametrw do funkcji ...............................231
Ramki stosu i konwencje wywoania funkcji ...........................................................235
Podstawowe techniki przepenienia bufora.....................................................................236
Przykadowy program: niekontrolowane przepenienie bufora................................237
Pierwsze samodzielne przepenienie bufora ...................................................................241
Utworzenie programu podatnego na atak wykorzystujcy przepenienie bufora .....241
Atak...........................................................................................................................244
Przepenienie bufora techniki zaawansowane............................................................271
Filtrowanie danych wejciowych..............................................................................272
Nadpisanie wskanika funkcji przechowywanego na stosie ....................................274
Przepenienia sterty...................................................................................................275
Konstruowanie adunku zagadnienia zaawansowane ................................................278
Korzysta z posiadanego...........................................................................................278
Podsumowanie ................................................................................................................281
Zagadnienia w skrcie.....................................................................................................282
Najczciej zadawane pytania (FAQ) .............................................................................284

Rozdzia 9. Cigi formatujce .......................................................................... 287


Wprowadzenie.................................................................................................................287
Istota bdw cigw formatujcych...............................................................................289
Gdzie i dlaczego wystpuj bdy cigw formatujcych? ......................................292
Jak wyeliminowa te bdy? .....................................................................................294
W jaki sposb cigi formatujce s wykorzystywane przez wamywaczy?.............294
Przebieg atakw z uyciem cigw formatujcych ..................................................298
Co nadpisywa ..........................................................................................................301
Analiza podatnego programu ..........................................................................................302
Testowanie wykorzystujce przypadkowe cigi formatujce.........................................305
Atak z uyciem cigu formatujcego ..............................................................................308
Podsumowanie ................................................................................................................316
Zagadnienia w skrcie.....................................................................................................317
Najczciej zadawane pytania (FAQ) .............................................................................318

Rozdzia 10. Monitorowanie komunikacji (sniffing) ............................................. 321


Wprowadzenie.................................................................................................................321
Istota monitorowania.......................................................................................................322
Sposb dziaania .......................................................................................................322
Przedmiot monitorowania ...............................................................................................323
Zdobywanie danych uwierzytelniajcych.................................................................323
Przechwytywanie innych danych ruchu w sieci .......................................................328
Popularne programy suce do monitorowania .............................................................329
Ethereal .....................................................................................................................329
Network Associates Sniffer Pro................................................................................330
NT Network Monitor ................................................................................................332
WildPackets ..............................................................................................................333
TCPDump .................................................................................................................334
dsniff .........................................................................................................................334
Ettercap .....................................................................................................................337
Esniff.c ......................................................................................................................337
Sniffit ........................................................................................................................337

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

Rozdzia 11. Przejmowanie sesji ........................................................................ 359


Wprowadzenie.................................................................................................................359
Istota przejmowania sesji ................................................................................................359
Przejmowanie sesji TCP ...........................................................................................361
Przejmowanie sesji TCP z blokowaniem pakietw ..................................................362
Przejmowanie datagramw UDP..............................................................................365
Przegld dostpnych narzdzi .........................................................................................366
Juggernaut .................................................................................................................367
Hunt...........................................................................................................................370
Ettercap .....................................................................................................................373
SMBRelay.................................................................................................................378
Programy nadzoru zakce......................................................................................378
Ataki typu MITM w przypadku komunikacji szyfrowanej.............................................381
Ataki typu man-in-the-middle...................................................................................382
Dsniff ........................................................................................................................383
Inne formy przejmowania .........................................................................................383
Podsumowanie ................................................................................................................385
Zagadnienia w skrcie.....................................................................................................385
Najczciej zadawane pytania.........................................................................................387

Rozdzia 12. Podrabianie (spoofing): ataki na wiarygodn tosamo.................. 389


Wprowadzenie.................................................................................................................389
Istota podrabiania ............................................................................................................389
Podrabianie jako faszowanie tosamoci.................................................................390
Podrabianie jako atak aktywny .................................................................................390
Moliwo podrabiania na poziomie wszystkich warstw komunikacji ....................390
Podrabianie jako atak zawsze zamierzony................................................................391
Rnice pomidzy podrabianiem a zdrad ...............................................................393
Podrabianie jako nie zawsze szkodliwe dziaanie ....................................................393
Podrabianie jako nienowa idea .................................................................................394
Rys teoretyczny ...............................................................................................................394
Znaczenie tosamoci ...............................................................................................395

Hack Proofing Your Network. Edycja polska


Ewolucja zaufania ...........................................................................................................396
Asymetryczne podpisy wrd ludzi ..........................................................................396
Okrelanie tosamoci w sieciach komputerowych ........................................................398
Powrt do nadawcy...................................................................................................399
Na pocztku bya transmisja .................................................................................400
Wezwania do przedstawienia uprawnie ........................................................................400
Metodologie konfiguracji: tworzenie indeksu zaufanych uprawnie.......................413
Podrabianie w przypadku maszyn stacjonarnych............................................................415
Plaga aplikacji wykonujcych automatyczne aktualizacje .......................................415
Wpyw atakw podrabiania.............................................................................................417
Wyrafinowane metody podrabiania i sabota ekonomiczny ....................................418
Brudna robota planowanie systemw podrabiania .................................................428
Tworzenie routera szkieletowego w obszarze uytkownikw..................................428
Faszowanie cznoci poprzez asymetryczne zapory sieciowe ...............................447
Podsumowanie ................................................................................................................454
Zagadnienia w skrcie.....................................................................................................456
Najczciej zadawane pytania.........................................................................................459

Rozdzia 13. Tunelowanie .................................................................................. 463


Wprowadzenie.................................................................................................................463
Strategiczne ograniczenia projektw tuneli ....................................................................465
Poufno: dokd zmierzaj moje dane?....................................................................467
Moliwo routowania: ktrdy mog przej dane?...............................................467
Moliwo wdroenia: jak trudno wszystko zbudowa i uruchomi?......................468
Elastyczno: w jakim celu mona system wykorzysta? ........................................469
Jako: jak kopotliwe bdzie utrzymywanie systemu w ruchu?..............................471
Projektowanie caociowych systemw tunelowania .....................................................472
Drenie tuneli za pomoc SSH............................................................................473
Uwierzytelnianie .............................................................................................................477
Dostp podstawowy: uwierzytelnianie przez haso ..................................................477
Dostp przezroczysty: uwierzytelnianie za pomoc klucza prywatnego..................478
Przekazywanie polece: bezporednie wykonywanie skryptw i uywanie potokw.......483
Przekazywanie portw: dostp do zasobw odlegych sieci...........................................488
Lokalne przekazywanie portw ................................................................................488
Dynamiczne przekazywanie portw .........................................................................490
Zdalne przekazywanie portw ..................................................................................498
Przechodzenie przez oporn sie.....................................................................................500
Dostp do serwerw poredniczcych przez ProxyCommands................................500
Zamienianie swojego ruchu ......................................................................................503
Ograniczone uwierzytelnianie wobec ufortyfikowanej stacji bazowej ....................504
Eksportowanie dostpu SSHD..................................................................................506
Wzajemne czenie maszyn umieszczonych za zaporami sieciowymi.....................508
Dalsze dziaania...............................................................................................................510
Standardowy transfer plikw przez SSH ..................................................................510
Przyrostowy transfer plikw przez SSH ...................................................................512
Wypalanie pyt CD przez SSH .................................................................................514
Przesyanie danych audio przez TCP i SSH .............................................................516
Podsumowanie ................................................................................................................520
Zagadnienia w skrcie.....................................................................................................522
Najczciej zadawane pytania.........................................................................................527

Rozdzia 14. Wamania sprztowe ...................................................................... 529


Wprowadzenie.................................................................................................................529
Istota wama sprztowych .............................................................................................530
Otwieranie urzdzenia: ataki na obudow i mechaniczne ..............................................530
Rodzaje mechanizmw zabezpieczajcych ..............................................................532
Interfejsy zewntrzne ................................................................................................537

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

Rozdzia 15. Wirusy, robaki i konie trojaskie .................................................... 567


Wprowadzenie.................................................................................................................567
Rnice pomidzy wirusami, robakami oraz komi trojaskimi....................................567
Wirusy.......................................................................................................................568
Robaki .......................................................................................................................569
Makrowirusy .............................................................................................................569
Konie trojaskie ........................................................................................................570
arty..........................................................................................................................571
Anatomia wirusa .............................................................................................................571
Propagacja.................................................................................................................572
Tre zasadnicza .......................................................................................................573
Inne wybiegi..............................................................................................................574
Kwestie wieloplatformowoci.........................................................................................575
Java ...........................................................................................................................575
Makrowirusy .............................................................................................................576
Rekompilacja ............................................................................................................576
Shockwave Flash ......................................................................................................576
Fakty, ktrymi naley si martwi ..................................................................................576
Robak Morris ............................................................................................................577
ADMw0rm................................................................................................................577
Melissa oraz I Love You...........................................................................................577
Robak Sadmind.........................................................................................................582
Robaki Code Red ......................................................................................................583
Robak Nimda ............................................................................................................584
Tworzenie wasnego zoliwego kodu ............................................................................586
Nowe metody dostarczania .......................................................................................586
Metody szybszej propagacji......................................................................................587
Inne przemylenia na temat tworzenia nowych odmian zoliwego kodu................588
Sposoby zabezpiecze przed zoliwym oprogramowaniem ..........................................589
Oprogramowanie antywirusowe ...............................................................................589
Uaktualnienia i programy korygujce.......................................................................590
Bezpieczestwo przegldarki internetowej...............................................................591
Badania antywirusowe ..............................................................................................591

10

Hack Proofing Your Network. Edycja polska


Podsumowanie ................................................................................................................592
Zagadnienia w skrcie.....................................................................................................592
Najczciej zadawane pytania (FAQ) .............................................................................594

Rozdzia 16. Pokonywanie systemw wykrywania wama .................................. 595


Wprowadzenie.................................................................................................................595
Istota dziaania systemw wykrywania wama opartych na sygnaturach .....................595
Okrelanie wynikw faszywie pozytywnych i negatywnych ..................................598
Przecianie alarmami ..............................................................................................598
Wykorzystanie metod pokonywania na poziomie pakietw...........................................599
Opcje nagwka IP....................................................................................................601
Fragmentacja pakietu IP ...........................................................................................601
Nagwek TCP..........................................................................................................603
Synchronizacja TCP..................................................................................................604
Wykorzystanie pakietw Fragrouter oraz Congestant..............................................606
rodki zaradcze.........................................................................................................608
Wykorzystanie metod pokonywania w protokoach warstwy aplikacji..........................609
Bezpieczestwo jako refleksja..................................................................................609
Unikanie dopasowania ..............................................................................................610
Techniki ataku z poziomu sieci WWW ....................................................................611
rodki zaradcze.........................................................................................................612
Wykorzystanie metod pokonywania poprzez morfingu kodu.........................................612
Podsumowanie ................................................................................................................615
Zagadnienia w skrcie.....................................................................................................616
Najczciej zadawane pytania (FAQ) .............................................................................617

Rozdzia 17. Zautomatyzowane badanie systemw zabezpiecze


oraz narzdzia ataku ...................................................................... 619
Wprowadzenie.................................................................................................................619
Podstawowe wiadomoci na temat narzdzi zautomatyzowanych .................................620
Narzdzia komercyjne ..............................................................................................623
Narzdzia darmowe ..................................................................................................628
Wykorzystanie narzdzi zautomatyzowanych do celw testowania penetracyjnego .....631
Testowanie za pomoc narzdzi komercyjnych .......................................................632
Testowanie za pomoc narzdzi darmowych ...........................................................635
Kiedy narzdzia nie wystarcz........................................................................................638
Nowe oblicze testowania luk systemw zabezpiecze.............................................639
Podsumowanie ................................................................................................................640
Zagadnienia w skrcie.....................................................................................................641
Najczciej zadawane pytania (FAQ) .............................................................................642

Rozdzia 18. Raportowanie o problemach zwizanych z bezpieczestwem............ 643


Wprowadzenie.................................................................................................................643
Zasadno raportowania o problemach zwizanych z bezpieczestwem .......................644
Ujawnienie zupene...................................................................................................645
Okrelanie terminu przesania oraz adresata raportu o problemie ..................................648
Okrelanie adresata raportw o problemach.............................................................648
Okrelanie szczegowoci przekazywanych informacji................................................651
Publikowanie kodu wykorzystujcego luk..............................................................652
Problemy ...................................................................................................................653
Podsumowanie ................................................................................................................655
Zagadnienia w skrcie.....................................................................................................656
Najczciej zadawane pytania (FAQ) .............................................................................657

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

Hack Proofing Your Network. Edycja polska


Wieci z podziemia

Bdy cigw formatujcych kontra bdy przepenienia bufora


Z pozoru oba rodzaje bdw s bardzo podobne. Nietrudno wic zaklasyfikowa je
do tej samej kategorii luk w zabezpieczeniach. Cho w obu przypadkach efektem ataku moe by nadpisanie wskanika funkcji i zmiana przepywu sterowania programu,
problem cigw formatujcych rni si od problemu przepenienia bufora w sposb
zasadniczy.
W przypadku luki wynikajcej z bdu przepenienia bufora bd w oprogramowaniu
polega na tym, e wraliwa funkcja, taka jak kopiowanie blokw pamici, przyjmuje
rozmiar zewntrznego, niekontrolowanego przez aplikacj rda danych jako ograniczenie operacji kopiowania. Przykadowo, wikszo bdw przepenienia bufora
wynika z zastosowania funkcji bibliotecznej jzyka C kopiujcej cigi znakowe. W jzyku C cigi znakowe reprezentowane s przez zmiennej dugoci tablice bajtw zakoczone bajtem zerowym. Funkcja  (od ang. string copy) wchodzca w skad
biblioteki standardowej jzyka C kopiuje kolejne bajty cigu rdowego do wskazanego bufora docelowego; operacja kopiowania zatrzymywana jest w momencie napotkania w cigu rdowym bajtu zerowego. Jeeli cig ten jest podawany z zewntrz
i ma dugo wiksz od rozmiaru bufora docelowego, funkcja  nadpisze
rwnie obszar pamici ssiadujcy z buforem docelowym a do skopiowania
ostatniego bajtu cigu rdowego. Atak wykorzystujcy przepenienie bufora opiera
si na moliwoci nadpisania przez atakujcego danych krytycznych dla dalszego
dziaania programu (przechowywanych w ssiedztwie bufora docelowego) wasnymi
danymi, przekazanymi do operacji kopiowania.
W przypadku bdw cigw formatujcych problem polega na tym, e pobierane z zewntrz dane wczane s do parametru definiujcego cig formatujcy funkcji. Naley
to traktowa jako bd walidacji danych wejciowych, nie majcy nic wsplnego z bdami polegajcymi na przekroczeniu rozmiaru bufora docelowego operacji kopiowania.
Hakerzy wykorzystuj bdy cigw formatujcych w celu zapisania okrelonych wartoci w konkretnych obszarach pamici. W przypadku atakw przepeniajcych bufor
atakujcy nie moe dowolnie wybra obszaru docelowego dla danych wejciowych.
Innym rdem nieporozumie jest to, e bdy cigw formatujcych i bdy przepenienia bufora mog wystpowa rwnoczenie, kiedy w programie wykorzystywana jest
funkcja 
 . Aby zrozumie rnic pomidzy tymi bdami, wane jest uwiadomienie sobie sposobu dziaania funkcji 
 . Funkcja ta umoliwia programicie utworzenie sformatowanego (na podobiestwo formatu cigw funkcji 
 )
cigu znakowego i umieszczenie go w buforze. Bd przepenienia bufora wystpuje
wwczas, gdy utworzony cig jest duszy od docelowego bufora. Jest to zwykle rezultatem zastosowania w cigu specyfikatora , ktry powoduje umieszczenie w danym
miejscu konstruowanego cigu innego cigu znakowego, zakoczonego bajtem zerowym. Jeeli zmienna wprowadzana w miejsce specyfikatora  jest pobierana z zewntrz
i nie jest obcinana do pewnego rozmiaru, moe spowodowa rozcignicie tworzonego
cigu tak, e nie bdzie si on mieci w buforze docelowym. Luki spowodowane
niewaciwym zastosowaniem funkcji 
  wynikaj z czego innego z interpretowania danych pobieranych spoza aplikacji jako fragmentu cigu formatujcego.

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

Rozdzia 9. Cigi formatujce

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.

Istota bdw cigw formatujcych


Zrozumienie istoty bdw zwizanych z cigami formatujcymi wie si z funkcj
 i sposobem jej dziaania.
Programici systemw komputerowych bardzo czsto staj w obliczu koniecznoci
dynamicznego tworzenia cigw znakowych. Cigi te mog zawiera znakow reprezentacj zmiennych rnego typu; liczba i typ wszystkich zmiennych reprezentowanych cigiem znakowym niekoniecznie musz by znane programicie na etapie
tworzenia kodu rdowego. Powszechna konieczno dynamicznej i elastycznej konstrukcji cigw znakowych i konieczno stosowania procedur formatujcych w naturalny

290

Hack Proofing Your Network. Edycja polska

sposb zaowocowaa opracowaniem rodziny funkcji . Funkcje typu 


konstruuj i umieszczaj na wyjciu cigi znakowe formatowane dynamicznie, w fazie
wykonania programu. Funkcje te wchodz w skad biblioteki standardowej jzyka C.
Podobne funkcje implementowane s rwnie w innych jzykach (np. w jzyku Perl).
Funkcje z rodziny  pozwalaj programicie na tworzenie cigw znakowych
na podstawie cigu formatujcego i zmiennej liczby parametrw. Cig formatujcy to
jakby szkielet przyszego cigu, definiujcy jego podstawow struktur oraz rozmieszczenie elementw leksykalnych; na podstawie tego cigu i wartoci parametrw funkcja
 konstruuje cig wynikowy. Elementy leksykalne cigu formatujcego okrelane s rwnie mianem specyfikatorw formatujcych. Oba pojcia bd stosowane
w dalszej czci rozdziau.
Narzdzia i puapki

Funkcje rodziny printf()


Oto lista standardowego zestawu funkcji z rodziny 
  zdefiniowanego w ramach
biblioteki standardowej jzyka C. Kada z tych funkcji (niewaciwie stosowana) moe
sta si ofiar ataku wykorzystujcego bd cigu formatujcego.
 
  funkcja ta umoliwia konstrukcj sformatowanego cigu znakowego

i jego zapis do standardowego strumienia wyjciowego programu.


 
  funkcja ta umoliwia konstrukcj sformatowanego cigu znakowego

i jego zapis do wskazanego strumienia plikowego (strumienia FILE w rozumieniu


biblioteki libc).
 
  funkcja ta umoliwia konstrukcj sformatowanego cigu znakowego

i jego zapis do bufora utworzonego w pamici programu. Niepoprawne stosowanie


tej funkcji prowadzi czsto do bdw przepenienia bufora.
 

  funkcja ta umoliwia konstrukcj sformatowanego cigu znakowego

i zapis okrelonej jego czci do bufora utworzonego w pamici programu.


W kontekcie bdw przepenienia bufora funkcj t mona traktowa jako
zabezpieczony odpowiednik funkcji 
 .
Biblioteka standardowa C zawiera ponadto funkcje 
 , 
 , 
 
oraz 

 . Funkcje te speniaj te same zadania co ich wyej wymienione odpowiedniki, rnice si od nich tym, e przyjmuj na wejcie wskanik do listy parametrw (nie s one przekazywane przez stos).

Zasada dziaania funkcji  moe zosta zilustrowana prostym przykadem:










    


W powyszym przykadowym kodzie programista wywouje funkcj  z dwoma


parametrami: cigiem formatujcym i zmienn, ktrej znakowa reprezentacja ma zosta wstawiona do cigu wynikowego konstruowanego przez .
   

Rozdzia 9. Cigi formatujce

291

Powyszy cig formatujcy skada si ze statycznej porcji tekstu i symbolu elementu


leksykalnego ( ), oznaczajcego miejsce wstawienia wartoci zmiennej. W prezentowanym przykadzie w wyniku wywoania funkcji do wywietlanego na ekranie cigu
wynikowego w miejsce specyfikatora  wstawiona zostanie warto zmiennej 


w formacie Base10.
Najlepsz ilustracj bdzie wydruk prezentujcy efekt wykonania przykadowego programu (pamitamy, e zmienna 

 ma warto 10):
!"#   $%


  

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

Hack Proofing Your Network. Edycja polska

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:
!"#   $%


  -./.01231

Pamitamy, e adna zmienna typu cakowitego nie zostaa przekazana do wywoania


funkcji ; niemniej jednak w cigu wynikowym znalaza si warto cakowita.
Funkcja po prostu odczytaa ze stosu 4 bajty tak, jakby zostay one umieszczone na
stosie w ramach wywoania funkcji. W prezentowanym przykadzie zdarzyo si, e te
4 bajty w pamici reprezentoway liczb -1073742952, co jest dziesitn reprezentacj liczby typu cakowitego ze znakiem.
Gdyby uytkownik mia moliwo wstawienia wasnych danych do cigu formatujcego, mgby wymusi zmian przebiegu wykonania funkcji  i zmusi j do
traktowania dowolnych informacji znajdujcych si w obszarze pamici stosu jako poprawnych zmiennych powizanych ze specyfikatorami okrelonymi przez uytkownika.
Jak wida, zdolno uytkownika zewntrznego do kontrolowania przebiegu dziaania
funkcji  moe prowadzi do zaistnienia pewnych potencjalnie gronych luk
w zabezpieczeniach. Jeeli istnieje program, ktry zawiera taki bd i zwrci sformatowany (skonstruowany) cig uytkownikowi, atakujcy mog odczyta potencjalnie
wraliwe informacje przechowywane w pamici programu. Moliwe jest te wykorzystanie szkodliwego cigu formatujcego do zapisania obszarw pamici programu, a to
za spraw specyfikatora . Specyfikator  ma umoliwia programistom pobranie liczby
znakw skonstruowanego dotychczas cigu. Sposb, w jaki wamywacze mog wykorzystywa do swoich celw cigi formatujce zostanie szczegowo omwiony przy
okazji samodzielnej implementacji ataku wykorzystujcego bd cigu formatujcego.

Gdzie i dlaczego wystpuj bdy


cigw formatujcych?
Luki zwizane z cigami formatujcymi to wynik bdw programistw, ktrzy umoliwiaj przekazywanie jako parametrw formatujcych danych nie poddanych wczeniejszej weryfikacji. Poniej wymienione zostan niektre spord najpowszechniejszych

Rozdzia 9. Cigi formatujce

293

bdw programistycznych owocujcych potencjaln luk zwizan z naduyciem cigu


formatujcego.
Pierwszym bdem jest wywoanie funkcji  bez przekazania do niej cigu formatujcego; podatne wywoanie zawiera wycznie cig do wywietlenia:

  !$

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

Bdy tego rodzaju s czsto popeniane przez programistw niedowiadczonych lub


nieobytych z funkcjami bibliotecznymi jzyka C. Czasem konstrukcje takie stosowane s z lenistwa nie wszystkim programistom chce si przekazywa cig formatujcy zawierajcy wycznie specyfikator . Powody tego rodzaju s zreszt przyczyn znacznej czci wszystkich luk w zabezpieczeniach oprogramowania.
Powszechne jest te definiowanie funkcji wykorzystujcych wewntrznie wywoania
funkcji  (na przykad w funkcjach rejestrujcych i informujcych o bdach).
W procesie programowania aplikacji programista moe zapomnie, e funkcja wywietlajca komunikat o bdzie wywouje funkcj  (lub inn funkcj z tej rodziny)
przekazujc do niej otrzymane parametry w niezmienionej postaci. Takie przeoczenie
moe wyrobi nawyk wywoywania funkcji raportujcej tak, jakby wywietlaa ona
pojedynczy cig znakowy:
4(


Celem ataku symulowanego w dalszej czci rozdziau bd wanie takie bdy.


Jedn z najwaniejszych przyczyn powszechnoci bdw cigw formatujcych w systemach Unix jest niewaciwe korzystanie z funkcji  . Funkcja   jest
interfejsem programistycznym systemowego demona rejestrujcego zdarzenia. Programici mog uywa funkcji   do zapisywania w systemowych plikach dziennika
komunikatw o rnego rodzaju bdach. Funkcja   przyjmuje jako parametry
cig formatujcy i zestaw parametrw korespondujcych z okrelonymi w tym cigu
specyfikatorami formatu (pierwszym parametrem wywoania funkcji   jest
priorytet wpisu). Wielu programistw korzystajcych z tej funkcji zapomina lub nie
wie o tym, e powinni przekazywa osobno cig formatujcy i osobno dane umieszczane we wpisie pliku dziennika. Wiele luk zwizanych z cigami formatujcymi wynika
z nastpujcej konstrukcji kodu:
564789:

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

Hack Proofing Your Network. Edycja polska

Jak wyeliminowa te bdy?


Podobnie jak w przypadku wikszoci innych luk wynikajcych z niewaciwego kodowania, najlepszym sposobem eliminacji luk cigw formatujcych jest zapobieganie im. Programici musz uwiadomi sobie, e tego rodzaju bdy s zagroeniem
dla systemu, ochoczo urzeczywistnianym przez hakerw. Niestety, globalna pobudka
i powszechna troska o kwestie bezpieczestwa wydaj si by spraw do odlegej
przyszoci.
Administratorzy i uytkownicy zatroskani o zabezpieczenie swoich systemw powinni osign rozsdny poziom bezpieczestwa w wyniku wdroenia poprawnej polityki korzystania z systemu. Powinni na pocztek zadba o usunicie bitw setuid
z wszystkich zbdnych programw systemowych i zablokowanie wszystkich niepotrzebnych usug.
Mike Frantzen opublikowa rozwizanie problemu cigw formatujcych, adresowane
do administratorw i programistw i blokujce moliwo wykorzystania bdw cigw formatujcych. Rozwizanie to polega na przeliczaniu liczby parametrw przekazywanych do funkcji  i porwnywaniu jej z liczb specyfikatorw formatu umieszczonych w cigu formatujcym. Zostao ono zaimplementowane pod nazw FormatGuard
w projekcie Immunix, dystrybucji systemu Linux, ktrej gwn cech ma by bezpieczestwo aplikacji.
Artyku Mikea Frantzena zosta zarchiwizowany na licie dystrybucyjnej Bugtraq
pod adresem www.securityfocus.com/archive/1/72118. FormatGuard dostpny jest za
pod adresem www.immunix.org/formatguard.html.

W jaki sposb cigi formatujce


s wykorzystywane przez wamywaczy?
Istniej trzy podstawowe cele, ktre wamywacz moe osign za pomoc bdu cigu formatujcego. Po pierwsze, atakujcy moe spowodowa bd dziaania procesu
w wyniku odwoania do niepoprawnego adresu. Moe to zaowocowa odmow obsugi.
Po drugie, atakujcy, jeeli udostpni si mu sformatowany cig wynikowy, moe odczyta zawarto pamici procesu. Po trzecie, moe sprowokowa zapis do pamici programu, czego efektem moe by wykonanie pewnego kodu.
Niszczenie i ochrona

Przepenianie bufora za pomoc cigu formatujcego


Pobierane od uytkownikw cigi formatujce mog by wykorzystane do uprawdopodobnienia sytuacji przepenienia bufora. W niektrych sytuacjach funkcja 
 
moe skonstruowa zbyt dugi cig (przepeniajcy bufor), o ile przed przekazaniem
cigu rdowego montowanego w cigu docelowym nie jest kontrolowana jego dugo. Niekiedy taka kontrola dugoci powoduje niemono przekazania przez atakujcego nadmiarowego cigu formatujcego lub cigu wstawianego zamiast specyfikatora .

Rozdzia 9. Cigi formatujce

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

Hack Proofing Your Network. Edycja polska

Odczyt zawartoci pamici


Jeeli cig wynikowy skonstruowany w funkcji  jest udostpniany na zewntrz,
atakujcy moe wykorzysta odpowiednio spreparowany cig formatujcy do odczytania zawartoci pewnego obszaru pamici. Jest to powany problem, mogcy prowadzi
do wyciekw wraliwych informacji. Przykadowo, jeeli program przyjmuje od klientw informacje uwierzytelniajce i nie zeruje tych obszarw pamici, w ktrych byy
one przechowywane bezporednio po ich wykorzystaniu, bd cigu formatujcego
moe przyczyni si do ich odczytania przez wamywacza. Najprostszym sposobem,
jakim dysponuje w tej sytuacji wamywacz, jest zmuszenie funkcji (za porednictwem
cigu formatujcego) do skonstruowania cigu z nieistniejcych parametrw. Funkcja odczytuje wartoci wprowadzane do konstruowanego cigu bezporednio ze stosu. Przykadowo, kade wystpienie specyfikatora  w cigu formatujcym bdzie zastpowane w cigu wynikowym 4 bajtami pamici stosu. Taki odczyt pamici jest ograniczony
wycznie do danych przechowywanych w obszarze pamici stosu.
Moliwe jest jednak rwnie odczytanie zawartoci dowolnego obszaru pamici, a to za
spraw specyfikatora . Jak ju wiemy, specyfikator ten zastpowany jest cigiem bajtw
zakoczonym bajtem zerowym. Cig ten jest przekazywany do funkcji  w postaci adresu pierwszego bajtu cigu. Atakujcy moe wic odczyta dowolny obszar pamici, gdy przekae do funkcji  specyfikator (w cigu formatujcym) oraz
adres interesujcego go obszaru. Adres, od ktrego atakujcy chciaby rozpocz odczyt
powinien zosta umieszczony na stosie; byoby to konieczne rwnie w przypadku adresu korespondujcego ze specyfikatorem . Obecno w cigu formatujcym specyfikatora wymusi na funkcji konstruujcej cig wynikowy odczyt kolejnych bajtw
pamici, od bajtu znajdujcego si pod adresem podsunitym przez wamywacza a do
pierwszego bajtu zerowego.
Moliwo odczytu dowolnego obszaru pamici jest dla hakerw bardzo atrakcyjna.
Atak tego rodzaju moe by czony z innymi technikami wamaniowymi; zostanie
szczegowo omwiony w dalszej czci rozdziau oraz zastosowany w konkretnym
przykadzie demonstrowanym pod koniec rozdziau.

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.

Rozdzia 9. Cigi formatujce

297

Metoda pojedynczego zapisu


Pierwsz z omawianych tu metod wykorzystania cigw formatujcych bdzie metoda
zwikszenia uprawnie atakujcego za porednictwem pojedynczego zapisu pamici
z uyciem specyfikatora .
W niektrych programach wartoci krytyczne dla dziaania aplikacji, takie jak identyfikator uytkownika i identyfikator grupy procesu przechowywane s w pamici procesu, co ma zwykle na celu obnienie uprawnie programu w czasie dziaania. Za pomoc
odpowiednio spreparowanych cigw formatujcych wamywacz moe zmodyfikowa te
wartoci.
Przykadem programu obarczonego tak saboci jest narzdzie o nazwie Screen. Screen
to popularny program uniksowy, umoliwiajcy wspuytkowanie pojedynczego pseudoterminala przez kilka procesw. Jeeli program zostanie zainstalowany jako tzw.
setuid root, uprawnienia uytkownika wywoujcego program przechowywane s w jednej ze zmiennych programu. Kiedy tworzone jest okno, proces macierzysty programu
Screen obnia przywileje wykonawcze do poziomu wartoci przechowywanych w zmiennych procesw potomnych (procesu powoki uytkownika i tym podobnych).
Wersje programu Screen poprzedzajce wersj 3.9.5 zawieray potencjalny bd cigu
formatujcego, ujawniajcy si podczas wywietlania na ekranie cigu definiowanej przez
uytkownika zmiennej okrelajcej wizualny sygna dzwonka (ang. visual bell). Cig ten,
definiowany w pliku konfiguracyjnym .screenrc uytkownika jest wywietlany na terminalu uytkownika jako interpretacja jednego z niedrukowalnych symboli zestawu
ASCII. Kiedy symbol ten ma pojawi si na ekranie, okrelony przez uytkownika
w pliku konfiguracyjnym cig jest przekazywany do funkcji  jako cz cigu formatujcego.
Ze wzgldu na struktur programu Screen luka ta moga zosta wykorzystana przy
uyciu cigu zawierajcego pojedynczy specyfikator . Bez wstrzykiwania do programu wasnego kodu i obliczania adresw skokw. Cay atak polega na nadpisaniu przechowywanego przez program identyfikatora  wybran przez atakujcego wartoci,
np. zerem (zero to identyfikator uytkownika ).
Aby tego dokona, atakujcy musia umieci adres identyfikatora UID w pamici tak,
aby zosta on potraktowany jako parametr wywoania funkcji . Nastpnie wamywacz musia utworzy cig wprowadzajcy specyfikator  na odpowiedni pozycj
stosu. Mg przesun docelowy adres o 2 bajty i w ten sposb wyzerowa identyfikator uytkownika dwoma najstarszymi bajtami wartoci . Przy nastpnym utworzeniu okna przez wamywacza, proces macierzysty Screen ustawia uprawnienia procesu potomnego zgodnie z nadpisan wartoci UID.
Lokalny wamywacz wykorzystujcy bd cigu formatujcego mg wic rozszerzy
swoje uprawnienia w systemie do poziomu uprawnie uytkownika administracyjnego.
Luka w programie Screen jest znakomitym przykadem ilustrujcym jak atwo udaje
si niekiedy przeprowadzi zadziwiajco skuteczne ataki wykorzystujce cig formatujcy. Opisana metoda ma jeszcze t zalet, e jest w duej mierze niezalena od platformy.

298

Hack Proofing Your Network. Edycja polska

Metoda wielokrotnego zapisu


Zajmiemy si teraz wielokrotnymi zapisami w pamici atakowanego procesu. Jest to
technika nieco bardziej skomplikowana, dajca za to ciekawsze rezultaty. Odpowiednie
wykorzystanie cigu formatujcego moe bowiem doprowadzi do modyfikacji dowolnego obszaru pamici. Aby przybliy t metod Czytelnikowi, najpierw dokadnie omwi dziaanie specyfikatora  i modyfikacje, jakie mona za jego porednictwem wprowadzi do pamici procesu.
Powtrzmy wic: zadaniem specyfikatora formatu  jest wywietlenie liczby znakw
wstawionych do tej pory do cigu wynikowego. Atakujcemu najczciej jednak trudno
umieci tam liczb na tyle du, aby moga by potraktowana jako poprawny adres
pamici (na przykad wskanik wstrzyknitego kodu). Dlatego nie jest moliwe utworzenie takiej wartoci przy uyciu pojedynczego elementu . Rozwizaniem jest zastosowanie kilku elementw i zapisanie za ich porednictwem w pamici danego
adresu. Za pomoc tej techniki haker moe zapisa niemal dowoln warto w postaci
kolejnych bajtw. W ten sposb moe sprowokowa wykonanie przez atakowany proces dowolnego kodu.

Przebieg atakw z uyciem cigw formatujcych


W tym punkcie omwiony zostanie sposb, w jaki mona przeprowadzi atak wykorzystujcy cig formatujcy do nadpisania w pamici procesu takich wartoci jak adres pamici. Sposb ten pozwala wamywaczowi wykona w przestrzeni procesu-ofiary
dowolny kod.
Czytelnik ju wie, e kiedy funkcja konstruujca sformatowany cig wynikowy napotka
w cigu formatujcym specyfikator , zapisuje do pamici pewn liczb cakowit.
Adres, pod ktrym dokonywany jest zapis powinien znajdowa si na stosie funkcji
, gdzie spodziewa si ona parametru odpowiadajcego temu specyfikatorowi.
Atakujcy musi w jaki sposb umieci podany adres na stosie i umieci w odpowiednim miejscu cigu formatujcego element . Czasem moe tego dokona za
porednictwem zmiennych lokalnych funkcji, kiedy dane pobierane od uytkownika
umieszczane s na stosie funkcji.
Zwykle istnieje jednak mniej skomplikowany sposb okrelenia adresu docelowego
wpisu. W wikszoci podatnych programw pobrany od uytkownika cig formatujcy przekazywany do funkcji  umieszczany jest w zmiennej lokalnej utworzonej
na stosie. Zakadajc, e funkcja nie alokuje zbyt duej liczby zmiennych lokalnych,
moemy si spodziewa, e pobrany od uytkownika cig formatujcy przechowywany jest niedaleko ramki stosu utworzonej do wywoania funkcji . Atakujcy
moe wymusi na funkcji wykorzystanie adresu zgodnego z wasnymi planami przez
umieszczenie specyfikatora  w odpowiednim miejscu cigu formatujcego.
Wamywacz ma wpyw na lokalizacj, spod ktrej funkcja  odczytuje zmienn
wskanikow korespondujc z elementem . Moe mianowicie umieszcza w cigu
formatujcym specyfikatory  lub , co powoduje swego rodzaju zjadanie kolejnych
obszarw stosu przez funkcj  a do momentu osignicia adresu osadzonego

Rozdzia 9. Cigi formatujce

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.

Przykad: wamywacz planujcy wykorzystanie jako adresu docelowego specyfikatora


 wartoci skadowanej 32 bajty od adresu, spod ktrego funkcja  odczytuje
pierwszy parametr wywoania, moe umieci w cigu formatujcym 8 specyfikatorw . Elementy  powoduj umieszczenie w cigu wynikowym szesnastkowej reprezentacji wartoci czterobajtowego sowa (w przypadku 32-bitowych procesorw
Intela). Kade wystpienie elementu  w cigu formatujcym powoduje wic odczytanie przez funkcj  wartoci lecej na stosie niej o 4 bajty od poprzedniej.
Atakujcy moe oczywicie rwnie wykorzysta inne specyfikatory i zmusi funkcj
konstruujc cig do zagbiania si w d stosu w poszukiwaniu zmiennej korespondujcej z elementem .

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

Hack Proofing Your Network. Edycja polska

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

Na niektrych platformach sprztowych (np. w pewnych systemach RISC) zapisy do


pamici pod adresami nie wyrwnane do dwch bajtw s niemoliwe. Utrudnienie to
mona niejednokrotnie wyeliminowa przez zastosowanie specyfikatorw powodujcych zapis krtkiej liczby cakowitej (ang. short integer), takich jak .
Konstruowanie dowolnych wartoci przy uyciu kolejnych zapisw jest najtrudniejsz metod ataku, dajc jednak atakujcemu moliwo przejcia penej kontroli nad
przebiegiem procesu. Umoliwia bowiem nadpisanie wskanikw do instrukcji wskanikami do podsunitego przez atakujcego kodu. Jeeli atakujcy wykorzysta w ten
sposb cig formatujcy, przepyw sterowania programu moe zosta zmieniony tak,
aby wykonaniu uleg podsunity kod.

Rozdzia 9. Cigi formatujce

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.

Nadpisanie adresu powrotnego


Wikszo atakw przepeniajcych bufor i opierajcych si na charakterystyce dziaania stosu wymaga od atakujcego zastpienia adresu powrotnego funkcji przechowywanego w okrelonym obszarze stosu innym wskanikiem instrukcji. Kiedy funkcja,
w ten sposb znieksztacona, koczy swoje dziaanie i podejmuje prb przekazania
sterowania z powrotem do kodu, z ktrego zostaa wywoana, wykonywany jest skok
pod zamieniony adres. W atakach przepeniajcych bufor atakujcy nadpisuje adres powrotny funkcji dlatego, e z racji budowy stosu nie ma innych moliwoci. Atakujcy
nie moe dowolnie wybra obszaru, ktry zostanie nadpisany, poniewa ma wpyw
jedynie na dane znajdujce si w bezporednim ssiedztwie przepenionego bufora. Ataki
wykorzystujce cigi formatujce tym si rni od atakw przepenienia bufora, e
umoliwiaj wykonanie zapisu pod teoretycznie dowolnym adresem, okrelonym wartoci obszaru pamici korespondujcego ze specyfikatorem . Atakujcy moe wic
nadpisa adres powrotny funkcji przez jawne podanie jego lokalizacji. Kiedy funkcja
powraca, procesor rozpocznie wykonywanie kodu od instrukcji znajdujcych si pod
wskazanym przez wamywacza adresem.
Haker nadpisujcy adres powrotny funkcji moe stan w obliczu dwch problemw.
Pierwszym z nich jest sytuacja, w ktrej funkcja po prostu nie wraca. W przypadku luk
zwizanych z cigami formatujcymi jest to przypadek do czsty, poniewa wystpuj one powszechnie w funkcjach informujcych o bdach. Funkcja taka moe na
przykad wypisa na wyjciu komunikat (nawet skonstruowany na podstawie otrzymanego od uytkownika cigu formatujcego) i zakoczy dziaanie procesu za porednictwem funkcji
. W takim przypadku nadpisanie adresu powrotnego jakiejkolwiek funkcji poza funkcj  nie da adnego rezultatu. Drugim problemem jest
to, e nadpisanie adresu powrotnego moe zosta wykryte przez mechanizm ochrony
pamici stosu, taki jak StackGuard.

Nadpisanie wpisw globalnej tablicy przesuni


i innych wskanikw funkcji
Globalna tablica przesuni (GOT, od ang. global offset table) to fragment pliku binarnego w formacie ELF zawierajcy wskaniki do funkcji bibliotecznych importowanych przez program. Atakujcy moe nadpisa wpisy tablicy GOT wasnymi wskanikami, wskazujcymi na instrukcje podsunitego kodu, ktry zostanie wykonany w wyniku
wywoania odpowiedniej funkcji bibliotecznej.

302

Hack Proofing Your Network. Edycja polska

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.

Analiza podatnego programu


Czas na podjcie decyzji co do programu, ktry w dalszej czci rozdziau bdzie suy
za przykad wykorzystania luki cigu formatujcego. Luka ta powinna dawa moliwo
zdalnego jej wykorzystania. Scenariusz, w ktrym penetracji systemu komputerowego dopuszcza si haker nie majcy adnego upowanienia i teoretycznie od niego odcity jest najlepsz ilustracj zagroe wynikajcych z istnienia tego rodzaju luk. Dalej, luka powinna znajdowa si w rzeczywistym programie, najlepiej takim, ktrego
autorem jest znany i powaany programista; uwiadomi to Czytelnikom, e tego rodzaju
bdy mog znajdowa si rwnie w oprogramowaniu pozornie pewnym i poprawnym.
Przykad powinien ponadto posiada kilka cech dajcych sposobno do omwienia
rozmaitych aspektw bdw zwizanych z cigami formatujcymi, takich jak np.
problem wywietlania sformatowanego cigu.
Zdecydowaem si zaprezentowa luk na przykadzie programu Rwhoisd. Rwhoisd czy
te demon RWHOIS jest implementacj usugi RWHOIS. Projektem serwera usugi
RWHOIS zajmuje si obecnie dzia badawczy i rozwojowy Network Solutions; serwer
ten zosta udostpniony szerokiej publicznoci na podstawie Powszechnej Licencji
Publicznej GNU.
Klasyczny bd umoliwiajcy przeprowadzenie ataku wykorzystujcego cig formatujcy zosta wykryty w rwhoisd w wersji 1.5.7.1 i wczeniejszych. Bd ten umoliwia
nieautoryzowanym klientom usugi, ktrzy nawizali poczenie z usug wykonanie
dowolnego kodu. Pierwszy opis tej luki ujrza wiato dzienne jako wiadomo przesana na list dystrybucyjn Bugtraq (wiadomo ta zostaa zarchiwizowana pod adresem www.securityfocus.com/archive/1/222756).
Aby zrozumie istot luki wystpujcej w demonie rwhoisd naley zapozna si z jego
kodem rdowym. Analizie poddany zostanie kod rdowy wersji 1.5.7.1. W czasie pisania tej ksiki kod ten by dostpny w sieci WWW pod adresem www.rwhois.net/ftp.
Bd ujawnia si, kiedy program w odpowiedzi na przekazanie przez uytkownika
niepoprawnego parametru polecenia   ma wypisa na wyjciu komunikat o bdzie.
Komunikaty o bdach s przez serwer konstruowane i wypisywane za pomoc funkcji o nazwie 
. Funkcja ta jest wykorzystywana w caym kodzie rdowym do obsugi sytuacji awaryjnych i do informowania o nich aplikacji klienta i samego uytkownika. Funkcja przyjmuje kilka parametrw: liczb cakowit okrelajc
numer bdu, cig formatujcy oraz zmienn liczb parametrw odpowiadajcych specyfikatorom formatujcym okrelonym w cigu.

Rozdzia 9. Cigi formatujce

303

Wieci z podziemia

Najgroniejsze bdy zwizane z cigami formatujcymi


Poza bdn obsug polecenia SITE EXEC serwera WU-FTPD wykryto kilka innych
zasugujcych na wzmiank luk. Niektre z nich wykorzystane zostay w robakach internetowych i narzdziach masowego wamywania i day efekt w postaci skutecznych
wama do tysicy wzw internetowych.
IRIX Telnetd odpowiednio spreparowane dane pobrane od klienta przekazywane jako cig formatujcy do funkcji  umoliwiay hakerom zdalne wykonanie dowolnego kodu bez koniecznoci przechodzenia jakichkolwiek procedur
uwierzytelniajcych. Luka zostaa wykryta przez grup Last Stage of Delirium
(patrz www.securityfocus.com/bid/1572).
Linux rpc.statd wykryta w tym programie luka rwnie zwizana bya z nieprawidowym zastosowaniem funkcji  i take umoliwiaa zdalne uzyskanie uprawnie administracyjnych. Luk wykry Daniel Jacobowitz i opublikowa j
16 czerwca 2000 roku jako wiadomo przesan na list Bugtraq (patrz
www.securityfocus.com/bid/1480).
Cfingerd kolejna luka wynikajca z nieprawidowego zastosowania wywoania
, odkryta przez Megyera Laszlo. Jej wykorzystanie mogo doprowadzi do
przejcia przez zdalnego wamywacza kontroli nad atakowanym wzem (patrz
www.securityfocus.com/bid/2576).
Implementacja moduu locale w bibliotece Libc Jouko Pynnnen oraz zesp
Core SDI niezalenie od siebie ogosili wykrycie luki zwizanej z cigiem formatujcym w implementacji biblioteki C wchodzcej w skad kilku systemw uniksowych. Luka umoliwiaa atakujcemu lokalne przejcie rozszerzonych uprawnie
przez ataki na programy setuid (patrz www.securityfocus.com/bid/1634).
Implementacje rpc.ttdbserverd w systemach CDE ISS X-Force poinformowa
o wykryciu luki zwizanej z niewaciwym zastosowaniem funkcji  w wersjach
serwera bazy danych o nazwie ToolTalk wchodzcego w skad kilku systemw operacyjnych wyposaonych w CDE. Luka ta umoliwiaa zdalnym, nieuwierzytelnionym
hakerom wykonanie dowolnego kodu na zaatakowanym komputerze (patrz www.
securityfocus.com/bid/3382).

Kod rdowy tej funkcji zdefiniowany jest w pliku rdowym common/client_msgs.c


(podana cieka to cieka wzgldna wobec katalogu gwnego kodu, czyli katalogu,
do ktrego rozpakowano kod rdowy wersji 1.5.7.1 programu).
&'
"=;>) ???@(=???
( A0'&
 "

4 4 
 4"

 4  

 

4

=' 
 
"44 




 4 
4
 4 


304

Hack Proofing Your Network. Edycja polska


   BC4DEEF GG

 ! $;4
;



   ! $;
*


  4 ='
 ' 


 )

  
 4
" 

 <


"44 9E8D

Wytuszczony wiersz sygnalizuje ten fragment kodu, w ktrym parametry przekazane


do funkcji 
 przekazywane s do funkcji . Luka tkwi nie w tej
konkretnej funkcji, ale w jej nieprawidowym wykorzystaniu w innych fragmentach
kodu rdowego. Programista tej funkcji zakada, e funkcja j wywoujca przekae
poprawny cig formatujcy i wszystkie potrzebne do konstrukcji cigu parametry.
Peny kod tej funkcji zamieszczono w tym miejscu, poniewa jest ona wietnym przykadem prowokowania sytuacji, ktre mog zaowocowa atakiem wykorzystujcym
cig formatujcy. Wiele programw wyposaanych jest w bardzo podobne funkcje.
Su one jako otoczki (ang. wrapper) wywietlajce komunikaty o bdach i wzorowane s na funkcji  ; przyjmuj jako parametry numer bdu i parametry suce
do konstrukcji komunikatu. Problem (zgodnie z tym, co napisano na pocztku rozdziau) polega na tym, e programici czsto zapominaj o przekazaniu do takiej funkcji
cigu formatujcego.
Naleaoby teraz przeanalizowa zdarzenia towarzyszce nawizaniu poczenia z usug przez klienta i prbie przekazania za porednictwem funkcji 
 cigu
formatujcego do funkcji .
Dla Czytelnikw dysponujcych kodem programu odpowiedni fragment kodu znajduje si w pliku rdowym server/soa.c. Funkcja, w ktrej zdefiniowano interesujcy
nas kod nosi nazw 
 . Reszta kodu zostaa z wydruku usunita dla
wygody i zwizoci przykadu. Podatne na ataki wywoanie znajduje si w 53. wierszu
pliku rdowego (na wydruku jest on wytuszczony):
;;;
=4
"4=44*4
 ! $
 H=4

 
  !"#$%
 44  
"4 4"4

C855

;;;

Rozdzia 9. Cigi formatujce

305

W powyszym wywoaniu funkcji 


 jako cig formatujcy przekazywany jest parametr  . Ostatecznie cig reprezentowany przez ten parametr zostaje
przekazany do funkcji  (na poprzednim wydruku). Dla kontrolera kodu rdowego taka konstrukcja powinna kojarzy si z potencjaln luk. Prawidowe wywoanie funkcji 
 powinno mie nastpujc posta:

4ICJ75IK4789:47ED7  ! $

Tutaj zmienna   przekazywana jest do funkcji 


 jako parametr korespondujcy ze specyfikatorem cigu formatujcego. Taka posta wywoania eliminuje
moliwo zoliwego podstawienia w parametrze   cigu interpretowanego
w funkcji  jako cig formatujcy. Parametr   jest jednym z parametrw
dyrektywy   przekazanym do serwera przez klienta.
Podsumowujc, kiedy klient nawizuje poczenie z serwerem rwhoisd i wykonuje polecenie  , w przypadku niepoprawnych wartoci parametrw polecenia wywoywana
jest funkcja 
, wypisujca na standardowym wyjciu programu komunikat o bdzie. Procedura ta przebiega nastpujco:
1. Serwer rozpoznaje parametr   i wywouje funkcj 

 do obsugi

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

jest jako cig formatujcy.


4. Funkcja 
 przekazuje otrzymany od klienta cig formatujcy
do funkcji  (patrz wydruk).

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

Hack Proofing Your Network. Edycja polska

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
&*+* *+*

Rozdzia 9. Cigi formatujce

307

Narzdzia i puapki

Wicej stosu, mniej cigu formatujcego


Moe si zdarzy, e cig formatujcy przechowywany na stosie ley poza zasigiem
funkcji 
 . Przyczyn takiego stanu rzeczy moe by kilka, jedn z nich jest obcicie
cigu wejciowego (formatujcego) do okrelonej dugoci. Jeeli wejciowy cig formatujcy zostanie na pewnym etapie wykonywania programu (przed przekazaniem go
do funkcji 
 ) obcity do pewnego maksymalnego rozmiaru, liczba specyfikatorw formatw, ktre zostan wzite pod uwag bdzie ograniczona. Istnieje kilka sposobw na obejcie takiego utrudnienia podczas konstruowania programu atakujcego.
Cay problem polega wtedy na takim operowaniu specyfikatorami funkcji 
 ,
aby odczytaa ona jak najwikszy blok pamici przy zastosowania jak najkrtszego
cigu formatujcego. Mona w tym celu posuy si jedn z poniszych technik:
 Skorzysta z wikszych typw danych pierwszym i najbardziej oczywistym

rozwizaniem jest zastosowanie specyfikatorw formatujcych kojarzonych


z szerszymi typami danych; jednym z takich specyfikatorw jest  ,
interpretowany ze zmienn typu 


. W 32-bitowych architekturach
Intel funkcja 
  wstawi w miejsce kadego takiego specyfikatora 8 bajtw
obszaru stosu. Moliwe jest rwnie wstawienie do cigu wynikowego zmiennej
typu 
  lub "*
 , cho dane przechowywane na stosie mog
nie nadawa si do interpretacji zmiennoprzecinkowej, co moe spowodowa
zaamanie procesu.
 Skorzysta z kwalifikatorw dugoci cigu wyjciowego niektre wersje
biblioteki libc obsuguj znak wielokrotnoci (') w specyfikatorach cigu. Znak
ten informuje funkcj 
  o tym, e dugo (liczba znakw), do ktrej ma

zosta wyrwnana warto zmiennej odpowiadajcej specyfikatorowi definiowana


jest parametrem wywoania (funkcja odczytuje dugo wypenienia ze stosu).
Parametr ten musi by liczb cakowit. Kada gwiazdka powoduje wic poknicie
4 kolejnych bajtw stosu. Ostateczna dugo interpretowanej wartoci moe by
jednak zastpiona przez liczb okrelon bezporednio przed waciwym
specyfikatorem. Przykadowo, specyfikator '''''''' spowoduje wywietlenie
przez funkcj wartoci zmiennej cakowitej, reprezentowanej za pomoc dziesiciu
znakach. Jednake warto tej zmiennej zostanie odczytana spod adresu
przesunitego o 32 bajty. Pierwsze zastosowanie tej techniki przypisuje si
niejakiemu lorianowi.
 Odwoywa si bezporednio do parametrw moliwe jest zmuszenie funkcji

  do odwoywania si wycznie do okrelonych parametrw. Su
do tego specyfikatory formatujce postaci @%
, gdzie @ jest numerem parametru

(liczc od 1). Technik t mona stosowa jedynie na platformach wyposaonych


w bibliotek C obsugujc cigi formatujce z bezporednim dostpem
do parametrw.
Jeeli nawet za pomoc omwionych wyej trikw nie uda si dosign adresu zaszytego w cigu formatujcym, atakujcy powinien przeanalizowa kod procesu w celu okrelenia, czy gdziekolwiek w pamici znajduje si obszar stosu, w ktrym mona
by umieci adres. Naley bowiem pamita, e adres niekoniecznie musi by osadzony
w cigu formatujcym, cho jest to wygodne, gdy cig ten alokowany jest w odpowiednim obszarze stosu. Atakujcy moe przecie przekaza na wejcie programu nie tylko
cig formatujcy. W przypadku wspomnianego programu Screen atakujcy mia na przykad dostp do zmiennej konstruowanej na podstawie zmiennej rodowiskowej :LD.
Cig ten by przechowywany na stosie w atwiej dostpnym miejscu.

308

Hack Proofing Your Network. Edycja polska


/0I
 "7= 7)@* 2/3@M. M
&*+* *+* *+*
/0I
 "7= 7)@* 2/3@M. M@
&*+* *+* *+* *+*
/0I
 "7= 7)@* 2/3@M. M@@MM"M

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. /@
* M 0@M0 1@* 2/3@* 2/3@* 2@M0A/@* 2/3
@
* 2/@* *A0@* 21@M0@* 2/@* 2/@0@* */@
M0 0@* 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.

Atak z uyciem cigu formatujcego


Jestemy ju gotowi do przeprowadzenia ataku wykorzystujcego cig formatujcy.
W przypadku takiego programu jak rwhoisd celem wamywacza jest wymuszenie wykonania przez zdalny komputer podsunitego przez siebie kodu. Kod ten powinien da
atakujcemu dostp do atakowanego komputera.
Prezentowany tu exploit zostanie napisany dla demona rwhoisd 1.5.7.1 kompilowanego
na platformie Linux i386. Program ten badany by w poprzednich punktach. Jak ju
wspomniano, aby wykona podstawiony kod, exploit musi nadpisa warto, do ktrej
atakowany proces odwouje si pniej jako do adresu kolejnej instrukcji do wykonania.
W prezentowanym exploicie adres powrotny funkcji nadpisywany bdzie adresem przemyconego kodu. Kod ten bdzie realizowa wywoanie

 ! , co spowoduje
udostpnienie klientowi powoki w atakowanym systemie.
Najpierw program atakujcy powinien nawiza poczenie z usug i sprbowa
okreli lokalizacj cigu formatujcego na stosie. Program atakujcy zrealizuje to
poprzez nawizanie wielokrotnie poczenia z usug i przekazanie do niej cigu formatujcego zwracajcego kolejne sowa stosu procesu zdalnego. Funkcja realizujca

Rozdzia 9. Cigi formatujce

309

ten fragment programu nosi bdzie nazw !"



. Funkcja ta bdzie wysya
do serwera cigi formatujce powodujce zwracanie przez serwer coraz wikszych
obszarw pamici stosu. Nastpnie kade pozyskane sowo stosu bdzie porwnywane z wartoci 0x62626262, ktra bdzie umieszczana na pocztku cigu formatujcego. Istnieje ryzyko, e ze wzgldu na rne rozmiary typw danych przechowywanych na stosie nie uda si trafi w pene sowo 0x62626262 program atakujcy
nie obsuguje jednak takiej ewentualnoci.
'NNOO'GN@N




!$N<N
= 
C855A
,-
,.//01"


 '*')
"?) ("+;<
 
 
"  

 
" 

G

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

Hack Proofing Your Network. Edycja polska


  B
 GG


 @1

Zmienna " wykorzystywana w powyszym kodzie zostaa ustawiona w funkcji !"




 i wskazuje lokalizacj cigu formatujcego na stosie atakowanego procesu.
Teraz program atakujcy, znajc adres, pod ktrym ma zosta wykonany zapis, powinien okreli adres docelowy skoku.
Adres powrotny musi zosta nadpisany w czterech kolejnych zapisach metod . Aby
skonstruowa 4-bajtowy adres docelowy, kada kolejna operacja zapisu musi operowa
na obszarze pamici przesunitym o jeden bajt w stosunku do poprzedniej operacji.
Cztery adresy okrelajce to przesunicie rwnie musz zosta umieszczone w cigu
formatujcym:
'
'GM'97E6D9
'
'GA'97E6D9G
'
'G10'97E6D9G1
'
'G/1'97E6D9G/
!/A$N<N

Kolejnym krokiem jest zapisanie odpowiednich wartoci pod kadym ze zdefiniowanych


przesuni. Utworz one w efekcie adres podsunitego kodu, ktry zostanie umieszczony na stosie. W przykadzie adresem tym jest 0xbffff9d.
Aby skonstruowa tak warto, trzeba zapisa pod adresami umieszczonymi w cigu
formatujcym nastpujce wartoci:
97E6D9-2"
97E6D9G-
97E6D9G1-
97E6D9G/-*

Mona to wykona przy uyciu omawianych wczeniej specyfikatorw okrelajcych


wypenienie.
Przykadowo, aby zapisa pod adresem #$%&'# warto 0x0000019d, naley umieci
w odpowiednim miejscu cigu formatujcego specyfikator (). Interesujca nas warto 9d zostanie dziki temu zapisana w ostatnim bajcie odpowiedniego obszaru. Za
pomoc specyfikatorw z okreleniem wypenienia i specyfikatorw zapisu do pamici
mona skonstruowa pen posta adresu docelowego:

 11.@3&&(P




1&& 

 21@0&&(P




1&& 

 1A1@3&&(P




1&& 

 21@3&&(P




1&& 

Rozdzia 9. Cigi formatujce

311

Warto odnotowa fakt, e wartoci podawane w specyfikatorach wypeniajcych s


silnie uzalenione od cznej liczby znakw wczonych do wynikowego, sformatowanego cigu. Jeeli sformatowany cig jest prezentowany na zewntrz, moliwe jest automatyczne okrelenie liczby znakw wypenienia.
Po nadpisaniu adresu powrotnego funkcji, funkcja  zakoczy swoje dziaanie
normalnie, ale po powrocie z funkcji 
 procesor rozpocznie wykonywanie
kodu podstawionego przez atakujcego. Rysunek 9.2 demonstruje efekt udanego ataku wykorzystujcego cig formatujcy.
Rysunek 9.2.
Penetracja komputera
w wyniku
przeprowadzenia
ataku cigu
formatujcego
na usug rwhoisd

Oto kompletny kod programu atakujcego:


&& +
+ (P

&&
 
"(= ";3;.; (

  5
@& /MA
&&
&&
" +"(

+"+, Q""@* MM
&&""
Q"
&&"
+
@  (NR(S(N
&&=)&&(((;  ;&= &&111.3A
?
"B" ;=T
?
"B
";=T
?
"B 
;=T
?
"B&;=T
?
"B&;=T
?
"B&
;=T
?
"B
@&
;=T
@



?"
>ICKLD@A1A1A1A1&&*"U(VU
 
?"
97E6D9@* MM&&"W*Q" 
" (

 "
4='
 
"


 
"
*4 
='='


"4""='
 " 





=' !$


312

Hack Proofing Your Network. Edycja polska




 "4 "


""4

""4


(=
=!3$&&* "* 
=!$&&* 
"(
!$N-N&&""(
!$NN
!1$NN
!/$NN
!0$NN&&(P


!3$NN&&(P


!A$NN&&(P


!.$NN&&(P


'
'GM>ICKLD&&(VU

 
!1$N<N
*O  ""4

*O  ""4

 7>4ICD9FRX4F9ED7LB

)

 *
"O  ""4
B

*
")

;
4"";4""
4""1.;;;
;
4=
0/1
;
4  7>4ICD9
 

O  ""4


B



)

(=*4 &&


4(=97E6D9&&
+ ,+,
( 
&&(P
 ,"(
(= 

"
 !$N<
N
*


Rozdzia 9. Cigi formatujce


(  "<
0
"10
!$NN
 !$NNOO!$N NOO!1$N"N


 '*') <

 





 *

("
Y<



@ 

 
"
*4 
='='

&& 
++ QU- 
&&( (
 , +,

 
" 



 
"3&&"
PW(( 
V  
!$N<N
(= H 
" 


 3
( 
G
( <

"10
 

 
 "

;<


@ -

!$N<N

 
(= !-$HN<
N

 G
"G 10
 

 
 "

;<


@ -


313

314

Hack Proofing Your Network. Edycja polska



!$N<N
 
" 
"4""



"4""='

&& 
+
 +"
"( " (
&& (+(
=P(
&&( +, , +,
='
=
!$

 
"
= 

 

 
" 
GA
(= 'HN<NOO'HN<
N

 'NNOO'GN@N




!$N<N
= 
C855A
 = >ICKLD


 '*')
"?) ("+;<
 
 
"  

 
" 

G

 'NNOO'GNN

G&&@

 GG


 
" 
 "
4='




&& 
+
+ ,+,
&&( +,""( 
&&  +,(P

  )

&&"P"


 
='="
<@2<@/<@"*<@M2<@/<@0/<@M2<@*<@0<@*<@/ <@"<@M<@*<@13<@3
<@M2<@ /<@M/<@/<@<@M2<@./<@1M<@/<@<@MM<@0/<@1.<@M2<@0/<@1

Rozdzia 9. Cigi formatujce


<@M/<@M<@ 3<@M"<@0*<@1M<@M"<@3/<@1<@M2<@ /<@"<@M<@/<@"*
<@/<@<@0<@"<@M<@M<@"A<@ <@ <@ &*
&=
GM@0221&&
+ +* 
'
'GM'97E6D9&& 
"W((* 
'
'GA'97E6D9G
'
'G10'97E6D9G1
'
'G/1'97E6D9G/
'
'G/A'97E6D9G0
!/A$N<N
   B
- GG


 @1&&P
Z"""(

&&
Z++Z
"(+ *

+"


 11.@3&&(P




1&& 

 21@0&&(P




1&& 

 1A1@3&&(P




1&& 

 21@3&&(P




1&& 

="
="&&(( 
""* 

<
&&[
 ,
 
(+

 " 



&& 
+,"
+
&&(P= 

- 
 "4 "

 
=* !10$
>K4\DEO "
(= 

>K4FD9O "
>K4FD9O "
GO "C855C855C855
 >K4IFFD9O "

 
**   * 
 *   * -1"

( * 
* 



315

316

Hack Proofing Your Network. Edycja polska


 >K4IFFD9O "

 
**   * 
  "* 10


 

;<

@ 

* ! $N<N

  * 



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 

) czy bdu indeksowania zmiennych cakowitych


ze znakiem.
Dzisiejsi wamywacze dokadnie wiedz czego szukaj i maj wiadomo sposobu,
w jaki nieistotne z pozoru bdy i przeoczenia programistw wpywaj na podatno
systemu na ataki. Hakerzy zagldaj wic do kadego programu, obserwuj jego reakcje na wszelkie moliwe dane wejciowe. Dzi programici musz by bardziej ni
kiedykolwiek wczeniej wiadomi faktu, e praktycznie nie istniej dopuszczalne bdy
nawet niewielki bd, jeeli nie zostanie w por wyeliminowany, moe by przyczyn katastrofy. Administratorzy systemowi i uytkownicy musz by za wiadomi
tego, e w wykorzystywanym przez nich oprogramowaniu mog czai si bdy dzi
nieznane, ale w przyszoci by moe wystawiajce system na zmasowane ataki.

Rozdzia 9. Cigi formatujce

317

Zagadnienia w skrcie
Istota bdw cigw formatujcych
 Bdy cigw formatujcych wynikaj z niewiadomoci programistw,

dopuszczajcych przekazywanie danych wejciowych jako cigw formatujcych


do funkcji .
 Dziki bdom cigw formatujcych atakujcy moe odczytywa i zapisywa

wybrane obszary pamici procesu.


 Wykorzystanie luk zwizanych z cigami formatujcymi moe doprowadzi

do wykonania dowolnego kodu w wyniku nadpisania adresw powrotnych,


wpisw tablicy GOT, wskanikw funkcji i tak dalej.

Analiza podatnego programu


 Podatne programy wykorzystuj zwykle funkcj  i przekazuj do niej

jako cig formatujcy dane pobrane z zewntrznego rda.


 Stosowanie otoczki dla funkcji  powoduje czsto, e programici

zapominaj o koniecznoci jawnego przekazania do takiej otoczki cigu


formatujcego.
 Nieprawidowe korzystanie z funkcji   to przyczyna duej liczby znanych

atakw wykorzystujcych cigi formatujce, w tym atakw bardzo gronych


dla integralnoci wzw internetowych.

Testowanie wykorzystujce przypadkowe cigi formatujce


 Programy mona testowa pod ktem podatnoci na ataki cigw formatujcych

za pomoc obserwacji ich reakcji na rnego rodzaju cigi formatujce podawane


na ich wejcie.
 Umieciwszy w cigu formatujcym specyfikatory ,  czy , moemy

okreli podatno programu na ataki cigw formatujcych, o ile cig wynikowy


konstruowany przez funkcj  prezentowany jest na zewntrz. Nieco
trudniej okreli podatno programu, jeeli cigi wynikowe nie s zwracane
uytkownikowi.
 Obserwujc dziwne zachowania procesu (zaamanie, zawieszenie) w reakcji
na specyfikatory  lub podane na wejcie programu, moemy z duym

prawdopodobiestwem zdiagnozowa podatno programu na ataki


wykorzystujce cigi formatujce.

Atak z uyciem cigu formatujcego


 Moliwe jest konstruowanie takich cigw formatujcych, ktrych podanie na

wejcie programu spowoduje odczyt lub zapis konkretnych obszarw pamici


atakowanego procesu. Luki zwizane z cigami formatujcymi nie s cile
zalene od platformy. Niektre programy, takie jak Screen, mona z powodzeniem
atakowa niezalenie od platformy systemowo-sprztowej, na ktrej zostay
uruchomione.

318

Hack Proofing Your Network. Edycja polska


 W przypadku programw, ktre prezentuj na zewntrz efekt konstrukcji

cigu sformatowanego atakujcy moe dokonywa odczytw sporych obszarw


pamici procesu i wykorzystywa zdobyte w ten sposb informacje w dalszych
fazach atakw. Dziki tej technice atakujcy moe wrcz zrekonstruowa
zawarto stosu procesu i okreli konieczne do nadpisania adresu powrotnego
funkcji pozycje specyfikatorw .
 Atakujcy moe dziki cigom formatujcym przeforsowa wielokrotne zapisy

i w ten sposb umieci w pamici procesu dowolne wartoci. Technika ta


umoliwia zapis dowolnej wartoci w niemal dowolnym obszarze pamici
procesu.
 Na platformach blokujcych niewyrwnane operacje zapisu (w procesorach RISC

operacja zapisu musi by wyrwnana do dwch bajtw) mona zastosowa


specyfikator , pozwalajcy na zapis w pamici dwubajtowej zmiennej typu
*.

Najczciej zadawane pytania (FAQ)


Zamieszczone poniej najczciej zadawane pytania (FAQ), na ktre odpowiedzi udzielili
autorzy niniejszej ksiki, maj na celu zarwno sprawdzenie zrozumienia przez Czytelnika przedstawionych w rozdziale zagadnie, jak i pomoc w przypadku praktycznego
ich wykorzystania.
P: Czy systemy z niewykonywaln pamici stosu lub zabezpieczenia integralnoci
obszaru stosu takie jak StackGuard mog zapobiec atakom wykorzystujcym
cigi formatujce?
O: Niestety nie. Bdy wynikajce z niewaciwego stosowania cigw formatujcych
umoliwiaj atakujcemu przeforsowanie zapisw do niemal dowolnych obszarw
pamici. Mechanizm StackGuard zabezpiecza integralno danych
przechowywanych w ramce stosu, systemy blokujce wykonywanie kodu
na obszarze stosu udaremniaj za prby uruchomienia kodu podsunitego przez
wamywacza, o ile zosta on umieszczony na stosie. Bdy cigw formatujcych
pozwalaj hakerom na ominicie obu tych zabezpiecze. Dziki moliwoci
zapisu wybranego obszaru pamici haker niekoniecznie musi nadpisywa adres
powrotny funkcji moe nadpisa inne wskaniki funkcji przechowywane
poza obszarem stosu (unika w ten sposb naruszenia jego integralnoci, ktra
zostaaby wykryta przez StackGuarda) i umieci kod adunku na przykad na
stercie. Zabezpieczenia takie jak StackGuard i niewykonywalny obszar stosu
mog uniemoliwi przeprowadzanie powszechnie znanych, publikowanych
atakw, jednake nie mog powstrzyma utalentowanego i odpowiednio
zdeterminowanego wamywacza.

Rozdzia 9. Cigi formatujce

319

P: Czy bdy tego rodzaju s charakterystyczne dla systemu Unix?


O: Nie. Powszechno bdw cigw formatujcych w systemach uniksowych
wynika z czstego stosowania w oprogramowaniu dla tych systemw funkcji
. Rwnie bdy powodowane nieprawidowym stosowaniem funkcji
  s charakterystyczne dla Uniksa. Zasadniczo jednak moliwo
przeprowadzenia ataku wykorzystujcego cig formatujcy uzaleniona jest
od tego, czy implementacja standardowych bibliotek C dla danej platformy
obsuguje specyfikatory  funkcji . Jeeli dana implementacja
obsuguje ten specyfikator, kady program konsolidowany z bibliotek libc
obarczony bdem cigu formatujcego moe zosta wykorzystany do
przeprowadzenia ataku skutkujcego wykonaniem dowolnego kodu.
P: Jak mog odnale luki zwizane z cigami formatujcymi?
O: Znaczna cz tego rodzaju saboci moe by w prosty sposb wychwycona
podczas analizy kodu rdowego. Analiz tak mona zautomatyzowa: polega
ona bowiem na kontrolowaniu listy parametrw przekazywanych do wszelkich
wywoa funkcji . Kada z funkcji z rodziny  wywoywana
z jednym parametrem jest potencjalnym obiektem ataku (o ile przekazywane
do niej dane pochodz bezporednio od uytkownika).
P: Jak mog wyeliminowa albo chocia ograniczy ryzyko wystpowania
w stosowanym przeze mnie oprogramowaniu niewykrytych luk zwizanych
z cigami formatujcymi?
O: Na pocztek warto opracowa i wdroy odpowiedni polityk bezpieczestwa.
Bazujc na modelu minimalnych uprawnie musisz upewni si, e wszelkie
niezbdne narzdzia systemowe zainstalowane z bitem setuid s dostpne
wycznie dla ograniczonej i zaufanej grupy uytkownikw. Naley te zablokowa
dostp do zbdnych usug systemowych lub je wyczy.
P: Czy istniej jakie symptomy, na podstawie ktrych mog okreli, czy kto
prbuje wama si do mojego systemu z uyciem cigw formatujcych?
O: To bardzo istotne pytanie, poniewa wiele bdw cigw formatujcych opiera
si na niepoprawnym wykorzystaniu funkcji  . Kiedy podejmowane s
prby wykorzystania takich bdw, cigi konstruowane na podstawie cigw
formatujcych zapisywane s w systemowych plikach dziennika. Administrator
moe na podstawie analizy zawartoci tych plikw zidentyfikowa prby atakw
wykorzystujcych cig formatujcy pojawiaj si one w dzienniku jako dziwnie
wygldajce, czsto bezsensowne (zawierajce litery i cyfry) komunikaty. Innymi,
nieco mniej wyranymi wskazwkami mog by czste zaamania, zawieszenia
lub inne niepoprawne zachowania demonw usug wynikajce z naruszenia
mechanizmw ochrony pamici.
P: Gdzie mog znale wicej informacji na temat atakw cigw formatujcych?
O: Tematyce tej powicono szereg wietnych publikacji. Autorem jednej z nich
jest Tim Newsham jego artyku opublikowany na amach Guardent dostpny
jest pod adresem www.securityfocus.com/arcive/1/81565. Autorzy polecaj rwnie
lektur artykuw publikowanych przez TESO (www.team-teso.net/articles/
formatstring) oraz HERT (www.hert.org/papers/format.html).

You might also like