Cyfroteka.pl

klikaj i czytaj online

Cyfro
Czytomierz
00000 003810 19001233 na godz. na dobę w sumie
Atak na sieć okiem hakera. Wykrywanie i eksploatacja luk w zabezpieczeniach sieci - książka
Atak na sieć okiem hakera. Wykrywanie i eksploatacja luk w zabezpieczeniach sieci - książka
Autor: Liczba stron: 368
Wydawca: Helion Język publikacji: polski
ISBN: 978-83-283-5390-9 Data wydania:
Lektor:
Kategoria: ebooki >> komputery i informatyka >> sieci komputerowe >> protokoły
Porównaj ceny (książka, ebook (-35%), audiobook).

Gwałtowny rozwój i upowszechnienie technologii sieciowych sprawiły, że dziś praktycznie każdy codziennie korzysta z sieci, i to nie tylko za pomocą komputera czy telefonu. Do internetu można podłączyć również lodówki, kamery monitoringu, pralki czy telewizory. Urządzenia w sieci komputerowej komunikują się ze sobą według ustalonych protokołów, które, choć publicznie eksponowane, nie są przez użytkowników rozpoznane tak dobrze jak komponenty sprzętowe tych urządzeń. A przecież to na oprogramowanie, a nie na sprzęt ukierunkowana jest znakomita większość ataków sieciowych.

Ta książka jest praktycznym podręcznikiem analizy protokołów powszechnie wykorzystywanych w celu wykrywania tkwiących w nich luk w zabezpieczeniach. Została napisana z punktu widzenia hakera: dzięki zawartym w niej wskazówkom można samodzielnie rozpocząć analizę ruchu sieciowego i prowadzić eksperymenty z łamaniem zabezpieczeń. W książce znalazły się również szczegółowe opisy technik przechwytywania ruchu sieciowego, analizowania protokołów sieciowych oraz wykrywania i wykorzystywania ich słabych stron. Zagadnienia teoretyczne zostały tu umiejętnie połączone z czysto praktycznym podejściem do takich działań jak dysekcja protokołów, testowanie fazyjne, debugowanie i ataki prowadzące do wyczerpywania zasobów: pamięci, przestrzeni dyskowej i mocy procesorów.

W tej książce między innymi:

Najlepsze zabezpieczenie: spójrz na system z perspektywy hakera!

Znajdź podobne książki Ostatnio czytane w tej kategorii

Darmowy fragment publikacji:

