The Shellcoders Handbook. Edycja polska - Helion
Tytuł oryginału: The Shellcoders Handbook
Tłumaczenie: Jaromir Senczyk
ISBN: 83-7361-597-0
stron: 560, Format: B5, okładka: miękka
Data wydania: 2004-09-21
Księgarnia: Helion
Cena książki: 59,90 zł
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.
Osoby które kupowały "The Shellcoders Handbook. Edycja polska", wybierały także:
- Learning Java Lambdas 373,75 zł, (29,90 zł -92%)
- The DevOps 2.1 Toolkit: Docker Swarm 332,22 zł, (29,90 zł -91%)
- Securing Network Infrastructure 199,33 zł, (29,90 zł -85%)
- Mastering Linux Security and Hardening 186,88 zł, (29,90 zł -84%)
- Blockchain Development with Hyperledger 175,88 zł, (29,90 zł -83%)
Spis treści
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)