Fuzz-testing for å avdekke svakheter i medisinsk IoT

Medisinsk IoT (også kjent som bærbar helseteknologi eller «wearables«) er med på å revolusjonere helsesektoren ved å muliggjøre økt effektivitet og bedre behandling. Samtidig medfører denne teknologien økt angrepsflate og cybersikkerhetsrisiko, ettersom hver enhet har sin egen skreddersydde fastvare (firmware) som kan inneholde ukjente sårbarheter.

De medisinske IoT-enhetene (f.eks. hydreringssensorer for måling av væskebalanse) bruker små, energigjerrige mikrokontrollere med begrenset regnekraft til å sørge for at alle komponentene samhandler på riktig måte. Rådata skal innhentes fra sensorer, deretter skal de tolkes og analyseres, og til slutt skal informasjon kanskje videresendes til f.eks. en smarttelefon. Enkelte enheter kan også ha innebygde knapper og/eller display som mikrokontrolleren må håndtere. For å få til alt dette med begrenset regnekraft og minimal energibruk, er medisinsk IoT avhengig av skreddersydd fastvare som er tilpasset hver enkelt enhet/modell. Det er spesielt viktig at fastvaren er pålitelig og sikker, ettersom feil og sårbarheter kan true både pasientsikkerhet (f.eks ved feilaktig prosessering av data) og personvern (f.eks informasjon på avveie).

Hvordan kvalitetssikre fastvare?

Det finnes diverse metoder for å verifisere riktig funksjonalitet og avdekke feil og sårbarheter, med sine respektive fordeler og ulemper som gjør at de bør kombineres på en fornuftig måte. I dette innlegget fokuserer vi på fuzz-testing, en tilnærming hvor fastvaren utsettes for store mengder tilfeldige og ugyldige data. Målet med fuzz-testing er kort fortalt å fremprovosere krasj eller andre avvik for å avdekke sårbarheter. Metoden er godt egnet for automatisering og repetisjon, og det finnes gode eksempler på at «fuzzing» har avdekket sårbarheter både i mikrokontrollere og andre systemer.

Fuzz-testing er vanskelig

Selv om fuzz-testing har stort potensiale innen medisinsk IoT, er det også en rekke utfordringer som gjør at det ikke er mer utbredt. Fuzzing er en kompleks affære, særlig når man skal teste mikrokontrollere som er programmert for et veldig spesifikt formål. I vårt arbeid har vi tatt utgangspunkt i Fuzzware, som gjennom innledende undersøkelser ble utpekt som det best egnede open-source-verktøyet for våre behov. Fuzzware har alle de viktigste funksjonene for fuzzing av mikrokontrollere, inkludert emuleringsverktøy som gjør at fuzzing kan skje både virtuelt og raskere enn i sanntid.

Utfordringen med Fuzzware (og andre åpent tilgjengelige verktøy) er at brukervennligheten er begrenset, slik at man trenger spesifikk ekspertise for å ta det i bruk. I tillegg har det kun støtte for et utvalg av mikrokontrollere. Disse utfordringene gjør at fuzz-testing er en metodikk som er «lite tilgjengelig» for leverandører av medisinsk IoT, særlig for små og mellomstore bedrifter med begrensede muligheter for rekruttering og bygging av spisskompetanse.

Aurora-fuzzware til unnsetning!

I prosjektet NEMECYS har vi forsøkt å bryte ned noen av barrierene som gjør fuzzing vanskelig, ved å utvikle tilleggsfunksjonalitet og veiledende dokumentasjon som gjør det lettere for «ikke-eksperter» å ta i bruk Fuzzware. Vi har blant annet lagd et konfigurasjonsskript med menyvalg, som gjør det lettere å konfigurere og kjøre fuzzing-sesjoner. Vi har også utviklet enkelte funksjoner for å forbedre effektiviteten av fuzzinga, blant annet støtte for å «hoppe over» utvalgte kodeblokker (f.eks. delay-funksjoner). Vårt hovedmål har vært å legge til rette for fuzzing av mikrokontrollerfamilien nRF52 fra Nordic Semiconductor, og vi har valgt å gi navnet Aurora-fuzzware til vår Fuzzware-variant.

Det er fortsatt mye rom for forbedring av Aurora-fuzzware, verktøyet er i dag på et «proof-of-concept»-stadium. Vi opplever likevel å ha gjort Fuzzware vesentlig mer tilgjengelig for en betydelig brukergruppe, og håper vårt bidrag kan føre til økt bruk, økt engasjement og mer målrettet videreutvikling. En funksjonalitet som er særlig ønsket blant våre samarbeidspartnere er bedre simulering av periferikomponenter, fordi det vil gjøre fuzzing-oppsettet mer realistisk (fra et fastvareperspektiv) og dermed mer nyttig.

Aurora-fuzzware er tilgjengelig her:

https://gitlab.sintef.no/nemecys-public/aurora-fuzzware

NEMECYS-prosjektet er delfinansiert av EU, av UK Research and Innovation (UKRI) og av det sveitsiske statssekretariatet for utdanning, forskning og innovasjon (SERI).

Illustrasjon ved Chris F via Pexels