Onveilige industrie-installaties
Installaties met internettoegang kunnen in de industrie veel problemen oplossen. Maar hang je ze onbeveiligd in het internet, dan veroorzaak je veel nieuwe problemen. Tijdens onze speurtocht naar slordige configuraties hadden we maar al te vaak beet.
Als je per ongeluk onbeveiligd met je smarthome op internet zit, is de schade te overzien. In het ergste geval kunnen grappenmakers op afstand het licht in je huis uitschakelen of de rolluiken laten zakken. Het wordt echter echt vervelend wanneer industriële bedrijven hun op een netwerk aangesloten of ‘slimme’ fabriek met de hele wereld delen. Het potentieel aan afpersingen en sabotage is reusachtig. Je wilt er niet aan denken wat er kan gebeuren als hackers een chemische fabriek of een olieraffinaderij op afstand kunnen overnemen. Eigenlijk zou je er vanuit gaan dat dergelijke ondernemingen hun eigen IT-beveiligingsexperts in dienst hebben of expertise inkopen en zich volgens de laatste stand van de techniek tegen aanvallen beschermen. Eigenlijk.
Het idee om de veiligheid van industriële installaties eens systematisch te onderzoeken, kwam van een tipgever die toevallig op internet een openbare MQTT-server gevonden had. MQTT is een protocol waarmee sensoren en actuatoren elkaar berichten sturen. Daarbij loopt de communicatie niet rechtstreeks van apparaat naar apparaat, maar altijd via een MQTT-broker, bij wie andere apparaten zich op die berichten kunnen abonneren. Over dat protocol hebben we al eens wat geschreven, en je kunt dat gebruiken in combinatie met Node-RED voor je eigen smarthome. Als je daar goede redenen voor hebt is MQTT wel aan internet te hangen. Daarvoor moet je MQTT dan wel absoluut via TLS op poort 8883 gebruiken en voor alle eindapparaten gebruikersaccounts aanmaken. Aanmelden kun je dan via een wachtwoord of nog beter met een certificaat.
We hebben onze scanner alleen op onbeveiligde brokers gericht. Eerst lieten we hem een lijst maken van alle servers die op poort 1883, dus met nietversleutelde MQTT, antwoordden. Bij de gevonden servers hebben we vervolgens getest of ze verbindingen zonder inloggegevens toestaan. We kregen op die manier meer dan 10.000 adressen op onze lijst te staan.
PARTICULIERE VRIJGEVIGHEID
Om te beginnen hebben we enkele treffers steekproefsgewijs bekeken. Als je je bij een MQTT-broker op alle topics abonneert, kun je al aardig inschatten waar de server voor gebruikt wordt. Niet erg verrassend waren de vele smarthomes die we over de hele wereld van Europa tot Australië vonden. Topics als livingroom/lights/center verraden overduidelijk waar de broker voor bedoeld is. In dergelijke particuliere omgevingen zagen we vaak hetzelfde patroon: als iemand MQTT zonder beveiliging open had staan, was er ook vaak iets op poort 80 vrijgegeven – bij voorkeur de configuratie-interface van de router of stekkerdozen met de opensource firmware Tasmota. Beide horen zeker niet op internet thuis.
Heel vaak vonden we data van de software Owntracks in de MQTT-topics op openbare servers. Je installeert de app op je smartphone en geeft hem de toegangsgegevens voor een MQTT-server. De smartphone stuurt dan regelmatig zijn locatie door. Die informatie kun je bijvoorbeeld gebruiken om de verwarming uit te zetten wanneer er niemand thuis is. Dat is een privacy-vriendelijk alternatief voor de
commerciële locatietrackers, maar als je daar een onbeveiligde MQTT-server voor gebruikt, bereik je helaas precies het tegenovergestelde. Vaak konden we uit de topics makkelijk alle gezinsleden identificeren (peter_phone en marie_iphone). Makkelijker kun je het criminelen niet maken om het perfecte tijdstip voor een inbraak te plannen. Overal weer we aanwijzingen voor een beheerder konden vinden, hebben we die op de hoogte gesteld. Owntracks kan heel goed overweg met TLS en authenticatie, je moet het alleen activeren.
INDUSTRIËLE PROBLEMEN
De smarthomes waren echter slechts een bijvangst in de zoektocht naar industriële installaties. Om de ontelbare zoekresultaten te beperken, hebben we specifiek gezocht naar statische ip-adressen, die minder vaak van particulieren zijn. Het resultaat was een kleurrijke verzameling van ‘professionele’ MQTT-brokers met verkeerde configuraties – een volledige lees- en schrijftoegang voor iedereen. Een fabrikant van snackautomaten uit Italië deelde de statusgegevens met de hele wereld, een Portugese fabrikant van brandalarmsystemen liet meer dan 5000 systemen bijna elke seconde hun status naar een openbare server schrijven.
In Nordland in Noorwegen vonden we een server met live telemetriegegevens van 70 voertuigen, blijkbaar bussen, die voertuigdata en posities naar de server stuurden. Dezelfde fout werd gemaakt door een aanbieder van openbaarvervoerdiensten in West-Duitsland. Op hun server vonden we telemetriegegevens voor bussen van verschillende openbaarvervoerbedrijven. We hebben contact met hen opgenomen en kort daarna zijn authenticatie en encryptie geactiveerd en werden de apparaten voorzien van toegangsgegevens. De verleiding om bij voertuigtelemetrie authenticatie over te slaan is groot – je bespaart je immers een hoop werk om het wachtwoord of het certificaat in elk voertuig vast te leggen.
Die verleiding kon men ook niet weerstaan bij Ruter, een openbaarvervoersbedrijf in Oslo. Daar gebruikten ze een MQTT-broker die de posities en routes van alle trams beheert. Eigenlijk heel handig. De gegevens kunnen gebruikt worden op displays bij de haltes, in en op de trams, maar ook in apps en op de website. De gegevens zelf zijn voorbeeldig gedocumenteerd, en er zijn verschillende openbare GitHub-repository’s van de exploitant waarin het systeem wordt uitgelegd (zie de link op de laatste pagina van dit artikel). Het adres hebben we daar om duidelijke redenen niet gepubliceerd.
Omdat we vanwege de reisbeperkingen zelf niet naar Oslo konden gaan, hebben we contact opgenomen met een hackerspace in Oslo en een contactpersoon gevonden die ons kon helpen het lek te bevestigen. Het resultaat van hun test was dat de gegevens op de server realtime waren, alle voertuignummers, de eerstvolgende haltes en gps-posities kwamen overeen met de werkelijkheid. Maar het systeem werkt maar in één richting – de gegevens van de trams worden op de MQTT-server verzameld voor verdere verwerking. Hoewel de server schrijftoegang toestond, was het niet mogelijk om de displaysystemen in de trams via MQTT op afstand te bedienen. Maar als je het adres van de server weet, kun je de interne systemen wellicht wel overhoop halen. Na dat experiment hebben we contact opgenomen met Ruter.
GEHEIME URL BEKEND
Ook de exploitanten van verkeerscamera’s in Taiwan hadden hun server erg onhandig geconfigureerd. We vonden een MQTT-broker die onderdeel uitmaakt van een infrastructuur voor beeldherkenning. Een AI-systeem analyseert de beelden van verkeerscamera’s en registreert alle herkende overtredingen in JSON-objecten, bijvoorbeeld zo:
{
"o_types": "Taxi", "event_type":"IllegalTemporaryParking", "report_type": "incident",
[...] }
Behalve de herkende gebeurtenissen kwamen echter ook de url’s van de RTSP-videostreams van de camera’s op de MQTT-server. Die adressen waren niet bedoeld voor de openbaarheid en waren ook niet te raden. Zo technisch indrukwekkend als de beeldherkenning functioneerde, zo amateuristisch was de inrichting van de server. Met de links kun je bijvoorbeeld met VLC media player alles wat daar op straat gebeurt live volgen.
S7 VOOR IEDEREEN
Op zoek naar nog meer industriële controllers, zochten we in eerste instantie naar gangbare besturingsprotocollen. De keus viel op het protocol voor remote control ISO-TSAP, waarmee je SIMATIC-systemen van Siemens via het netwerk kunt beheren. Dergelijke systemen zijn in alle industrietakken wijd verbreid, de kans op treffers moest dus behoorlijk groot zijn. Volgens de documentatie werkt het protocol op poort 102 en is die uitdrukkelijk alleen voor lokale, afgeschermde netwerken bedoeld waarin alleen SIMATIC-apparaten met elkaar communiceren. Authenticatie en encryptie zitten er dan ook niet in.
Het is daarom een zeer slecht idee om zo’n protocol aan internet te hangen.
Het was geen verrassing dat onze scanner op internet snel beet had. Blijkbaar reageerden heel veel controllers op onze verzoeken. Aangezien we de juiste software voor remote control niet bij de hand hadden, probeerden we het ‘next best thing’ en openden we de gevonden ip-adressen in de browser. Al na enkele pogingen verscheen er een webinterface met de aanduiding ‘IBH Link S7++’. Daarbij gaat het om een gateway van een Duitse aanbieder, waarmee je oudere Siemens-systemen aan een (lokaal) netwerk kunt koppelen. De eigenaar, volgens de ip-geodatabase vermoedelijk uit de olie-industrie in het Midden-Oosten, had geen wachtwoord voor de beheerderslogin ingesteld. Criminelen kunnen dat makkelijk uitbuiten. In de interface kun je de via PROFIBUS aangesloten apparaten niet alleen uitlezen, maar ook herconfigureren of het systeem volledig van het netwerk halen. Afhankelijk van het soort installatie kan dat desastreuze gevolgen hebben.
Na deze eerste vondst gingen we systematisch aan de slag en controleerden we de lijst nog eenmaal geautomatiseerd. We waren geïnteresseerd in alle adressen waar zowel poort 102 als 80 (voor de webinterface) open stonden. Op poort 80 lieten we een script het HTML-document op een tekenreeks uit de interface onderzoeken. Dat leverde een lijst op met meer dan 100 openstaande besturingen, van overal op de hele wereld. Een beheerderswachtwoord was nergens ingesteld.
Het is onmogelijk om iedere afzonderlijke eigenaar te achterhalen. Om aan de hand van een ipadres te ontdekken wie er achter een aansluiting zit, werkt helaas niet zo simpel. Het is ook niet precies vast te stellen om welke typen installaties het gaat. Van besturingen van verkeerslichten tot productielijnen of pijpleidingen, het kan er allemaal bij zitten. De configuratie-interface bevat ook geen gegevens die op de eigenaar wijzen. Daarom besloten we om contact op te nemen met de Duitse fabrikant UBHsoftec. Die bevestigde dat ze de gateways over de hele wereld verkopen. Het apparaat is bedoeld voor lokale netwerken en niet voor gebruik op internet. Volgens informatie van de fabrikant staat er in de handleiding een instructie dat je absoluut een wachtwoord moet instellen. Op grond van onze melding kondigde het bedrijf aan om in een toekomstige versie van de software een waarschuwing in de interface in te bouwen zolang er geen wachtwoord ingesteld is.
De verantwoordelijkheid ligt in dat geval duidelijk bij de gebruiker en de fout is zeer eenvoudig te verhelpen: wil je de installatie op afstand beheren of niet voor ieder probleempje naar het MiddenOosten willen afreizen, dan kun je het beste een VPN-server instellen. Dat kan met een hardwarematige VPM-gateway net zo makkelijk als met een Raspberry Pi (voor industriële klanten is die er ook in een DIN-rail-uitvoering) met Wireguard. ISO-TSAP en de configuratie-interfaces van besturingen hebben niets op internet te zoeken. Zelfs wanneer je een beheerderswachtwoord hebt ingesteld, kun je er niet zeker van zijn dat de software voldoende beschermd is tegen gevaren van buiten zoals brute-force-aanvallen.
VERLEIDINGEN WEERSTAAN
De voorbeelden laten zien hoe hobbybeheerders en ook nalatige professionals het potentiële hackers makkelijk maken. In veel gevallen kunnen ze zich de moeite van exploits, toolboxes en achterdeurtjes besparen en gewoon door de voordeur naar binnen wandelen.
Ben je zelf voor een bedrijf of smarthome verantwoordelijk, laat je dan niet verleiden tot zogenaamd eenvoudige oplossingen. Apparatuur die bedoeld is voor privénetwerken hoort niet via port-forwarding op internet terecht te komen. Om onaangename verrassingen te voorkomen, kun je een paar uurtjes de tijd nemen en eens in de rol van de tegenpartij kruipen. Onderzoek je eigen netwerk van buitenaf en zoek naar openstaande poorten en niet-versleutelde services. Daarvoor kun je portscanners op de commandline gebruiken (zoals het klassieke nmap) of een online-scanner (zie de link op deze pagina). Voor iedere open poort moet je een gegronde reden hebben. Een VPN is altijd de beste keus. Als dat niet zinvol of niet te implementeren is, moet je altijd encryptie en authenticatie gebruiken.