Gyorsjelentés egy újabb zászlórablásról

Azt hiszem, újra kell értékelnem a vendégposzt definícióját a blogon, mert ezt is beleértve a legutóbbi négy poszt — azaz az elmúlt négy év összes írása — ebbe a kategóriába esik. Na de ilyen az élet, jöjjön egy újabb nem Égvemaradt.hu-hoz kötődő poszt itt, az Égvemaradt.hu Blogon!

A téma egy újabb Capture the Flag (CTF), azaz zászlórablós esemény, aminek ezúttal csak egy kis szeletét teljesítettem, de az a kis szelet nagyon tetszett, úgyhogy mindenképpen meg akartam örökíteni a tapasztalataimat egy blogbejegyzés formájában. 🙂


Történt egyszer egy szürke és unalmas szerda délutánon, hogy egy munkatársam (köszi, Tomi!) bedobta egy közös chatbe, hogy talált egy autóipari CTF-et, amin részt szeretne venni, és akit érdekel, az csatlakozhat hozzá. Gyorsan utánanéztem, és láttam, hogy egy számomra ismeretlen japán cég, az NDIAS szervezi, európai idő szerint péntek reggel 10-től vasárnap reggel 10-ig tart, és csapatverseny lesz.

Az NDIAS honlapja

A kérdéses munkatárs előző CTF-eken bizonyította a rátermettségét, úgyhogy vele csapatban indulni különösen vonzó lehetőségnek tűnt. Ezen és a tavalyi hasonló esemény sikerén felbuzdulva már írtam is volna, hogy megyek, de aztán szembejött a valóság: kisgyerekes szülőként azért nem úgy van az, hogy szerda délután értesítem a családot, hogy „Apa péntek reggel 10-től 48 órára beszáll a Mátrixba, addig jók legyetek, csá!”. Így hát nehéz szívvel csak azt válaszoltam, amit a többiek is: „Sajnos nem jó az időpont, de neked hajrá!”.

Itt akár vége is lehetett volna a történetnek, de a pénteki ebédszünetben aztán nyilván nem hagyott nyugodni a kisördög. Vajon milyenek a feladatok? Vajon meg tudnék oldani közülük néhányat, ha nem érnék rá ténylegesen foglalkozni velük? Mert hiszen időm tényleg nem volt — a munka is sok volt és otthon is bőven volt teendő, tehát szóba se jöhetett, hogy benevezzek.

Ez voltam én.

Ez nyilvánvaló. Nem fér bele.

Illetve… Esetleg…

Na jó, gyorsan beregisztrálok, de csakis azért, hogy megnézzem a feladatokat.

Megnézem és lementem őket, hogy később, amikor majd lesz időm, elmélyülhessek bennük egy kicsit. Ráadásul ez még céges szinten is indokolható ráfordítás, mert ősszel majd mi is szervezünk saját CTF-et, ahhoz meg jól jöhet némi inspiráció.

Igen, ez így akkor rendben lesz. Regelek, lementek mindent, és ennyi. Öt perc. Legfeljebb tizenöt.

Ha nem lenne meg a Blöff örökbecsű klasszikusa

A fenti gondolatsor után pár perccel már bent voltam az ismerős CTFd felületen az újonnan regisztrált felhasználómmal. Kötelező volt csapatot választani, ezért létrehoztam a Spectator, azaz Megfigyelő nevű egyszemélyes csapatomat (nem-részvételem iránt ezúton is elköteleződve), és elkezdtem lementeni a feladatokat. Ehhez meg kellett nyitnom mindegyiket, hogy kézzel kimásolhassam belőlük az angol szöveget (a szervezők ugyanis végtelenül pedáns módon mindent leírtak angolul és japánul is), és letölthessem az esetleges csatolmányokat.

