Infrastruktura testów socjotechnicznych – Gophish cz. 1

W dzisiejszym wpisie omówię problematykę przygotowania infrastruktury pod testy socjotechniczne. Temat z pozoru błahy, jednak mam nadzieję, że każdy wyciągnie coś z niego coś wartościowego. Zaczynamy!

Wstęp teoretyczny

Kilka słów o samych testach socjotechnicznych. Choć najczęściej kojarzone z phishingiem, obejmują one całą gamę czynności mających na celu sprawdzić odporność firmy i pracowników na działania socjotechniczne.

  • Phishing
Phishing jako najpopularniejsza forma działań socjotechnicznych
  • Vishing
  • Smishing
  • Baiting (podrzucanie nośników USB lub innego sprzętu przypominającego USB)
  • Testy fizyczne

Po co wykonujemy takie testy? Celem nadrzędnym powinna być poprawa odporności danej organizacji na prawdziwe ataki socjotechniczne. Główne cele jakie chcemy osiągnąć to:

  • Poprawa świadomości pracowników
  • Identyfikacja słabych punktów (dobre wyszkolenie na temat Phishingu, ale całkowita klapa jeżeli chodzi o Vishing – częsty przypadek!)
  • Ocena skuteczności systemów bezpieczeństwa, filtrów poczty, działania ochrony, recepcji itp.

Infrastruktura testów socjotechnicznych – Gophish

Gophish to najpopularniejsze narzędzie do przeprowadzania kampanii phishingowych

Okej, skoro suchą teorię mamy za sobą to czas na kolejną porcję… teorii. Najpopularniejszym narzędziem, które automatyzuje oraz systematyzuje testy phishingowe jest Gophish. Jest to open-sourcowe narzędzie, które służy do przygotowywania i przeprowadzania kampanii phishingowych. Pozwala na śledzenie wyników w czasie rzeczywistym, generowanie dość estetycznych i treściwych raportów, zapewnia też wygodny interfejs webowy. Jednak zanim uruchomimy swoją pierwszą kampanię, warto zwrócić uwagę na kilka elementów:

  • Nagłówki „X-Gophish” bardzo źle wygladają i żadne poważne rozwiązanie bezpieczeństwa nie przepuści wiadomości z takim headerem
  • ServerName o nazwie „gophish” też nie wygląda zachecająco
  • Parametry „rid” w przesyłanych linkach są powszechnie uważane za IOC Gophisha
  • Charakterystyczna strona zwracająca status 404 też jest powszechnie uważana za IOC Gophisha1
  • Dojrzały dostawca VPS zablokuje wam konto/VPS gdy wykryje kilkaset wiadomości email w ciągu kilkunastu minut. Może rozpatrzy wasze odwołanie, a może nie? Lepiej nie ryzykować.

Spróbujemy uporać się z powyższymi problemami (wyzwaniami ;)) w tym wpisie.

Domena do phishingu

Jakiś czas temu w jednym z moich wpisów na LinkedIn wspomniałem o narzędziu dnstwist. Jest to wyjątkowo wygodny tool, za pomocą którego możemy wygenerować listę domen, które w jakiś sposób przypominają testowaną domenę.

Niektóre wygenerowane domeny

Powinniśmy pamiętać o tym, że przeglądarki nie będą wyświetlać homoglifów, a jej zapis w formie tzw. punycode. W związku z powyższym, do tworzenia landing page czy innych zasobów do których ofiara będzie odwoływać się poprzez przeglądarkę, powinniśmy unikać domen z homoglifami, a skupić się na innych technikach takich jak:

  • transpozycja -> redacademy.pl -> redacaedmy.pl
  • ominięcie znaku np. redacademy.pl -> redacdemy.pl
  • dodanie znaku np. redacademy.pl -> redaccademy.pl
  • używanie dywizów (łączników) np. redacademy.pl -> red-academy.pl

Niemniej, skoro ten wpis traktuje o phishingu – skupimy się na wyborze odpowiedniej domeny z homoglifem. Po krótkej analizie wyników programu dnstwist, postanowiłem zakupić domenę redacadęmy.pl, czyli xn--redacadmy-6ib.pl.

Gophish – usunięcie IOC

