Pełen artykuł
Transkrypt
Pełen artykuł
Dokument pobrany z serwisu: www.Centrum.Bezpieczenstwa.pl Autor artykułu: Michał Melewski Atak kontrolowany Zacznijmy moŜe od wyjaśnienia czym są, a moŜe przede wszystkim czym nie są testy penetracyjne. Testy penetracyjne, zwane dalej pen-testami to działania polegające na przeprowadzeniu symulowanego ataku na wskazany cel. Cel moŜe być w zasadzie dowolny serwis internetowy, baza danych lub teŜ infrastruktura sieciowa. Nic nie stoi równieŜ na przeszkodzie, Ŝeby celem była konkretna informacja lub dostanie się do konkretnego segmentu sieci. Tak naprawdę wszystko zaleŜy od załoŜeń początkowych. Same testy równieŜ mogą ewoluować podczas trwania tego procesu - początkowy atak na serwis intranetowy moŜe przerodzić się w testowanie odporności bazy danych lub firewalla. Efektem takiego ataku powinno być zidentyfikowanie wszystkich słabych punktów celu oraz wskazanie sposobów, dzięki którym potencjalny napastnik moŜe naruszyć bezpieczeństwo badanego celu. Arsenał środków, którymi posługują się osoby wykonujące test penetracyjny jest w zasadzie nieograniczony (a raczej ograniczony prawem i etyką zawodową), chyba, Ŝe warunki kontraktu mówią inaczej. O ile metody inŜynierii socjalnej są dopuszczalne (np. wysłanie zwykłego mail'a), to ataki typu DoS oraz DDoS na część infrastruktury juŜ raczej nie (chyba, Ŝe klient to dopuszcza). Porwanie administratora wraz z rodziną w celu wydobycia haseł nie jest juŜ raczej dobrym pomysłem. Poza tym, w zasadzie wszytko jest dozwolone wykorzystywanie dziur w programach, 0-day'e, słabości konfiguracyjne, ataki na infrastrukturę sieciową, ataki brute force, snifing sieci itp. Zawsze przyświeca nam motto - Jeśli my moŜemy to zrobić, to napastnik moŜe równieŜ. Same testy mogą być przeprowadzane zarówno z zewnątrz sieci, jak teŜ z wewnątrz. Często łączy się te dwa podejścia i sprawdza się, czy wykonanie ataku będzie równie trudne z obu tych kierunków. Testy przeprowadzane z zewnątrz spotykane są najczęściej i najlepiej obrazują prawdopodobne wektory ataków, ale dla uzyskania pełnego obrazu naleŜałoby przeprowadzić teŜ testy od wewnątrz, Ŝeby zminimalizować szansę, Ŝe padniemy ofiarami naszych własnych pracowników. Oczywiście są teŜ przypadki, gdzie w grę wchodzi tylko jeden z kierunków ataku. Trudno przecieŜ atakować serwis Intranetowy z zewnątrz. Nie ma teŜ większego sensu atakować portalu Internetowego z wewnątrz firmy, bo to nie pracownicy będą tutaj zagroŜeniem. Jednym z waŜniejszych kryteriów jeśli chodzi o rozróŜnienie rodzajów pentestów jest wiedza, jaką o celu dysponuje zespół testujący. Właśnie wzdłuŜ tej granicy rysuję się podział na testy typu Black Box oraz Crystal Box (zwany teŜ White Box). Zawsze zostaje teŜ kwestia, czy atakowany cel powinien być podłączony do środowiska produkcyjnego, czy teŜ powinien to być wyizolowany system umieszczony w środowisku testowym. W zasadzie podejścia są róŜne i sporo zaleŜy od krytyczności danego systemu. Osobiście skłaniałbym się bardziej w kierunku testowania systemów w Ŝywym środowisku, poniewaŜ właśnie w takich warunkach będzie on atakowany. Oczywiście istnieje ryzyko, Ŝe system wyłoŜy się w trakcie testów, ale po to w końcu mamy kopie zapasowe. Sprawę pozostawiam do dyskusji. Po co nam pen-testy Biorąc pod uwagę koszty takiej imprezy, jaką jest wpuszczenie do firmy gromady lekko niepoczytalnych osób z ciekawymi pomysłami (np. A wiecie, Ŝe jednym pakietem HSRP mogę wyłączyć wasz główny router?) zadajecie sobie pewnie pytanie - po co w ogóle robić takie testy? PrzecieŜ wystarczy postępować zgodnie z instrukcją zabezpieczania danego systemu i wszystko będzie dobrze. OtóŜ nie - wcale nie ma takiej gwarancji. Dobrze przeprowadzony test penetracyjny to niezaleŜna ocena stanu bezpieczeństwa twoich systemów - tego nie zastąpi Ŝadne inne działanie. Nie ma równieŜ sensu angaŜować do tego administratorów - nikt nie jest w stanie niezaleŜnie oceniać swojej pracy. Z testami penetracyjnymi jest jak z testami zderzeniowymi samochodów - niby moŜna to wymodelować na komputerze, obliczyć na podstawie wytrzymałości materiałów, ale zawsze ostatecznym testem jest rozpędzenie samochodu do 70 km/h i walnięcie w betonową przeszkodę. Dopiero to daje miarodajne rezultaty, na ile bezpieczny jest samochód. W świecie bezpieczeństwa takim walnięciem w przeszkodę jest dla systemu zetknięcie z grupą pentesterów. Black Box vs. Crystal Box KaŜdy teren działania ma w sobie świętą wojnę. Nie inaczej jest tutaj. Na polu testów penetracyjnych spotyka się zazwyczaj dwa podejścia do sprawy. Testy penetracyjne typu Black Box zakładają, Ŝe przed rozpoczęciem testów nie mamy Ŝadnych informacji o celu, poza zupełnie podstawowymi, np. czym jest cel, jaką spełnia funkcję i jakie elementy wchodzą w jego skład. W tym podejściu bardzo waŜnym etapem jest pierwsze rozpoznanie z czym mamy do czynienia, jakie oprogramowanie atakujemy, jak wygląda otoczenie sieciowe celu i jakie mechanizmy chronią dostępu do niego. Za plus tej metody naleŜy uznać to, Ŝe moŜliwie najdokładniej odzwierciedla ona prawdziwy atak przeprowadzany przez potencjalnych napastników. Minusem jest to, Ŝe poświęcamy czas na działania poboczne zamiast skupić się na próbach atakowania celu - moŜe to mieć niebagatelne znaczenie w przypadku komercyjnych testów, gdzie klient płaci za kaŜdy dzień pracy zespołu. Drugie podejście zwane Crystal Box zakłada, Ŝe zespół testujący posiada maksymalnie duŜo (w granicach rozsądku) informacji o atakowanym systemie. Czasami nazywa się to "scenariuszem najgorszego przypadku", kiedy potencjalny napastnik uzyskał dostęp do tych informacji w jakiś inny sposób. ChociaŜ ten przypadek nieco róŜni się od normalnego ataku, to jest zdecydowanie szybszym sposobem przeprowadzenia testów bezpieczeństwa. W praktyce najczęściej spotyka się kombinację powyŜszych podejść zwaną Grey Box, w której pentesterom przekazuje się pewne informacje o celu, ale bez szczegółów. Czasami równieŜ najpierw przeprowadza się testy w podejściu Black Box, a potem atakuje się jeszcze raz, juŜ po tym, jak klient dostarczył dokumentację celu. Metodyki testów Typowe wyobraŜenia testów penetracyjnych najczęściej wygląda tak: do firmy wpada grupa ludzi, którzy wyglądają jakby właśnie wyszli z cięŜkiej imprezy (patrz wizerunek typowego pentestera), podpinają laptopy i zaczynają stukać w klawiatury z prędkością wpędzającą maszynistki w kompleksy. Po 5 dniach walki rzucają klientowi, Ŝe system jest dziurawy, a oni włamali się poprzez dziurę w foo bar, proszę przelać pieniądze na nasze konto, dziękuję. Taki opis niewiele wspólnego ma z rzeczywistością. śeby nieco wziąć w karby takich kowbojów mądrzy ludzie opracowali coś, co nazywa się metodyką przeprowadzania audytów teleinformatycznych (testy penetracyjne to cześć takich audytów). Najbardziej znaną metodyką jest z całą pewnością Open Source Security Testing Methodology. Jest to dość szeroka metodyka obejmująca swoim zakresem zarówno aspekty teleinformatyczne, fizyczne, prawne oraz aspekty związane z świadomością uŜytkowników oraz podatnością na inŜynierię socjalną. Standard ten zawiera sporo informacji dotyczących planowania audytów, obszarów wymagających testowania, zasad raportowania (o tym później) oraz sposobu oceniania wyników. OSSTM Manual zawiera jeszcze jedną waŜną rzecz - Rules of Engagement (czyli zasady walki). Jest to zbiór zasad, który określa ramy prawne i etyczne postępowania podczas oferowania usług związanych z bezpieczeństwem. Poruszane są tam zasady sprzedaŜy i marketingu, negocjacji kontraktu, procesu wykonywania testów penetracyjnych oraz zasady raportowania. Warto, aby kaŜdy kto zajmuje się bezpieczeństwem zapoznał się z tymi zasadami i zaczął ich przestrzegać. To pozwoli wyeliminować przypadki, które psują nam reputację (chyba nie muszę mówić, o kogo chodzi). Kolejną z metodyk wartych chociaŜ wspomnienia jest publikacja NIST o numerze 800-42. Oprócz metodyk przeprowadzania testów istnieją teŜ wytyczne dotyczące obszarów testowania. Ogólne wytyczne moŜna znaleźć w OSSTMM, natomiast naleŜy wspomnieć o bardzo ciekawym projekcie pt. OWASP. Jednym z celów projektu jest stworzenie podręcznika który obejmowałby maksymalnie wiele aspektów testowania aplikacji webowych. KaŜdy, kto w ogóle ma zamiar zająć się tym tematem powinien przeczytać OWASP Testing Guide. Dodatkowo warto zainteresować się innymi projektami konsorcjum OWASP (np. WebScarab, ale o tym później). Jak więc wygląda typowy test penetracyjny? Wbrew pozorom całkiem zwyczajnie. Pierwszym krokiem kaŜdego testu (w przypadku pracy dla klienta zewnętrznego) jest podpisanie umowy NDA (Non-disclosure agreement), która mówi, Ŝe nas zastrzelą, jeśli chociaŜ piśniemy słowo na temat tego, co robimy i zrobiliśmy. Drugim krokiem jest wykonanie harmonogramu testów - trzeba powiadomić klienta, co w jakich dniach będziemy testować i ustalić ścieŜki komunikacji z administratorami (w razie, jakbyśmy coś zepsuli). Szczegółowość planu zaleŜy głównie od ilości informacji dostarczonej przez klienta. Oczywiście w trakcie negocjacji ustala się teŜ wiele nudnych szczegółów, kwestię skąd będą przeprowadzane testy, co znajdzie się w raporcie. W końcu przychodzi dzień, gdzie zespół pentesterów zaczyna pracę. Pierwsze dni testów to najczęściej rekonesans, badanie wersji oprogramowania, architektury systemu/aplikacji itp. Kolejne dni to radosne próby włamania na zasadzie wszystkim na wszystko. Dopiero później przychodzi czas na metodyczne testy kaŜdego z obszarów działania aplikacji. Końcówka testu do szczegółowe badanie znalezionych dziur, pisanie Proof of Concept i próby potwierdzenia podatności korzystając z innych metod ataku. Po fazie testów przychodzi czas na najwaŜniejszą z punktu widzenia klienta część - pisanie raportu. Jeśli pamiętaliśmy o tym, Ŝeby dokumentować kaŜdy z podejmowanych kroków w czasie samych testów, to pisanie raportu nie będzie trudne. WaŜne, Ŝeby w raporcie znalazły się opisy prowadzonych prac, znalezione błędy itp. Temat ten rozwinę później. Narzędzia Narzędzia w testach penetracyjnych to chyba jedne z najbardziej przecenianych aktywów. Początkującym w tej dziedzinie wydają się mitycznym oręŜem, dzięki któremu Ŝaden cel im się nie oprze. Na róŜnych forach i grupach dyskusyjnych często padają pytania o nazwę programów do hakowania. W odpowiedzi na takie pytania warto jedynie wspomnieć, Ŝe Musashi Miyamoto nie był mistrzem miecza dlatego, Ŝe uŜywał katany +3 do szybkości, ale dlatego, Ŝe rozumiał sztukę walki. Zabrzmiało to nieco patetycznie, ale tak miało być. Kiedy się tnie, ostrze jest tylko ostrzem, a kiedy przeprowadza się testy penetracyjne narzędzie nie będzie myślało za nas. Oczywiście dobrze dobrane narzędzia znakomicie ułatwiają przeprowadzenie testów, a przeprowadzenie niektórych z nich bez odpowiednich programów byłoby niemal niemoŜliwe. Same programy wspomagające wykonywanie testów penetracyjnych to często małe dzieła sztuki i doskonałe przykłady na świetne zrozumienie sztuki pisania kodu. Nie ma sensu, Ŝebym wymieniał wszystkie, których zdarzyło mi się uŜywać, a zresztą w toku testów czasami przychodzi pisać własne kawałki kodu. Wspomnę o kilku, które szczególnie sobie cenię (z naciskiem na testowanie aplikacji Webowych). Pierwszym i jednym z waŜniejszych narzędzi przy testowaniu aplikacji webowych jest odpowiedni serwer Proxy, dzięki któremu moŜemy swobodnie modyfikować zapytania przesyłane do serwera oraz logować odpowiedzi. Wśród programów, których uŜywam wymienić naleŜy BurpProxy oraz WebScarab. Co ciekawe, obydwa programy napisane są w języku Java, dzięki czemu moŜemy wykorzystywać je pod dowolną platformą sprzętową. Z innych, ciekawych programów słuŜących do przeprowadzania ataków typu Blind SQL Injection wymienić moŜna sqlmap. To narzędzie jest akurat napisane w pythonie. Kolejnym ciekawym narzędziem, które moŜna zastosować jest program Michała Zalewskiego - st0mpy. Program słuŜy do jakościowej analizy identyfikatorów sesji, celem ustalenia ich nieprzewidywalności, a co za tym idzie, bezpieczeństwa mechanizmu sesyjnego. Cztery narzędzia to niewiele, ale biorąc pod uwagę, Ŝe BurpProxy składa się z 4 głównych modułów, a w module Intruder moŜna pisać własne testy, więc jest tego sporo więcej. Po opis reszty funkcjonalności odsyłam na stronę programu. Osobom zainteresowanym pełnym środowiskiem testowym polecam dystrybucję Linuksa (LiveCD) o nazwie BackTrack. Raportowanie wyników Co robi kaŜdy pentester po rozjechaniu w diabły wskazanego celu? Najchętniej oczywiście walnąłby się na kanapie, otworzył piwo i odpoczął. Niestety tak róŜowo nie jest. Po zakończonych testach przychodzi czas na jedną najbardziej nuŜących części całego procesu na napisanie raportu. Raport niestety jest konieczny, poniewaŜ dopóki on nie powstanie, to cała praca, którą wykonał zespół testujący jest z punktu widzenia klienta bezwartościowa. Czym charakteryzuje się dobry raport. Przede wszystkim jest wyczerpujący - dokładnie opisuje przebieg prac, przeprowadzone testy oraz zidentyfikowane luki. Dobrą praktyką jest równieŜ rozbicie raportu na dwie części - część dla kierownictwa oraz część dla osób technicznych. W końcu nie ma sensu zanudzać prezesa szczegółowym opisem luki typu Heap Overflow w oprogramowaniu serwera. Nie moŜna teŜ zapomnieć o podsumowaniu, gdzie w kilku zgrabnych zdaniach opiszemy, jak fajnie się pracowało i jak tragicznie oceniamy odporność celu na ataki. W raporcie kaŜda luka musi równieŜ zostać opisana w odpowiedni sposób - waŜne, Ŝeby to nie był opis pt. znaleźliśmy XSS'a na waszej stronie. Opis powinien składać się z wskazania miejsca, gdzie błąd występuje, pełnego opisu podatności, który pozwoli na odtworzenie ataku przez osoby czytające raport oraz oceny krytyczności danej luki. Przyporządkowanie luki do odpowiedniego poziomu zagroŜenia to często nietrywialna sprawa. Oczywiście kaŜdą lukę moŜna zaklasyfikować jako "Extremely critical", tak jak to czynią niektórzy, ale z rzeczywistością nie ma to jednak wiele wspólnego. W naszym zespole lukę klasyfikujemy do jednego z trzech poziomów zagroŜenia, które oznaczamy kolorami. Kolor zielony, to luka niezbyt krytyczna, której załatanie nie podniesie w znaczący sposób bezpieczeństwa. Kolor Ŝółty to umiarkowanie powaŜna luka i zaleca się jej usunięcie, ale nie jest wymagana natychmiastowa akcja. Kolor czerwony to luka krytyczna i wymagane jest jak najszybsze podjęcie akcji zmierzającej do jej usunięcia. Istnieje wiele czynników, które mogą zdecydować o przypisaniu danej luki do konkretnego poziomu zagroŜenia. Dwa najwaŜniejsze czynniki to waga skutków wykorzystania danej luki (np. jak wysokie uprawniania moŜemy zdobyć, do jakich danych moŜemy uzyskać dostęp itp.) oraz łatwość wykorzystania luki (czy twoja dziewczyna była by w stanie napisać tego exploita?). Istnieją równieŜ inne czynniki, które zazwyczaj bierzemy pod uwagę np. siłę powiązań komponentu, w którym znaleziono luki z resztą systemu. Tak napisany raport powinien spodobać się klientowi - warto teŜ zadbać o ładną formę graficzną oraz brak błędów ortograficznych oraz gramatycznych. Zasady niby proste, ale niektórzy o nich zapominają - szczytem był pewien raport, który miałem okazję oglądać napisany był ręcznie - nie dało się odcyfrować połowy treści. Podsumowanie Tak właśnie wyglądają testy penetracyjne - niby nic trudnego, ale wymagające zarówno pewnej dawki wiedzy technicznej, elastyczności (nigdy nie wiesz, co będzie twoim następnym celem) jak i systematyczności (dokumentuj durniu!). MoŜe zabrzmi to jak kiepska reklama, ale uwaŜam, Ŝe kaŜdy serwis wystawiany na widok publiczny powinien przejść chociaŜ krótki cykl testów penetracyjnych - oczywiście nie jest to zabawa tania, ale tam, gdzie w grę wchodzą pieniądze i bezpieczeństwo uŜytkowników lub danych jest to niezbędne. Ale przede wszystkim testy penetracyjne to świetna zabawa :).