Preorder drugiego tomu książki sekuraka: Wprowadzenie do bezpieczeństwa IT. -15% z kodem: sekurak-book

Golismero – framework do przeprowadzania zautomatyzowanych testów penetracyjnych

25 kwietnia 2014, 14:53 | Teksty | komentarzy 11

Wstęp

Golismero to framework służący do przeprowadzania testów penetracyjnych, napisany w Pythonie. Jest też doskonałym przykładem możliwości, jakie daje użycie Pythona w tego typu oprogramowaniu.

O możliwościach, jakie daje ten język w zakresie tworzenia narzędzi do przeprowadzania takich testów, możecie przeczytać w dwóch artykułach na portalu Sekurak: Python w służbie pentestera oraz Tworzenie narzędzi sieciowych w Pythonie z użyciem socketów.

Dlaczego Golismero jest warte uwagi?

  • Możemy je uruchomić zarówno na systemach z rodziny Windows, jak i na wszystkich dystrybucjach Linuksa oraz systemach OSX.
  • Jest bardzo elastyczny (umożliwia prostą rozbudowę przez łatwe do stworzenia wtyczki).
  • Potrafi importować generowane przez inne programy dane wyjściowe (np. nmap, nikto, sqlmap, ng-recon) i wykorzystywać je do generowania zbioru raportów z testów, także w formacie HTML, co może okazać się przydatne w celu stworzenia podsumowania z testu penetracyjnego.
  • Oprócz tego jest dostępny za darmo i na licencji GNU General Public Licence, co oznacza, że możemy dowolnie go modyfikować według naszych potrzeb.

 

Instalacja

Ponieważ Golismero jest aplikacją konsolową, zwolennicy interfejsów graficznych mogą poczuć się nieco zawiedzeni. Nie znajdziemy bowiem żadnego graficznego instalatora, a instalacja na poszczególnych platformach ogranicza się do sklonowania repozytorium z serwisu GitHub (potrzebny będzie klient systemu kontroli wersji Git, zainstalowany w systemie operacyjnym, bądź pozostaje nam pobrać źródła w postaci archiwum .zip):

git clone https://github.com/golismero/golismero.git

Szczegółowe informacje (m.in. jak zainstalować ewentualne zależności – interpreter języka Python oraz parę bibliotek) autor programu zamieścił na stronie domowej projektu.

Po przejściu do katalogu, w którym zapisaliśmy kod źródłowy aplikacji, od razu możemy przystąpić do korzystania z Golismero.

 

Golismero w akcji

Aby zrozumieć ideę działania pakietu, zacznijmy od najprostszej operacji polegającej na pełnym przeskanowaniu naszego hosta z użyciem wszystkich dostępnych narzędzi:

$ ./golismero.py scan 127.0.0.1

Naszym oczom powinna ukazać się lista kolejnych działań, jakie wykonuje program. W zależności od dodatkowych narzędzi (np. nmap czy nikto) Golismero wykorzysta je i przeprowadzi podstawowe testy:

Rysunek 1. Uruchomienie podstawowego polecenia scan w Golismero może dać różne wyniki, w zależności od zainstalowanych na komputerze narzędzi. Na screenie widać m.in. fragmenty wyjścia nmap'a, nikto oraz narzędzia do odgadywania nazw katalogów metodą "brute force"

Screen 1. Uruchomienie podstawowego polecenia scan w Golismero może dać różne wyniki, w zależności od zainstalowanych na komputerze narzędzi. Na screenie widać m.in. fragmenty wyjścia nmap’a, nikto oraz narzędzia do odgadywania nazw katalogów metodą „brute force”.

Aby zachować dane zebrane w czasie testu możemy użyć kilku dostępnych opcji:

  • -o [nazwa_pliku] – zapisuje wyniki działania do pliku. Format pliku jest determinowany przez podane rozszerzenie (np. .txt czy .html),
  • -audit-name – nazwa audytu,
  • -db [nazwa_pliku_bazy_danych] – zapis do pliku w formacie SQLite.
W przypadku ostatniej opcji warto pamiętać, że wyniki działania są zawsze zapisywane do bazy danych (opcja -db pozwala nam na wybranie nazwy pliku). Aby zapobiec wygenerowaniu pliku dla bazy, możemy użyć opcji -nd.

Zapisanie wyników skanowania w bazie danych pozwala nam na generowanie raportów w dowolnie wybranym czasie bądź, w razie potrzeby, ze zdalnej maszyny.

