pękło! Najciekawsze momenty z KringleCon 5: Złote Pierścienie

pękło! Najciekawsze momenty z KringleCon 5: Złote Pierścienie

Nauka spotyka się z zabawą podczas SANS Holiday Hack Challenge 2022 – weź udział w szalonej przejażdżce na biegunie północnym, podczas gdy ja udaremnię niecny plan Grinchuma i odzyskam pięć złotych pierścieni

To mój pierwszy rok udziału w SANS Świąteczne wyzwanie hakerskie i to był strzał w dziesiątkę. Poprzez serię 16 wyzwań, od łatwych do trudnych, ćwiczyłem analizowanie podejrzanego ruchu sieciowego i dzienników PowerShell, pisanie Zasady Suricaty, wyrwanie się z a Pojemnik dokujący, znajdowanie kluczy, które wyciekły, aby wykorzystać a Potok CI/CD GitLab oraz Użytkownik AWS, prowadzenie Ataki na jednostki zewnętrzne XMLi zhakować inteligentną umowę, aby kupić niezamienny token.

Najlepszą częścią tego doświadczenia było to, że zapoznałem się z nowymi narzędziami i technologiami, dzięki czemu moja wiedza na temat cyberbezpieczeństwa znacznie się poszerzyła. Tutaj podzielę się kilkoma najważniejszymi momentami z rozwiązywania wyzwań.

Orientacja

Każdy uczestnik otrzymuje awatara do poruszania się po środowisku gry wideo w przeglądarce, którego akcja toczy się na biegunie północnym:

Rozbiłem to! Najważniejsze wydarzenia z KringleCon 5: Złote Pierścienie PlatoBlockchain Data Intelligence. Wyszukiwanie pionowe. AI.

Podczas orientacji otrzymujesz portfel kryptowalut, którego gra używa do przyznawania KringleCoins za ukończenie wyzwań i którego używasz w ostatnim wyzwaniu do zhakowania inteligentnego kontraktu. Co ciekawe, gra śledzi wszystkie transakcje KringleCoin w blockchainie Ethereum, co oznacza, że ​​pełny zapis twoich postępów jest również przechowywany w tym blockchainie.

Do pierwszego pierścienia gry.

1. Pierścień Tolkiena

Rozbiłem to! Najważniejsze wydarzenia z KringleCon 5: Złote Pierścienie PlatoBlockchain Data Intelligence. Wyszukiwanie pionowe. AI.

Znalezienie Pierścienia Tolkiena wymagało wysilenia moich mięśni do analizy logów.

Phishing w Wireshark

Najpierw użyłem programu Wireshark do przeanalizowania dostarczonych danych .pcap plik, który ujawnił serwer pod adresem adv.epostoday[.]uk pobieranie pliku Ref_Sept24-2020.zip do komputera:

Rozbiłem to! Najważniejsze wydarzenia z KringleCon 5: Złote Pierścienie PlatoBlockchain Data Intelligence. Wyszukiwanie pionowe. AI.

Zaglądając do pliku ZIP, znalazłem plik wykonywalny o nazwie Ref_Sept24-2020.scr który wyzwolił dwa wykrycia w programie ESET Endpoint Security: BAT/Runner.ES i Ogólny.TAGTBG. To złośliwe oprogramowanie ostatecznie prowadzi do złośliwego pliku wykonywalnego działającego w pamięci o nazwie plik konfiguracyjny.dll i wykryte przez firmę ESET Zaawansowany skaner pamięci as Win32/Dridex.DD.

Dzienniki zdarzeń Windows

Następnie przeanalizowałem dostarczone .evtx plik zawierający dzienniki PowerShell z Podglądem zdarzeń. Chociaż istnieją inne narzędzia do analizy dzienników programu PowerShell, jeśli osoby atakujące wiedzą, jak używać plików binarnych typu „living off-the-land”, aby pozostać w ukryciu, obrońcy powinni być również dobrze zorientowani w natywnych narzędziach zapewnianych przez system operacyjny.

Ponieważ dzienniki zawierały 10,434 XNUMX zdarzeń, pogrupowałem zdarzenia według dat, a następnie uruchomiłem akcję Znajdź, aby wyszukać zdarzenia zawierające $ postać. w PowerShellu, $ służy do tworzenia i odniesienia zmienne. Znalazłem atak, który miał miejsce 24 grudnia 2022 r., kiedy atakujący uruchomił następujący skrypt:

Rozbiłem to! Najważniejsze wydarzenia z KringleCon 5: Złote Pierścienie PlatoBlockchain Data Intelligence. Wyszukiwanie pionowe. AI.

Wygląda na to, że atakujący znalazł tajny przepis, podmienił tajny składnik miód dla olej z ryb, a następnie utworzył nowy plik receptury. Wywołało to zdarzenie o identyfikatorze 4104, co oznacza wykonanie zdalnych poleceń PowerShell. Dlatego przefiltrowałem zdarzenia według tego identyfikatora, co pomogło mi szybciej znaleźć dodatkowe złośliwe zdarzenia.

Regaty Suricaty

Ostatnim ćwiczeniem dla Tolkien Ring było napisanie czterech reguł Suricata do monitorowania ruchu sieciowego pod kątem inwazji Dridex:

alert dns $HOME_NET any -> any any (msg: „Znane złe wyszukiwanie DNS, możliwa infekcja Dridexem”; dns.query; content: „adv.epostoday.uk”; nocase; sid:1; rev:1;)

alert http 192.185.57.242 dowolny <> dowolny dowolny (msg: „Zbadaj podejrzane połączenia, możliwa infekcja Dridexem”; sid:2; rev:1;)

alert tls any any -> any any (msg: „Zbadaj złe certyfikaty, możliwa infekcja Dridexem”; tls.cert_subject; content: „CN=heardbellith.Icanwepeh.nagoya”; sid:3; rev:1;)

alert http any any -> any any (msg: „Podejrzana funkcja JavaScript, możliwa infekcja Dridexem”; file_data; content: „let byteCharacters = atob”; sid:4; rev:1;)

W kolejności te reguły przechwytują wyszukiwania DNS dla adv.epostoday[.]uk, połączenia z adresem IP 192.185.57[.]242, korzystanie ze złośliwego serwera Heidbellith.Icanwepeh[.]nagoya identyfikowane za pomocą nazwy zwyczajowej (CN) w certyfikacie TLS oraz użycie JavaScript od A do B() funkcja do dekodowania ciągu binarnego zawierającego dane zakodowane w base64 na kliencie.

Ukończenie tych trzech wyzwań przyniosło mi Pierścień Tolkiena:

Rozbiłem to! Najważniejsze wydarzenia z KringleCon 5: Złote Pierścienie PlatoBlockchain Data Intelligence. Wyszukiwanie pionowe. AI.

Do drugiego pierścienia.

2. Pierścień Elfów

Rozbiłem to! Najważniejsze wydarzenia z KringleCon 5: Złote Pierścienie PlatoBlockchain Data Intelligence. Wyszukiwanie pionowe. AI.

Najważniejszymi wyzwaniami dla Elfen Ring były Prison Escape i Jolly CI/CD.

Ucieczce z więzienia

Prison Escape było surowym przypomnieniem, że nadanie uprawnień roota użytkownikowi w kontenerze Dockera jest tak samo dobre, jak nadanie uprawnień roota w systemie hosta. Zadanie polegało na wydostaniu się z pojemnika. Cóż, łatwo zrobić, gdy jesteś rootem:

Rozbiłem to! Najważniejsze wydarzenia z KringleCon 5: Złote Pierścienie PlatoBlockchain Data Intelligence. Wyszukiwanie pionowe. AI.

Jako użytkownik root wymieniłem tablice partycji urządzenia, a następnie zamontowałem system plików hosta, przyznając mi pełny dostęp do hosta. Teraz mogłem poszukać klucza, który powinien znajdować się w katalogu domowym, jak wynika z podpowiedzi w grze:

Rozbiłem to! Najważniejsze wydarzenia z KringleCon 5: Złote Pierścienie PlatoBlockchain Data Intelligence. Wyszukiwanie pionowe. AI.

Wesoły CI/CD

Chociaż było to szybkie, rozwiązanie Jolly CI/CD zajęło mi najwięcej czasu ze wszystkich wyzwań. Najpierw otrzymaliśmy repozytorium Git do sklonowania przez HTTP:

Rozbiłem to! Najważniejsze wydarzenia z KringleCon 5: Złote Pierścienie PlatoBlockchain Data Intelligence. Wyszukiwanie pionowe. AI.

Z adresu URL mogłem zobaczyć, że nazwa repozytorium to wordpress.flag.net.wewn, więc przeniosłem się do repozytorium i znalazłem stronę WordPress. Sprawdziłem, czy strona jest aktywna:

