Jak zwykle latem panuje CTFowa susza (co zmieni się pod koniec roku) i CTFy ograniczają się w zasadzie do finałów offline. Ostatnio były dwa w których braliśmy udział - Nuit du Hack CTF Finals 2014 w Paryżu oraz DEF CON CTF 2014 w Las Vegas, NV. Oba CTFy były w formacie Attack-Defense (w którym mamy sporo mniej doświadczenia niż w Jeopardy w które zazwyczaj gramy), ale udało nam się wywalczyć, kolejno, czwarte oraz trzecie miejsce. Niniejszy update poświęcony jest wyłącznie DEF CON CTF.

DEF CON CTF 2014


O tym turnieju wspominałem na blogu dosyć często - jest to obecnie najbardziej znany i prestiżowy CTF odbywający się w ciągu roku. Aby się zagrać w finale drużyna musi się najpierw zakwalifikować, co można zrobić na dwa sposoby:
1. Wygrać jeden z innych dużych CTFów w ciągu roku (zaliczają się do nich: poprzednia edycja DEF CON CTF, RuCTFe, Ghost In The Shellcode, Olympic CTF, Boston Key Party, Codegate Finals, PHDays oraz Secuinside); jeśli drużyna która zwyciężyła zakwalifikowała się już wcześniej, zaproszenie na finał przechodzi na kolejną drużynę (ale z założenia nie wychodzi poza top1-3, chociaż są wyjątki od tej reguły).
2. Lub być w pierwszej dwunastce drużyn w oficjalnych kwalifikacjach (DEF CON CTF Quals).
(Dragon Sector zakwalifikował się z drugiego miejsca w Ghost in the Shellcode; w zapasie mieliśmy jeszcze top1 w Olympic CTF oraz PHDays, oraz top3 w Codegate, a także top2 w DEF CON 22 CTF Quals)

Sam finał odbywał się 8-10 sierpnia w Las Vegas - konkretniej: od 10:00 do 20:00 przez pierwsze dwa dni, oraz od 10:00 do 14:00 w ostatni dzień + codziennie dodatkowa godzina na konfigurację sprzętu; przez noc infrastruktura była wyłączona, ale można było pracować nad exploitami / analizą / etc.

Jeśli chodzi o sam wylot (organizatorzy zapewniali nocleg, ale pokrycie kosztów przelotu należało do drużyn), to udało nam się część potrzebnych środków uzbierać z wygranych. Jeśli chodzi o pozostałą część, to jest to dobre miejsce na podziękowania dla naszych sponsorów :)

Dragon Sector chciałby podziękować następującym instytucjom za wsparcie:
Dodatkowo: podziękowania dla naszych żon/dziewczyn/etc oraz naszych pracodawców za dodatkowe wsparcie (nie tylko moralne)!

Jak wspomniałem na początku, sam finał był rozgrywany w formacie Attack-Defense, w którym mamy stosunkowo mało doświadczenia (szczególnie w porównaniu do formatu Jeopardy). Najlepszym naszym wynikiem w czystym A-D do tej pory było czwarte miejsce w finałach NDH w Paryżu (jeśli chodzi o finał PHDays który wygraliśmy to była to mieszanka Jeopardy i A-D, stąd nie zaliczam tego do czystych A-D), a należy jeszcze dodać, że brakowało nam zupełnie doświadczenia z wcześniejszymi edycjami DEF CON CTF, więc mieliśmy sporo obaw przed finałem.

OK, czym więc się różni Attack-Defense od Jeopardy?
W A-D każda drużyna dostaje własny serwer (zwany czasem vulnboxem) do obrony. Na serwerze (na którym zazwyczaj nie ma się roota - przynajmniej jeśli chodzi o A-D offline) postawione jest kilka przygotowanych na potrzeby turnieju serwisów, które mają od jednego do kilku błędów. Każdy serwis broni jednej flagi, która jest podmieniana co rundę na nową (runda trwa zazwyczaj około 5 minut).

Cała gra polega na tym, aby:
  • Znaleźć jak najwięcej/wszystkie błędy w serwisach.
  • Stworzyć exploit na każdy z nich.
  • Dostać się (co rundę) do flag od jak największej liczby serwisów na serwerach jak największej liczby innych drużyn.
  • Oraz połatać błędy w serwisach na swoim serwerze (nie zmieniając podstawowej funkcjonalności serwisu).
Do tego dochodzi kilka mniej oczywistych rzeczy:
  • Cała warstwa administracyjna związana ze skonfigurowaniem sieci (od podstawowych rzeczy typu odpowiednia konfiguracja VLANów, aż do skonfigurowania dostępu do Internetu dla drużyny przez VPN wychodzący na świat gdzieś daleko od konkursu).
  • Przygotowywanie ogólnych sandboxów i firewalli, które jednak nie mogły być zbyt agresywne.
  • Monitorowanie ruchu sieciowego (warto wiedzieć komu udaje się kraść nasze flagi z naszego serwera i jak to robi).
  • Monitorowanie aktywności na serwerze (w końcu ktoś mógł wrzucić backdoora po udanej exploitacji serwisu - pomysłowość niektórych drużyn w tej kwestii jest niesamowita).
  • Przygotowanie i obsługa systemu do atakowania wielu celów oraz zgłaszania zdobytych flag.
  • Monitorowanie stanu serwisów (funkcjonalność bazowa oraz szybkość działania serwisów jest ciągle testowana przez organizatorów; jeśli np. nasz patch lub sandbox znacznie zwolniły serwer lub usunęły/zmieniły logikę serwisu, to automatycznie naliczane są punkty karne).
Wygrywa drużyna która zdobędzie największą liczbę flag (minus punkty karne).