Bardzo użyteczną opcją jest możliwość importowania wyników działania innych narzędzi jako dodatkowych danych. Mamy wtedy możliwość wygenerowania raportu zbiorczego uwzględniającego np. plik .csv wygenerowany przez nikto:

    nikto $ cat nikto_scan.csv 
    "Nikto - v2.1.5/2.1.5"
    "Nikto - v2.1.5/2.1.5"
    "localhost","127.0.0.1","80","","","","Apache/2.2.26 
    (Unix) DAV/2 PHP/5.4.19 mod_ssl/2.2.26 OpenSSL/0.9.8y"
    "localhost","127.0.0.1","80","OSVDB-0","GET","/bb/web/bb/web/",
    "The anti-clickjacking X-Frame-Options header is not present."
    "localhost","127.0.0.1","80","OSVDB-0","HEAD","/bb/web/",
    "OpenSSL/0.9.8y appears to be outdated (current is at least 1.0.1c). 
    OpenSSL 0.9.8r is also current."
    "localhost","127.0.0.1","80","OSVDB-0","HEAD","/bb/web/",
    "mod_ssl/2.2.26 appears to be outdated (current is at least 2.8.31) 
    (may depend on server version)"
    "localhost","127.0.0.1","80","OSVDB-0","OPTIONS","/bb/web/",
    "Allowed HTTP Methods: GET, HEAD, POST, OPTIONS "
    "localhost","127.0.0.1","80","OSVDB-0","GET","/bb/web/",
    "mod_ssl/2.2.26 OpenSSL/0.9.8y - mod_ssl 2.8.7 and lower are 
    vulnerable to a remote buffer overflow which may allow a remote 
    shell (difficult to exploit). CVE-2002-0082, OSVDB-756."

Powyżej: przykładowy plik .csv – rezultat skanowania programem nikto.

Po dołączeniu pliku opcją import wynik działania Golismero będzie zawierał również informacje z rezultatów działania skanera nikto:

./golismero.py import nikto_scan.csv -o report.html

W powyższym przykładzie użyłem automatycznego rozpoznawania formatu pliku raportu (w tym wypadku .html). Format HTML pozwala na uzyskanie bardzo czytelnej i przyjemnej dla oka formy, tworząc estetyczny, niemal gotowy do prezentacji raport, dzięki czemu stanowi dobrą bazę wyjściową do przygotowania własnego.

Możemy dołączyć tak dużo dodatkowych plików, jak to będzie konieczne – wyniki skanowania nmapa, openvasa czy zaprezentowanego w przykładzie nikto. Jeśli zajdzie potrzeba uwzględnienia wyników działania innego programu – możemy stworzyć swój własny plugin.

Rysunek 2. Fragment raportu w formacie HTML, uwzględniający dane zaimportowane z pliku nikto_scan.csv, wygenerowanego przez skaner nikto.

Screen 2. Fragment raportu w formacie HTML uwzględniający dane zaimportowane z pliku nikto_scan.csv, wygenerowanego przez skaner nikto.

 

Raporty

Jak już wspomniałem wcześniej, opcja generowania raportu jest jedną z najmocniejszych zalet Golismero – szczególnie dotyczy to formatu HTML. Raport przedstawiony jest w bardzo czytelnej, zwięzłej postaci, włącznie z wykresami podsumowującymi wyniki testu, znajdującymi się na samym początku dokumentu.

W dalszej części prezentowana jest lista wszystkich znalezionych podatności (sekcja „Vulnerabilities”), a następnie szczegółowo opisana każda pozycja z tej listy (dołączone zostają nawet linki do zasobów w Internecie, gdzie można znaleźć więcej informacji o podatności – aktualnie są to odnośniki do zasobów na stronach OWASP, CVE oraz CWE).

Rysunek 3. Podsumowanie w postaci wykresów przykładowego testu penetracyjnego.

Screen 3. Podsumowanie przykładowego testu penetracyjnego w postaci wykresów.

 

Pluginy