Rozbiłem to! Najważniejsze wydarzenia z KringleCon 5: Złote Pierścienie PlatoBlockchain Data Intelligence. Wyszukiwanie pionowe. AI.

Tak, strona działała. Byłem ciekawy, czy w historii kodu źródłowego były jakieś klucze, które wyciekły. Jeśli tak, powinienem móc wprowadzać zmiany do kodu źródłowego. Więc pobiegłem dziennik git:

Rozbiłem to! Najważniejsze wydarzenia z KringleCon 5: Złote Pierścienie PlatoBlockchain Data Intelligence. Wyszukiwanie pionowe. AI.

Z komunikatów zatwierdzenia wygląda na to, że a popełnić powstał po dodaniu zasobów, aby naprawić ups. Czas sprawdzić zatwierdzenie przed ups:

Rozbiłem to! Najważniejsze wydarzenia z KringleCon 5: Złote Pierścienie PlatoBlockchain Data Intelligence. Wyszukiwanie pionowe. AI.

Świetnie, znalazłem ok .ssh katalog z kluczami. Skopiujmy te klucze i skonfigurujmy agenta SSH oraz użytkownika Git, aby sprawdzić, czy mogę podszyć się pod właściciela tych kluczy:

Rozbiłem to! Najważniejsze wydarzenia z KringleCon 5: Złote Pierścienie PlatoBlockchain Data Intelligence. Wyszukiwanie pionowe. AI.

Wróćmy teraz do głównej gałęzi i sprawdźmy, czy uda nam się wcisnąć banalną zmianę w kodzie źródłowym (używając nano, po prostu dodałem spację do jednego z plików):

Rozbiłem to! Najważniejsze wydarzenia z KringleCon 5: Złote Pierścienie PlatoBlockchain Data Intelligence. Wyszukiwanie pionowe. AI.

Osiągnąłem więc pierwszą część wyzwania, podszywając się pod jednego z programistów WordPress, ale czy witryna nadal działała po moim naciśnięciu?

Rozbiłem to! Najważniejsze wydarzenia z KringleCon 5: Złote Pierścienie PlatoBlockchain Data Intelligence. Wyszukiwanie pionowe. AI.

Mój push coś zmienił bo teraz strona przekierowywała na port 8080.

Do tej pory ignorowałem część wyzwania CI/CD, która powinna być kluczem do jego ukończenia. Repozytorium zawiera m .gitlab-ci.yml plik, który zapewnia konfigurację potoku GitLab CI/CD. Za każdym razem, gdy przesyłasz dane do repozytorium, włącza się system CI/CD i a Biegacz GitLab wykonuje skrypty w tym pliku YML. Pomyślałem, że to równie dobre, jak zdalne wykonanie kodu na serwerze, na którym jest zainstalowany GitLab Runner.

Przyglądając się bliżej, dostrzegłem m.in rsync skrypt kopiujący wszystkie pliki z repozytorium Git do katalogu na serwerze WWW, z którego serwowana była strona. Na początku próbowałem użyć rsync odwrócić przepływ danych, kopiując wszystkie pliki z serwera WWW do repozytorium Git, ale bez powodzenia.

Po wielu testach hipotez w końcu doszedłem do przełomowego wniosku: zamiast próbować „naprawić” witrynę WordPress lub uruchamiać złośliwe skrypty za pośrednictwem systemu kompilacji, obsługuj witrynę, która wycieka informacje z serwera WWW. Wewnątrz index.php (znajduje się na najwyższym poziomie repozytorium), mogę skomentować kod, który ładuje witrynę WordPress i uruchamiać polecenia PHP, które sondują serwer WWW.

Rzeczywiście, mogę nawet uruchamiać polecenia powłoki za pomocą PHP. znalazłem to przejść przez() pracował łatwo.

In index.php, Użyłem // aby skomentować dwie linie i dodałem passthru('ls -la /'); na ostatniej linii. Spowoduje to utworzenie witryny internetowej zawierającej listę wszystkich plików w katalogu głównym serwera WWW:

Rozbiłem to! Najważniejsze wydarzenia z KringleCon 5: Złote Pierścienie PlatoBlockchain Data Intelligence. Wyszukiwanie pionowe. AI.

Następnie wepchnąłem tę zmianę do repozytorium Git, a system GitLab CI/CD zajął się aktualizacją strony za mnie:

