ECSC (ecsc.eu) to europejski konkurs z dziedziny cyberbezpieczeństwa kierowany do młodych (14-25 lat) ludzi. Mimo, że każdy kraj stara się (oczywiście) wyłonić jak najsilniejszą reprezentację, tak naprawdę głównym celem ECSC jest promowanie wiedzy o cyberbezpieczeństwie.
Ta podstrona jest dedykowana dla tych, którzy zaczynają swoją przygodę z konkursami z tej dziedziny (zazwyczaj nazywanymi CTFami). Dla tych z was, którzy pozjadali już zęby na CTFach, zadania tutaj będą proste (lub wręcz trywialne), ale jeśli dla kogoś jest to pierwszy start - warto zacząć od nich przed przejściem do tych trudniejszych.
Jak nazwa wskazuje, celem przy rozwiązywaniu zadania w konkursie CTF jest zdobycie "flagi". Flaga to
po prostu krótki fragment tekstu, w określonym formacie. W przypadku tego CTFa, format to ecsc25{.....}
,
czyli tekst zaczynający się od ecsc25{
a kończący na }
.
Są tutaj cztery zakładki, odpowiadające najbardziej standardowym kategoriom zadań na zawodach CTF - tzw. web, re, pwn i crypto. Znajdują się tam informacje na czym polega dana kategoria, a także jak zacząć. A jeśli nawet nie uda się wszystkiego rozwiązać w trakcie trwania konkursu, nie warto się zniechęcać - podlinkowane są też materiały które można wykorzystać do dalszej nauki... i ponownego startu za rok.
RE to akronim od "Reverse Engineering" - Inżynieria Wsteczna. Jest to specjalność polegająca na analizie programów wykonywalnych (kolokwialnie "plików .exe", od ich rozszerzenia w systemie Windows).
Mając tylko plik .exe i odpowiednie narzędzia można dowiedzieć o nim wszystkiego - jak działa, na co pozwala, jak wygląda jego komunikacja sieciowa, do czego służy, itp. Można też robić masę innych rzeczy, na przykład zmienić jego działanie. Popularymi - chociaż dość mało etycznymi - zastosowaniami RE jest omijanie zabezpieczeń przed kopiowaniem w grach (tzw. crackowanie), albo pisanie do nich cheatów.
Podstawowym narzędziem inżynierii wstecznej jest dekompilator - popularne opcje do wyboru to IDA Pro oraz Ghidra.
Program którego dotyczy zadanie prosi o podanie hasła, i wyświetla informacje czy hasło jest poprawne czy nie. Celem jest odnalezienie poprawnego hasła. Hasłem jest flaga, którą można wrzucić do platformy hack.cert.pl i zdobyć punkty.
Jeśli nie wiesz jak zacząć - jedna z możliwości to pobranie programu Ghidra, zainstalowanie go, a następnie załadowanie tam pobranego programu i przekilkanie się po dostępnych opcjach
W archiwum do pobrania znajdują się dwie wersje tego samego programu - jedna działająca na systemie Linux, a druga na systemie Windows. Pobierz program do analizy.
Inżynierii wstecznej nie da się nauczyć bez praktyki - z tego powodu warto zacząć od krótkiego wstępu do narzędzi, a następnie zacząć samemu próbować mierzyć się z zadaniami i próbkami do analizy.
Dodatkowo, w przypadku każdej dziedziny bezpieczeństwa komputerowego, dobry sposób na naukę to:
Crypto (od cryptography, nie od cryptocurrency) to kategoria zadań kryptograficznych, zazwyczaj polegających na łamaniu różnych szyfrów i kodów. Typowe zadanie z kryptografii to kod programu szyfrującego, zaszyfrowane dane, a celem jest odzyskanie oryginalnych danych.
Dla osób z pasją do matematyki, może to być najbardziej naturalna i najprostsza kategoria, z uwagi na to że wiele zadań często wymaga raczej obliczeń matematycznych niż typowego hackowania. Dla osób bez pasji... na pocieszenie, "prawdziwe" CTF są zawsze grupowe, więc nie każdy musi robić wszystko.
Zadanie konkursowe jest proste: aby dostać flagę, pobierz kod źródłowy programu szyfrującego i wynik jego wykonania, i wykorzystaj to aby odzyskać zaszyfrowany plik. Z kodu źródłowego widać, żę w zadaniu użyty jest szyfr AES w trybie CTR. Jeśli nie wiesz co oznaczają te akronimy, warto zacząć np. od artykułów o AES, szyfrach blokowych oraz trybach szyfrów blokowych (niekoniecznie na Wikipedii).
Pobierz kod szyfrujący.Z naszego doświadczenia, kryptografię najprościej studiuje się w "klastyczny" sposób, z książek i wykładów. Z tego powodu na liście materiałów do polecenia znalazły się głównie materiały tego typu. Dodatkowo są strony koncentrujące się na zadaniach tego typu.
Dodatkowo, w przypadku każdej dziedziny bezpieczeństwa komputerowego, dobry sposób na naukę to:
Etymologia "Pwn" jest skomplikowana - "pwn" to skrót od "pwning", które z kolei jest leetspeakiem od "owning". W kontekście bezpieczeństwa, oznacza znajdywanie podatności i przejmowanie kontroli nad usługami, zazwyczaj działającymi na zdalnym serwerze. Odbywa się to za pomocą tak zwanych eksploitów, więc trochę bardziej polska nazwa na "pwning" to "eksploitacja" albo "eksploitacja binarna" (kiedy usługa jest napisana w języku natywnym).
W tym typie zadania celem jest przeanalizowanie kodu (jak w inżynierii wstecznej), znalezienie w nim błędu bezpieczeństwa (np. przepełnienia bufora) a następnie wykorzystanie go do przejęcia kontroli nad serwerem. Z uwagi na to, że do rozwiązania trzeba połączyć kilka różnych umiejętności, nauka tej kategorii jest zazwyczaj dość trudna.
Żeby zdobyc flagę, przeanalizuj załączony program, a następnie połącz się do serwera zadania pod adresem warmup.ecsc25.hack.cert.pl:5210
(przykładowo za pomocą programu netcat) i przejmij nad nim kontrolę. To prawdopodobnie najtrudniejsze z rozgrzewkowych zadań - podpowiedzią może być hasło
buffer overflow
. Flaga znajduje się na serwerze, w pliku flag.txt.
Podobnie jak w przypadku inżynierii wstecznej, ciężko nauczyć się eksploitacji w sposób teoretyczny i najlepszy sposób na naukę to rozwiązywanie zadań. Kilka serwisów wartych polecenia to:
Dodatkowo, w przypadku każdej dziedziny bezpieczeństwa komputerowego, dobry sposób na naukę to:
Zadania "Web" koncentrują się na bezpieczeństwie aplikacji webowych - czyli grupie podatności która prawdopodobnie najczęściej jest wykorzystywana do ataków na firmy i usługi. Celem zazwyczaj jest znalezienie i użycie podatności w przygotowanej do tego stronie.
Strona na której jesteś jest napisana w języku Python i znajduje się w niej prosta podatność. Formularz poniżej poniżej pozwala na wpisanie hasła. Flagę otrzymuje się za wpisanie hasła administratora. Niestety, wiemy że administrator postępuje zgodnie z zaleceniami spod adresu https://cert.pl/hasla/ i hasło jest bardzo silne. Wiadomo jedynie, że kod sprawdzający wygląda mniej-więcej tak:
conn = sqlite3.connect(DB_PATH)
c = conn.cursor()
c.execute(f"SELECT password FROM users WHERE username = 'admin' and password = '{user_input}'")
result = c.fetchone()
conn.close()
if result:
# wejdź na stronę tylko dla administratora.
else:
# wyświetl informacje o porażce...
Czy masz już jakiś pomysł? Jeśli nie, poszukaj informacji na temat najczęstszych podatności w aplikacjach webowych i jak je wykorzystać (dobre hasło to np. OWASP top 10). Jeśli tak, prawdopodobnie zadanie zrobisz bardzo szybko.
W internecie można znaleźć bardzo dużo informacji na temat bezpieczeństwa aplikacji webowych. Kilka wybranych źródeł, o których wiemy że są warte polecenia:
Dodatkowo, w przypadku każdej dziedziny bezpieczeństwa komputerowego, dobry sposób na naukę to:
Na koniec wyjaśnimy czym jest CERT Polska i dlaczego to my organizujemy krajowe kwalifikacje do ECSC.
W wielkim skrócie: jesteśmy instytucją publiczną dbającą o bezpieczeństwo polskiego internetu. Formalnie jesteśmy zespołem w strukturach NASK - Państwowego Instytutu Badawczego, a nasze zadania związane z cyberbezpieczeństwem wynikają z naszego statusu jako tzw. zespołu CSIRT poziomu krajowego w ramach krajowego systemu cyberbezpieczeństwa.
W ramach tych zadań m.in.:
Więcej dowiecie się m.in. na Wikipedii: https://pl.wikipedia.org/wiki/CERT_Polska :).
Śledźcie też nasze profile w mediach społecznościowych: