Semi-regularny post o tym, co tam słychać w naszym teamie CTFowym. TL;DR: top1 na finałach PHDays w Moskwie; top2 na kwalifikacjach do DEF CON CTF; na CONFidence odbył się nasz CTF, wygrała liub rozwiązując 12 zadań; również na CONFidence z j00ru mówiliśmy o CTFach; sponsorzy nadal mile widziani.

Positive Hack Days 2014 - TOP1 w Moskwie

Widziałem, że informacja o zwycięstwie DS trafiła na Wykop w postaci linka do dość krótkiego artykułu o dość strasznym tytule "Polacy zhackowali Moskwę" (będącego zresztą skrótem z publikacji prasowej CodiLime). Chciałbym więc zdementować informacje - Moskwa nie została ani zhakowana, ani zhaczona - niestety haczki nie zmieściły się do bagażu głównego i nie pozwolono ich wnieść na pokład samolotu.

Ku mojemu zaskoczeniu Wykopowicze bardzo szybko odkryli tajną strategię, którą nasz team wykorzystał w Moskwie i niestety ją upublicznili, przez co nie zaskoczymy nią już żadnego teamu w przyszłych CTFach :( (na szczęście mamy w rękawie jeszcze jedną, opartą o vima).


(zdjęcie: Tyler/PPP)

Wracająć do głównego wątku - do Moskwy DS udało się w składzie:
  • j00ru
  • Redford
  • mak
  • tkd
  • valis
  • oraz q3k.
Sam CTF był mieszanką jeopardy i attack-defense z pewną domieszką innych zasad i trwał 31 godzin z przerwą w połowie (podczas której i tak się rozwiązywało zadania, po prostu nie było dostępu do infrastruktury i nie dało się zgłaszać rozwiązań).

Dużym udogodnieniem dla osób, które chciały śledzić rozgrywki, ale nie były na miejscu, były wyniki "na żywo" dostępne w serwisie CTFTime.org - kudos!

Ostatecznie DS zdobyło 33162 pkt, wygrywając o 312 pkt z hiszpańskim zespołem int3pids, oraz o 1124 pkt z rosyjskim BalalaikaCr3w. Dobra robota!

Jednocześnie zwycięstwo dało nam 120 pkt do globalnego rankingu CTFTime.org, umacniając naszą przewagę nad PPP. Dzięki wygranej byliśmy również w stanie pokryć koszty wylotu i troszeczkę odłożyć na nasz wylot na DEF CON CTF w sierpniu (patrz również: Sponsoring Dragon Sector na samym dole postu).

Chciałbym również podziękować organizatorom PHDays za pokrycie części kosztów związanych z przelotem na finały :)

UPDATE: Patrz również post Update: Dragon Sector wins the PHDays CTF Finals 2014! na blogu naszego teamu.

DEF CON CTF Qualifier 2014 - TOP2

Jak pisałem już wcześniej, technicznie DS jest od dawna zakwalifikowany na DEF CON CTF, więc teoretycznie mogliśmy nie brać udziału w rundzie kwalifikacyjnej. W praktyce natomiast DEF CON CTF Qualifier ma wagę 90 w globalnym rankingu CTFTime.org - oznacza to, że team który wygra dostaje 180 pkt, a to jest bardzo dużo - tak więc chcąc nie chcąc musieliśmy wziąć udział (dodam, że i tak chcieliśmy zagrać - DEF CON CTF Qualifier ma zawsze bardzo ciekawe zadania).



DEF CON CTF Qualifier jest rozgrywany w formacie jeopardy (czyli zestaw zadań do rozwiązania), przy czym ma jedną dodatkową zasadę: najnowsze odblokowane zadanie ma ikonkę "płomienia"; pierwszy team, który je rozwiąże może wybrać (w dogodnym dla siebie momencie, ale nie dłuższym niż około godzina) które zadanie odblokować. Sprowadza się to do tego, że sporo zadań jest odblokowywanych dopiero pod koniec CTFa, lub w ogóle nie zostają odblokowane (patrz Sirgoon za 4).

Zadanie były bardzo ciekawe i zostały nietypowo podzielone wg. autorów; wyjątkiem była kategoria Baby's First, w której były proste zadania skierowane głównie do osób zaczynających z CTFami. Dwa przykładowe zadania:
  • hackertool (Baby's First 1) - otrzymaliśmy plik .torrent, który opisywał jeden 56 GB plik - every_ip_address.txt; flagą była suma MD5 tego pliku. Zadanie to rozwiązaliśmy bardzo szybko, najpierw ustalając format pliku (w tym pomogły SHA1 chunków znajdujące się w pliku .torrent; formatem były po prostu adresy IP od 0.0.0.0, oddzielone pojedynczym znakiem nowej linii), a potem dynamicznie generując identyczne dane i licząc z nich (w pamięci) sumę MD5.

  • dosfun4u (Lightning 5 + 5) - w kategorii Lightning są widoczne dwa zadania, natomiast technicznie był to jeden RE+pwn, w którym jedna flaga znajdowała się w pamięci, a druga na dysku.
    W ramach zadania otrzymaliśmy obraz dysku (oczywiście bez prawdziwych flag) oraz pliku konfiguracyjny do Bochs, a także adres serwera oraz port. Jak się szybko okazało, na dysku był FreeDOS oraz graficzna aplikacja (takie "Theme Policestation"), z którą mozna było się komunikować via COM1 używając nieznanego protokołu. Żeby było zabawniej, aplikacja działała w tzw. trybie nierzeczywistym procesora (unreal mode), czyli mieliśmy 16-bitowy kod oraz segmenty/GDT/LDT działające jak w trybie chronionym.
    Ostatecznie spędziliśmy nad zadaniem z Redfordem około 15-20 godzin, ale zadanie udało się rozwiązać (i to jako pierwszy team), chociaż w sposób nieprzewidziany przez autora zadania (znaleźliśmy błąd w implementacji malloc o którym autor nie wiedział).
    Dla zainteresowanych: opublikowaliśmy finalny exploit; patrz również slajdy 55-62 na naszej prezentacji z CONFidence.
Ostatecznie zajęliśmy drugie miejsce (zdobywając 40 pkt), przegrywając o 9 pkt z Gallopsled (gratz!) - teamem powstałym z połączenia dwóch świetnych duńskich zespołów: European Nopsled Team oraz pwnies (w zasadzie to drugi raz z rzędu, kiedy przegrywamy CTFa jedynie z aliansem dwóch teamów ;)

Za DEF CON CTF Qualifier do globalnego rankingu CTFTime.org dostaliśmy 118 pkt.

CONFidence - CTF, prezentacja

Na CONFidence odbył się organizowany przez nas CTF (single-player, jeopardy). W sumie było 5 kategorii (pwn, crypto, web, re, stegano) po 3 zadania w każdej (za 50, 100 i 200 pkt w zwyczajowej, CTFowej, skali), jedno zadanie bonusowe (za 100 pkt), oraz jedno hardware (oparte na Arduino; za 128 pkt).

Zarejestrowanych było kilkudziesięciu uczestników, natomiast przynajmniej jedno zadanie rozwiązało jedynie 11 osób.



Ostatecznie wygrała liub rozwiązując 12 zadań i zdobywając 1078 pkt. Drugie miejsce zajął dcua, który osiągnął taki sam wynik, jednak w gorszym czasie. Trzecie miejsce zajął shm, który zarejestrował się pod bardzo długim nickiem psującym nam layout scoreboard na www ;p i ostatecznie skracanym przez nas do "hash sector".
Gratulacje dla zwycięzców!

Chciałbym w tym miejscu podziękować swojemu teamowi za masę pracy, które wszyscy włożyli w przygotowanie i skonfigurowanie infrastruktury (tutaj specjalne podziękowania dla valisa, tkd, mawekla, a także redforda i vnd, za zarwanie nocki przed CTFem aby to wszystko uruchomić), przygotowanie i testowanie zadań oraz czuwanie nad tym, żeby CTF działał. Dzięki - jesteście niesamowici! :)

Również duże podziękowania dla ekipy CONFidence za pomoc w transporcie serwerów, konfiguracji sieci na miejscu (cóż, nie tylko my zarwaliśmy nockę przed CONFidence) oraz ogólniej, za miłą i profesjonalną współpracę.

Oraz kolejna seria podziękowań: duże podziękowania dla Piotrka z warszawskiego Hackerspace za użyczenie serwerów na CTF, oraz dla implra za wkład w czymś, co w książkach od historii znane będzie jako Bitwa pod Switchami :)

Opócz CTFa poprowadziliśmy z j00ru krótką prelekcję o CTFach pt. "On the battlefield with the Dragons - the interesting and surprising CTF challenges" (3.93MB, PDF; video powinno być dostępne w późniejszym terminie). Pierwszą część prelekcji poświęciliśmy na opisanie kilku ciekawych zadań, a drugą na opisanie kilku tricków (związanych głównie z kategorią pwn), które wypracowaliśmy lub poznaliśmy podczas rozwiązywania zadań CTFowych, w szczególności:
  • Wykorzystanie SSP (Stack-smashing protection) do wykradania fragmentów pamięci (patrz również sekcja References na slajdzie 103).
  • Remote shell za pomocą jednego gadżetu na Windowsie.
  • Baza różnych binarnych wersji libc, a także zdalny parsing ELF.
  • Szukanie gadżetów w okolicach importowanych funkcji (przydane jeśli libc ma ASLR, ale plik wykonywalny już nie, a my nie możemy "wyciec" adresu libc).
  • Instrumentacja całego systemu na poziomie emulatora.
Standardowo, wszelkie uwagi na temat prezentacji mile widziane.

Sponsoring Dragon Sector

O ile z wygranych uzbieraliśmy już większość pieniędzy potrzebnych na wylot do Las Vegas na finał DEF CON CTF, a kilku graczy znalazło indywidualnych sponsorów, to sponsorzy są nadal bardzo mile widziani.