Az ilyen eseményeknél megszokott módon az első feladat a játékszabályzat elfogadása volt, ami annyit jelentett, hogy el kellett olvasni a Discordra kitett szabályzatot, aminek a végén ott volt az első flag. Dilemma elé kerültem: igaz, hogy megfogadtam, hogy nem játszom, de ez igazából nem is számít annak… Meg hát ha már regisztráltam, akkor csak el kellene fogadnom a szabályzatot, amit ugye ezzel a feladattal tudok megtenni… Na jó, gyorsan belépek a Discord szerverre is, az még nem elköteleződés… Megvan a szabályzat, a végén pedig ott áll az a bizsergetően ismerős formátumú sor:

FLAG{welcome_to_automotive_iot_ctf}

Bevallom, egy kicsit megemelkedett a pulzusom, amikor bemásoltam a fenti sort a megoldás mezőbe és Entert nyomtam. Vagy az idő lassult le, vagy csak a CTFd szokásos lassúságát éreztem, de mindenesetre nemsokára megjelent a rendszer válasza: Correct! Az első feladat csempéje kizöldült, de ekkor még nem szippantott be a Mátrix. Legalábbis szeretném ezt gondolni.

Ez csak később történt meg.

OSINT

Eddig még nem is írtam magukról a feladatokról, ezt most gyorsan pótolom. A szervezők alaposan odatették magukat, nem kevesebb mint 37 feladat várta a versenyzőket, olyan kategóriákban, mint CAN (autóipari kommunikáció), Pwn (sérülékenységek kihasználása), Keyfob (rádiós központi zár), OSINT (nyílt forrású hírszerzés), AGL (autóipari Linux), Suspicious device („gyanús” okoseszköz), Network (hálózat), Crypto (kriptográfia), RF (rádiófrekvenciás kommunikáció), Rev (visszafejtés) és Misc (Egyéb).

A témák közül a szakmai hátterem miatt a CAN állt hozzám a legközelebb, de azoknál a feladatoknál egy linuxos környezetből kellett volna csatlakozni a szervezők által biztosított szerverhez. Ilyen környezetem nem volt, és mivel úgysem vettem részt, nem is akartam egyet összerakni, ezért a feladatok lementése után tovább is léptem rajtuk.

Viszont nemsokára eljutottam az OSINT kategóriához. Ez olyan, mindenki számára szabadon hozzáférhető adatokban történő kutatást jelent, amihez nincs szükség semmilyen különleges jogosultságra vagy eszközre. Tehát kis túlzással csupán némi Google-keresés a feladat, és ahogy várható volt, ezeknek már nem tudtam ellenállni, lementés után kíváncsiságból belekukkantottam az első feladatba.

Ez a belekukkantás aztán olyan jól sikeredett, hogy végül sikerült megoldani a kategória mind az öt feladatát. Mint ahogy a bevezetőben írtam, a teljes CTF-nek ez persze csak egy apró szelete volt (az elérhető 5370 pontból összesen 500), de nekem nagyon tetszettek a kihívások, ezért elhatároztam, hogy írok egy kis összefoglalót ebből a kategóriából. A továbbiakban sorra veszem az öt feladatot, és az eddigi szentimentalizmust félretéve (vagy legalábbis megpróbálva), tárgyilagosan beszámolok a feladatokról és a megoldásukról.

It’s not a car

Ebben a feladatban a https://zoox.com/journal/resorts-world-las-vegas/ cikkben lévő nyitókép készítésének koordinátáit kellett megtalálni (3 tizedesjegy pontossággal).

A cikk nyitóképe

Bevallom őszintén, lusta voltam végigolvasni a cikket, úgyhogy inkább bedobtam a nyitóképet Google képkeresésbe. Az azonnal megmondta, hogy a kép a Las Vegas-i Resorts World szállodát ábrázolja, amire Google Mapsben rákeresve meg is találtam a koordinátákat. Miután eldobtam a harmadik utáni tizedesjegyeket (és játszottam egy kicsit a maradékkal a kerekítés miatt), a rendszer elfogadta a flaget: flag{36.134_-115.167}.

Mondtam már, hogy a könnyű találatok mennyire be tudják húzni az embert? 🙂

AV Striking

Ebben a feladatban egy baleset pontos helyszínét kellett megtalálni az előzőhöz hasonló formátumban. Kiindulásként megadták az amerikai közlekedési hatóság hivatalos baleseti jegyzőkönyvét, ami egyébként (szerintem) érdekes módon teljesen szabadon hozzáférhető.

A jegyzőkönyv tartalma dióhéjban amúgy annyi, hogy 2026. január 23-án egy Waymo autonóm jármű egy Santa Monica-i általános iskola közelében elütött egy gyereket, aki egy parkoló autó mögül kilépve futott át az úttesten. A gyerek szerencsére könnyebb sérülésekkel megúszta a dolgot.

Egy ilyen autó ütötte el a gyereket, szerencsére csak 10 km/h sebességgel.

A megadott információk alapján sikerült megtalálnom több újságcikket és videós riportot is — utóbbiaknál reméltem, hogy pontos helyszíni felvételeket is mutatnak majd, amelyekből majd némi Street View-nézegetéssel meg fogom találni a pontos helyszínt. Erre végül nem volt szükségem, mert elég hamar ráakadtam, hogy az eset a Santa Monica Grant Elementary School környékén történt, és amikor rápróbáltam a Google Maps által mutatott koordinátákra, akkor a rendszer azonnal elfogadta a megoldást: flag{34.019_-118.462}.

Egy másik versenyző későbbi beszámolójából amúgy megtudtam, hogy ennél pontosabban is be lehetett volna lőni a helyet, ő ugyanis talált egy cikket, amiben egészen konkrétan ott van a baleset helyszínrajza.

Meglepő részletesség

Durva, hogy mennyi mindent meg lehet találni egy kis keresgéléssel!

Unexpected Braking

A szervezők tovább ütötték az autonóm járműveket. Ez a feladat arról szólt, hogy 2024-ben néhány önvezető autó azzal került be a hírekbe, hogy a váratlan, túlságosan erős fékezésükkel ráfutásos baleseteket okoztak.

Ezt a hibát néha emberi sofőrök is elkövetik, sajnos van, hogy szándékosan…

Itt már nem kaptunk jegyzőkönyvet, de „cserébe” meg kellett találnunk legalább egy érintett jármű típusát és az alvázszámának első 11 karakterét. Ez azért már egészen más szint volt, mint a Resorts World szálloda bejárata!

Kezdetnek odaadtam a feladatot a ChatGPT-nek, amely némi kutatás után megmondta, hogy nagy valószínűséggel a Zoox cég kísérleti autóiról van szó, amelyek az adott időszakban Toyota Highlanderek voltak. Ez alapján már sikerült olyan cikkeket találnom, amelyek a szóban forgó két balesetről szóltak, azokból pedig kiderült, hogy a Zoox visszahívta az érintett szoftverrel ellátott autóit.

Ilyenekről volt szó

Az USA-ban a visszahívásokat a közlekedési hatóságon, a NHTSA-n keresztül kell intézni, úgyhogy ez a visszahívás is kapott hivatalos azonosítót: 25E019000. Azt reméltem, hogy a hatóság saját honlapján majd megtalálom a visszahívásban érintett autók alvázszámát, de ennyire azért sajnos még az amerikaiak sem kezelték lazán az adatokat. Ha megadtam volna egy alvázszámot, akkor megtudhattam volna, hogy vonatkozik-e rá a visszahívás, de a másik irányban nem ment a dolog.

A zoox keresőszóval megtaláltam a 25E019000 visszahívást, amihez egy vizsgálat is tartozott. A vizsgálat szövegében pedig véletlenül megakadt a szemem ezen a mondaton: „To review the SGO reports cited above, go to NHTSA.gov/laws-regulations/standing-general-order-crash-reporting. The SGO report ID numbers are provided below: 30610-7578 30610-7589 30610-4810”. A megadott oldal egy összefoglaló jelentés, de az oldal alján, a hivatkozások és mellékletek között ráakadtam egy linkre: „Data prior to June 16, 2025; ADS Incident Report Data. Azt tudtam, hogy a balesetek 2025. június 16. előtt történtek, úgyhogy kattintottam, és egy kincsesbányára bukkantam: a hatósághoz beérkezett több mint kétezer jelentés adataira egy táblázatba összefoglalva!