Tytuł oryginału: Attacking Network Protocols: A Hacker’s Guide to Capture, Analysis, and Exploitation Tłumaczenie: Andrzej Grażyński ISBN: 978-83-283-5390-9 Copyright © 2018 by James Forshaw. Title of English-language original: Attacking Network Protocols: A Hacker’s Guide to Capture, Analysis, and Exploitation, ISBN 978-1-59327-750-5, published by No Starch Press. Polish-language edition copyright © 2019 by Helion S.A. All rights reserved. All rights reserved. No part of this book may be reproduced or transmitted in any form or by any means, electronic or mechanical, including photocopying, recording or by any information storage retrieval system, without permission from the Publisher. Wszelkie prawa zastrzeżone. Nieautoryzowane rozpowszechnianie całości lub fragmentu niniejszej publikacji w jakiejkolwiek postaci jest zabronione. Wykonywanie kopii metodą kserograficzną, fotograficzną, a także kopiowanie książki na nośniku filmowym, magnetycznym lub innym powoduje naruszenie praw autorskich niniejszej publikacji. Wszystkie znaki występujące w tekście są zastrzeżonymi znakami firmowymi bądź towarowymi ich właścicieli. Autor oraz Helion SA dołożyli wszelkich starań, by zawarte w tej książce informacje były kompletne i rzetelne. Nie biorą jednak żadnej odpowiedzialności ani za ich wykorzystanie, ani za związane z tym ewentualne naruszenie praw patentowych lub autorskich. Autor oraz Helion SA nie ponoszą również żadnej odpowiedzialności za ewentualne szkody wynikłe z wykorzystania informacji zawartych w książce. Helion SA ul. Kościuszki 1c, 44-100 Gliwice tel. 32 231 22 19, 32 230 98 63 e-mail: helion@helion.pl WWW: http://helion.pl (księgarnia internetowa, katalog książek) Pliki z przykładami omawianymi w książce można znaleźć pod adresem: ftp://ftp.helion.pl/przyklady/ataksi.zip Drogi Czytelniku! Jeżeli chcesz ocenić tę książkę, zajrzyj pod adres http://helion.pl/user/opinie/ataksi Możesz tam wpisać swoje uwagi, spostrzeżenia, recenzję. Printed in Poland. • Kup książkę • Poleć książkę • Oceń książkę • Księgarnia internetowa • Lubię to! » Nasza społeczność Spis treści O AUTORZE ............................................................................................. 10 O RECENZENCIE ...................................................................................... 10 PRZEDMOWA ........................................................................................... 11 PODZIĘKOWANIA ................................................................................... 15 WSTĘP ...................................................................................................... 17 Po co czytać tę książkę? .........................................................................................................17 Co znajdziesz w tej książce? ...................................................................................................18 Jak korzystać z tej książki? ......................................................................................................19 Skontaktuj się ze mną .............................................................................................................20 1 PODSTAWY SIECI KOMPUTEROWYCH .................................................... 21 Architektura sieci i protokoły sieciowe ..................................................................................21 Zestaw protokołów internetowych .......................................................................................23 Enkapsulacja danych ...............................................................................................................25 Nagłówki, stopki i adresy ...................................................................................................25 Transmisja danych ..............................................................................................................27 Trasowanie w sieci .................................................................................................................28 Mój model analizy protokołów sieciowych ............................................................................29 Podsumowanie .......................................................................................................................31 2 PRZECHWYTYWANIE RUCHU SIECIOWEGO ............................................ 33 Bierne przechwytywanie ruchu sieciowego ...........................................................................34 Wireshark — podstawy .........................................................................................................34 Alternatywne techniki biernego przechwytywania ................................................................37 Śledzenie wywołań funkcji systemowych ...........................................................................37 Linuksowy program strace .................................................................................................38 Monitorowanie połączeń sieciowych za pomocą programu DTrace .................................39 Monitor procesów Windows .............................................................................................41 Poleć książkęKup książkę Zalety i wady biernego przechwytywania ............................................................................. 43 Czynne przechwytywanie ruchu sieciowego ........................................................................ 43 Proxy sieciowe ...................................................................................................................... 44 Proxy z przekierowaniem portów .................................................................................... 44 Proxy SOCKS .................................................................................................................... 48 Proxy HTTP ...................................................................................................................... 53 Proxy przekazujące HTTP ................................................................................................ 54 Proxy odwrotne HTTP ..................................................................................................... 57 Podsumowanie ...................................................................................................................... 60 3 STRUKTURA PROTOKOŁÓW SIECIOWYCH ............................................. 61 Struktury protokołów binarnych ........................................................................................... 62 Dane numeryczne ............................................................................................................. 62 Tekst i dane czytelne dla człowieka .................................................................................. 68 Binarne dane o zmiennej długości ..................................................................................... 72 Data i czas ............................................................................................................................. 75 Czas w systemach Unix/POSIX ......................................................................................... 76 Znacznik FILETIME w systemie Windows ........................................................................ 76 Wzorzec typ – długość – wartość ......................................................................................... 76 Multipleksowanie i fragmentacja ........................................................................................... 77 Informacje sieciowe ............................................................................................................... 79 Strukturalne formaty binarne ................................................................................................ 80 Struktury protokołów tekstowych ........................................................................................ 81 Dane numeryczne ............................................................................................................. 81 Wartości logiczne (boolowskie) ........................................................................................ 82 Data i czas ......................................................................................................................... 82 Dane zmiennej długości ..................................................................................................... 82 Strukturalne formaty tekstowe ......................................................................................... 83 Kodowanie danych binarnych ................................................................................................ 86 Kodowanie szesnastkowe ................................................................................................. 86 Base64 ............................................................................................................................... 87 Podsumowanie ...................................................................................................................... 89 4 ZAAWANSOWANE TECHNIKI PRZECHWYTYWANIA RUCHU SIECIOWEGO ........................................... 91 Przetrasowywanie ruchu ....................................................................................................... 92 Program Traceroute .......................................................................................................... 92 Tablice trasowania ............................................................................................................. 93 Konfigurowanie routera ........................................................................................................ 95 Włączanie trasowania w Windows .................................................................................... 96 Włączanie trasowania w systemach uniksowych ............................................................... 96 4 S p i s t r e ś c i Poleć książkęKup książkę NAT — translacja adresów sieciowych .................................................................................97 Włączanie SNAT ................................................................................................................97 Konfigurowanie SNAT w Linuksie .....................................................................................98 Włączanie DNAT ...............................................................................................................99 Przekierowanie ruchu do bramy ..........................................................................................101 Ingerencja w DHCP .........................................................................................................101 Infekowanie ARP ..............................................................................................................104 Podsumowanie .....................................................................................................................107 5 ANALIZA „NA DRUCIE” ....................................................................... 109 SuperFunkyChat — aplikacja generująca ruch .....................................................................109 Uruchamianie serwera .....................................................................................................110 Uruchamianie aplikacji klienckiej ......................................................................................110 Komunikacja między aplikacjami klienckimi .....................................................................111 Wireshark na kursie kolizyjnym ...........................................................................................112 Generowanie ruchu sieciowego i przechwytywanie pakietów ........................................113 Podstawowa analiza .........................................................................................................115 Odczytywanie zawartości sesji TCP ................................................................................115 Identyfikowanie elementów struktury pakietu na podstawie zrzutu szesnastkowego ........117 Podgląd pojedynczych pakietów ......................................................................................117 Odkrywanie struktury protokołu .....................................................................................119 Weryfikowanie założeń ....................................................................................................120 Dysekcja protokołu przy użyciu języka Python ................................................................121 Dysektory dla Wiresharka w języku Lua ..............................................................................127 Tworzenie dysektora .......................................................................................................130 Dysekcja protokołu w języku Lua ....................................................................................131 Parsowanie pakietu komunikatu ......................................................................................132 Czynne analizowanie ruchu za pomocą proxy .....................................................................135 Konfigurowanie proxy ......................................................................................................136 Analiza protokołu przy użyciu proxy ................................................................................138 Podstawowe parsowanie protokołu ................................................................................140 Zmiany w zachowaniu się protokołu ...............................................................................142 Podsumowanie .....................................................................................................................144 6 INŻYNIERIA WSTECZNA ....................................................................... 147 Kompilatory, interpretery i asemblery .................................................................................148 Języki interpretowane ......................................................................................................149 Języki kompilowane .........................................................................................................149 Konsolidacja statyczna kontra konsolidacja dynamiczna ..................................................150 Architektura x86 ..................................................................................................................150 Zestaw instrukcji maszynowych .......................................................................................151 Rejestry procesora ...........................................................................................................152 Przepływ sterowania w programie ..................................................................................156 S p i s t r e ś c i 5 Poleć książkęKup książkę Podstawy systemów operacyjnych ...................................................................................... 157 Formaty plików wykonywalnych ..................................................................................... 157 Sekcje pliku wykonywalnego ........................................................................................... 158 Procesy i wątki ................................................................................................................ 159 Interfejs sieciowy systemu operacyjnego ........................................................................ 159 ABI — binarny interfejs aplikacji ...................................................................................... 162 Statyczna inżynieria wsteczna .............................................................................................. 164 Krótki przewodnik po IDA .............................................................................................. 164 Analiza stosu — zmienne lokalne i parametry ................................................................. 167 Rozpoznawanie kluczowych funkcji ................................................................................ 168 Dynamiczna inżynieria wsteczna ......................................................................................... 174 Punkty przerwań ............................................................................................................. 175 Okna debuggera .............................................................................................................. 175 Gdzie ustawiać punkty przerwań? ................................................................................... 177 Inżynieria wsteczna a kod zarządzany ................................................................................. 177 Aplikacje .NET ................................................................................................................. 178 Dekompilacja za pomocą ILSpy ....................................................................................... 179 Aplikacje Javy ................................................................................................................... 182 Inżynieria wsteczna a obfuskacja kodu ............................................................................ 184 Zasoby dotyczące inżynierii wstecznej ................................................................................ 185 Podsumowanie .................................................................................................................... 185 7 BEZPIECZEŃSTWO PROTOKOŁÓW SIECIOWYCH .................................. 187 Algorytmy szyfrowania ........................................................................................................ 188 Szyfry podstawieniowe .................................................................................................... 189 Szyfrowanie XOR ............................................................................................................ 190 Generatory liczb (pseudo)losowych .................................................................................... 191 Kryptografia symetryczna .................................................................................................... 192 Szyfry blokowe ................................................................................................................ 193 Tryby operacyjne szyfrów blokowych ............................................................................ 196 Dopełnianie szyfrowanych bloków .................................................................................. 199 Atak na dopełnienie z udziałem wyroczni ....................................................................... 200 Szyfry strumieniowe ........................................................................................................ 202 Kryptografia asymetryczna .................................................................................................. 202 Algorytm RSA .................................................................................................................. 204 Dopełnianie w szyfrowaniu RSA ...................................................................................... 206 Wymiana kluczy Diffiego-Hellmana ................................................................................. 206 Algorytmy podpisów ........................................................................................................... 208 Algorytmy haszowania ..................................................................................................... 208 Asymetryczne algorytmy podpisów ................................................................................ 209 Kody uwierzytelniania komunikatów .............................................................................. 210 Infrastruktura klucza publicznego ........................................................................................ 213 Certyfikaty X.509 ............................................................................................................ 213 Weryfikacja certyfikatów w łańcuchu .............................................................................. 215 6 S p i s t r e ś c i Poleć książkęKup książkę Analiza przypadku: protokół TLS .........................................................................................216 Uzgadnianie TLS ...............................................................................................................216 Negocjowanie wstępne ....................................................................................................217 Uwierzytelnianie punktów końcowych ............................................................................218 TLS a wymagania w zakresie bezpieczeństwa .................................................................221 Podsumowanie .....................................................................................................................223 8 IMPLEMENTOWANIE PROTOKOŁU SIECIOWEGO .................................. 225 Reprodukcja przechwyconego ruchu sieciowego ................................................................226 Przechwytywanie ruchu za pomocą Netcat ....................................................................226 Reprodukcja przechwyconych pakietów UDP ................................................................229 Reimplementacja proxy ....................................................................................................230 Ponowne wykorzystywanie kodu wykonywalnego .............................................................236 Kod aplikacji .NET ............................................................................................................237 Kod aplikacji w Javie .........................................................................................................242 Binarny kod maszynowy ..................................................................................................243 Neutralizacja szyfrowania w protokole TLS ........................................................................249 Rozpoznawanie stosowanego algorytmu szyfrowania .....................................................250 Deszyfracja danych protokołu TLS ..................................................................................251 Podsumowanie .....................................................................................................................257 9 IMPLEMENTACYJNE ZAGROŻENIA BEZPIECZEŃSTWA APLIKACJI ...... 259 Kategorie zagrożeń bezpieczeństwa ....................................................................................260 Zdalne wykonywanie kodu ..............................................................................................260 Blokada usług ...................................................................................................................260 Ujawnianie poufnych informacji .......................................................................................260 Omijanie uwierzytelniania ................................................................................................261 Omijanie autoryzacji .........................................................................................................261 Niszczenie zawartości pamięci .............................................................................................262 Pamięciowe bezpieczeństwo języków programowania ...................................................262 Przepełnienie bufora w pamięci .......................................................................................263 Błędy w indeksowaniu tablic ............................................................................................269 Niedozwolona ekspansja danych .....................................................................................270 Błędy dynamicznego przydziału pamięci ..........................................................................270 Domyślne i hardkodowane dane uwierzytelniające .............................................................271 Enumeracja użytkowników ..................................................................................................272 Nieprawidłowy dostęp do zasobów ....................................................................................273 Postać kanoniczna nazwy zasobu .....................................................................................273 Przegadana diagnostyka ...................................................................................................275 Wyczerpanie pamięci ...........................................................................................................276 Wyczerpanie przestrzeni w pamięci masowej .....................................................................278 S p i s t r e ś c i 7 Poleć książkęKup książkę Wyczerpanie mocy procesora ............................................................................................. 278 Kosztowne algorytmy ...................................................................................................... 279 Konfigurowalna kryptografia ........................................................................................... 281 Niebezpieczne formatowanie łańcuchów ........................................................................... 282 Wstrzykiwanie poleceń systemowych ................................................................................. 283 Wstrzykiwanie kodu SQL .................................................................................................... 284 Niebezpieczna konwersja tekstu ......................................................................................... 286 Podsumowanie .................................................................................................................... 287 10 WYKRYWANIE I EKSPLOATACJA LUK W ZABEZPIECZENIACH ............ 289 Testowanie fazyjne .............................................................................................................. 290 Najprostszy test fazyjny ................................................................................................... 290 Fuzzer mutacyjny ............................................................................................................. 291 Generowanie przypadków testowych ............................................................................ 292 Segregacja luk ...................................................................................................................... 292 Debugowanie aplikacji ..................................................................................................... 293 Narzędzia wspomagające analizę awarii .......................................................................... 300 Eksploatowanie typowych luk ............................................................................................. 303 Eksploatowanie nadpisywania pamięci ............................................................................ 303 Nieuprawniony zapis do plików wskutek nadpisywania zawartości pamięci .................. 311 Tworzenie kodu powłoki .................................................................................................... 314 Warsztat .......................................................................................................................... 315 Int3 — proste debugowanie ............................................................................................ 317 Wywołania systemowe .................................................................................................... 318 Wywoływanie zewnętrznych programów ....................................................................... 323 Generowanie kodu powłoki za pomocą Metasploita ...................................................... 325 Zapobieganie eksploatowaniu nadpisywania pamięci .......................................................... 327 DEP — zapobieganie wykonywaniu danych .................................................................... 327 Zapobieganie powrotom pod spreparowane adresy ...................................................... 328 ASLR — randomizacja przestrzeni adresowej ................................................................ 331 Kanarki na stosie .............................................................................................................. 334 Podsumowanie .................................................................................................................... 337 A NARZĘDZIA WSPOMAGAJĄCE ANALIZĘ PROTOKOŁÓW SIECIOWYCH ................................................. 339 Bierne przechwytywanie ruchu sieciowego i jego analiza ................................................... 340 Microsoft Message Analyzer ............................................................................................ 340 TCPDump i LibPCAP ...................................................................................................... 341 Wireshark ........................................................................................................................ 341 Czynne przechwytywanie ruchu sieciowego i jego analiza ................................................. 342 Canape ............................................................................................................................. 342 Canape Core ................................................................................................................... 343 Mallory ............................................................................................................................. 344 8 S p i s t r e ś c i Poleć książkęKup książkę Połączenia sieciowe i analizowanie protokołów ..................................................................344 HPing ................................................................................................................................344 Netcat ..............................................................................................................................344 NMap ...............................................................................................................................345 Testowanie aplikacji webowych ...........................................................................................345 Burp Suite .........................................................................................................................346 Zed Attack Proxy (ZAP) ..................................................................................................347 Mitmproxy ........................................................................................................................347 Testowanie fazyjne, generowanie pakietów, eksploatacja luk .............................................348 American Fuzzy Lop (AFL) ...............................................................................................348 Kali Linux ..........................................................................................................................349 Metasploit .........................................................................................................................349 Scapy ................................................................................................................................349 Sulley ................................................................................................................................350 Podsłuchiwanie sieci i przekierowywanie pakietów ............................................................350 DNSMasq .........................................................................................................................350 Ettercap ............................................................................................................................350 Inżynieria wsteczna kodu wykonywalnego ..........................................................................351 Java Decompiler (JD) ........................................................................................................351 IDA/IDA Pro .....................................................................................................................352 Hopper .............................................................................................................................353 ILSpy .................................................................................................................................353 .NET Reflector .................................................................................................................354 SKOROWIDZ .......................................................................................... 355 S p i s t r e ś c i 9 Poleć książkęKup książkę 32 R o z d z i ał 1 Poleć książkęKup książkę 2 Przechwytywanie ruchu sieciowego Wbrew pozorom efektywne przechwytywanie danych transmito- wanych w ramach ruchu sieciowego (efektywne, czyli prowadzone tak, by pozyskane dane okazały się rzeczywiście użyteczne w proce- sie analizy), nie jest zadaniem banalnym i stanowić może prawdziwe wyzwanie. W tym rozdziale omawiam dwa główne rodzaje prze- chwytywania: bierne (ang. passive) i czynne (ang. active). Prze- chwytywanie bierne polega na ekstrakcji przesyłanych danych bezpośrednio z łącza („drutu”) bez bezpośredniej ingerencji w ruch sieciowy; technika ta jest doskonale znana użytkownikom programu Wireshark i podobnych programów. Przechwytywanie czynne zaś oznacza ingerencję w dane przesyłane między klientem a serwerem i daje znacznie większe możliwości śledzenia niż prze- chwytywanie bierne, lecz za cenę dodatkowych komplikacji. Wygodnie jest myśleć o przechwytywaniu czynnym w kategoriach dodatkowego obiektu włączającego się w wymianę danych, którym to obiektem może być węzeł proxy lub fizyczny operator (człowiek). W dalszej części rozdziału zajmiemy się szczegółami wymie- nionych technik. Poleć książkęKup książkę Bierne przechwytywanie ruchu sieciowego Przechwytywanie bierne jest techniką raczej nieskomplikowaną, nie wymaga bowiem ani używania dodatkowego sprzętu, ani tworzenia własnego kodu. Dostęp do przesyłanych danych może odbywać się za pośrednictwem jednej z „końcó- wek” (czyli komputera klienta lub serwera). Można też pozyskiwać dane „z trasy” przez fizyczną ingerencję w łącze (na przykład poprzez nacięcie przewodu i fi- zyczne przyłączenie się do niego). Na rysunku 2.1 widoczny jest najprostszy wariant przechwytywania ruchu bezpośrednio z łącza ethernetowego. Rysunek 2.1. Przykład biernego przechwytywania ruchu sieciowego Wireshark — podstawy Wireshark to najpopularniejsza bodaj aplikacja do „podsłuchiwania” pakietów sieciowych. Jest aplikacją międzyplatformową, łatwą w obsłudze, zawierającą wiele wbudowanych mechanizmów przydatnych w analizie działania protokołów sieciowych. W rozdziale 5. pokażę, jak stworzyć własny dysektor (ang. dissector) pomagający w analizowaniu protokołów, tutaj ograniczę się do konfigurowania Wi- resharka na potrzeby przechwytywania pakietów IP. Aby przechwytywać ruch ethernetowy (przewodowy lub bezprzewodowy), urządzenie przechwytujące musi pracować w tak zwanym trybie nasłuchiwania (ang. promiscuous mode). Urządzenie w tym trybie odbiera i przetwarza każdą ramkę ethernetową, nawet jeśli nie jest adresatem tejże ramki. Przechwytywa- nie ruchu generowanego przez aplikację działającą na tym samym komputerze co aplikacja przechwytująca jest bardzo proste, wystarczy włączyć monitorowa- nie interfejsu wyjściowego lub lokalnej pętli zwrotnej (ang. local loopback), znanej również pod nazwą localhost. Podsłuchiwanie aplikacji pracującej na innym urządzeniu wymaga użycia dodatkowego sprzętu, takiego jak hub bądź skonfi- gurowany przełącznik (ang. switch), wymuszającego skierowanie ruchu siecio- wego do określonego interfejsu. 34 R o z d z i ał 2 Poleć książkęKup książkę Na rysunku 2.2 widoczne jest domyślne okno aplikacji Wireshark wykonującej przechwytywanie ruchu sieciowego z interfejsu ethernetowego. Rysunek 2.2. Domyślne okno aplikacji Wireshark Okno to podzielone jest na trzy części. W części  widoczna jest chronolo- giczna lista pakietów „złapanych” w sieci; dla każdego pakietu widoczne są ad- resy IP (źródłowy i docelowy) i zdekodowana informacja podsumowująca za- wartość. Część  to anatomiczny widok pakietu wybranego w części , czyli wynik rozbioru tego pakietu na protokoły, zgodnie z warstwowym modelem sieci OSI-ISO. Ten sam pakiet przedstawiony jest w części  jako surowy strumień bajtów. Protokół TCP ma naturę strumieniową, a jednym z jego zadań jest odzyski- wanie informacji traconej wskutek gubienia pakietów IP lub uszkadzania prze- syłanych danych. Sieci oparte na protokole IP nie gwarantują zachowywania kolejności pakietów — pakiety IP mogą docierać do węzła docelowego w kolejności innej niż kolejność ich wysyłania przez węzeł źródłowy. Piszę o tym tutaj dlate- go, że ta okoliczność mogłaby utrudniać identyfikowanie pakietów IP w kontek- ście wyższej warstwy, której ładunek użyteczny przenoszą. Na szczęście jednak Wireshark wyposażony jest w wiedzę o strukturze i specyfice znanych protoko- łów, w szczególności więc zapewnia między innymi rekonstrukcję segmentów P r z e c h w y t y w a n i e r u c h u si e c i o w e g o 35 Poleć książkęKup książkę TCP do postaci oryginalnego strumienia i prezentowanie kompletnej informacji w jednym miejscu — w tym celu należy podświetlić żądany pakiet w części  i wybrać z menu głównego opcję Analyze/Follow TCP Stream. Powinno się wów- czas wyświetlić okno podobne do pokazanego na rysunku 2.3, zawierające czytelny widok zdekodowanego strumienia. Rysunek 2.3. Czytelna prezentacja strumienia TCP w oknie programu Wireshark Wireshark jest narzędziem wszechstronnym i opisanie wszystkich jego moż- liwości wykraczałoby poza ramy niniejszej książki. Zainteresowanym Czytelnikom polecić mogę pozycję Praktyczna analiza pakietów1. Wireshark jest nieocenionym narzędziem do analizy ruchu sieciowego, jest dostępny za darmo na zasadach General Public License (GPL). 1 Chris Sanders, Praktyczna analiza pakietów. Wykorzystanie narzędzia Wireshark do rozwiązywania problemów związanych z siecią. Wydanie III, Helion, Gliwice 2017. 36 R o z d z i ał 2 Poleć książkęKup książkę Alternatywne techniki biernego przechwytywania Przechwytywanie pakietów może być niekiedy niewykonalne, na przykład w sytuacji, gdy operator nie ma uprawnień do takiego przechwytywania bądź też zabraniają go ograniczone przywileje powłoki urządzenia mobilnego. Ponadto czasami trudno jest oddzielić ruch związany z konkretną aplikacją od ruchu ge- nerowanego przez inne aplikacje działające na tym samym urządzeniu. Przydatne stają się wówczas inne techniki pozyskiwania próbek przesyłanych danych, oby- wające się bez podsłuchiwania pakietów. Śledzenie wywołań funkcji systemowych Większość współczesnych systemów operacyjnych realizuje swoje funkcje w dwóch trybach pracy. W trybie jądra (ang. kernel mode) procesor pracuje w trybie uprzy- wilejowanym i wykonywać może instrukcje o krytycznym znaczeniu; w tym try- bie wykonywany jest kod realizujący funkcje kluczowe dla systemu. W trybie użytkownika (ang. user mode) procesor może wykonywać jedynie „zwykłe” in- strukcje, nie zagrażające integralności systemu ani wykonywanych procesów; w tym trybie wykonywane są typowe aplikacje użytkownika. Gdy aplikacja działa w trybie użytkownika, żąda od systemu wykonania pewnych krytycznych opera- cji, dokonuje tak zwanego wywołania systemowego (zobacz rysunek 2.4), które- go efektem jest przekazanie sterowania programu do kodu funkcji systemowej, zazwyczaj z jednoczesną zmianą trybu pracy na tryb jądra. Funkcje systemowe odpowiedzialne są za realizację różnorodnych usług na rzecz aplikacji, takich jak operacje na systemie plików, tworzenie procesów i wątków oraz — co naj- istotniejsze w kontekście niniejszego rozdziału — połączeń z sieciami. Rysunek 2.4. Komunikacja sieciowa realizowana za pomocą wywołania systemowego P r z e c h w y t y w a n i e r u c h u si e c i o w e g o 37 Poleć książkęKup książkę Gdy aplikacja kliencka chce połączyć się ze zdalnym serwerem, dokonuje wywołania systemowego mającego na celu otwarcie połączenia. Kiedy połączenie z serwerem zostanie otwarte, aplikacja może za jego pośrednictwem odczyty- wać dane z serwera i zapisywać na nim dane. Śledzenie takich właśnie wywołań systemowych umożliwi (w niektórych systemach operacyjnych) ich monitorowanie w celu biernej ekstrakcji przesyłanych danych. W większości systemów uniksowych wywołania systemowe związane z ko- munikacją sieciową implementują berkeleyowski model gniazd (ang. Berkeley Sockets Model). Nic w tym dziwnego, gdy uświadomić sobie, że protokół IP za- projektowany został dla Uniksa w wersji Berkeley Software Distribution (BSD) 4.2. Implementacja owego modelu jest także częścią systemu POSIX, co czyni go standardem de facto. Najważniejsze funkcje tego modelu przedstawiłem w tabeli 2.1. Tabela 2.1. Podstawowe funkcje berkeleyowskiego modelu gniazd Nazwa funkcji socket connect bind recv, read, recvfrom send, write, sendto Opis Tworzy nowy deskryptor gniazda. Dokonuje połączenia gniazda ze wskazanym portem pod wskazanym adresem IP. Wiąże gniazdo ze wskazanym portem pod lokalnym adresem IP. Dokonuje pobrania danych z sieci za pośrednictwem gniazda. Generyczna funkcja read służy do odczytu danych z dowolnego źródła (np. pliku), funkcje recv i recvfrom są specyficzne dla API gniazd. Wysyła dane do sieci za pośrednictwem gniazda. Czytelnicy zainteresowani szczegółami działania wymienionych funkcji mogą sięgnąć po książkę The TCP/IP Guide (No Starch Press, 2005) bądź do dowolnego podręcznika systemu uniksowego za pomocą polecenia man 2 nazwa_funkcji Mnóstwo informacji dotyczących systemu Unix dostępnych jest ponadto on- line. Zobaczmy teraz, jak monitoruje się wywołania systemowe. Linuksowy program strace W systemie Linux bezpośrednie monitorowanie aplikacji pod kątem wywołań systemowych nie wymaga szczególnych uprawnień, chyba że aplikacja ta zo- stała uruchomiona przez uprzywilejowanego użytkownika. Większość dystrybu- cji Linuksa zawiera poręczny program narzędziowy strace, wykonujący wiele funkcji związanych z takim monitorowaniem. Program ten nie musi być jednak domyślnie zainstalowany, należy go wtedy pobrać za pomocą menedżera pakietów lub skompilować jego kod źródłowy. W celu rejestrowania wywołań systemowych generowanych przez daną aplika- cję należy uruchomić program za pomocą polecenia $ strace –e trace=network,read,write ścieżka parametry 38 R o z d z i ał 2 Poleć książkęKup książkę gdzie ścieżka jest kompletną ścieżką do śledzonej aplikacji, a parametry są parametrami jej uruchomienia. Załóżmy, że chcemy śledzić przykładową aplikację customapp, odczytującą i za- pisującą kilka łańcuchów tekstowych. Polecenie uruchamiające śledzenie i rezul- taty tego śledzenia widoczne są na listingu 2.1. Listing 2.1. Przykładowy raport ze śledzenia za pomocą programu strace $ strace -e trace=network,read,write customapp . . .  socket(PF_INET, SOCK_STREAM, IPPROTO_TCP) = 3  connect(3, {sa_family=AF_INET, sin_port=htons(5555), sin_addr=inet_addr( 192.168.10.1 )}, 16) = 0  write(3, Hello World!\n , 13) = 13  read(3, Boo!\n , 2048) = 5 W wierszu  raportu widzimy utworzenie nowego gniazda TCP, któremu system przydziela uchwyt (deskryptor) 3. Wiersz  ilustruje wydanie polecenia connect w celu połączenia gniazda identyfikowanego przez uchwyt 3 z portem 5555 węzła o adresie IP 192.168.0.1 Następnie, w wierszu , do tegoż gniazda wysłany zostaje łańcuch tekstowy Hello World zakończony znakiem nowego wier- sza (\n). Wreszcie, w wierszu , ze wspomnianego gniazda odczytywany jest łańcuch znaków Boo!\n. Analizując taki lub podobny raport, można się zoriento- wać, co tak naprawdę dzieje się w ramach śledzonej aplikacji — i to bez żadnych specjalnych uprawnień. Monitorowanie połączeń sieciowych za pomocą programu DTrace DTrace to potężne narzędzie w wielu systemach uniksowych, między innymi w Solarisie (dla którego zostało oryginalnie stworzone), MacOS i FreeBSD. Jest narzędziem skryptowym, funkcjonującym w oparciu o próbki (ang. probes) i ich dostawców (ang. providers) i umożliwia śledzenie rozmaitych aspektów systemu, między innymi wywołań systemowych w aplikacjach. Jego skrypty zapisywane są w języku o składni zbliżonej do języka C. Szczegóły jego obsługi znaleźć można w podręczniku online pod adresem http://www.dtracebook.com/index.php/ DTrace_Guide. Na listingu 2.2 widoczny jest przykładowy skrypt DTrace uruchamiający mo- nitorowanie wychodzących połączeń IP. traceconnect.d Listing 2.2. Przykładowy skrypt programu DTrace /* traceconnect.d – Prosty skrypt DTrace do monitorowania sieciowych wywołań systemowych */  struct sockaddr_in { short sin_family; unsigned short sin_port; in_addr_t sin_addr; char sin_zero[8]; P r z e c h w y t y w a n i e r u c h u si e c i o w e g o 39 Poleć książkęKup książkę };  syscall::connect:entry  /arg2 == sizeof(struct sockaddr_in)/ {  addr = (struct sockaddr_in*)copyin(arg1, arg2);  printf( proces: s s: d , execname, inet_ntop(2, addr—sin_addr), ntohs(addr—sin_port)); } Zadaniem tego przykładowego skryptu jest monitorowanie wywołań funkcji systemowej connect i wyjściowych pakietów IPv4 niosących segmenty TCP i da- tagramy UDP. Funkcję tę wywołuje się z trzema parametrami, reprezentowany- mi w skrypcie przez zmienne arg0, arg1 i arg2. Parametr arg0 reprezentuje de- skryptor gniazda (akurat w tym skrypcie niewykorzystywany), arg1 jest adresem struktury odzwierciedlającej strukturę gniazda w pamięci aplikacji, arg2 jest rozmiarem tej struktury w bajtach. Rozmiar ten może mieć różną wartość, przy- kładowo dla protokołu IPv4 jest mniejszy niż w przypadku IPv6. Wspomniana struktura adresu gniazda definiowana jest w miejscu  (sockaddr _in) w wersji dla IPv4 (notabene takie i podobne definicje można kopiować wprost z nagłówków kodu źródłowego systemu). Rodzaj monitorowanych wy- wołań systemowych specyfikowany jest w instrukcji . Instrukcja  jest in- strukcją warunkową filtrującą śledzone wywołania — uwzględniane są tylko te, dla których rozmiar struktury adresu gniazda jest taki sam jak rozmiar sockaddr_in. Instrukcja  kopiuje wspomnianą strukturę z parametrów wywołania syste- mowego do lokalnej struktury skryptu w celu jej analizowania — w tym przypadku analiza ogranicza się do wypisania na konsolę nazwy procesu, docelowego ad- resu IP i docelowego portu, co realizowane jest przez instrukcję . Aby uruchomić śledzenie, należy zapisać powyższy skrypt w pliku tekstowym (niech będzie to plik traceconnect.d) i po uprzednim zalogowaniu się jako root wydać polecenia dtrace –s traceconnect.d W efekcie otrzymamy raport ze śledzenia podobny do tego z listingu 2.3. Listing 2.3. Przykładowy raport programu DTrace z przebiegu monitorowania wywołań systemowych proces: Google Chrome 173.194.78.125:5222 proces: Google Chrome 173.194.66.95:443 proces: Google Chrome 217.32.28.199:80 proces: ntpd 17.72.148.53:123 proces: Mail 173.194.67.109:993 proces: syncdefaultsd 17.167.137.30:443 proces: AddressBookSour 17.172.192.30:443 40 R o z d z i ał 2 Poleć książkęKup książkę Jak widać, dla każdego uwzględnionego wywoływania systemowego wyświe- tlana jest nazwa procesu wywołującego oraz docelowy adres IP i port. Co prawda raport ten nie zawsze jest tak czytelny jak raporty programu strace, nie umniejsza to jednak w niczym bogactwa możliwości programu DTrace, a zaprezentowany przykład odzwierciedla jedynie drobny ułamek tego bogactwa. Monitor procesów Windows W przeciwieństwie do systemów uniksowych Microsoft Windows implementuje własny zestaw funkcji API związanych z systemem operacyjnym zamiast bezpo- średnich wywołań funkcji systemowych. Dostęp do sieci odbywa się poprzez sterownik (ang. driver), a współpraca z gniazdami realizowana jest przez „plikowe” funkcje open, read i write. Mimo iż Windows umożliwia monitorowanie aktyw- ności sieciowej w sposób podobny do programu strace, to monitorowanie ruchu sieciowego na poziomie podobnym do platform uniksowych staje się znacznie trudniejsze. Począwszy od wersji Vista, Windows umożliwia monitorowanie aktywności sieciowej za pomocą mechanizmu zdarzeń (ang. events). Co prawda imple- mentacja takiego monitorowania jest zadaniem bardzo skomplikowanym, szczę- śliwie jednak ktoś już temu zadaniu znakomicie sprostał: na rysunku 2.5 widzimy okno główne aplikacji Process Monitor, dostępnej do pobrania pod adresem https://docs.microsoft.com/pl-pl/ sysinternals/downloads/procmon/. Kliknięcie zazna- czonego na rysunku przycisku na pasku narzędziowym spowodowało uaktywnienie filtra sprawiającego, że widoczne są tylko zdarzenia systemowe związane z połą- czeniami sieciowymi. Rysunek 2.5. Okno główne monitora procesów Windows z uwidocznieniem połączeń sieciowych P r z e c h w y t y w a n i e r u c h u si e c i o w e g o 41 Poleć książkęKup książkę Dla każdego procesu widoczne są między innymi: jego nazwa i identyfikator , nazwa wykonywanej operacji sieciowej , ścieżka modułu wykonywalnego proce- su , status operacji  oraz rozmaite szczegóły związane z transmitowanymi danymi . Jakkolwiek Process Monitor nie daje żadnego czytelnego podglądu postaci tych danych, to widok połączeń sieciowych nawiązywanych przez po- szczególne aplikacje jest bardzo wartościową informacją. Inną cenną informacją, pomocną w śledzeniu, debugowaniu czy inżynierii wstecznej procesu (zajmiemy się nią szczegółowo w rozdziale 6.), jest stan stosu wywołań (ang. call stack) prowadzących do uruchomienia operacji sieciowej przez proces. By ją wyświetlić, należy z menu kontekstowego podświetlonego procesu (rozwijanego prawym kliknięciem) wybrać opcję Stack. Dla przykładowego procesu stos wywołań może wyglądać tak jak na rysunku 2.6. Rysunek 2.6. Stan stosu wywołań dla wybranego procesu Mimo iż Process Monitor nie jest w śledzeniu wywołań systemowych tak po- mocny jak analogiczne narzędzia na innych platformach, to w Windows jest on cenny jako narzędzie umożliwiające identyfikowanie protokołów sieciowych uży- wanych przez poszczególne procesy. I chociaż brak jest obrazu danych wymienia- nych w ramach tych protokołów, to już sama lista protokołów może być cennym wstępem do innych technik przechwytywania i analizowania ruchu sieciowego. 42 R o z d z i ał 2 Poleć książkęKup książkę Zalety i wady biernego przechwytywania Niewątpliwą zaletą technik biernego przechwytywania ruchu sieciowego jest fakt, iż obywają się one bez ingerowania w ów ruch, czyli (nazwijmy rzecz po imieniu) bez uszkadzania danych wymienianych między klientem a serwerem. Bierne przechwytywanie obywa się także bez modyfikowania adresów komuni- kujących się węzłów, nie wymaga też zmian w konfiguracjach komunikujących się aplikacji. Bierne przechwytywanie jest ponadto jedyną dostępną metodą w sytuacji, gdy nie ma możliwości kontrolowania komputerów klienta lub serwera — przy niewielkim wysiłku można wówczas zorganizować pobieranie danych bezpo- średnio „z drutu”. Mimo ograniczonych możliwości techniki biernego przechwy- tywania pozwalają zebrać cenne dane, przydatne nie tylko w dalszej analizie, prawdopodobnie z udziałem technik czynnego przechwytywania, ale i już na star- cie pomocne w samym wyborze konkretnej z tych technik. Specyfiką wszystkich metod biernego przechwytywania ruchu sieciowego jest fakt, iż są to metody niskopoziomowe, koncentrujące się raczej na fizycznej postaci danych niż na treści, jaką te dane przenoszą — i to jest podstawowy mankament tychże metod. Co prawda narzędzia w rodzaju Wiresharka przy- czyniają się do jego złagodzenia, ale jest to możliwe jedynie w przypadku stan- dardowych protokołów — gdy napotykają niestandardowy protokół, specyficzny dla danej aplikacji, pomóc mogą niewiele, nie znając przecież semantyki tego protokołu. Drugi podstawowy mankament biernego przechwytywania wynika z jego natury, czyli nietykalności podsłuchiwanych danych. W sytuacji, gdy dane te są zaszyfrowane lub skompresowane, ich analiza może być niewykonalna bez uprzed- niego rozszyfrowania czy dekompresji bądź też wyłączenia opcji szyfrowania czy kompresowania w aplikacji wysyłającej. Tego wszystkiego nie da się osiągnąć przez bierne podsłuchiwanie czy nawet wstrzykiwanie dodatkowych pakietów. Gdy zatem ograniczenia właściwe technikom biernego przechwytywania stają się barierą w uzyskiwaniu zadowalających rezultatów, należy zmienić strategię i zwrócić się ku przechwytywaniu czynnemu. Czynne przechwytywanie ruchu sieciowego Podstawową cechą czynnego przechwytywania, odróżniającą je od przechwyty- wania biernego, jest ingerencja w ruch sieciowy, realizowana najczęściej w formie tak zwanego „ataku z człowiekiem pośrodku” (ang. man-in-the-middle attack — MITM), przy czym „człowiek” jest zwykle operatorem urządzenia przechwytu- jącego. Urządzenie to, ulokowane na drodze przepływu danych między klientem a serwerem, pełni rolę pomostu między nimi. Taka konfiguracja, przedstawiona schematycznie na rysunku 2.7, daje wiele korzyści, na przykład umożliwia wy- łączenie kompresji lub szyfrowania danych, czyniąc je wygodniejszymi do analizy lub eksploatacji „dziury” w zabezpieczeniach. P r z e c h w y t y w a n i e r u c h u si e c i o w e g o 43 Poleć książkęKup książkę Rysunek 2.7. Atak z „człowiekiem pośrodku” Wykonanie czynnego przechwytywania jest zadaniem znacznie trudniejszym niż bierne podsłuchiwanie pakietów, wymaga bowiem dokonania zmiany trasy przy użyciu urządzenia przechwytującego. To z kolei może powodować nieza- mierzone lub niepożądane efekty: jeżeli na przykład zmienimy w aplikacji adres klienta lub serwera na adres proxy, dane wysyłane przez tę aplikację mogą tra- fiać w niewłaściwe miejsce. Mimo to czynne przechwytywanie jest bodaj naj- bardziej użyteczną metodą analizowania protokołów sieciowych i eksploatowania luk w zabezpieczeniach. Proxy sieciowe Najczęstszą metodą przypuszczania ataków „z człowiekiem pośrodku” jest zmu- szenie aplikacji klienckiej do komunikowania się z serwerem za pośrednictwem usługi proxy. Poniżej omawiam zalety i wady najczęściej używanych w tym celu proxy i wyjaśniam, jak można za ich pomocą przechwytywać ruch sieciowy, anali- zować przechwycone dane i wykorzystywać wyniki analizy do eksploatowania protokołów sieciowych. Proxy z przekierowaniem portów Przekierowywanie portów (ang. port forwarding) to najprostszy sposób realizacji proxy przechwytującego. Jako proxy konfigurujemy serwer (TCP lub UDP) na- słuchujący na określonym porcie i w przypadku otrzymania żądania z aplikacji klienckiej przekazujemy to żądanie do „prawdziwego” serwera, z którym wcześniej proxy nawiązało połączenie. W ten sposób klient i serwer zostają logicznie po- łączone ze sobą, chociaż fizycznie każde nich komunikuje się wyłącznie z proxy. Ideę tę przedstawia rysunek 2.8. Rysunek 2.8. Proxy TCP z przekierowaniem portów 44 R o z d z i ał 2 Poleć książkęKup książkę Prosta implementacja Do zrealizowania opisanego modelu wykorzystamy mechanizm przekierowy- wania portów TCP wbudowany w bibliotekę Canape Core. Kod widoczny na li- stingu 2.4 należy w tym celu umieścić w pliku skryptowym C#, zamieniając symbole LOCALPORT , REMOTEHOST  i REMOTEPORT  na konkretne wartości (odpowiednio) portu lokalnego, zdalnego hosta i portu zdalnego. P o r t F o r m a t P r o x y . c s x Listing 2.4. Prosty przykład przekierowania portów TCP // PortFormatProxy.csx – proste proxy przekierowujące porty TCP // Udostępnij metody ReadLine, WriteLine i Writepackets na poziomie globalnym using static System.Console; using static CANAPE.Cli.ConsoleUtils; // Utworzenie szablonu proxy var template = new FixedProxyTemplate(); template.LocalPort = LOCALPORT; template.Host =  REMOTEHOST”; template.Port = REMOTEPORT; // Utworzenie i uruchomienie instancji proxy  var service = template.Create(); service.Start(); WriteLine( Utworzono {0} , service); WriteLine( Naciśnij Enter, by zakończyć... ); ReadLine();  service.Stop(); // Zrzut pakietów var packets = service.Packets; WriteLine( Przechwycono {0} pakietów: , packets.Count);  WritePackets(packets); Ten prosty skrypt rozpoczyna swe działanie od utworzenia instancji szablonu FixedProxyTemplate . Canape Core funkcjonuje na bazie modelu szablonów, choć wymaga również operowania niskopoziomowymi funkcjami konfiguracji sieci. Utworzona instancja szablonu inicjalizowana jest następnie niezbędnymi informacjami związanymi z siecią lokalną i siecią docelową. Zainicjalizowana in- stancja szablonu służy do utworzenia instancji usługi ; zasadniczo dokumenty mogą być postrzegane jako szablony dla usług. Instancja usługi zostaje urucho- miona i następuje konfigurowanie połączenia sieciowego. Usługa pozostaje uru- chomiona, a wywołanie funkcji ReadLine() powoduje oczekiwanie na naciśnię- cie klawisza Enter, po czym usługa zostaje zatrzymana . Raport o wszystkich przechwyconych pakietach wypisany zostaje na konsolę za pomocą metody Write Packets() . P r z e c h w y t y w a n i e r u c h u si e c i o w e g o 45 Poleć książkęKup książkę OSTRZEŻNIE Uruchomienie skryptu powinno spowodować powiązanie z lokalnym portem o numerze LOCALPORT interfejsu localhost. Gdy zostanie nawiązane połączenie z tym portem, kod proxy powinien spowodować nawiązanie nowego połączenia TCP z portem REMOTEPORT hosta REMOTEHOST i związać ze sobą oba połączenia. Związanie proxy ze wszystkimi adresami sieciowymi jest posunięciem ryzykow- nym z perspektywy bezpieczeństwa sieci, jako że testowe proxy tworzone na użytek testowania protokołów rzadko kiedy zawierają solidne mechanizmy za- bezpieczeń. By uniknąć wynikającego stąd ryzyka, należy wiązać testowe proxy wyłącznie z interfejsem lokalnej pętli zwrotnej (ang. loopback) — jak na listingu 2.4 — chyba że ma się pełną kontrolę nad podłączaną siecią albo po prostu nie ma się innego wyboru. Aby proxy z listingu 2.4 związać ze wszystkimi interfejsami sieciowymi, należy ustawić na TRUE właściwość AnyBind. Przekierowywanie ruchu do proxy Gdy już skompletujemy aplikację proxy, należy skierować do niej ruch sieciowy, którego treść chcemy przechwytywać. Z pomocą przeglądarki WWW jest to bardzo proste: zamiast oryginalnego URL-a w rodzaju http://www. domena . com/ zasób trzeba wpisać w pasku adresu http://localhost: port_lokalny /  zasób . Z innymi aplikacjami nie jest już tak łatwo, ponieważ konieczna staje się in- gerencja w ich ustawienia. I często zdarza się tak, że jedynym ustawieniem do- stępnym dla modyfikacji jest docelowy adres (adresy) IP. To prowadzić może do problemu jajka i kury: niewiadomymi mogą być bowiem numery portów TCP lub UDP, które rzeczona aplikacja wykorzystuje pod wskazanym adresem; jest to szczególnie prawdopodobne w aplikacjach wykonujących skomplikowane ope- racje na bazie połączeń z wieloma usługami. Jest tak między innymi z protoko- łami zdalnego wywołania procedury (ang. Remote Procedure Call — RPC), na przykład z architekturą CORBA (ang. Common Object Request Broker Archi- tecture), gdzie nawiązywane jest początkowo połączenie z brokerem, spełniającym rolę katalogu dostępnych usług, dopiero następne połączenia dotyczą portów TCP konkretnych usług, nieznanych a priori. Dobrym wyjściem z tej kłopotliwej sytuacji jest przeprowadzenie prze- chwytywania biernego w celu monitorowania jak największej liczby połączeń aplikacji z rozmaitymi usługami. Zdobywając w ten sposób listę portów docelo- wych używanych typowo przez aplikację, można później próbować odtwarzać poszczególne połączenia z udziałem proxy przekierowującego porty. Niestety niektóre aplikacje nie pozwalają nawet na konfigurowanie docelo- wego adresu IP i wtedy trzeba być naprawdę pomysłowym. Prawdopodobnie wspomniana aplikacja odwołuje się do docelowego hosta przez jego nazwę, więc przekierowanie ruchu można uzyskać, instalując ad hoc serwer DNS „przeli- czający” nazwę hosta na żądany adres IP proxy. Większość systemów operacyj- nych — w tym Windows — umożliwia ponadto wyszczególnienie nazw DNS, które mają być przeliczane w sposób nietypowy. 46 R o z d z i ał 2 Poleć książkęKup książkę W procesie przeliczania nazw DNS system operacyjny (lub biblioteka), zanim sięgnie do serwera DNS, analizuje zawartość pliku hosts i gdy znajdzie w nim parę adres IP – nazwa, uznaje nazwę za równoważną adresowi IP. Jeżeli więc na przykład plik hosts wygląda tak jak na listingu 2.5, to nazwy www.badgers.com i www.domain.com zostaną potraktowane jako równoważne adresowi 127.0.0.1, oznaczającemu, jak wiadomo, lokalny komputer (localhost). Listing 2.5. Przykładowy plik hosts # Standardowe adresy komputera lokalnego 127.0.0.1 localhost ::1 localhost # Nazwy przekierowywane do komputera lokalnego 127.0.0.1 www.badgers.com 127.0.0.1 www.domain.com W systemach uniksowych plik hosts znajduje się w katalogu /etc/. W Windows jego domyślną lokalizacją jest podkatalog \System32\Drivers\etc\ katalogu systemowego; można tę lokalizację zmienić, edytując rejestr systemu — jest ona zapisana jako wartość DataBasePath w kluczu HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Tcpip\Parameters UWAGA Niektóre programy antywirusowe i inne produkty zabezpieczające nie zezwalają na modyfikowanie pliku hosts, ponieważ traktują je jako przejaw działania zło- śliwego oprogramowania. Aby edycję jednak przeprowadzić, należy te produkty tymczasowo wyłączyć. Zalety i wady proxy z przekierowaniem portów Główną zaletą proxy z przekierowaniem portów jest prostota jego używania: na- słuchując, oczekujemy na połączenie z klientem, otwieramy nowe połączenie z oryginalnym serwerem i potem już tylko kierujemy ruch sieciowy do jednego lub drugiego. Proxy nie wymaga do działania żadnego dodatkowego protokołu, nie jest także wymagane żadne wsparcie ze strony aplikacji, od i do której ruch mamy przechwytywać. Proxy z przekierowaniem portów jest ponadto naturalnym sposobem prze- chwytywania ruchu generowanego przez protokół UDP: jako że jest to protokół bezpołączeniowy, implementacja dedykowanego mu forwardera jest prostsza niż w przypadku TCP. Ta prostota ma jednak swoją cenę. Przede wszystkim, ponieważ przechwytu- jemy ruch między konkretnym serwerem a konkretnym klientem, w sytuacji, gdy aplikacja kliencka wykorzystuje wiele usług na różnych portach, potrzebujemy wielu instancji proxy. Jako przykład niech posłuży aplikacja, która łączy się z poje- dynczym serwerem (określonym przez adres IP lub nazwę hosta) i chcemy to P r
Pobierz darmowy fragment (pdf)

Gdzie kupić całą publikację:

Atak na sieć okiem hakera. Wykrywanie i eksploatacja luk w zabezpieczeniach sieci
Autor:

Opinie na temat publikacji:


Inne popularne pozycje z tej kategorii:


Czytaj również:


Prowadzisz stronę lub blog? Wstaw link do fragmentu tej książki i współpracuj z Cyfroteką: