Szczegóły ebooka

Bezpieczne programowanie. Aplikacje hakeroodporne

Bezpieczne programowanie. Aplikacje hakeroodporne

Jacek Ross

Ebook

Wyjdź zwycięsko z pojedynku z krakerami!

  • Jak zabezpieczyć aplikację przed krakerami?
  • Jak stworzyć bezpieczne rozwiązania w PHP?
  • Jak utrudnić debugowanie Twojego kodu?

Wyobraź sobie sytuację, w której poświęcasz mnóstwo czasu na stworzenie nowego, ciekawego rozwiązania w świecie informatyki. Kosztuje Cię to wiele dni i nocy ogromnego wysiłku. Dokładnie w momencie opuszczenia Twojego bezpiecznego komputera, udostępniony światu, Twój pomysł zostaje wystawiony na ciężką próbę — w sieci działają krakerzy, którzy za wszelką cenę będę próbowali złamać Twoje zabezpieczenia lub wykorzystać luki w Twojej aplikacji. Jak tego uniknąć? Jak tworzyć oprogramowanie odporne na ich ataki?

Proste i przejrzyste odpowiedzi na podobnie skomplikowane pytania znajdziesz właśnie w tej książce! Podczas lektury poznasz zagrożenia, na jakie narażony jest programista, oraz proste sposoby utrudniania krakerom zadania. Dodatkowo zdobędziesz wiedzę na temat metod szyfrowania danych i wyznaczania sygnatur. Jednak, co najważniejsze, zobaczysz, jak wykorzystać tę wiedzę w praktyce! W publikacji "Bezpieczne programowanie. Aplikacje hakeroodporne " znajdziesz również sporo ciekawych informacji na temat zabezpieczania aplikacji sieciowych oraz zaawansowane metody, gwarantujące podniesienie bezpieczeństwa Twojego produktu do wysokiego poziomu. To jeszcze nie wszystko! W kolejnych rozdziałach autor prezentuje sposoby ochrony przed debugerami, patenty na bezpieczne tworzenie kodu na platformie .NET oraz psychologiczne aspekty tworzenia hakeroodpornych aplikacji!

  • Przegląd zagrożeń, rodzaje oszustw i naruszeń bezpieczeństwa
  • Zabezpieczenie programu przy użyciu numeru seryjnego
  • Dostępne na rynku systemy zabezpieczania aplikacji
  • Algorytmy szyfrujące
  • Tworzenie skrótów wiadomości
  • Wykorzystanie szyfrowania przy zabezpieczaniu oprogramowania
  • Zabezpieczenia aplikacji wykorzystujących PHP i .NET
  • Ochrona przed atakami typu: wstrzykiwanie SQL, XSS, DOS i DDOS
  • Używanie zaawansowanych metod ochrony oprogramowania
  • Sposoby zaciemniania programu
  • Ochrona kodu przed debugerami
  • Zastosowanie kluczy sprzętowych i technik biometrycznych
  • Psychologiczne aspekty ochrony oprogramowania

Dowiedz się, jak tworzyć aplikacje odporne na ataki!

Wstęp (9)

Rozdział 1. Zagrożenia czyhające na programistów (11)

  • 1.1. Dawno, dawno temu w świecie gier (11)
  • 1.2. Moje przygody z grą Metal Knights (14)
  • 1.3. Niebezpieczny edytor map, czyli słabe punkty (16)
  • 1.4. A jak to robią w Diablo... czyli coś o bezpieczeństwie aplikacji sieciowych (19)
  • 1.5. Rodzaje oszustw i naruszeń bezpieczeństwa (21)
    • 1.5.1. Nieuprawnione użycie bądź kopiowanie programu (21)
    • 1.5.2. Nielegalna podmiana autorstwa kodu (23)
    • 1.5.3. Nieuprawniona modyfikacja kodu (23)
  • 1.6. Pirat, Robin Hood, kraker? (24)
  • 1.7. Czy ja także mam myśleć o zabezpieczeniach? (25)
  • 1.8. Czym się różni kraker od złodzieja samochodów? (27)
  • Zadania do samodzielnego wykonania (30)
  • Pytania kontrolne (31)

Rozdział 2. Proste metody zabezpieczenia programów (33)

  • 2.1. Wstęp (33)
  • 2.2. Numer seryjny (33)
  • 2.3. CrackMe - przykłady słabości prostych zabezpieczeń przed nieuprawnionym użytkowaniem programu (35)
    • 2.3.1. CrackMe1 (35)
    • 2.3.2. CrackMe2 (42)
  • 2.4. Gotowe systemy zabezpieczania aplikacji przed nieuprawnionym użyciem (44)
    • Przegląd systemów zabezpieczających dostępnych na rynku (47)
  • 2.5. Zakończenie (50)
  • Zadania do samodzielnego wykonania (51)
  • Pytania kontrolne (51)