Gyorsan rákerestem a fent említett 30610-7578 azonosítóra, és meg is találtam a megfelelő sort. Zoox Inc., Toyota Highlander, és a legfontosabb: az alvázszám első 11 karaktere! Heuréka!

Az a bizonyos kincs a kincsesbánya táblázatban

Izgatottan írtam be a megoldást (flag{Highlander_5TDDGRFH3KS}) a CTFd felületén, és egy másodperccel később meg is jött a jutalmam: Correct!

Megjegyzés: ahogy a blogposzt írásához újra végigmentem a megoldás lépésein, feltűnt, hogy a keresés találati oldalán nemcsak a visszahívásokra (recalls) kattinthattam volna, hanem a vizsgálatokra (investigations) is. A zoox keresőszóhoz jelenleg egyetlen vizsgálat tartozik, amelyhez csatolva megtalálhatóak a feljebb említett SGO jelentések. Ezek közül egyet letöltve azonnal megtaláltam a keresett alvázszámot, szóval ezek szerint megoldhattam volna a feladatot egy fokkal egyszerűbben is. Na de utólag könnyű okosnak lenni. 🙂

Az SGO jelentés

Joby First Flight

A kedvenceimet hagytam utoljára. Ez a két feladat, a Joby First Flight és a Joby 2025 Last Flight egy önvezető légitaxinak szánt „repülő autóról” szól, amelyet a Joby Aviation nevű cég fejleszt. Az első feladatunk az volt, hogy találjuk meg, hol szállt fel először Japánban a gép. Ehhez segítségül egy videót kaptunk, a flag pedig a konkrét helikopter-leszállóhely (ún. heliport vagy helipad) azonosítója volt — ehhez előzékenyen még egy keresőoldal linkjét is megadták a szervezők.

A légitaxi

A videó megnézése után az első keresési találatok Redditre vittek, ahonnan pedig meglett egy cikk, ami erről az eseményről, a gép első japán repüléséről szólt. A cikkből egyértelműen kitűnik a Fuji közelsége, a ChatGPT-t ráeresztve pedig hamar meglett, hogy a kérdéses heliport a Toyota egyik fejlesztőközpontjában, a Higashi-Fuji Technical Centerben található, Susonóban, Shizuoka prefektúrában. Ezt a helyet az OurAirportson megkeresve meglett az azonosító, azaz a megoldás: flag{JP-3604}.

Joby 2025 Last Flight

Az előző feladatot a szervezők könnyűként jelölték meg, ezt viszont már közepes nehézségűként. Nekem mégis ezt tűnt a legnehezebbnek, viszont ez adta a legnagyobb élményt is, és amikor péntek este az üres irodában sikerült megtalálnom a megoldást, emlékszem, még hangosan fel is kiáltottam.

A feladat így hangzott: „Hol tartották 2025-ben a Joby utolsó nemzetközi bemutatóját? A megoldás annak a helynek az OpenStreetMap way ID-ja, ahol a gép fel- és leszállt a bemutatón.”

A feladat — és a lelkesedésem — megértéséhez szükséges némi további háttérinformáció. Az OpenStreetMap (OSM) egy nyílt forráskódú világtérkép, amelyet egy világszintű közösség épít és tart karban. Korábbi projektjeim során többször dolgoztam az adataival, amelyeket akár nyers formában is le lehet tölteni, és emlékszem, milyen óriási élmény volt térképezési feladatokat megoldani a saját scriptjeimmel, amelyek az OSM hatalmas adatbázisából kimazsolázgathatták a számomra fontos dolgokat.

