The Shellcoders Handbook. Edycja polska

Autorzy:

Szczegóły książki w Helionie
Tytuł oryginału: The Shellcoders Handbook
ISBN: 83-7361-597-0
Cena: 59.9 zł
Oprawa: miękka
Format: B5
Data wydania: 2004.09.21
Liczba stron: 560
Przykładowy rozdział: ftp://ftp.helion.pl/online/shell/shell-8.pdf
Kategoria: Hacking

Usuń luki w zabezpieczeniach programów i systemów operacyjnych

  • Poznaj przyczyny powstawania luk
  • Naucz się sposobów włamań do systemów
  • Podejmij odpowiednie środki zapobiegawcze

Niemal co tydzień dowiadujemy się o nowych "łatach" usuwających luki w zabezpieczeniach systemów operacyjnych i programów. Niestety -- często, zanim łata zostanie rozpowszechniona i zainstalowana na komputerach, ktoś wykorzysta "dziurę" w systemie i włamie się do niego. Cóż więc zrobić, aby zabezpieczyć swoje dane przez atakiem hakera? Jak znaleźć słabe punkty zabezpieczeń i usunąć je? W jaki sposób zaimplementować odpowiednie zabezpieczenia w tworzonym przez siebie oprogramowaniu?

Książka "The Shellcoder’s handbook. Edycja polska" zawiera odpowiedzi na wszystkie te pytania. Książka będąca efektem pracy zespołu złożonego ze specjalistów w zakresie bezpieczeństwa systemów komputerowych, analityków i hakerów przedstawia sposoby wykrywania słabych punktów oprogramowania tworzonego w języku C i sprawdzenia możliwości ich wykorzystania. Opisuje luki w istniejących systemach i programach oraz sposoby ich zabezpieczenia. Zawarte w niej wiadomości pozwolą na tworzenie własnych systemów wykrywania błędów i pomogą ustalić, czy błędy te stanowią potencjalne zagrożenie.

  • Podstawowe metody włamań do różnych systemów operacyjnych
  • Techniki przepełniania stosu, wykorzystywania kodu powłoki i błędów łańcuchów formatujących
  • Kontrola słabych punktów programów metodami wstrzykiwania kodu i fuzzingu
  • Kontrola kodu źródłowego programów
  • Klasy błędów
  • Sposoby śledzenia słabych punktów
  • Analiza kodu binarnego
  • Tworzenie eksploitów
  • Ataki na systemy zarządzania bazami danych

Nie dopuść do tego, aby Twoje programy padły ofiarą ataku hakera.

The Shellcoders Handbook. Edycja polska -- spis treści

O Autorach (13)

Część I Wprowadzenie do metod włamań: Linux na procesorach x86 (15)

Rozdział 1. Wprowadzenie (17)

  • Podstawowe pojęcia (17)
    • Zarządzanie pamięcią (18)
    • Asembler (20)
  • Rozpoznawanie przekładu kodu C++ w języku asemblera (21)
  • Podsumowanie (23)

Rozdział 2. Przepełnienia stosu (25)

  • Bufory (25)
  • Stos (27)
    • Wywołania funkcji i stos (28)
  • Przepełnianie buforów na stosie (31)
    • Wykorzystanie rejestru EIP (32)
  • Zdobywanie uprawnień root (34)
    • Problem adresu (36)
    • Metoda rozkazów NOP (39)
  • Stos zabraniający wykonywania rozkazów (41)
    • Metoda powrotu do biblioteki libc (41)
  • Podsumowanie (44)

Rozdział 3. Kod powłoki (45)

  • Wywołania systemowe (46)
  • Kod powłoki używający wywołania systemowego exit() (48)
  • Wstrzykiwanie kodu powłoki (51)
  • Tworzenie nowej powłoki (53)
  • Podsumowanie (61)

Rozdział 4. Błędy łańcuchów formatujących (63)

  • Warunki wstępne (63)
  • Łańcuchy formatujące (63)
  • Błędy łańcuchów formatujących (65)
  • Włamania za pomocą łańcuchów formatujących (69)
    • Atak na usługę (70)
    • Ujawnianie informacji (71)
  • Przejęcie sterowania (76)
  • Jak to możliwe? (85)
  • Przegląd technik łańcucha formatującego (85)
  • Podsumowanie (88)