Podstawową funkcjonalność Golismero w bardzo prosty sposób można rozbudować za pomocą wtyczek, które, podobnie jak sam program, napisane są w Pythonie. Już bazowa wersja programu dostarcza nam kilkadziesiąt różnego rodzaju rozszerzeń – od służących do importowania wyników działania innych programów, poprzez te służące do przeprowadzania rekonesansu, ataków typu „brute force”, ataków XSS (integracja z xsserem, SQLi (integracja z sqlmap), a nawet wtyczka do przeprowadzania testu na podatność „heartbleed” biblioteki OpenSSL (CVE-2014-0160).

Pamiętać należy, że pluginy takie, jak sqlmap, nikto, nmap czy openvas to jedynie interfejsy, które wymagają, by odpowiedni program znajdował się już na dysku. W przeciwnym wypadku Golismoero pominie użycie danego narzędzia. Listę wszystkich dostępnych pluginów uzyskamy po wydaniu poecenia:

$ ./golismero.py plugins

Aby uzyskać szczegółową informację na temat interesującej nas wtyczki, możemy posłużyć się poleceniem:

$ ./golismero.py info [nazwa_pluginu]

Na uzyskanym listingu znajdziemy informacje m.in. o parametrach, jakie musimy przekazać (oraz o przyjmowanych przez nie domyślnych wartościach), by plugin zadziałał prawidłowo. Oprócz tego możemy dowiedzieć się, kto jest jego autorem czy do jakiej kategorii plugin został zaliczony:

$ ./golismero.py info json

/------------------------------------------------------\
| GoLismero 2.0.0b5, The Web Knife - RootedCON Edition |
| Contact: golismero.project<@>gmail.com               |
|                                                      |
| Daniel Garcia Garcia a.k.a cr0hn (@ggdaniel)         |
| Mario Vilas (@Mario_Vilas)                           |
\------------------------------------------------------/

Information for plugin: JSON Report
-----------------------------------
ID:          report/json
Location:    report/json.golismero
Source code: report/json.py
Class name:  JSONOutput
Category:    report
Stage:       report

Description:
    JSON output for programmatic access.

Arguments:
    beautify -> no
    command -> 
    mode -> dump
W każdej chwili możemy uzyskać informację o interesującym nas pluginie – służy do tego opcja info.

 

Podsumowanie

Golismero to bardzo ciekawe i wciąż rozwijane narzędzie. Jak informują autorzy projektu, wkrótce możemy spodziewać się dalszych ulepszeń – m.in. integracji z Metaspolitem, w3af, OWASP ZAP Proxy; opracowywane są także opcje generowania raportów w postaci plików .pdf oraz w formacie MS Office Word.

Dodatkowo dla wszystkich zainteresowanych programowaniem w Pythonie to ciekawy kawałek kodu i możliwość podejrzenia, jak wykorzystać ten potężny język programowania w praktyce tworzenia aplikacji do testowania bezpieczeństwa.

 

Źródła

 

Rafał 'bl4de’ Janicki – bloorq[at]gmail.com

Spodobał Ci się wpis? Podziel się nim ze znajomymi:



Komentarze

  1. Jezus

    Coś tu jest nie tak, albo nie umiem czytać ;)
    Od kiedy WSZYSCY używają pythona?
    Zawsze wydawało mi się że jest to niszowy język, a właściwie za taki długo uchodził.

    Odpowiedz
    • E, w zasadzie każdy pentester powinien znać przynajmniej podstawowo pythona! :)

      Odpowiedz
  2. Duży Pies

    Artykuł bardzo ciekawy, ale zbyt krótki. To tak jakby dać mi tylko powąchać ciastko i nie pozwolić je zjeść. Stanowczo należy temat rozwinąć. Sekuraku, popraw się i przygotuj artykuł w wersji „professional” a nie w wersji „lite” :)

    Odpowiedz
    • Odpowiedz
    • bl4de

      Artykuł miał na celu bardziej przedstawienie narzędzia. Nie miałem na celu tłumaczenia całej dokumentacji :)

      Myślę, że informacje w nim zawarte są wystarczające, by zacząć samodzielnie poznawać i używać Golismero ;)

      Odpowiedz
      • Bigfoot

        A ja się zastanawiam w jaki sposób użyć czegoś takiego aby było elementem takiego „secure software development lifecycle”?

        Macie jakieś doświadczenia z uruchamianiem takiego narzędzia w trybie ciągłym?

        Tzn wyobrażał bym to sobie tak, że np jenkins odpala takie narzędzie jako jeden z kolejnych testów – jednostkowe, integracyjne, bezpieczeństwa i np wypluwa ile znalazł błedów jakiegoś tam typu po czym interesujemy się tym jeśli widzimy że ilość ostrzeżeń rośnie.

        Próbowaliście kiedyś robić coś takiego? Jeśli tak to czego używaliście i jak się sprawdzało?

        Odpowiedz
  3. AdNEt

    Witam,
    Czy ktos moze mi odp. na 2 pytania:
    1) Jak sprawdzic poprzednie skany (skoro sa wrzucane do db)
    2) Czy jest jakis Manual po polsku? Jak na razie ze strony Golismero dokumentacja jest znikoma.

    Odpowiedz
  4. bl4de

    @AdNEt

    1. Każde skanowanie możesz/powinieneś zapisać do osobnego pliku bazy danych (w formacie SQLite) – po prostu musisz podać nazwę tego pliku w poleceniu:

    $ golismero scan -db [nazwa_pliku_bazy_dancyh].db

    2. Niestety, nic mi o tym nie wiadomo, by była polska dokumentacja do Golismero – przynajmniej mnie nie udało się na takową natrafić :)

    Odpowiedz
  5. the_me

    Pozamiatali z pluginami, ocb? 'scan’ też jest już przestarzałe…

    Odpowiedz

Odpowiedz