Ebben az adatbázisban, amit egyébként grafikus formában a https://www.openstreetmap.org/ oldalon is lehet böngészni, minden egyes vonalnak saját, egyedi azonosítója van.

Minden.

Egyes.

Vonalnak.

A világtérképen.

Egyszerű halandóknak természetesen semmi szükségük nincs ezekre az azonosítókra, de a hozzám hasonló kockák számára felettébb érdekes és hasznos az, hogy a térkép hajlandó ezeket az egyedi azonosítókat, utak esetén úgynevezett way ID-kat is megmutatni.

Izgatottan vágtam hát bele a kutatásba, miközben azt is tudtam, hogy itt most nem lesz elég nagyjából százméteres pontossággal belőni a keresett helyszínt, mint az előző feladatokban. Most bizony tűpontos válaszra lesz szükség.

Az hamar meglett, hogy a Joby Aviation a Fuji Speedway versenypályán tartotta a 2025-ös évzáró, nemzetközi bemutatóját. Gyorsan meg is kerestem a kérdéses pályát OSM-ben, és szerencsémre az egész aszfaltcsíkot egyetlen út írja le, a 148622740 számú. Rápróbáltam megoldásként, de a rendszer visszadobta. Hát akkor keresgéljünk tovább!

Hamarosan megláttam, hogy a bokszutca mellett van két hivatalos helikopter-leszállópálya (1250971114 és 1250971115) — hát akkor biztosan ezek közül lesz valamelyik! Első próba: hibás válasz. Második próba: hibás válasz. Mi van?!

A Fuji Speedway az OpenStreetMap térképén, középtájt a leszállópályákkal (way ID-k nélkül)

Elakadtam. Hogyhogy nem jó egyik helipad sem? Szétnéztem a Google Maps műholdképén is, ott találtam még egy H-val jelölt leszállópályát, az OSM ott viszont nem mutatott semmit. A semminek pedig nincs way ID-ja…

Aztán arra gondoltam, hogy ha ez egy ilyen nagyszabású esemény volt, akkor biztosan kellett róla készülnie videónak! A talált cikkek képeivel nem voltam kisegítve, ugyanis nem lehettem benne biztos, hogy tényleg az adott alkalommal készültek, illetve a legtöbb — nyilván — a levegőben mutatta a gépet, nekem pedig pont nem az kellett. Na de ha találnék egy videót, akkor abban hátha mutatják a felszállás vagy a landolás pillanatát is…! Gyorsan rá is ugrasztottam a ChatGPT-t, hogy keressen nekem ilyeneket, az pedig a következő X (Twitter) videót találta: https://x.com/jobyaviation/status/1996980177826365466.

A videó

Csak a lelkiállapotom szemléltetése végett: ez egy 2 perc 10 másodperces videó. Nem nevezhetném különösen hosszúnak. De ahogy elindítottam, olyan csigalassúsággal teltek a másodpercek, hogy alig bírtam megállni, hogy beletekerjek.

Éjszaka. Emberek autóznak és pakolnak.

Egy konténerirodában okos emberek szakértenek a Fuji Speedwaynél.

Ellenőrzik a gép minden apró részletét. Még mindig nem kelt fel a nap.

Nyílik a hangárajtó, ott a Fuji. Oké, ezt már tudtam. Tovább, gyerünk már!

Feljön a nap. Felszáll egy helikopter (nem a kérdéses gép). Hogy honnan, az nyilván nem látszik.

ÉS MEGVAN!!! 0:51-nél felszáll a gép!!! Ez az!!!

Felszállás!

Itt megállítottam a videót, és alaposan körülnéztem. Látványosan nem egy hivatalos helipadról van szó. Sőt, úgy tűnik, hogy fel- és leszállóhelyet kijelölő kört krétával rajzolták fel. Az irodák ideiglenesek, ez várható volt, de még a hangár is annak tűnik. Hol lehetnek?!

És innentől légi képsorok végeláthatatlan áradata. A gép repül a pálya fölött. A gép repül a Fuji előtt. A gép repül az erdők fölött. A frusztrációm minden egyes vágással nőtt. Mikor szállsz már le?! És hova?!

És akkor végre elkezdődött az ereszkedés. Amikor 1:55-nél megláttam, hogy mindjárt leszáll a gép, azonnal megállítottam a videót. Körülnéztem, mit látok? Bridgestone feliratos kapu az út fölött, az útról nyíló kihajtóval, ami egy nagy betonplaccra vezet. Hol van ilyen?

Leszállás

Azonnal rávetettem magam a Google Maps műholdképére. Végigkövettem a teljes versenypályát és ellenőriztem a kapuk környezetét… Semmi. Vissza a videóhoz, lássuk, milyen az út felfestése? Három vagy négy sáv, a záróvonal a kapu előtt megszaggatva… Nosza, keressünk ilyet a műholdképen! Nem vagyok nagy Forma-1 fan, de még így is kellemetlenül hosszú idő után döbbentem rá, hogy a versenypályákon nincsenek forgalmi sávok felfestve.

Ezeket csak azért írtam le ilyen részletesen, hogy érzékeltessem a felfokozott idegállapotomat. Nem tudom, mennyi ideig kerestem még azt a bizonyos kihajtót arról a bizonyos útról, de végül el kellett engednem ezt a vonalat. Visszatértem az 1:55-nél megállított videóhoz, és megnyomtam a lejátszás gombot.

Egészen pontosan 2:00-ig kellett várnom, hogy megkapjam a tökéletes snittet: a gép leszáll a kijelölt körben, a kamera kizoomol, és bemutatja a teljes pályát. A teljes környéket. Az egészet. Kontextusban. Tálcán kínálja a megoldást.

Ott!!!

Nem tudtam, hogy sírjak-e vagy nevessek. Legalább negyed órát szerencsétlenkedtem a részletek keresgélésével, pedig csak öt másodperccel kellett volna türelmesebbnek lennem. Azt hiszem, erre mondják, hogy tanulópénz, de nem hiszem, hogy tanulni fogok belőle. 😀

A lényeg, hogy erről az utolsó snittről aztán kiderült, hogy hol verték fel az ideiglenes főhadiszállásukat a jobysok, és az is, hogy miért nem fogadta el a rendszer sem a versenypálya way ID-ját, sem a hivatalos helipadok azonosítóit. Az esemény ugyanis a pálya P1 jelű parkolójában történt, amit ezután már könnyű volt megtalálni OSM-en.

A parkoló a Google Maps műholdképén…
… és az OpenStreetMapen, bekapcsolt térképadatokkal

Végül fogtam a parkoló way ID-ját, és beküldtem a flaget: flag{593469861}. És az oldal válasza: Correct!

Zárszó

Az OSINT kategória öt feladatán kívül (a kezdő Welcome-ot és a záró Thank you-t leszámítva) mindössze egyetlen kihívást sikerült teljesítenem, a Map data-t. Sokat dolgoztam még egy CAN-es feladaton, az I Saw Our Time Pass-on, illetve egy Weird config updater nevűn, de azoknak nem sikerült a végéig jutnom — bár kétségkívül sok érdekességet találtam útközben.

Az ilyen események után a versenyzők általában elkezdik publikálni a megoldásaikat, úgyhogy bízom benne, hogy én is el fogom tudni olvasni, hogyan lehetett volna fogást találni a többi feladaton. És ki tudja, valakinek meg talán pont az én leírásom fogja fellebbenteni a fátylat az OSINT kihívásokról! 🙂

Az biztos, hogy még így, ilyen kevés ráfordítható idővel is nagy élmény volt a verseny, úgyhogy kíváncsian várom a következő lehetőséget, amin talán nagyobb erőbedobással, csapatban állhatunk majd rajthoz!

Ha hallotok ilyesmiről, szóljatok! 😉


Hogy mit honnan:

Vélemény, hozzászólás?

Az e-mail címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük

This site uses Akismet to reduce spam. Learn how your comment data is processed.