Rozdział 3. Teoria szyfrowania. Algorytmy szyfrujące w praktyce (53)

  • 3.1. Wstęp (53)
  • 3.2. Szyfrowanie i kodowanie informacji (53)
  • 3.3. Historyczne algorytmy szyfrowania i kodowania (54)
    • 3.3.1. Początki (54)
    • 3.3.2. Szyfry przestawieniowe i podstawieniowe, szyfr Cezara (55)
    • 3.3.3. Szyfry polialfabetyczne (55)
    • 3.3.4. Zasada Kerckhoffsa (56)
  • 3.4. Współczesne algorytmy szyfrowania (56)
    • 3.4.1. Rozwój algorytmów szyfrowania (56)
    • 3.4.2. Algorytmy symetryczne. Algorytm RC4 (57)
    • 3.4.3. Szyfrowanie symetryczne, algorytm DES (61)
    • 3.4.4. Szyfrowanie symetryczne, algorytm AES (61)
    • 3.4.5. Szyfrowanie asymetryczne, algorytm RSA (61)
    • 3.4.6. Podpis cyfrowy (63)
    • 3.4.7. Szyfr z kluczem jednorazowym (63)
  • 3.5. Algorytmy wyznaczające sygnatury (skróty) danych (64)
    • 3.5.1. Algorytm wyznaczania CRC (64)
    • 3.5.2. Algorytm MD5 (65)
    • 3.5.3. Algorytm SHA-1 (65)
  • 3.6. Generatory liczb pseudolosowych (69)
  • 3.7. Do czego może służyć szyfrowanie w zabezpieczaniu programów? (70)
  • Zadania do samodzielnego wykonania (71)
  • Pytania kontrolne (71)

Rozdział 4. Zabezpieczanie programów sieciowych na przykładzie języka PHP (73)

  • 4.1. Wstęp (73)
  • 4.2. Obsługa danych z zewnątrz (74)
  • 4.3. Przekazywanie danych między skryptami (75)
  • 4.4. Uwierzytelnianie w PHP (76)
  • 4.5. Niebezpieczne konstrukcje języka (79)
    • 4.5.1. Konstrukcja include ($plik) (80)
    • 4.5.2. eval($code), konstrukcja $$ (81)
    • 4.5.3. fopen($url) (82)
  • 4.6. Bezpieczna obsługa błędów (83)
  • 4.7. Bezpieczeństwo systemu plików (84)
  • 4.8. Cross site scripting (85)
  • 4.9. Wstrzykiwanie kodu SQL (86)
    • 4.9.1. Wstrzykiwanie kodu SQL - przykład 1. (87)
    • 4.9.2. Wstrzykiwanie kodu SQL - przykład 2. (90)
    • 4.9.3. Użycie PDO (91)
    • 4.9.4. Ataki wielofazowe (92)
    • 4.9.5. Sposoby ochrony (92)
  • 4.10. Wstrzykiwanie poleceń systemowych (shell injection) (93)
  • 4.11. Wstrzykiwanie zawartości e-mail (e-mail injection) (94)
  • 4.12. Cross site request forgery (95)
  • 4.13. Przejęcie kontroli nad sesją (session fixation) (97)
  • 4.14. Session poisoning (101)
    • 4.14.1. Przechowywanie stanu aplikacji w niezabezpieczonych miejscach (101)
    • 4.14.2. Przypisanie wartości do zmiennej sesyjnej o nazwie stworzonej na podstawie danych od użytkownika (104)
    • 4.14.3. Podmiana sekwencji wywołań przez włamywacza. Problem wyścigu (105)
    • 4.14.4. Używanie tych samych zmiennych sesyjnych do różnych celów (106)
    • 4.14.5. Zmienne sesyjne nie są gwarancją bezpieczeństwa (108)
  • 4.15. Ataki typu DOS i DDOS (110)
  • 4.16. Dyrektywa register_globals (112)
  • 4.17. Narzędzie zaciemniające kod źródłowy języka PHP (114)
  • Zakończenie (116)
  • Zadania do samodzielnego wykonania (116)
  • Pytania kontrolne (116)