Gophish nie jest wymagający jeżeli chodzi o minimalne wymagania sprzętowe, choć należy pamiętać, że jest to aplikacja webowa, która (w zależności od scenariusza) może przetwarzać znaczące ilości danych. W związku z powyższym, nieco nadmiarowo kupiłem VPS VLE-2 na OVH, z preinstalowanym systemem operacyjnym Ubuntu w wersji 22.04 LTS.

Wybór VPS

Po wyborze VPS i połączeniu się do naszej maszyny, należy ściągnąć repozytorium gophisha. Przy okazji możemy zweryfikować obecność nagłówków X-Gophish… w plikach źródłowych narzędzia.

Obecność nagłówków X-Gophish

Pierwszym i najtrudniejszym krokiem jest podmiana domyślnej strony 404 w Gophishu, o której wspominaliśmy wcześniej. Wbrew pozorom, nie jest to trywialne, ponieważ jest ona dość mocno osadzona w kodzie samego Gophisha. Aby wykorzystać customową stronę „Not found”, należy umieścić następujące dwie funkcje w pliku controllers/phish.go oraz nieco zmodyfikować importy – ale to już pozostawiam Wam 😉

func customError(w http.ResponseWriter, error string, code int) {
        w.Header().Set("Content-Type", "text/html; charset=utf-8")
        w.Header().Set("X-Content-Type-Options", "nosniff")
        w.WriteHeader(code)
        fmt.Fprintln(w, error)
}

func customNotFound(w http.ResponseWriter, r *http.Request) {
        tmpl404, err := template.ParseFiles("templates/404.html")
        if err != nil {
                log.Fatal(err)
        }
        var b bytes.Buffer
        err = tmpl404.Execute(&b, "")
        if err != nil {
                customNotFound(w, r)
                return
        }
        customError(w, b.String(), http.StatusNotFound)
}

Ostatnim krokiem w kontekście strony „Not found” jest utworzenie dowolnej strony w pliku templates/404.html. Ta strona będzie wyświetlana gdy ktoś odwoła się do nieistniejącego zasobu.

Kolejnym krokiem jest uruchomienie krótkiego, prostego skryptu, który usunie IOC w plikach źródłowych gophisha:

cd gophish 

find . -type f -exec sed -i 's/X-Gophish-Contact/X-Contact/g' {} +
find . -type f -exec sed -i 's/X-Gophish-Signature/X-Signature/g' {} +

find config -name config.go -exec sed -i 's/ServerName = "gophish"/ServerName = "IGNORE"/' {} +

sed -i 's/const RecipientParameter = "rid"/const RecipientParameter = "keyname"/g' models/campaign.go


sed -i 's/http.NotFound/customNotFound/g' controllers/phish.go

Po uruchomieniu skryptu można zweryfikować, że nagłówki X-Gophish zostały usunięte. Skrypt zadziałał!

Świetnie. IOC wskazujące na to, że nasz serwer hostuje Gophisha są usunięte. Możemy przejść do kompilacji Gophisha.

Jak przystało na pentesterów, a nie programistów – ignorujemy warning. Nasz kod nie musi być idealny, nasz kod musi działać. Po skompilowaniu Gophisha, zmieniamy ustawienia w config.json (Gophish domyślnie nasłuchuje na localhoście), a następnie uruchamiamy go z wykorzystaniem narzędzia screen. Po uruchomieniu wypadałoby też ustawić firewall, aby tylko zaufane hosty mogły łączyć się do interfejsu administratora Gophisha.

vim config.json
screen -S gophish
sudo ./gophish
[Ctrl + a +d ] - wyjście ze screena
sudo iptables -A INPUT -p tcp -s [twój publiczny adres IP] --dport 3111 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 3111 -j DROP

Gophish – konfiguracja

Po wejściu do konsoli Administratora i zmianie domyślnego hasła, naszym oczom powinien pokazać się panel główny narzędzia.

Dashboard GoPhisha

Jeżeli udało się, gratulacje. Przeszliśmy przez pierwszy etap i GoPhish jest gotowy do pracy.

Konfiguracja sending profile

Kolejnym punktem jest przygotowanie profilu, z którego będziemy wysyłać wiadomości. Zanim jednak to zrobimy, zweryfikujmy czy w ogóle wiadomości z redacadęmy.pl czyli xn--redacadmy-6ib.pl do nas dochodzą. W tym celu zalogujmy się na skrzynkę pocztową i wyślijmy testową wiadomość na skrzynkę Gmail oraz firmową RedAcademy, uruchomioną na M365.

Wyniki są obiecujące, a zarazem nieco niepokojące. Zarówno Gmail jak i wersja Desktopowa Outlooka wyświetliły redacadęmy.pl w jej formie ze znakiem specjalnym. Jedynie webowa wersja Outlooka wyświetliła wiadomość z domeną zapisaną w formie punycode. Przed uruchomieniem testu socjotechnicznego zawsze sprawdźmy z jakiego klienta pocztowego korzystają nasi odbiorcy. Pozwoli nam to uniknąć wpadki w postaci wyświetlenia się wiadomości w formie punycode i będziemy wiedzieć, że lepiej użyć podobnej domeny, ale zawierającej standardowy zestaw znaków.

Przejdźmy zatem do profilu, czyli ustawień dotyczących serwera SMTP oraz konta z którego będą wysyłane wiadomości. Tworzymy profil o dowolnej nazwie, uzupełniamy właściwe pola i wysyłamy testową wiadomość na wybraną przez nas skrzynkę.

Uzupełnienie Sending Profile

Po wysłaniu wiadomości powinna ona po chwili pokazać się na naszej skrzynce pocztowej.

Testowa wiadomość wysłana przez Gophish

Jeżeli udało nam się przesłać wiadomość testową, to znaczy, że prawidłowo skonfigurowaliśmy profil. Szczegółowe informacje o serwerach SMTP waszych dostawców poczty znajdziecie bez problemu w Google.

Grupa odbiorców

Kolejny krok to stworzenie nowej grupy odbiorców.

Ten krok nie jest skomplikowany i nie wymaga tłumaczenia. Tworzymy grupę odbiorców którzy będą objęci testem phishingowym. Twórca narzędzia wprowadził dodatkowo możliwość grupowania odbiorców według ich pozycji w firmie. Dodatkowy feature, możemy spokojnie pozostawić to pole puste.

Templatka, czyli wzorzec wiadomości

Kolejny krok to stworzenie templatki, wzorca wiadomości, która będzie wysyłana w danej kampanii. Wiadomości email możemy pisać w formie tekstu, ale moim zdaniem o wiele bardziej przydatna jest możliwość edycji w formacie HTML. Edycja w formie języka znaczników HTML daje nam praktycznie nieograniczone możliwości wizualne, które chcemy zastosować w naszej wiadomości.

<html>
<head>
	<title></title>
</head>
<body>
<h1 style="box-sizing: border-box; margin: 20px 0px 10px; font-size: 36px; line-height: 1.1; color: rgb(68, 114, 196);"><span class="marker" style=""><samp style=""><font face="Helvetica Neue, Helvetica, Arial, sans-serif"><span style="font-weight: 500;">Microsoft Outlook</span></font></samp></span></h1>

<p> {{.FirstName}}!</p>

<p><o:p></o:p></p>

<p>Twoje konto zostało zawieszone.<br />
Ze względ&oacute;w bezpieczeństwa Twoje konto w usłudze Outlook zostało zawieszone. W celu przywr&oacute;cenia funkcjonalności konta postępuj zgodnie z instrukcjami poniżej.</p>

<p>Zweryfikuj swoje konto <a href="{{.URL}}">tutaj</a></p>