Rozbiłem to! Najważniejsze wydarzenia z KringleCon 5: Złote Pierścienie PlatoBlockchain Data Intelligence. Wyszukiwanie pionowe. AI.

Ach, Pierścień Elfów musi być w środku flaga.txt! Powtórzyłem poprzednie kroki, ale tym razem używając passthru('kot /flaga.txt'); odsłaniając Pierścień Elfenów następnym razem, gdy poprosiłem o stronę internetową:

Rozbiłem to! Najważniejsze wydarzenia z KringleCon 5: Złote Pierścienie PlatoBlockchain Data Intelligence. Wyszukiwanie pionowe. AI.

Do trzeciego pierścienia.

3. Pierścień sieciowy

Rozbiłem to! Najważniejsze wydarzenia z KringleCon 5: Złote Pierścienie PlatoBlockchain Data Intelligence. Wyszukiwanie pionowe. AI.

Najbardziej zabawnym wyzwaniem dla mnie było Open Boria Mine Door, chociaż Fontanna Glamtariela była interesująca, a jednocześnie przedstawiała zagadki.

Otwórz drzwi kopalni Boria

W Open Boria Mine Door przedstawiono nam sześć pinezek lub mini-wyzwań, aby ominąć walidację danych wejściowych lub Polityka bezpieczeństwa treści do łączenia rur wejściowych i wyjściowych między kołkami, w tym dopasowanie kolorów rur. W przypadku większości pinów użyłem HTML do napisania listy łączących liter „o”. Oto moje ostateczne rozwiązanie:

Rozbiłem to! Najważniejsze wydarzenia z KringleCon 5: Złote Pierścienie PlatoBlockchain Data Intelligence. Wyszukiwanie pionowe. AI.

Kołek 1

Nie było walidacji dla Pin 1, więc była to prosta sprawa HTML i wbudowanego CSS:

Kołek 2

Pin 2 miał politykę bezpieczeństwa treści, która nie zezwalała na JavaScript, ale zezwalała na wbudowany CSS, więc nie stanowiło to problemu dla mojej metody:

Kołek 3

Pin 3 miał politykę bezpieczeństwa treści, która nie zezwalała na CSS, ale zezwalała na wbudowany JavaScript, więc zamiast tego użyłem JavaScript do zmiany stylów:

Kołek 4

Pin 4 nie miał zasad bezpieczeństwa treści, ale miał funkcję sanitizeInput po stronie klienta, która usuwała podwójne i pojedyncze cudzysłowy, lewe i prawe nawiasy ostre. Sztuczka polegała na uświadomieniu sobie, że ta funkcja nie została uruchomiona przez przesłanie formularza, ale przez rozmycie wydarzenie. Innymi słowy, odsunięcie myszy od pola wprowadzania uruchamiało rozmycie zdarzenie, oczyszczając wszelkie dane wejściowe. Rozwiązaniem było wysłanie formularza poprzez naciśnięcie przycisku Wchodzę uważając, aby nie przesunąć kursora myszy poza granice pola wprowadzania:

Kołek 5

Pin 5 miał to samo oczyść wejście funkcjonować i omijać wraz z Polityką bezpieczeństwa treści zabraniającą wbudowanego CSS, ale zezwalającą na wbudowany JavaScript:

Kołek 6

Wreszcie, Pin 6 nie oczyszczał danych wejściowych, ale stosował bardziej rygorystyczne zasady bezpieczeństwa treści, zabraniające zarówno wbudowanego CSS, jak i JavaScript. Moim rozwiązaniem było użycie przestarzałego HTML, aby uzyskać potrzebne mi style i użyć tabeli zamiast listy:

Fontanna Glamtariela

Fontanna Glamtariela była okazja do ćwiczeń Ataki XML External Entity (XXE).. Ustalenie, jak zdefiniować niestandardową encję XML, zdefiniowanie encji żądającej pliku z serwera i dodanie tej encji jako ładunku do żądania HTTP nie było trudne. Najtrudniejszą częścią było wymyślenie zagadek w grze, aby odgadnąć ścieżkę do plików, które wyciekłyby z serwera. Oto przełomowa prośba ujawniająca lokalizację złotego pierścienia:

Rozbiłem to! Najważniejsze wydarzenia z KringleCon 5: Złote Pierścienie PlatoBlockchain Data Intelligence. Wyszukiwanie pionowe. AI.

Rozbiłem to! Najważniejsze wydarzenia z KringleCon 5: Złote Pierścienie PlatoBlockchain Data Intelligence. Wyszukiwanie pionowe. AI.