Generalnie A-D jest zdecydowanie bardziej wymagające i wyczerpujące niż Jeopardy - stąd też zazwyczaj rozgrywki A-D trwają około 8 godzin, a w Jeopardy 48h (jak wspomniałem wcześniej, sam DEF CON CTF trwał natomiast 55h z przerwami).

Bardzo słaba fotka Dragon Sector.Jeśli chodzi o sam DEF CON CTF, to bazowym serwerem każdej drużyny był Ubuntu 14.04 działający na procesorze ARMv7, na którym postawione były na początku dwa serwisy (w tym jeden x86 uruchomiony za pomocą qemu-user) napisane w C/C++. Podczas gry doszło kilka dodatkowych usług (wszystkie "binarne"), a te wcześniejsze zostały zmodyfikowane (dodano zarówno nową funkcjonalność, jak i błędy, a ten jeden jedyny serwis x86 zmieniono na ARM) oraz dodano jeden serwis chodzący na dodatkowym urządzeniu o jeszcze innej architekturze.

Tak więc przez 55h trwała walka polegająca na ciągłym szukaniu błędów, pisaniu exploitów, upewnianiu się że wszystkie ataki z naszej strony dochodzą a porwane flagi są zgłaszane, łataniu serwisów, monitorowaniu ruchu, szukaniu backdoorów u nas, wrzucania backdoorów u drużyn u których exploitacja doprowadziła do shella, itd., itp. A to wszystko przeplatane nocami podczas których łapało się kilka godzin snu tylko po to żeby obudzić się o 4rtej nad ranem i dalej szukać błędów (czyli generalnie dobra, ale wyczerpująca, zabawa).

Podczas pierwszego dnia trzymaliśmy się mniej więcej środka rankingu (co uznaliśmy za sukces). W drugi dzień udało nam się dokończyć kilka exploitów i powoli piąć w górę, aż dotarliśmy do trzeciego miejsca (co uznaliśmy za błąd w liczeniu punktów). W ostatni dzień ranking został ukryty, więc aż do ogłoszenia wyników nie wiedzieliśmy jak nam idzie.

Ostatecznie okazało się, że zdołaliśmy utrzymać trzecie miejsce i zakończyć turniej na podium! Osobiście uważam to za duży sukces, szczególnie biorąc pod uwagę obawy które wymieniliśmy wcześniej ;>

Nasz skład na DEF CON CTF:
  • Gynvael Coldwind (kapitan/RE/SRE)
  • Mateusz "j00ru" Jurczyk (wice-kapitan/RE/exploitacja)
  • Sergiusz "q3k" Bazański (admin/hardware/RE/exploitacja)
  • valis (admin/RE/exploitacja/SRE)
  • Michał "Redford" Kowalczyk (hardware/RE)
  • Robert "jagger" Święcki (hardening/RE/SRE)
  • Adam "adam_i" Iwaniuk (RE/exploitacja)
  • Maciej "mak" Kotowicz (RE/exploitacja)
    oraz:
  • Mateusz "Mawekl" Pstruś (ławka rezerwowych - ostatecznie brał udział w OpenCTF)
Podsumowując, DEF CON CTF był bardzo pouczający jeśli chodzi o A-D (oraz architekturę ARMv7) i nauczyliśmy się bardzo dużo o tym formacie rozgrywek. Kolejne A-D odbywają się zazwyczaj pod koniec roku, więc mamy trochę czasu na popracowanie nad naszym toolsetem i opracowanie dodatkowych taktyk. Za rok kolejny DEF CON CTF, na który pojedziemy już z większym doświadczeniem i lepiej przygotowani - będziemy chcieli więc powalczyć o wyższe miejsce ;)

Na koniec dodam, że w ciągu kilku dni wrzucimy oficjalne podsumowanie DEF CON CTF na naszego bloga, a w następnym numerze magazynu Programista (w Strefie CTF) pojawi się opis błędu w jednym z serwisów oraz opis jego exploitacji.

I póki co tyle. W najbliższy weekend kolejny CTF online (HITCON CTF) - should be fun ;>

Comments:

2014-08-13 13:46:46 = fenbf
{
Gratulacje dla całego zespołu!
Czekam w takim razie na artykuł w magazynie Programista.
}
2014-08-13 15:19:34 = cp
{
Gratulacje!

BTW, "żon/dziewczyn/etc" -- mozecie rozwinac "etc"? ;-)
}
2014-08-14 17:59:08 = Gynvael Coldwind
{
@fenbf
Dzięki! :)

@cp
Jaki ciekawski :D
}
2014-08-14 22:07:24 = bl4de
{
Gratulacje :) 3 miejsce na DEF CON CTF? To coś jak brązowy medal dla polskiej reprezentacji na MŚ w piłce nożnej :D
Z małą różnicą - Wy go zdobyliście :D :D :D

Z Twojej relacji wynika, że A-D jest (mimo większego wysiłku, jaki trzeba w nie włożyć) - bardziej zróżnicowane i ciekawsze, niż Jeopardy?
}
2014-08-18 15:03:45 = Robert
{
> BTW, "żon/dziewczyn/etc" -- mozecie rozwinac "etc"? ;-)

Konkubin.. ;)
}
2014-08-18 15:06:28 = Gynvael Coldwind
{
@bl4de
Thx ;)

Jeopardy jest bardziej zróżnicowane jeśli chodzi o same zadania, natomiast w A-D trzeba więcej uwagi z różnych stron na dane zadanie poświęcić, co ma swój urok.
}

Add a comment:

Nick:
URL (optional):
Math captcha: 9 ∗ 8 + 5 =