Hej, hej... Programisto, to kolejny artykuł dla Ciebie! Druga część artykułu na temat wzorców projektowych. Poznaj Adapter oraz Memento.
Dzisiaj kontynuujemy temat Masscan’a (część pierwsza dotycząca przeszukiwania Internetu dostępna jest tutaj), jego specyfiki i zaawansowanych opcji. Opowiemy Wam także czym jest atak typu reflection i pokażemy go na konkretnym przykładzie. Jeśli chcesz wiedzieć więcej, to zachęcamy do lektury!
Formaty zapisu
Output, który zbierzemy ze skanów możemy zapisać w wielu wygodnych do przetwarzania formatach takich jak XML, JSON. Robimy to z użyciem dedykowanego przełącznika lub komendy –output-format <format> oraz –output-filename <filename>.
np. masscan –output-format xml –output-filename output.xml
Istnieją także dedykowane parametry do formatów, które są połączeniem dwóch wyżej wymienionych komend.
- -oX <filename> – dla XML
- -oJ <filename> – dla JSON
- -oG <filename> – dla grepable – każdy host w osobnej linii, tak, aby łatwo było przetwarzać plik z użyciem komend Linux
- -oB <filename> – binary format, mniejszy, ale aby odczytać należy wykonać komendę masscan z przełącznikiem –readscan. Można je następnie konwertować na dogodny format
- -oL <filename> – jako lista – pojedynczy port każdego hosta na każdą linię
Rysunek 1 Skanowanie sieci lokalnej do pliku JSON.
Rysunek 2: Zawartość pliku output.json.
Dodatkowe opcje masscan
Warto wspomnieć także o innych ciekawych parametrach Masscana, które możemy wykorzystać podczas pracy z tym narzędziem.
–echo – zamiast wykonywać skan zapisz obecną konfigurację parametrów na dysku
-c <fiename> – wczytaj konfigruację z pliku
-e <iface> – podaj interfejs przez który ma płynąć ruch. Brak podaniem skutkuje wybraniem tego z ustawioną bramą domyślną
–exclude <range> – nie skanuj pewnego podanego zakresu
–excludefile <filename> – nie skanuj adresów podanych w pliku
–retries <number> – ile razy skaner ma ponawiać pytanie. Ponieważ jest bezstanowy, to ponowi niezależnie od tego czy otrzymał odpowiedź
–pcap <filename> – eksport do formatu pcap
–pfring – użyj sterownika pfring. Musi być on uprzednio zainstalowany.
–nmap-payloads – można skanować z użyciem sposobów skanowania z oprogramowania NMAP.
–resume <filename> – jeśli użytkownik wciśnie Ctrl-C to masscan zatrzyma się i utworzy plik paused.conf. Wtedy można uruchomić ponownie podając ten parametr
–wait <seconds> – ile sekund po wysłaniu masscan ma czekać na odpowiedź (domyślnie jest to 10s)
Więcej opcji można znaleźć w manualu na stronie https://manpages.org/masscan/8
Zwiększenie prędkości poprzez instancję
Istotna jest swoboda korzystania parametrami i dostosowywania go do działającej instancji systemu. Ze względu na ilość parametrów można dostosować dany skan pod swoje potrzeby, a także przyspieszyć go do prędkości do których np. NMAP nie jest zdolny. W tym celu można również wykorzystać zwielokrotnienie instancji, poniewaz masscan oferuje tak zwany sharding. Odpowiada on za dzielenie podanego zakresu adresów pomiędzy instancje masscana, tak aby równolegle skanować. Output należy wrzucać do osobnych plików, bo nie da się równolegle zapisywać do pliku z wielu instancji masscan. W tym celu należy uruchomić dwie instancje terminala, a także skorzystać z tego samego seed’a (liczba początkowa generatora liczb losowych) :
Rysunek 3 i 4: Wykorzystanie shardingu do podziału skanu pomiędzy dwie instancje masscan’a.
Output zapisuje się do dwóch osobnych plików i każdy z rekordów dzięki zastosowaniu tego samego seed’a jest inny nawet pomiędzy plikami outpu1.json oraz output2.json
Scenariusz ataku typu reflection
Ponieważ z pomocą parametru –adapter-ip i osobnego stosu protokołów TCP/IP możesz ustawić dowolny adres źródłowy ip, można podać publiczny adres dowolnego serwera, który chcemy wyrzucić z sieci. Wtedy my wysyłamy requesta do pewnej innej usługi, a usługa wysyła odpowiedź do serwera wskazanego w adresie źródłowym. Jeśli wykorzystamy przy tym amplification attack, czyli wzmocnienie polegające na tym, że przy wysłaniu małej ilości danych dostajemy dużą odpowiedź zapychającą łącze, to możemy niskim kosztem pozbawić kogoś dostępu do sieci.
Żeby temu zapobiegać ISP może zastosować tak zwane “egress filtering”. Wtedy router po stronie ISP może patrzeć czy adres źródłowy w danym pakiecie zgadza się z lokalną podsiecią z której pakiet wyszedł. Jeśli nie, może blokować ruch. Można to sprawdzić wysyłając zespoofowaną wiadomość do własnego serwera na którym nasłuchujemy na publicznym adresie. Należy również pamiętać, że jeśli dany dostawca w regulaminie nie życzy sobie skanowania innych z ich infrastruktury, to nie należy tego robić bądź trzeba liczyć się z konsekwencjami.
Rysunek 5: Atak typu reflection. Źródło: docs.aws.amazon.com.
Memcached – realny przykład ataku
Memcached to system buforowania, który służy do optymalizacji działania aplikacji internetowych. Przechowuje on na przykład wyniki zapytań. Usługi memcached nie powinny być wystawiane na zewnątrz, ale w 2018 roku częściowo były. Nie było tam mechanizmów autentykacji, bo tylko web-app wystawiona na świat powinna być w stanie się komunikować z memcached.
Przebieg ataku:
- Atakujący skanuje w poszukiwaniu wystawionych usług memcached
- Atakujący mając listę takich serwerów może zmieniać ich konfigurację oraz napełniać bufory dużą ilością danych
- Atakujący następnie wysyła GET request po te dane używając zespoofowanego adresu źródłowego
- Zawartość bufora, która jest wielokrotnie większa niż GET request jest wysyłana do naszego celu w postaci strumienia UDP
W ten sposób w 2018 roku zaatakowano serwery GitHuba, który został obciążony ruchem o wartości 1,35Tb/s. Jest to 1350Gb/s czyli 170GB/s
Rysunek 6: Wykres ilości przychodzących danych podczas ataku na Github. Źródło: Akamai/Wired.
Jest to więc atak typu reflection + amplification, bo odbijamy od serwera memcached spoofując ip, a także wysyłając mały request jesteśmy w stanie otrzymać bardzo dużą odpowiedź. Sprawia to, że atakujący dysponując małymi zasobami jest w stanie zDDOSować dużą usługę w Internecie.
Podsumowanie
Mamy nadzieję, że udało nam się przybliżyć Wam temat masowego skanowania w Internecie. Masscan może być używany do pozyskiwania danych na gigantyczną skalę i wyciągania z nich globalnych wniosków – choćby tego ile urządzeń może być podatnych na dany atak. Analiza banerów może doprowadzić nas do odkrycia działającej na serwerze usługi. Warto także zaznaczyć, że taki skan nie dostarcza szczegółowych informacji, jak np. oprogramowanie NMAP.
Źródła:
- https://snyk.io/learn/vulnerability-scanner/
- https://en.wikipedia.org/wiki/Banner_grabbing
- https://www.balbix.com/insights/what-to-know-about-vulnerability-scanning-and-tools/
- https://snyk.io/learn/vulnerability-scanner/
- https://github.com/robertdavidgraham/masscan
- https://www.slideshare.net/cisoplatform7/defcon-22grahammc-millantentlermasscaningtheinternet
- https://www.youtube.com/watch?v=yhd8277HrEw
- https://blog.erratasec.com/2018/10/masscan-as-lesson-in-tcpip.html
- https://docs.aws.amazon.com/whitepapers/latest/aws-best-practices-ddos-resiliency/infrastructure-layer-attacks.html
- https://www.nazwa.pl/pomoc/baza-wiedzy/co-to-jest-cache-memcached-i-jak-z-niego-skorzystac/
- https://www.cloudflare.com/learning/ddos/memcached-ddos-attack/
- https://www.wired.com/story/github-ddos-memcached/
- https://manpages.org/masscan/8
- https://github.com/robertdavidgraham/masscan
- https://resources.infosecinstitute.com/topic/masscan-scan-internet-minutes/
- https://danielmiessler.com/study/masscan/