Rozbiłem to! Najważniejsze wydarzenia z KringleCon 5: Złote Pierścienie PlatoBlockchain Data Intelligence. Wyszukiwanie pionowe. AI.

Chciałbym zaoferować dwie lekcje wyciągnięte z tego wyzwania. Najpierw użyj tzw Konwerter typów treści rozszerzenie w Beknięcie konwertować ładunki JSON na XML. Po drugie, spróbuj umieścić ładunek XXE w różnych tagach — zajęło mi dużo czasu, zanim zorientowałem się, że wszystko, co musiałem zrobić, to umieścić &xxe; ładowność w typ żądania tag zamiast imgDrop etykietka.

Do czwartego pierścienia.

4. Obłoczny Pierścień

Rozbiłem to! Najważniejsze wydarzenia z KringleCon 5: Złote Pierścienie PlatoBlockchain Data Intelligence. Wyszukiwanie pionowe. AI.

Gra o Cloud Ring była wstępem dla początkujących do interfejsu wiersza poleceń (CLI) Amazon Web Services (AWS).

Punktem kulminacyjnym tego zestawu wyzwań było używanie truflowy wieprz znaleźć poświadczenia AWS w repozytorium Git, a następnie wykorzystać je do uwierzytelnienia jako użytkownik AWS. Atakujący, który dostanie się na tę pozycję, może użyć aws jestem polecenia, aby zapytać o zasady, które mają zastosowanie do użytkownika, a tym samym do jakich zasobów w chmurze można uzyskać dostęp i których można nadużywać.

Do piątego pierścienia.

5. Płonący pierścień ognia

Rozbiłem to! Najważniejsze wydarzenia z KringleCon 5: Złote Pierścienie PlatoBlockchain Data Intelligence. Wyszukiwanie pionowe. AI.

Najbardziej pouczającą częścią tego zestawu wyzwań była nauka Drzewa Merkle wykorzystać inteligentny kontrakt i dostać się na listę przedsprzedażową zakupu niewymiennego tokena (NFT). W tym przypadku wyzwaniem było odkrycie wartości dowodowych, które wraz z adresem mojego portfela i wartością korzenia Merkle Tree dowiodły mojego umieszczenia na liście przedsprzedaży.

Po kilku nieudanych próbach podania wartości dowodowych zdałem sobie sprawę, że nigdy nie będę w stanie znaleźć wartości dowodowych dla podanej wartości pierwiastkowej, ponieważ nie ma możliwości poznania wszystkich wartości liści użytych do jej obliczenia. Musiałem zmienić wartość główną, aby móc podać prawidłowe drzewo Merkle.

Korzystanie z Narzędzie profesora QPetabyte, stworzyłem drzewo Merkle z dwóch liści składających się z mojego adresu portfela i adresu dla BSRS_nft smart kontrakt, który znalazłem za pomocą eksploratora łańcucha bloków w grze w bloku drugim łańcucha blokowego Ethereum w grze. Narzędzie wygenerowało wartość główną tego drzewa i wartość dowodu dla mojego adresu portfela. Następnie użyłem Burp do przechwycenia żądania do serwera i zmieniłem domyślną wartość root, aby móc przesłać prawidłowe drzewo Merkle. Tutaj jest mój NFT sport kupione po ustalonej cenie 100 KringleCoins:

Rozbiłem to! Najważniejsze wydarzenia z KringleCon 5: Złote Pierścienie PlatoBlockchain Data Intelligence. Wyszukiwanie pionowe. AI.

Faktycznie brzydki egzemplarz.

końcowy

Rozbiłem to! Najważniejsze wydarzenia z KringleCon 5: Złote Pierścienie PlatoBlockchain Data Intelligence. Wyszukiwanie pionowe. AI.

Ogromne podziękowania dla organizatorów SANS Holiday Hack Challenge za poszerzenie mojej wiedzy na nowe sposoby i pomoc w pogłębieniu wiedzy na temat cyberbezpieczeństwa. Nie tylko nie mogę się doczekać przyszłorocznego wyzwania, ale nawet wypróbuję edycje tego wyzwania w 2020 i 2021 roku. A jeśli wcześniej nie brałeś udziału w tym wyzwaniu, mam nadzieję, że te najciekawsze momenty wzbudziły Twoje zainteresowanie.

Znak czasu:

Więcej z Żyjemy w bezpieczeństwie