Rozdział 5. Zaawansowane metody zabezpieczania programów (121)

  • 5.1. Wstęp (121)
  • 5.2. Klucze rejestracyjne przypisane do użytkownika (122)
    • 5.2.1. Idea kluczy rejestracyjnych przypisanych do użytkownika (122)
    • 5.2.2. Typowe techniki (124)
    • 5.2.3. Tworzenie kluczy rejestracyjnych w aplikacjach sieciowych (125)
  • 5.3. Samotestujący się program (126)
    • 5.3.1. Testowanie integralności programu gwarancją jego oryginalności (126)
    • 5.3.2. Przykład - weryfikacja integralności pliku wykonywalnego (127)
    • 5.3.3. Przykład - weryfikacja integralności kodu programu (132)
  • 5.4. Sprawdzanie integralności danych (135)
    • 5.4.1. Ukryj moje dane (136)
    • 5.4.2. Testowanie integralności danych ulegających zmianom (137)
    • 5.4.3. Wersje czasowe oprogramowania - kłopoty z shareware (138)
    • 5.4.4. Bezpieczne przechowywanie danych - przykład (140)
  • 5.5. Samomodyfikujący się program (144)
    • 5.5.1. Samomodyfikujący się program. Brzydka sztuczka czy eleganckie zabezpieczenie? (144)
    • 5.5.2. Sabotaż, czyli jak ukarać krakera? (146)
    • 5.5.3. "Za 5 sekund ten program ulegnie samozniszczeniu" - automatyczna deinstalacja programu (147)
    • 5.5.4. "Kod o ograniczonej przydatności do wykonania" (148)
  • 5.6. Klucz programowy (150)
    • 5.6.1. Klucz programowy - przykład (151)
    • 5.6.2. Deszyfrowanie fragmentów programu w trakcie jego działania (156)
    • 5.6.3. Przykład programu deszyfrującego się w trakcie działania (158)
  • 5.7. Zaciemnianie kodu i danych programu (161)
    • 5.7.1. Czy to wciąż open source? Zaciemnianie kodu jako metoda obronna (161)
  • 5.8. Zabezpieczenia. Jak to w praktyce wprowadzić w życie (163)
    • 5.8.1. Zabezpieczenia a etapy produkcji (163)
    • 5.8.2. Generator zabezpieczeń (164)
  • Zadania do samodzielnego wykonania (165)
  • Pytania kontrolne (166)

Rozdział 6. Zabezpieczenie programów przed debugerami (167)

  • 6.1. Wstęp (167)
  • 6.2. Wykrywanie debugerów (168)
  • 6.3. Utrudnianie debugowania (169)
    • 6.3.1. Wstawki kodu utrudniające debugowanie (169)
    • 6.3.2. Generator wstawek kodu utrudniających debugowanie (172)
  • Zadania do samodzielnego wykonania (175)
  • Pytania kontrolne (175)

Rozdział 7. Wykorzystanie internetu do zabezpieczania programów (177)

  • 7.1. Wstęp (177)
  • 7.2. Rejestracja programu przez internet (178)
  • 7.3. Aktywacja numeru seryjnego przez internet (179)
  • 7.4. Kontrola użytkowania aplikacji z częściowym dostępem do internetu (180)
  • 7.5. Weryfikacja prawidłowej pracy aplikacji przez sieć (181)
  • 7.6. Przechowywanie poufnych danych użytkownika (182)
  • 7.7. Deszyfrowanie programu w trakcie działania a internet (183)
  • 7.8. Fragmentaryczne dane pobierane z internetu (185)
  • 7.9. Przesyłanie informacji o programie do centralnego serwera (186)
    • 7.9.1. Totalna inwigilacja? Rejestrowanie informacji o zachowaniu programu i użytkownika (186)
    • 7.9.2. Zdalne sprawdzanie tożsamości użytkownika (188)
    • 7.9.3. Zdalne i lokalne blokowanie działania programu sterowanego danymi z centralnego serwera (191)
  • 7.10. Wirtualne wybory (192)
  • Zadania do samodzielnego wykonania (196)
  • Pytania kontrolne (196)