Rozdział 5. Wprowadzenie do metod przepełnienia sterty (89)

  • Sterta (89)
    • Zarządzanie stertą (91)
  • Wyszukiwanie przepełnień sterty (91)
    • Podstawowe metody przepełniania sterty (92)
    • Średnio zaawansowane metody przepełniania stosu (98)
    • Zaawansowane przepełnienia sterty (104)
  • Podsumowanie (105)

Część II Włamania na platformach Windows, Solaris i Tru64 (107)

Rozdział 6. Wprowadzenie do systemu Windows (109)

  • Różnice między systemami Linux i Windows (109)
    • Win32 i PE-COFF (110)
  • Sterty (112)
    • Wątki (113)
  • Zalety i wady DCOM i DCE-RPC (114)
    • Rozpoznanie (116)
    • Włamania (117)
    • Tokeny i podszywanie (118)
    • Obsługa wyjątków w Win32 (120)
  • Śledzenie działania programów w systemie Windows (121)
    • Błędy w Win32 (122)
    • Tworzenie kodu powłoki w systemie Windows (122)
    • Przewodnik hakera po funkcjach Win32 (123)
    • Rodzina systemów Windows z punktu widzenia hakera (123)
  • Podsumowanie (124)

Rozdział 7. Kody powłoki w Windows (125)

  • Składnia i filtry (125)
  • Przygotowywanie kodu powłoki (126)
  • Parsowanie bloków PEB (127)
    • Analiza kodu heapoverflow.c (128)
  • Przeszukiwanie z użyciem obsługi wyjątków (143)
  • Tworzenie nowej powłoki (146)
    • Dlaczego nie warto tworzyć nowej powłoki w Windows (147)
  • Podsumowanie (148)

Rozdział 8. Przepełnienia w systemie Windows (149)

  • Przepełnienia buforów na stosie (149)
    • Procedury obsługi wyjątków dla ramek wywołań funkcji (150)
    • Wykorzystanie procedur obsługi wyjątków na platformie Windows 2003 Server (154)
    • Końcowe uwagi na temat nadpisań procedur obsługi wyjątków (158)
  • Ochrona stosu i Windows 2003 Server (159)
  • Przepełnienia sterty (164)
    • Sterta procesu (164)
    • Sterty dynamiczne (165)
    • Korzystanie ze sterty (165)
    • Jak działa sterta (165)
  • Wykorzystanie przepełnień sterty (168)
    • Nadpisanie wskaźnika funkcji RtlEnterCriticalSection w bloku PEB (169)
    • Nadpisanie wskaźnika pierwszej wektoryzowanej procedury obsługi wyjątków pod adresem 77FC3210 (171)
    • Nadpisanie wskaźnika filtra nieobsłużonych wyjątków (174)
    • Nadpisanie wskaźnika procedury obsługi wyjątków w bloku TEB (179)
    • Naprawa sterty (180)
    • Inne aspekty przepełnień sterty (182)
    • Podsumowanie przepełnień sterty (183)
  • Inne przepełnienia (183)
    • Przepełnienia sekcji .data (183)
    • Przepełnienia bloków TEB i PEB (185)
  • Przepełnienie buforów i stosy zabraniające wykonania kodu (185)
  • Podsumowanie (190)

Rozdział 9. Filtry (191)

  • Tworzenie eksploitów i filtry alfanumeryczne (191)
  • Tworzenie eksploitów i filtry Unicode (195)
    • Unicode (195)
    • Konwersja z ASCII na Unicode (196)
  • Wykorzystanie słabych punktów związanych z kodem Unicode (196)
    • Zbiór rozkazów dostępnych dla eksploitów Unicode (197)
  • Metoda wenecka (198)
    • Implementacja metody weneckiej dla kodu ASCII (199)
  • Dekoder i dekodowanie (202)
    • Kod dekodera (203)
    • Ustalenie adresu bufora (204)
  • Podsumowanie (205)

