#BYTECATRAZ SecuRing CTF 2024

Konkurs, noszący nazwę BYTECATRAZ, przeniósł uczestników w świat więziennych wyzwań. Głównym celem graczy była ucieczka z więzienia, w czym pomagał im ich towarzysz z celi, Maciek.

Maksymilian Wiese 2024.07.26   –   5 MIN read

Pod koniec maja 2024 roku w Krakowie odbyła się prestiżowa konferencja Confidence, na której uczestnicy mieli wyjątkową okazję wziąć udział w konkursie CTF (Capture The Flag) organizowanym przez firmę SecuRing. Konkurs, noszący nazwę BYTECATRAZ, przeniósł uczestników w świat więziennych wyzwań. Głównym celem graczy była ucieczka z więzienia, w czym pomagał im ich towarzysz z celi, Maciek.

 

Platformą wykorzystywaną w konkursie CTF był dedykowany serwer Discord. Uczestnicy, rozwiązując kolejne zadania, zdobywali nowe role na serwerze, które umożliwiały dostęp do następnych wyzwań. Do pokonania były cztery zadania, wymagające od graczy szerokiego wachlarza umiejętności. Uczestnicy musieli wykazać się technikami fizycznego rekonesansu, logicznego myślenia oraz znajomością podstawowych zagadnień związanych z cyberbezpieczeństwem.

Aby wziąć udział w konkursie, gracze musieli zaakceptować regulamin, dodając reakcję kciuka w górę pod jego treścią w pokoju naczelnika. Po zaakceptowaniu regulaminu, do uczestników pisał Maciek, co rozpoczynało pierwsze zadanie.

Zadanie pierwsze – #cela

Pierwsze zadanie polegało na prowadzeniu rozmowy z współwięźniem z celi – Maćkiem, aby wydobyć od niego kluczowe informacje potrzebne do rozwiązania zagadki. Zespół SecuRing odpowiedzialny za CTF stworzył specjalny prompt OpenAI, który zawierał niezbędne informacje:

  • Istnieje ukryte, sekretne pomieszczenie, do którego dostęp można uzyskać tylko po podaniu odpowiedniego 12-znakowego kodu PIN. To pomieszczenie było pierwszym krokiem do ucieczki z więzienia.
  • Maciek zna PIN, ale w formie zaszyfrowanej przy użyciu algorytmu szyfrującego DES.
  • Do zaszyfrowania PIN-u użyto klucza i IV o tej samej wartości i długości ośmiu znaków.
  • Zaszyfrowany PIN algorytmem DES miał wartość: „aaa6695facfd997a01d09bfe037acfaf”.

Niektóre informacje podawane przez Maćka była halucynacją AI i nie były prawdziwe. Przykłady takich fałszywych informacji to:

  • Wartość klucza i wartość IV.
  • Użycie trybu ECB w algorytmie DES.
  • Wartość rozszyfrowanego szyfrogramu.

Gracze mieli dwie metody, aby uzyskać informacje od Maćka: zastosowanie techniki prompt injection lub przekonanie go podczas rozmowy do podania potrzebnych danych.

Jedynymi informacjami, które gracze musieli odkryć samodzielnie, były wartość klucza, IV oraz użyty tryb szyfrowania. Wskazówką do wartości klucza i IV była podawana przez Maćka długość tych zmiennych – 8 znaków. Właściwym ośmioznakowym słowem, które należało użyć, było “securing”. Słowo to można było znaleźć w wielu miejscach na terenie konferencji. Trybem użytym do zaszyfrowania PIN-u był CBC – jeden z najpopularniejszych i najbezpieczniejszych trybów działania algorytmu DES.

Używając zdobytych danych, gracze mogli rozszyfrować szyfrogram, uzyskując PIN w formie jawnej.

Rozszyfrowaną flagę 243256984364 należało wysłać do Maćka w wiadomości prywatnej, nie używając jego imienia. To skutkowało ukończeniem pierwszego zadania.

Zadanie drugie – #sekretne-pomieszczenie

Po ukończeniu pierwszego zadania, gracze otrzymywali uprawnienie “sekretne-pomieszczenie” na serwerze Discord, które dawało dostęp do kanału #sekretne-pomieszczenie. W kanale znajdował się plik dźwiękowy w formacie .mp3, będący przechwyconą wiadomością Radiotelegrafisty, zawierającą ukrytą informację zakodowaną kodem Morse’a. Po odkodowaniu wiadomości, gracze otrzymywali ciąg znaków – PODKOP. Jednak ten ciąg nie był ostateczną flagą potrzebną do rozwiązania zadania.