Rozdział 8. Zabezpieczanie programów przy użyciu kluczy sprzętowych oraz technik biometrycznych (197)

  • 8.1. Wstęp (197)
  • 8.2. Zabezpieczenie aplikacji za pomocą kluczy sprzętowych (198)
    • 8.2.1. Karty magnetyczne i elektroniczne (198)
    • 8.2.2. Podpis cyfrowy na trwałym nośniku (199)
    • 8.2.3. Klucze sprzętowe w zabezpieczaniu oprogramowania (200)
  • 8.3. Technologie GPS i RFID, geolokalizacja (201)
    • 8.3.1. Technologie GPS i RFID (201)
    • 8.3.2. Problemy etyczne i moralne postępu technicznego związanego z lokalizacją i kontrolą użytkowników (202)
  • 8.4. Weryfikacja tożsamości za pomocą technik biometrycznych (203)
    • 8.4.1. Techniki biometryczne (203)
    • 8.4.2. Indywidualne oprogramowanie (204)
  • 8.5. Szpiegostwo elektroniczne (204)
    • 8.5.1. Włamania do sieci bezprzewodowych (204)
    • 8.5.2. Przechwytywanie fal elektromagnetycznych (205)
  • Pytania kontrolne (206)

Rozdział 9. Tworzenie bezpiecznych aplikacji w środowisku .NET (207)

  • 9.1. Wstęp (207)
  • 9.2. Autoryzacja oparta na uprawnieniach i rolach (Role-Based Authorization) (208)
    • 9.2.1. Uprawnienia, interfejs IPermission, klasa Principal (209)
    • 9.2.2. Autoryzacja nakazowa oparta na rolach (Imperative Role-Based Security) (210)
    • 9.2.3. Autoryzacja deklaracyjna oparta na rolach (Declarative Role-Based Security) (213)
  • 9.3. Zabezpieczenie dostępu kodu do zasobów (Code Access Security) (215)
    • 9.3.1. Nakazowe zabezpieczenie dostępu kodu do zasobów (Imperative Code Access Security) (215)
    • 9.3.2. Deklaracyjne zabezpieczenie dostępu kodu do zasobów (Declarative Code Access Security) (219)
    • 9.3.3. Poziomy reguł bezpieczeństwa (Security Policy Level) (220)
    • 9.3.4. Narzędzie The Code Access Security Policy Utility - caspol.exe (221)
  • 9.4. Bezpieczeństwo ASP.NET (222)
    • 9.4.1. Metody uwierzytelniania w ASP.NET (222)
    • 9.4.2. Dostęp anonimowy (223)
    • 9.4.3. Uwierzytelnianie systemu Windows (223)
    • 9.4.4. Uwierzytelnianie przy użyciu formularza (226)
    • 9.4.5. Uwierzytelnianie za pomocą .NET Passport (228)
    • 9.4.6. Bezpieczna komunikacja za pomocą SSL (228)
  • 9.5. Tworzenie silnych nazw podzespołom (230)
  • Zadania do samodzielnego wykonania (231)
  • Pytania kontrolne (232)

Rozdział 10. Bezpieczny Program (235)

  • 10.1. Wstęp (235)
  • 10.2. Opis programu (236)
  • 10.3. Przegląd kodu źródłowego (238)
    • 10.3.1. BezpiecznyProgram.exe (238)
    • 10.3.2. ZabezpieczBP.exe (245)
    • 10.3.3. StwórzKluczBP.exe (246)
  • 10.4. Wnioski (247)
  • Zadania do samodzielnego wykonania (249)

Rozdział 11. Psychologiczna strona bezpieczeństwa (251)

  • 11.1. Wstęp (251)
  • 11.2. Wpływ architektury programu na jego bezpieczeństwo (251)
  • 11.3. "Tylne wejścia" i kod tymczasowy (253)
  • 11.4. Użycie gotowego kodu (254)
  • 11.5. Open source (256)
  • 11.6. Tańczące świnki kontra bezpieczeństwo (257)
  • 11.7. Security by obscurity - zabezpieczanie przez zaciemnianie (258)
  • 11.8. Karanie włamywacza (260)
  • 11.9. Brzytwa Ockhama (261)
  • 11.10. Użycie socjotechniki (261)
  • 11.11. Nie poprawiaj włamywacza (262)
  • 11.12. Walka ze script kiddies (263)
  • 11.13. Ochrona przed automatami (264)
  • 11.14. Ataki z wewnątrz (267)
  • 11.15. Łańcuch a sieć zabezpieczeń (267)
  • 11.16. Całościowe spojrzenie na problem bezpieczeństwa (268)
  • Pytania kontrolne (270)

Podsumowanie (273)

Odpowiedzi do pytań kontrolnych (281)

Słowniczek pojęć (293)

Skorowidz (301)

  • Tytuł: Bezpieczne programowanie. Aplikacje hakeroodporne
  • Autor: Jacek Ross
  • ISBN: 978-83-246-5392-8, 9788324653928
  • Data wydania: 2012-06-20
  • Format: Ebook
  • Identyfikator pozycji: beprog
  • Wydawca: Helion