Rozdział 10. Wprowadzenie do włamań w systemie Solaris (207)

  • Wprowadzenie do architektury SPARC (208)
    • Rejestry i okna rejestrów (208)
    • Szczelina zwłoki (210)
    • Rozkazy złożone (211)
  • Kody powłoki na platformie Solaris/SPARC (211)
    • Kod powłoki i określanie własnego położenia (212)
    • Prosty kod powłoki dla platformy SPARC (212)
    • Przydatne wywołania systemu Solaris (213)
    • Rozkaz NOP i rozkazy wypełniające (214)
  • Ramki na stosie platformy Solaris/SPARC (214)
  • Techniki przepełnień stosu (215)
    • Przepełnienia o dowolnym rozmiarze (215)
    • Okna rejestrów komplikują przepełnienia stosu (216)
    • Inne czynniki utrudniające przepełnienia stosu (216)
    • Możliwe rozwiązania (217)
    • Przepełnienia jednym bajtem (217)
    • Położenie kodu powłoki (218)
  • Przykłady przepełnień stosu (219)
    • Atakowany program (219)
    • Eksploit (221)
  • Przepełnienia sterty na platformie Solaris/SPARC (224)
    • Wprowadzenie do sterty systemu Solaris (224)
    • Struktura drzewa sterty (225)
  • Metoda podstawowa (t_delete) (243)
    • Ograniczenia standardowych przepełnień sterty (246)
    • Cele nadpisań (247)
  • Inne słabe punkty sterty (249)
    • Przepełnienia jednym bajtem (250)
    • Podwójne zwolnienie (250)
    • Inne błędy funkcji free() (250)
  • Przykład przepełnienia sterty (251)
    • Atakowany program (251)
  • Inne techniki włamań w systemie Solaris (255)
    • Przepełnienia danych statycznych (255)
    • Obejście zabezpieczenia stosu (255)
  • Podsumowanie (256)

Rozdział 11. Zaawansowane metody włamań w systemie Solaris (257)

  • Śledzenie modułu dynamicznej konsolidacji krok po kroku (258)
  • Sztuczki przepełnień sterty Solaris/SPARC (271)
  • Zaawansowany kod powłoki na platformie Solaris/SPARC (273)
  • Podsumowanie (284)

Rozdział 12. Włamania w systemie HP Tru64 Unix (285)

  • Architektura procesorów Alpha (286)
    • Rejestry procesorów Alpha (286)
    • Zbiór rozkazów (287)
    • Konwencje wywołań (287)
  • Pobieranie licznika rozkazów (GetPC) (289)
  • Wywołania systemowe (291)
  • Dekoder XOR dla kodu powłoki (291)
  • Kod powłoki setuid + execve (293)
    • Wywołania systemowe setuid(0) i execve("/bin/sh", ...) (293)
    • Kompilacja kodu w asemblerze i wyodrębnienie kodu powłoki (294)
    • Kodowanie uzyskanych kodów powłoki funkcją XOR (295)
    • Dołączenie zakodowanego kodu do dekodera XOR (296)
    • Kompilacja i wyodrębnienie ostatecznej postaci kodu powłoki (297)
  • Kod powłoki zestawiający połączenie zwrotne (299)
  • Kod powłoki wyszukujący gniazdo sieciowe (300)
  • Kod powłoki dowiązujący gniazdo sieciowe (301)
  • Przepełnienia stosu (303)
    • Obejście ochrony stosu (303)
  • Włamanie do usługi rpc.ttdbserver (304)
  • Podsumowanie (311)

Część III Wykrywanie słabych punktów (313)

Rozdział 13. Tworzenie środowiska pracy (315)

  • Źródła informacji (316)
  • Narzędzia do tworzenia kodu (316)
    • gcc (316)
    • gdb (317)
    • NASM (317)
    • WinDbg (317)
    • OllyDbg (317)
    • SoftICE (318)
    • Visual C++ (318)
    • Python (318)
  • Narzędzia śledzenia kodu (318)
    • Własne skrypty (318)
    • Wszystkie platformy (320)
    • Unix (320)
    • Windows (321)
  • Artykuły, które powinieneś przeczytać (322)
    • Archiwa artykułów (324)
  • Optymalizacja procesu tworzenia kodu powłoki (325)
    • Plan eksploitu (325)
    • Tworzenie kodu powłoki za pomocą asemblera wbudowanego w kompilator (325)
    • Biblioteka kodów powłoki (327)
    • Kontynuacja działania atakowanego procesu (327)
    • Zwiększanie stabilności eksploitu (328)
    • Wykorzystanie istniejącego połączenia (329)
  • Podsumowanie (330)

Rozdział 14. Wstrzykiwanie błędów (331)

  • Ogólny projekt systemu (332)
    • Generowanie danych wejściowych (332)
    • Wstrzykiwanie błędów (335)
    • Moduł modyfikacji (335)
    • Dostarczanie błędów do aplikacji (339)
    • Algorytm Nagla (340)
    • Zależności czasowe (340)
    • Heurystyki (340)
    • Protokoły ze stanem i bez (341)
  • Monitorowanie błędów (341)
    • Wykorzystanie programu uruchomieniowego (341)
    • FaultMon (342)
  • Kompletna aplikacja testująca (342)
  • Podsumowanie (343)

Rozdział 15. Fuzzing (345)

  • Ogólna teoria fuzzingu (345)
    • Analiza statyczna kontra fuzzing (349)
    • Fuzzing jest skalowalny (349)
  • Wady fuzzerów (351)
  • Modelowanie dowolnych protokołów sieciowych (352)
  • Inne technologie fuzzerów (352)
    • Migotanie bitów (353)
    • Modyfikacja programów open source (353)
    • Fuzzing i analiza dynamiczna (353)
  • SPIKE (354)
    • Jak działa SPIKE? (354)
    • Zalety stosowania struktur programu SPIKE do modelowania protokołów sieciowych (355)
  • Inne fuzzery (362)
  • Podsumowanie (362)

Rozdział 16. Kontrola kodu źródłowego (363)

  • Narzędzia (364)
    • Cscope (364)
    • Ctags (365)
    • Edytory (365)
    • Cbrowser (365)
  • Zautomatyzowane narzędzia kontroli kodu źródłowego (366)
  • Metodologia (367)
    • Metoda zstępująca (367)
    • Metoda wstępująca (367)
    • Metoda selektywna (367)
  • Klasy błędów (368)
    • Ogólne błędy logiki (368)
    • (Prawie) wymarłe klasy błędów (368)
    • Błędy łańcuchów formatujących (369)
    • Ogólne błędy określenia zakresu (370)
    • Pętle (371)
    • Przepełnienia jednym bajtem (372)
    • Błędy braku zakończenia łańcucha (373)
    • Błędy przeskoczenia bajtu zerowego (374)
    • Błędy porównania wartości ze znakiem (375)
    • Błędy związane z wartościami całkowitymi (376)
    • Konwersje wartości całkowitych o różnej reprezentacji (378)
    • Błędy podwójnego zwolnienia (379)
    • Użycie obszarów pamięci poza okresem ich ważności (380)
    • Użycie niezainicjowanych zmiennych (380)
    • Błędy użycia po zwolnieniu (381)
    • Wielowątkowość i kod wielobieżny (382)
  • Słabe punkty i zwykłe błędy (382)
  • Podsumowanie (383)

Rozdział 17. Ręczne wykrywanie błędów (385)

  • Filozofia (385)
  • Przepełnienie extproc systemu Oracle (386)
  • Typowe błędy architektury (390)
    • Problemy pojawiają się na granicach (390)
    • Problemy pojawiają się podczas przekładu danych (391)
    • Problemy występują w obszarach asymetrii (393)
    • Problemy uwierzytelniania i autoryzacji (393)
    • Problemy występują w najbardziej oczywistych miejscach (394)
  • Obejście kontroli danych wejściowych i wykrywanie ataku (394)
    • Filtrowanie niedozwolonych danych (395)
    • Zastosowanie alternatywnego kodowania (395)
    • Dostęp do plików (396)
    • Unikanie sygnatur ataków (398)
    • Pokonywanie ograniczeń długości (398)
  • Atak typu DOS na implementację SNMP w Windows 2000 (400)
  • Wykrywanie ataków typu DOS (401)
  • SQL-UDP (402)
  • Podsumowanie (403)

Rozdział 18. Śledzenie słabych punktów (405)

  • Wprowadzenie (406)
    • Przykładowy program zawierający słaby punkt (406)
    • Projekt komponentów (409)
    • Budujemy VulnTrace (416)
    • Posługiwanie się biblioteką VulnTrace (421)
    • Techniki zaawansowane (424)
  • Podsumowanie (425)

