Az elmúlt hétvégén részt vettünk az Offensice Security How Strong is Your Fu? versenyének második fordulóján, amely ismét kellően helyretette a nevezettek egóját. Az előző alkalomhoz képest ezúttal volt néhány komolyabb változás: Először is a nevezéshez egy kisebb összeget kellett utalni a Hackers For Charity számlájára, és csak az első 102 adakozót engedték be a laborkörnyezetbe. Erre azért volt szükség, hogy a szervezők megfelelően tudják tervezni az infrastruktúrát - mint azt később látni fogjuk, volt amit így sem tudtak kivédeni. Mivel a VPN hozzáférések számát ilyen módon korlátozták, nem volt szükség "n00b-filterre", helyette kettővel több, összesen öt darab célpont várt meghódításra. Egyik csapatnak sem sikerült az összes gépet bevennie, az alábbiakban a saját megoldásainkat és a többiek által leírt módszerek egyvelegét mutatom be*.
iVuln
A legegszerűbb falatnak tűnő gép WWW gyökerében egy C forráskódot és annak egy Linux-ra fordított változatát lehetett megtalálni. A program egy primitív echo-szerű alkalmazás volt, amely a 7500-as TCP porton figyelt, egy gyors portscan megmutatta, hogy ez a port a célgépen is nyitva van. Természetesen ott bújkált a programsorok között egy szép stack overflow, és bár - mint utóbb kiderült - a memória randomizáció be volt kapcsolva az iVulnon, muts-ék egy függvénybe csomagolt 'jmp esp'-vel kedveskedtek a bugvadászoknak, és a szolgáltatás root-ként futott.
Mosquito
Sajnos az iVuln volt az első és utolsó gép, amit ilyen egyszerűen be lehetett venni. A megszerzett gép /root könyvtárában ott figyelt egy mosquito.exe nevű állomány, ami egy közönséges Win32-es bináris volt. Disassemblerrel ráugorva a kódra kiderült, hogy ez is indít egy TCP listenert a 4597-es (?) porton. Ez szintén nyitva volt a célponton, de rácsatlakozva, illetve a programot tesztkörnyezetben futtatva sem lehetett érdemi információhoz jutni vele kapcsolatban. További turkálás után kiderült, hogy miután a program bejövő kapcsolatot érzékel, automatikusan megpróbál csatlakozni a csatlakozott hoszt 1080-as portjára. Egy netcat listenert elindítva meg is kaptuk a visszajövő kapcsolatot, azonban itt megrekedtünk: a bináris állomány minden lényeges függvényének visszafejtése után kiderült, hogy a párhuzamos kommunikáció elméletileg ugyan versenyhelyzetet teremt, de a program gyakorlatilag nem használ potenciálisan sebezhető függvényeket, ellenben stack cookie-kal és SafeSEH-el fordították. Később ráadásul olyan információkat is közöltek más versenyzők, hogy a Mosquito-n futó szolgáltatás kódja nem egyezik meg a letölthető állományéval. Tovább bonyolította a helyzetet a hoszton futó 3CX VoIP PBX Proxy, ami kinyitott egy halom portot, nem volt sebezhető, ellenben rengeteg időt el lehetett szúrni a tesztkörnyezetbe állítással és a hangposta hívogatásával...
A megoldás - ami már sajnos csak a verseny után jutott eszünkbe - számomra gyakorlatilag megdöntötte a szervezők azon állítását, hogy valódi életből vett problémákat fognak elénk tárni. A mosquito.exe egyetlen funkciója - ahogy az a reverse engineering során is kiderült - hogy az egyik socketen bejövő adatokat a másik socketen 4-gyel XOR-olva továbbítja. Egy ilyen módon obfuszkált HTTP kérést elküldve a távoli szolgáltatásnak egy sebezhető Easy Chat Servertől lehetett volna választ kapni, amire létezik publikus exploit (ezt persze módosítani kellett volna úgy, hogy az adatokat XOR-olva küldje, és olyan shellkódot kellett volna alkalmazni, amivel át lehet látni ezen a "különleges" proxy-n).
@K-SLC
Ezen a gépen egy darab HTTP port volt nyitva, amin egy rémült LOLcat kérte, hogy előbb kopogjunk. Itt rögtön felmerült a port-knocking ötlete, de 65535 portot különböző összeállítású csomagokkal végigkopogtatni nem vicces, úgyhogy ezt az ötletet jegeltük. Szerencsére azonban nem feledkeztünk meg róla: a 7000-es, 8000-es és 9000-es portokra sorban egy-egy SYN csomagot küldve megnyílt a 8000-es port, amin egy SHOUTcat szerver figyelt, természetesen sebezhető változat. A publikus exploiton kellett ugyan reszelni egy kicsit, de innen már viszonylag sima volt az út.
Jackie
Jackie-t szánták a szervezők a második legkönnyebb gépnek az iVuln után, sajnos azonban az élet itt sem volt habostorta: a gép 5060-as portja nem látszott a játékosok IP-jéről, csak a már bevett hosztokról. Az iVuln egy Backtrack 4-et futtatott, így erről a gépről lett volna optimális támadást intézni, de a verseny előrehaladtával egyre nehezebb volt olyan pillanatban csatlakozni a géphez, amikor éppen nem volt összedöntve a kaput jelentő szolgáltatás. A @K-SLC-vel valamivel jobb volt a helyzet, innen kiindulva több VoIP biztonsági szoftverrel is próbálkoztunk kideríteni, hogy mi fut az adott porton, de egyik sem tudott érdemi választ adni erre a kérdésre. A megoldást a SIPp nevű eszköz jelenthette volna, ami kidehette volna, hogy egy (sebezhető verziójú) sipX alkalmazás fut a távoli gépen. Ez a szolgáltatás önmagában nem rendelkezett elegednő jogosultsággal a feladat befejezéséhez (az Adminisztrátor asztalán található proof.txt kiolvasásához), de a jó öreg univerzális jogosultságkiterjesztés exploit megoldotta volna ezt a problémát is.
0xdeadca0
Erre agépre senkinek sem sikerült bejutnia. A portscan szerint volt egy nyitott MySQL portja (a yaSSL exploit hatástalan volt), elérhetőek voltak rajta SMB szolgáltatások (A publikus megosztások nem tartalmaztak érdemi adatot, a NULL session-ök csak korlátozottan voltak hasznáhatók), valamint figyelt valami a 8080-as porton, le lehetett tölteni egy passwords.txt nevű fájlt, amiben volt néhány jelszó, amikkel sehová nem lehetett bejutni, valamint Jackie-n is lehetett találni egy MySQL-re vonatkozó állományt. A mi gyanúnk az, hogy az Offensive Security Insider2 nevű PoC trójaija futott a 8080-on, de ez az eszköz csak előre bedrótozott vezérlő hosztokkal hajlandó szóba állni.
Eredmények, összegzés
Ebben a versenyben hatalmas szerepe van pszichikai tűrőképességnek: 48 óra alatt alig alszik az ember, az evés és ivás egyszerű létfentartó tevékenységgé degradálódik, és minden pillanat egy-egy csepp frusztráció. Így leírva a feladatokat persze minden sokkal egyszerűbbnek tűnik, sajnos azt kell mondanom, hogy elérhettünk volna jobb eredményt is, de szerencsére nem csak számunkra volt fájdalmas ez a 48 óra. Nagyjából 10 órán keresztül vezettünk, mivel a @K-SLC-t nekünk sikerült (az iVuln után) először birtokba venni. Sajnos a verseny végére lecsúsztunk az 5. helyre, mivel a Corelan Team négy tagjának sikerült az iVuln mellé még két gépet begyűjteni. Dokumentálni ezalkalommal nem kellett.
A versenyen - takaréklángon - részt vett a múltkori győztes woFF is, akinek egyéb elfoglaltságai mellett is sikerült pontot szereznie (mindössze 24 rézvevőnek sikerült egyáltalán felküzdenie magát az eredménytáblára!), így kis hazánk ismét szépen szerepelt :) Remélem hogy a következő alkalommal még több honfitársunkkal együtt tudunk majd villantani a nagyvilágnak!
A Corelan Team jegyzőkönyveit elolvashatjátok itt. Twitteren a #hsiyf2 cimkére érdemes rákeresni.
*én is csak egy napot tudtam a versenyre szánni, az ebből eredő pontatlanságokért ezúton is elnézést kérek
bsh 2010.06.23. 20:44:31
westerneer 2010.06.23. 22:54:11
synapse · http://www.synsecblog.com 2010.06.24. 10:25:12
synapse · http://www.synsecblog.com 2010.06.24. 10:56:54
buherator · http://buhera.blog.hu 2010.06.24. 11:14:45
synapse · http://www.synsecblog.com 2010.06.25. 10:01:46