ako hacknúť loď

čo s nudou na dovolenke pri mori: hacknúť si loď. éra wifi a smartfónov sa doplavila aj do sveta jachtárskej naviatiky a s bezpečnosťou to do dopadlo ako vždy, keď spolu súperí ľudská prezieravosť a pohodlnosť: výsledok je user-friendly a tým pádom.. no veď už tušíte.

strávil som týždeň na mori s partiou IT-čkárov (pozdravujem!), medzi ktorými bol aj majo, hacker zo starej bandy na hysteria.sk. prišli sme hneď na to, že naša zánovná loď Hanse 455 má vstavané wifi a heslo na router je “admin”. a tak započala naša plavba po internej sieti lode, používanej na komunikáciu medzi ovládcími navigačnými displejmi a externými zariadeniami. následné zistenie bolo vzrušujúce, ale v zásade nie prekvapivé:

máme deravú loď

ovládacie prvky lode komunikujú s navigačnými prístrojmi ako sú GPS, radar, hĺbkomer, kormidlo, či merač vetra pomocou protokolu NMEA0183. komunikácia je obojstranná, meracie prístroje chrlia dáta a ovládací displej dáva povely zariadeniam, vrátane kormidla. medzi jednotlivými zariadeniami neexistujú autentifikačné mechanizmy, ale kompromitácia by si vyžadovala napojenie na fyzickú kabeláž lode. ehm, donedávna.

teraz traja výrobcovia lodných navigačných prístrojov (lowrance, simrad a b&g) uviedli systém GoFree, ktorý umožňuje prepojiť naviatiku s tabletmi a smartphonmi cez tcp-ip a wifi. a to je priestor, v ktorom sa hackeri, na rozdiel od námorníkov, pohybujú ako ryba vo vode.

spomínaná wifi sieť je voľne viditeľná, čo vôbec nie je dobré a naviac má v SSID názve defaultne slovo “GoFree”, podľa čoho sa dá ľahko spoznať. v prístave biograd na moru nachádzam štyri takéto siete GoFree:

# airport -s |grep -i gofree
GoFree Wifi A98F 00:42:42:00:a9:8f -90 13 N HK WPA2(PSK/TKIP/TKIP)
GoFree Wifi 159C 00:42:42:00:15:9c -85 13 N HK WPA2(PSK/TKIP/TKIP)
GoFree Wifi B7E1 00:42:42:00:b7:e1 -60 10 N HK WPA2(PSK/TKIP/TKIP)
GoFree Wifi D2A2 00:42:42:00:d2:a2 -61 6 N HK WPA2(PSK/TKIP/TKIP)

siete majú wpa2 bezpečnosť, to je fajn, ale aj to má svoje limity.

wifi heslo sa inak dá fyzicky prečítať tromi ťukmi na samotnom navigačnom displeji, ktorý býva na plachetniciach v otvorenom priestore lode, vzadu pri kormidle. v prístave si teda na nestráženej lodi môžete heslo pozrieť, displej nemá možnosť uzamykania heslom.

keď sa dostanete na wifi sieť GoFree, router na adrese 192.168.0.1 má default login “admin” a heslo “admin”. čo je zvláštne, vo webovskom rozhraní routera sa to heslo ani nedá zmeniť, ani sa nedá zneviditelniť SSID, čiže celé to nie je bug, ale “user-friendly feature”. Interface vyzerá takto:

screen2

router má aj telnet prístup, ktorý dá shell s root právami:

Navico login: super
Password:

BusyBox v1.12.1 (2015-05-12 14:58:31 CST) built-in shell (ash)
Enter 'help' for a list of built-in commands.

#grep super /etc/passwd
super:.nYt6q5U2ySLI:0:0:Adminstrator:/:/bin/sh
# help

Built-in commands:
-------------------
. : break cd chdir continue eval exec exit export false hash
help local pwd read readonly return set shift source times trap
true type ulimit umask unset wait

cez shell sa dajú o.i. pomeniť sieťové nastavenia, cez ďaľší router si teda môžete napríklad celú loď hodiť na verejný internet. pripomína to trochu situáciu z pred 15-tich rokov, keď sme brázdili blavu s wifi anténou na aute a nachádzali stovky slabo zabezpečených bezdrôtových sietí.

čo ďalej? nmap-om som prescanoval sieť a našiel IP adresy navigačných ovládacích prístrojov, my sme mali dva od výrobcu B&G a vyzerali takto:

Nmap scan report for 192.168.0.184
PORT STATE SERVICE
21/tcp open ftp
80/tcp open http
111/tcp open rpcbind
554/tcp open rtsp
2049/tcp open nfs
5001/tcp open commplex-link
MAC Address: 00:0E:91:09:CA:79 (Navico Auckland)

na porte 21 navigačného panela beží ftp server, kde sa dá prihlásiť bez hesla na užívateľa “ftp” a je tam pár zaujímavých vecí na stiahnutie:

150 Here comes the directory listing.
drwxr-xr-x 2 ftp ftp 160 Jan 11 2015 Gribs
drwxr-xr-x 5 ftp ftp 352 Jun 24 2015 Logs
drwxr-xr-x 2 ftp ftp 160 Jan 11 2015 Polars
drwxrwxrwx 2 ftp ftp 360 May 03 15:08 crashlog
drwxr-xr-x 2 ftp ftp 880 Mar 31 2015 wallpaper

stiahnuté logy prezradili architektúru ovládacieho panelu lode:

[ 0.000000] Linux version 3.0.35 (root@) (gcc version 4.7.3 (GCC) ) #2 SMP PREEMPT Wed Jul 8 11:41:42 UTC 2015
[ 0.000000] CPU: ARMv7 Processor [412fc09a] revision 10 (ARMv7), cr=10c53c7d
[ 0.000000] CPU: VIPT nonaliasing data cache, VIPT aliasing instruction cache
[ 0.000000] Machine: Freescale i.MX 6 NAVICO Board
[ 0.000000] Memory policy: ECC disabled, Data cache writealloc
[ 0.000000] CPU identified as i.MX6DL/SOLO, silicon rev 1.1

nepáči sa mi predstava, že sú na lodi dva kľúčové linuxové počítače, ktoré sú pripojené jednak na viditeľné wifi a zároveň na vnútornú ovládaciu sieť, ktorá je postavená na princípe plnej dôvery medzi jednotlivými zariadeniami. elitný hacker vám crackne wpa2, šupne 0-day remote exploit na linux a plne ovládne loď. nebude to zadlho a bude to na hlavných správach.

na porte 80 navigačného displeja beží http server, kde sa dajú uploadnúť GRIB fajly. to je štandardizovaný formát súborov s údajmi o počasí. takže hneď lokálny nápad na neplechu: okázalému pracháčovi z vedľajšej lode uploadnúť falošné dáta o počasí. nechať ho uveriť, že sem ide bóra, tak nech páli dokelu! rozhranie vyzerá takto:

screen1

interaktovať s multifunkčným lodným displejom sa dá cez appku GoFree Link, voľne stiahnuteľnú na iOS a android. a tak sme na telefóne mali kompletnú kópiu obrazovky lodnej navigácie a ovládania:

IMG_20160609_090602

z tabletu sa dá aj plne interaktovať, tu jeden screenshot z iPadu počas našej plavby:

image1

cez appku som dokázal klikať úplne všetky funkcie ovládania lode, okrem práce s autopilotom a teda nevedel som meniť smer plavby. ale mohol som meniť akékoľvek nastavenia, zadávať waypointy a podobne. v dokumentácii sa píše, že je možné cez tablet aj ovládať kormidlo, ale je to “on agreement base”.

všetko sa to týka len nových lodí, systém je na trhu len od roku 2013. tak dúfajme, že kým bude väčšina plachetníc plne ovládateľných na diaľku, dorieši sa security. dovtedy je tu more spôsobov, ako môže niekto cudzí s loďami riadne nezbedníčiť.

pre suchozemcov záverom jedna všeobecná myšlienka: ak sa tvorí účelový systém, ktorý má fungovať v uzavretom prostredí, treba ho aj tak spraviť natoľko bezpečným, aby vedel fungovať v otvorenom, “divokom” priestore. je totiž pravdepodobné, že sa čoskoro poprepája všetko so všetkým a všetky zariadenia budú online. dá sa rátať napríklad s tým, že bude vnútorný komunikačný systém autonómnych áut navždy neprístupný zvonka?

jasné že nie a história sa opakuje: “uzavretý” systém dostal po pripojení na sieť trochu na frak od hackerov: zažili to iránske jadrové centrifúgy, ukrajinská elektráreň, americké SUV-čko, no a teraz aj tá naša nemecká plachetnica:

DSC02243

9 thoughts on “ako hacknúť loď

  1. Pekny clanok, ma vsak v sebe diery:
    – bez moznosti ovladat autopilota taku lod nikdy nebudete vediet ovladat na dialku
    – iGrib je super, avsak sluzi v tomto systeme na “navod” pre autopilota, kadial plachtit ci uz v auto alebo semi auto rezime, takze opat nic, lebo autopilot
    – a to, ze si precitate udaje z plotra nesposobi nikomu ziadnu skodu
    Takze ste sa hackli sice do systemu, ale vysledok je nula – lod neovladate.
    Alebo tvrdite, ze ste schopni na dialku nastartovat motor, odopnut sa z boje, vytiahnut kotvu, odhodit mooringove lana od mola a poslat ju niekam?
    pekny vtip :-), hodny tej Vasej poznamky o bohacovi, ktoreho poslete niekam.

    1. vdaka za komentar a ano, na ovladanie smeru jazdy lode naozaj treba autopilota a to cez tu iOS appku naozaj nejde. Je to striktne a rozumne pravidlo tej aplikacie. Ale navigacny panel je len Linux. A tam je vselikto doma. Ked ziska niekto administratorske prava na tom Linuxe, tak uz ziadne aplikacne pravidla neplatia. A ziskat administratorske prava na Linuxe je 20 rokov stary sport, v ktorom su taki prebornici, od jednotlivcov, po vladne timy, ze z toho ide trochu strach. Kotva sa typicky neovlada cez navigacny panel, ani rychlost motora, ale kormidlo ano. Takze ano, myslim si, ze existuju ludia, ktori by vedeli zmenit kurz iducej lode. A zrusit moznost manualneho ovladania kormidla. Myslim si ze par takych ludi je aj na Slovensku.

  2. Najjednoduchsi hack plachetnice – ked ti truhlik z posadky prejde cez autopilot engage tlacitko. Ak toto dokazes aktivovat cez wifi, najlepsie na par lodiach naraz…

    1. “engage” je navrat zo “standby” na autopilota? to ale hodi aktualny kurz a nie ten posledny autopilotovy, nie? mozno to je ine na roznych lodiach..

  3. mala poznamka: autopilot je na tej istej zbernici ako vsetko ostatne, k zbernici je pristup z linuxu, do linuxu je pristup cez wifi, ziskat roota v linuxe je viac sa mu venovat a menej plachtit, tak mozno nabuduce 🙂

  4. Klobúk dolu, zistiť toto stálo jedno slnečné ráno, s kávičkou v jednej ruke a laptopom v druhej :), v príjemne tichej ostrovnej zátoke…a Mirovi, pri jeho šikovnosti, aj napísanie tohto blogu asi rovnako dlho…a navyše v magickom období…btw. ešte raz gratulujeme.

    Nedá sa nesúhlasiť, no otázkou zostáva, prečo to inžinieri z B&G navrhli práve ako “user-friendly feature”. Mimochodom, login na “prístrojové” WiFi je nalepený z vnútornej strany skrinky nad kapitánskym stolíkom (v ktorom je vysielačka), takže v skutočnosti nie je potrebný žiadny “hack”…každý skúsenejši a aktívny použivateľ smartphone, ktorému sa na plavbe nelení sa do systému dostane a asi aj môže dostať. Samozrejme, dá sa robiť “zle” kapitánovi a možno mu maximálne prepínať obrazovky…no zatiaľ to vnímam ako neškodnú srandu. Tá prestáva v momente, keď sa budú cez toto rozhranie dať napríklad kalibrovať prístroje, nastaviť offset natočenia lode voči vetru, či posunúť námer – smerovanie lode na cieľ. Toto je totiž najčastejšou chybou moderných digitálnych Navi prístrojov. Treba ich kalibrovať a to stojí čas a prácu ľudí a to je v ‘charter’ spoločnostiach pridrahá komodita. Ja mám osobne radšej klasiku – takmer analógové merače od Raymarine, ktoré už nájdeme ale len na ročníkoch starších, kde nefunguje už skoro nič, len Wind Instrument, ale zato správne, a dá sa s nimi robiť to, na čo je loď určená – sailing 🙂

    Za zmienku stojí aj to, že bez radaru dokážeme na týchto prístrojoch dostávať informácie o plavidlách v okolí a zobrazovať ich na vlastnom displayi. Táto komunikácia ale asi nejde cez WiFi samotné, pretože rozsah je cca 1nm /1843 – 1862m/. Myslíme si, že to bude prostredníctvom VHF…bude predmetom ďalšieho bádania. Niektoré vysielajú svoje volacie znaky, rozmery, meno lode a je možné “suseda” prostredníctvom dvoch klikov aj zavolať (neskúšali sme, nemali sme istotu, že nevyvoláme u “suseda” paniku 🙂

    Predstavme si, že loď má firmware a ten sa dá aktualizovať. Človek od výrobcu sa postaví na mólo a spustí upgrade na 50-tich lodiach súčasne…za 10 minút ma vybavené a má “siestu” alebo po chorvátsky “fjaka”. (podobne, ako merače odberu tepla na radiátoroch v bytovke s centrálnym odpočtom).

    Nech sa už bude systém uberať smerom uzavretým, alebo bude pripojený do internetu ako Jeep v ukážke, ” IoT ” sa ani na mori nevyhneme…a buď sa s tým naučíme žiť alebo si budeme požičiavať staré loďky mimo systém….alebo navrhneme na lodi “magic button”, ktorým sa bude natvrdo prepínať na manuál a offline. Moru zdar…

    1. Vdaka za pekny komentar a ano, ako pises, asi aj lode budu IoT a asi je to fajn, povznika more vselijakych treto-strannych aplikacii.. Len s tou bezpecnostou to bude asi ako vzdy, ze najprv niekto bude musiet spravit neplechu a az potom sa to doriesi, casom asi polovica IT ludi bude robit security a druha polovica bude kodit pekne big-data appky 🙂

Comments are closed.