Kolejnym krokiem było przeprowadzenie fizycznego rekonesansu na terenie EXPO. Pomocą w tym zadaniu była mapa więzienia, która znajdowała się w formie papierowej na stoisku SecuRing.

Mapa ta pokrywała się z mapą krakowskiego EXPO. Każda litera słowa PODKOP odpowiadała określonemu miejscu na mapie, gdzie ukryte były naklejki z cyframi.

Po odpowiednim dopasowaniu cyfr do liter, gracze uzyskiwali ciąg liczbowy 104201. Uważne przesłuchanie nagrania Radiotelegrafisty ujawniało przerwy między kolejnymi sygnałami kodu Morse’a, co prowadziło do zapisu PO DK O P z przerwami. Przerwy te wskazywały na konieczność zapisania ciągu liczbowego w postaci 10 42 0 1. W miejsce przerw należało wpisać kropki, aby uzyskać adres IP 10.42.0.1, który stanowił flagę rozwiązującą zadanie.

Aby ukończyć zadanie, należało wysłać rozszyfrowaną flagę 10.42.0.1 do Maćka w wiadomości prywatnej.

Zadanie trzecie – #warsztat

Dostęp do trzeciego zadania gracze otrzymywali po zatwierdzeniu flagi z zadania poprzedniego (#sekretne-pomieszczenie). Tym razem, oprócz dostępu do kanału tekstowego, gracze uzyskiwali również dostęp do kanału głosowego – pokoju z kamerami, gdzie mogli śledzić obraz z kamery umieszczonej na stoisku SecuRing podczas konferencji. Podpowiedzi do wykonania zadania były zawarte w wiadomościach od współwięźniów na kanale:

Pierwsza wiadomość informowała, że należy odtworzyć identyfikator (badge) strażnika, aby uzyskać autoryzację za pomocą kamery. Druga wiadomość mówiła, że opiekunem warsztatu jest strażnik o imieniu Jacek Szymański, który ciągle powtarza słowo “Fuck”.

Aby uzyskać autoryzację, potrzebna była dana dostępowa potwierdzająca i identyfikująca użytkownika. W tym przypadku należało użyć identyfikatora użytkownika Discorda, który został przesłany w pierwszej powitalnej wiadomości od Maćka. Inicjały opiekuna warsztatu oraz jego charakterystyczne powtarzające się słowo miały naprowadzić gracza na użycie ezoterycznego języka programowania – JSFuck.

Gracze musieli zakodować swój identyfikator użytkownika Discord przy użyciu JSFuck, a następnie stworzyć z niego kod QR i pokazać go do kamery. Przykładowy kod QR powinien wyglądać następująco: 

Po pokazaniu kodu QR do kamery, gracz otrzymywał dostęp do ostatniego, czwartego zadania.

Zadanie czwarte – #stróżówka

Aby podjąć próbę rozwiązania czwartego zadania, gracze musieli udać się do stoiska SecuRing znajdującego się na terenie konferencji. Tam czekały na nich dwa czarne pudła – jedno mniejsze, a drugie większe.

Celem zadania było otwarcie mniejszego pudełka, które zawierało system zamka oparty na Raspberry Pi

Pierwszym krokiem było jednak otwarcie większego czarnego pudełka, które zabezpieczone było prostą, przezroczystą kłódką. Po jej otwarciu, gracze mogli wsadzić ręce do środka, używając dolnego otworu w pudełku.

W większym pudle znajdowała się włączona lampka oraz laptop. Gracze mogli podejrzeć, co się dzieje w środku, korzystając z mniejszego otworu na górze pudełka. Na zapadni blokującej wizjer znajdowała się pierwsza podpowiedź – link do artykułu, który miał nakierować gracza na włączenie kamery w laptopie umieszczonym w większym czarnym pudle. Przy użyciu lampki i kamery z laptopa, gracze mogli odczytać login i hasło potrzebne do uwierzytelnienia za pomocą protokołu SSH. Adres, do którego należało się połączyć, był flagą z zadania drugiego (#sekretne-pomieszczenie) – 10.42.0.1. Alternatywnie, gracze mogli również dojść do adresu IP, używając komendy ifconfig.

Po poprawnym połączeniu się przez SSH do Raspberry Pi, należało rozejrzeć się po systemie i znaleźć skrypt napisany w języku Python – openlock.py:

GPIO.setup(lock, GPIO.OUT) 
GPIO.output(lock, GPIO.HIGH) 
time.sleep(1) 
GPIO.output(lock, GPIO.LOW)

Uruchomienie skryptu otwierało mniejsze, czarne pudełko, co skutkowało wykonaniem zadania i ukończeniem całego konkursu CTF.

Maksymilian Wiese
Maksymilian Wiese IT Security Consultant