<p>{{.Tracker}}</p>
</body>
</html>
```

Powyższy kod wyświetli nam wiadomość w następującej formie. Nie wygląda to najgorzej, choć proszę pamiętać, że to tylko testowa wiadomość, mająca cel demonstracyjny.

W powyższym szablonie wykorzystano 3 placeholdery:

  • {{.FirstName}} przechowujący pierwsze imię odbiorcy
  • {{.Tracker}} przechowujący link do obrazka (w ten sposób gophish zlicza otwarcie wiadomości)
  • {{.URL}} który przechowuje adres IP lub domena Gophisha podawane przy starcie kampanii. Lepiej sprawdzi się tu oczywiście domena z prawidłowym certyfikatem.

Landing Page

Po stworzeniu szablonu wiadomości, ostatnim krokiem jest „Landing Page”, czyli stworzenie strony, która będzie odwiedzana przez odbiorcę po kliknięciu w link. Podobnie jak w przypadku szablonów wiadomości, Landing Page umożliwia tworzenie zawartości z wykorzystaniem HTML, a więc sky is the limit – jeżeli chodzi o kreatywność i pomysłowość. W sieci znajduje się kilka przykładów landing page, m.in. tutaj . Skorzystałem z takiego gotowca, który prezentuje się następująco:

Karta upominkowa Starbucks

Oczywiście, zarówno treść emaila jako i landing page powinna być logicznie połączona, tworząc spójną i wiarygodną kampanię. Wiadomość informująca o zablokowaniu konta w Outlooku oraz landing page z kartą prezentową od Starbucka to słabe połączenie, ale chodziło mi o to, aby pokazać możliwości narzędzia. Planując kampanie powinniście zadbać o jak największą wiarygodność kampanii, pamiętać o grafikach, logach, szczegółach które mogą przechylić „szalę zwycięstwa” na waszą stronę.

Gophish – uruchomienie kampanii

Nadszedł czas na uruchomienie kampanii. Tworzymy nową kampanię przechodząc do menu „Campaigns” i wybierając „New Campaign”. Mając tylko jeden szablon wiadomości i landing page, Gophish samodzielnie uzupełni część pól za nas. Ostatni rzut oka na ustawienia konfiguracyjne i możemy rozpoczynać.

Uruchomienie kampanii

Po wysłaniu wiadomości, program prezentuje nam graficzny interfejs w którym możemy na żywo śledzić przebieg kampanii.

W miarę jak będziemy otwierać kolejne wiadomości i ładować obrazki, status kolejnych wiadomości będzie się zmieniać.

Zgodnie z oczekiwaniami, wiadomość wygląda następująco:

Treść wiadomości

Wiadomość nie wygląda źle, choć w prawdziwej kampanii phishingowej powinniśmy przykładać dużą wagę do jakości wysyłanych emaili. Moim zdaniem, jakość wiadomości jest najważniejszym czynnikiem, który decyduje o powodzeniu kampanii. Jest to tak na prawdę pierwsza rzecz z którą zderza się odbiorca i to ona, podobnie jak pierwsze wrażenie, jest niezmiernie ważna. O czym powinniśmy pamiętać budując treść emaila?

  • Tytuł powinien być zwięzły i skłaniać odbiorcę do odczytania wiadomości
  • Tytuł powinien w jakiś sposób nakłaniać odbiorcę do odczytania. Może być to ciekawość, strach, chęć zysku czy FOMO (fear of missing out)
  • Wiadomość może być spersonalizowana. Część odbiorców ma tendencję do ignorowania okólników
  • Treść powinna odpowiadać aktualnym wydarzeniom w firmie lub być skorelowana z aktualnymi wydarzeniami bądź kalendarzem. Świąteczne vouchery? Premie noworoczne? A może okres przygotowania raportu spółki giełdowej?
  • Treść wiadomości powinna być wolna od literówek i błędów stylistycznych. Poprawna gramatycznie i interpunkcyjnie wiadomość zwiększa wiarygodność.
  • Zastosowanie stopki, która zwiększa wiarygodność wiadomości. Nawiąż korespondencję z firmą wcześniej aby uzyskać dostęp do wykorzystywanych przez nich podpisów.
  • Wiarygodne prośby. Pretekst do działania musi być realistyczny. Nie wymyślaj scenariuszy „na już”. Przygotuj sobie kilka wariantów i oceń jest np. na następny dzień, z „czystym” umysłem.

Nadawca w programie desktopowym outlooka wyświetla się w postaci znaków Unicode, a nie w postacie Punycode. To dla nas cenna informacja, tym bardziej, że większość korporacji pracuje właśnie na desktopowych wersjach popularnego programu pocztowego.

Natomiast po kliknięciu w link, pojawia się landing page który przygotowaliśmy:

Przygotowany uprzednio landing page

Po zakończeniu kampanii możemy wyeksportować wyniki do pliku CSV oraz poddać je dalszej analizie.

Dodatkowe uwagi dotyczące opsec

Czego powinniśmy się wystrzegać gdy będziemy planować docelową kampanię? Nie wysyłajmy wiadomości „testowej”. Jeżeli provider domeny się nie zmienił, pozostawmy ustawienia z naszych testów, zmieńmy tylko adres i hasło. Wiem, że każdy chce przetestować „czy aby na pewno wszystko działa?”, ale zaufajcie mi. Zadziała. Wysyłając testową wiadomość palicie domenę i przesyłacie wszystkim informacje, że ta właśnie domena posłuży do phishingu w przyszłości.

Jeżeli bardzo chcecie sprawdzać poprawność konfiguracji profili, zmieńcie zawartość testowej wiadomości w controllers/api/util.go i przekompilujecie Gophisha.

Nie wystawiajcie panelu Administratora do sieci. Skorzystajcie z tunelu SSH, a jeśli już musicie wystawić go na publicu – niech Firewall przepuszcza tylko określone adresy IP. I wcale nie chodzi mi tu o możliwość hackbacku (chociaż trochę też!), ale bardziej o błyskawiczne przeskanowanie Waszej infrastruktury i przypisanie jej złośliwych cech. Panel Administratora Gophish rzuca się w oczy, nie mówiąc już o domyślnym certyfikacie self-signed:

Certyfikat self-signed Gophisha

Czy to koniec?

Absolutnie nie. Udowodniliśmy tylko, że narzędzie działa. Czego brakuje w naszej infrastrukturze? Brakuje nam SMTP Relay!

Kojarzycie serwery C2 i Redirectory? Redirector dla serwera C2 jest tym samym co SMTP relay dla serwera phishingowego. Ładnie przedstawiono to na schemacie na stronie ired.team

Schemat ideowy Red Team wg https://www.ired.team/

Nasz serwer GoPhisha powinien być zabezpieczony przed spaleniem za pomocą serwera pośredniczącego. Jeżeli ktokolwiek znajdzie serwer SMTP Relay, można z powodzeniem uruchomić kolejny. Pamiętacie {{.URL}}? On też nie powinien być podawany w formie bezpośredniego adresu IP lub nazwy Gophisha. Powinny być to zaufane domeny, z ważnymi certyfikatami, które przekierowują (prosty reverse proxy za pomocą Nginxa) na Gophisha.

Powyższy rysunek jasno pokazuje, czego powinniśmy pilnować, a co powinno nam służyć jako przekaźnik, redirector, relay pomiędzy ofiarą, a nami. Chciałbym jednak podkreślić, że moim zdaniem dobry, „wygrzany” SMTP Relay jest dużo cenniejszy niż C2 Redirector czy Payload Redirector. Jaki mamy wybór jeśli chodzi o SMTP Relay?

  • Płatne rozwiązania typu Mailgun, Siteground, Mailjet
  • Swój własny serwer SMTP (postfix)
  • Rozwiązania chmurowe typu Amazon SES (Simple Email Service)

Zalety pierwszej grupy są takie, że te serwery SMTP mają dobrą reputację, są często wykorzystywane do normalnych, niezłośliwych kampanii mailingowych. Są wykorzystywane przez firmy do wysyłki np. newsletterów. Wadą jest to, że są płatne i z reguły stosują weryfikację KYC (Know Your Customer), więc bez podpięcia karty płatniczej ani rusz.

Druga grupa to postawienie własnego serwera Postfix i manualne skonfigurowanie wpisów SPF oraz DKIM, wygenerowanie certyfikatów oraz update stref DNS.

Trzecie rozwiązanie jest chyba najlepsze. Prostota konfiguracji chmurowych rozwiązań bije na głowę customowe pomysły providerów takich jak mailgun czy majljet. Ponadto, płatności w chmurze z reguły działają na zasadzie „pay as you go”, więc nie musimy płacić za cały miesiąc czy rok z góry. Fakt – AWS również ma KYC, ale przecież nie robimy niczego nielegalnego, prawda?

I właśnie o tym trzecim rozwiązaniu będzie traktować część druga, którą mam nadzieję przygotuję za tydzień.

  1. https://cybercx.co.nz/blog/identifying-gophish-servers/ ↩︎

Dodaj komentarz


The reCAPTCHA verification period has expired. Please reload the page.