Firmy (lub osoby) zainteresowane sponsoringiem Dragon Sector mogą skontaktować się ze mną (czyli kapitanem) - gynvael@coldwind.pl, lub z Mateuszem Jurczykiem (wice kapitanem) - j00ru.vx@gmail.com.

Kolejne wyzwania

Zaczął się sezon letni, w którym standardowo jest bardzo mało CTFów. Dwa najbliższe, w których będziemy grac:
  • 28-29 czerwca - finały Nuit du Hack w Paryżu (offline, attack-defense, 5 os. drużyny); do finałów zakwalifikowaliśmy się z pierwszego miejsca, natomiast runda kwalifikacyjna była w bardziej odpowiadającym nam stylu jeopardy.
  • 8-10 sierpnia - finały DEF CON CTF w Las Vegas (offline, attack-defense, 8 os. drużyny).
Trzymajcie kciuki!

Comments:

2014-06-08 14:00:13 = krooolik
{
Ta druga strategia to vim'em przez postfix? :)
}
2014-06-08 15:49:58 = Gynvael Coldwind
{
@krooolik
Csiiii!
}
2014-06-08 22:04:59 = phantom
{
Czesc Gynvael.
Masz jakies porady dla poczatkujacych w temacie CTF?
Gdzie polecasz siegnac po wiedze? Moze jakies sprawdzone tutoriale?
}
2014-06-09 07:44:22 = Gynvael Coldwind
{
@phantom
Jeśli chodzi *sprawdzone* tutoriale, to trudno mi coś polecić.
Natomiast jest ostatnio opublikowany CTF Field Guide: http://trailofbits.github.io/ctf/

Inna sprawa jest taka, że CTFy generalnie testują praktyczną wiedzę z różnych dziedzin security (+pokrewnych), więc raczej należałoby szukać materiałów do nauki konkretnych rzeczy związanych z bezpieczeństwem.

Jeśli mnie pamięć nie myli, to https://www.owasp.org/index.php/OWASP_Hacking_Lab był dobrym wargamem (czyli takim treningowym CTFem bez ograniczenia czasowego) na początek, ponieważ do każdego zadania jest przygotowany zestaw materiałów do przejrzenia.

Poza tym świetnym źródłem wiedzy są write-upy z rozwiązań zadań. Kilka linków:
https://ctftime.org/writeups
http://sec.yka.me/ctf/writeup/2014
https://github.com/ctfs/write-ups
Rzuć też okiem na blogi różnych teamów, w tym na nasz (http://dragonsector.pl) - jest tam trochę write-upów.

Ostatecznie podczas CTFa zazwyczaj sięga się do różnych publikacji, dokumentacji lub innych materiałów związanych strikte z danym problemem nad którym się siedzi.

Good luck!
}
2014-06-09 12:53:52 = ariel
{
Gratulacje :) Jak zwykle na czele. Trzymamy za Was kciuki (snatch the root) :) W jaki sposob dzielicie sie jednym zadaniem z RE, bo zawsze bylem tego ciekaw i tez by mi ta umiejestnosc sie przydala? ;)
}
2014-06-09 13:12:46 = Gynvael Coldwind
{
@ariel
Thx ;)

Jeśli chodzi o RE, to w tym wypadku jedna osoba analizowała program "od góry", tj. od funkcji głównych, natomiast druga robiła jako wsparcie, tj. dostawała adresy funkcji wywoływanych przez funkcje główne i je analizowała na tyle, by umieć powiedzieć pierwszej osobie co dana funkcja robi.
Akurat to się dobrze sprawdziło, bo główne funkcje (main, etc) były duże, więc było tam co robić, a funkcje wywoływane było sporo mniejsze.
}
2014-06-09 14:26:59 = ariel
{
@gynvael

No my tez tak robimy, ja analizuje przez caly dzien, znajduje adresy funkcji interesujacych, wysylam do @jablonskim, a on mowi ze sie nie da :p
}
2014-06-09 14:40:03 = jablonskim
{
@gynvael, @ariel

:D hah, dokładnie tak to wygląda :P
}
2014-06-11 10:02:33 = Gynvael Coldwind
{
@phantom
Na reddicie dzisiaj jeszcze coś takiego się pojawiło:
http://www.endgame.com/blog/how-to-get-started-in-ctf.html
}
2014-06-14 10:09:43 = phantom
{
@gynvael

Dzięki wielkie! Szczególnie ten ostatni link jest bardzo pomocny.
Bardzo mnie interesują tematy Security a ciężko znaleźć do tego dobre materiały
}
2014-06-19 19:07:26 = kry5
{
@gynvael
Mam pytanie do Ciebie, otóż jestem ciekawy co myślisz o FB? To jest straszny zabijacz czasu, czasem ciężko się oderwać, jednak dobra komunikacja z ludźmi. Jestem ciekawy co myślisz na ten temat ;>
btw nie tylko w sensie security ;>
}
2014-06-23 02:25:04 = Matias
{
Sztos hmm funkcja nie demo rozumiem link do bezplatnej dostane cos ? ;)
}

Add a comment:

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