Rozdział 19. Audyt kodu binarnego (427)

  • Audyt kodu binarnego i kontrola kodu źródłowego - podobieństwa i różnice (427)
  • IDA Pro (428)
    • Krótki kurs obsługi (429)
    • Symbole uruchomieniowe (430)
  • Wprowadzenie do audytu kodu binarnego (430)
    • Ramki stosu (430)
    • Konwencje wywołań (432)
    • Kod generowany przez kompilator (433)
    • Konstrukcje typu memcpy (436)
    • Konstrukcje typu strlen (437)
    • Konstrukcje języka C++ (438)
    • Wskaźnik this (438)
  • Odtwarzanie definicji klas (438)
    • Tablice funkcji wirtualnych (439)
    • Proste, ale przydatne wskazówki (440)
  • Ręczna analiza kodu binarnego (440)
    • Szybka weryfikacja wywołań bibliotecznych (440)
    • Podejrzane pętle i rozkazy zapisu (440)
    • Błędy logiki (441)
    • Graficzna analiza kodu binarnego (442)
    • Ręczna dekompilacja (442)
  • Przykłady analizy kodu binarnego (443)
    • Błędy serwera Microsoft SQL (443)
    • Błąd RPC-DCOM wykryty przez grupę LSD (444)
    • Błąd IIS WebDAV (444)
  • Podsumowanie (446)

Część IV Techniki zaawansowane (447)

Rozdział 20. Alternatywne strategie eksploitów (449)

  • Modyfikacja programu (450)
  • Modyfikacja 3 bajtów kodu systemu SQL Server (450)
  • MySQL i modyfikacja 1 bitu (454)
  • Modyfikacja uwierzytelniania RSA w OpenSSH (456)
  • Inne koncepcje modyfikacji działającego kodu (457)
    • Modyfikacja generatora losowego w GPG 1.2.2 (458)
  • Serwer progletów (459)
  • Proxy wywołań systemowych (459)
  • Problemy związane z proxy wywołań systemowych (461)
  • Podsumowanie (470)

Rozdział 21. Eksploity działające w rzeczywistym środowisku (471)

  • Czynniki wpływające na niezawodność (471)
    • Magiczne adresy (471)
    • Problem wersji (472)
    • Problemy kodu powłoki (473)
  • Środki zaradcze (475)
    • Przygotowanie (476)
    • Metoda pełnego przeglądu (476)
    • Lokalny eksploit (477)
    • Sygnatury systemów i aplikacji (477)
    • Wycieki informacji (479)
  • Podsumowanie (479)

Rozdział 22. Ataki na systemy baz danych (481)

  • Ataki w warstwie sieciowej (482)
  • Ataki w warstwie aplikacji (491)
  • Wykonywanie poleceń systemu operacyjnego (491)
    • Microsoft SQL Server (492)
    • Oracle (492)
    • IBM DB2 (493)
  • Wykorzystanie przepełnień na poziomie języka SQL (495)
    • Funkcje języka SQL (496)
  • Podsumowanie (497)

Rozdział 23. Przepełnienia jądra (499)

  • Typy słabych punktów jądra (499)
  • Słabe punkty jądra (507)
    • Przepełnienie stosu przez wywołanie exec_ibcs2_coff_prep_zmagic() w systemie OpenBSD (507)
    • Słaby punkt (508)
  • Funkcja vfs_getvfssw() i możliwość przeglądania modułów jądra w systemie Solaris (512)
    • Wywołanie systemowe sysfs() (514)
    • Wywołanie systemowe mount() (514)
  • Podsumowanie (515)

Rozdział 24. Wykorzystanie słabych punktów jądra (517)

  • Słaby punkt funkcji exec_ibcs2_coff_prep_zmagic() (517)
    • Wyznaczenie przesunięć i adresów pułapek (522)
    • Nadpisanie adresu powrotu i przejęcie sterowania (523)
    • Wyszukiwanie deskryptora procesu (lub struktury proc) (524)
    • Kod eksploitu wykonywany w trybie jądra (526)
    • Powrót kodu wykonywanego na poziomie jądra (528)
    • Uzyskanie uprawnień root (uid=0) (533)
  • Eksploit słabego punktu funkcji vfs_getvfssw() systemu Solaris (538)
    • Eksploit (539)
    • Moduł jądra (540)
    • Uzyskanie uprawnień root (uid=0) (543)
  • Podsumowanie (544)

Dodatki (545)

Skorowidz (547)

©2007 Włodzimierz Gajda