skip to Main Content

IoT-laitteiden turvallinen etäpäivittäminen laitteiden toimintakykyä vaarantamatta

Toimivalla etäpäivitysjärjestelmällä voidaan päivittää ja hallinnoida päätelaitteita joustavasti, skaalautuvasti sekä tietoturvallisesti. Mitä kaikkea IoT-laitteiden päivittämisessä kannattaa ottaa huomioon?

Perinteisessä IoT-järjestelmässä valtaosa toiminnallisuudesta voi olla keskitettynä esimerkiksi pilvestä löytyvään palveluun, jolloin päivitysten asentaminen voi olla hyvin yksinkertaista. IoT-järjestelmien monimutkaistuessa ja päätelaitteiden lukumäärän kasvaessa päivitysten hallinta ja toteuttaminen on kuitenkin monimutkaisempaa.

Edge computing -tyyppisessä järjestelmässä laskentaa ja muuta toiminnallisuutta on siirretty enenevissä määrin IoT-päätelaitteen vastuulle. Tällainen käyttötapaus voi olla esimerkiksi järjestelmä, jossa hyödynnetään koneoppimista suoraan päätelaitteella. Tällainen järjestelmä on monimutkaisempi ja hajautetumpi kuin keskitetyn palvelun ympärille rakennettu vastaava järjestelmä.

Mitä jos päivitys epäonnistuu?

Suurimpia haasteita etäpäivitettävässä IoT-järjestelmässä ovat päivityksen asentamisen epäonnistumisesta aiheutuvat häiriöt. Asentamisen epäonnistuminen voi johtua esimerkiksi laitteen virran katkeamisesta kesken päivityksen. Onnistuneesti asennettu päivityskään ei takaa sitä, että päivityksen mukana toimitettu ohjelmisto toimisi virheettömästi. Pahimmassa tapauksessa päivityksen myötä laite voi päätyä tilaan, josta se ei enää omatoimisesti palaudu toimintakuntoiseksi.

Muita etäpäivittämisen haasteita ovat muun muassa pääsyn rajoittaminen päivitysten sisältöön. Edge computing -tyyppisissä järjestelmissä tällainen sisältö voisi olla päätelaitteella hyödynnettävä koneoppimismalli, jota ei haluta jakaa julkisesti. Päivitettävän laitteen on voitava varmistua siitä, että vastaanotettava päivitys on luotetulta taholta, ja päivitysjärjestelmän tulee toimia yhdessä mahdollisen levyn salauksen kanssa.

Päivitettävän järjestelmän toteutustapa riippuu siitä, kuinka kattavasti päätelaitteella ajettavaa ohjelmistoa tarvitsee muokata. Yksittäisen ohjelmiston turvallinen päivittäminen on yksinkertaisempaa toteuttaa kuin kokonaisen käyttöjärjestelmän päivitys. Jos päivitystyökalu ei muokkaa laitteen käyttöjärjestelmää tai päivityksiä noutavaa ohjelmaa, ei epäonnistunut päivitys vaaranna niiden toimintaa. Tässä tapauksessa epäonnistuneen päivityksen jälkeen voidaan päivitys noutaa joko uudestaan tai odottaa uutta korjauksia sisältävää päivitystä.

Kokonaisen käyttöjärjestelmän päivittäminen voi vaarantaa koko laitteen toimintakyvyn. Esimerkiksi Linux-ytimen tai päivitysten asentamiseen käytettävän asiakasohjelman epäonnistunut päivittäminen voi saattaa laitteen tilaan, josta se ei kykene itsenäisesti palautumaan.

Käyttöjärjestelmäpäivitysten turvallinen toteuttaminen

Yleisin ratkaisu turvalliseen IoT-laitteen käyttöjärjestelmäpäivitysten toteuttamiseen on ylläpitää laitteella kahta rinnakkaista käyttöjärjestelmäasennusta eri osioilla. Käynnistyslataaja pitää kirjaa aktiivisesta asennuksesta ja käynnistää käyttöjärjestelmän sen sisältävältä tallennusosiolta. Kun käyttöjärjestelmä päivitetään, asennetaan uusi järjestelmä sille osiolle, joka ei ole nykyisellään käytössä.

Esimerkki kahden rinnakkaisen käyttöjärjestelmäasennuksen vaatimasta levyn partitioinnista.
Esimerkki kahden rinnakkaisen käyttöjärjestelmäasennuksen vaatimasta levyn partitioinnista. Käynnistyslataaja tietää kumpi käyttöjärjestelmä on aktiivinen, ja päivitykset asennetaan inaktiiviselle partitiolle. Tällaista levynjakoa käyttää esimerkiksi Mender.

Laitteen käynnistyessä uudelleen käynnistyslataaja pyrkii lataamaan käyttöjärjestelmän päivitykset sisältävältä osiolta. Päivityksiä edeltävä käyttöjärjestelmäasennus säilyy toimintakykyisenä, ja siihen voidaan palata, jos käy ilmi, että päivitetty järjestelmä ei ole toimintakuntoinen.

Yllä kuvatun ratkaisun toteuttamiseen on saatavilla jonkin verran valmiita työkaluja, esimerkiksi Mender, BalenaOS ja SWUpdate. Suurin osa käytetyistä työkaluista integroidaan Yocto Projektilla luotuun räätälöityyn Linux-jakeluun. Yocton avulla voidaan rakentaa minimalistinen Linux -pohjainen käyttöjärjestelmä, johon sisällytetään modulaarisesti tarvittavat riippuvuudet ja hyötyohjelmat.

Tuotantokäyttöön soveltuva IoT-päivitystyökalu

Käyttöjärjestelmäpäivityksiä tukeva IoT-laitteen prototyyppi ei sellaisenaan sovellu tuotantoympäristöön. Suurin vaje liittyy laitteen turvallisuuteen. Yleisimmät kahden käyttöjärjestelmäasennuksen toteutukseen käytettävät työkalut eivät tue sellaisenaan esimerkiksi levynsalauksen käyttöä. Osa työkaluista on myös huomattavan riippuvaisia palveluntarjoajasta esimerkiksi käyttöjärjestelmäpäivitysten saatavuuden osalta.

Toteutuksen työmäärään nähden tuotantokäyttöön soveltuva IoT-päivitystyökalu on todennäköisesti tässä tekstissä esitettyjen ääripäiden välimaastossa. Esimerkiksi Dockeria hyödyntäviä työkaluja, kuten AWS Greengrass, käyttämällä voidaan toteuttaa järjestelmä, jossa päivitykset voivat konttien avulla muokata järjestelmää laajasti. Laitteen käyttöjärjestelmä ja päivitykset asentava ohjelma voidaan kuitenkin jättää rauhaan. Myös turvaominaisuuksien, kuten levyn salauksen, lisääminen järjestelmään on yksinkertaisempaa, jos salauksen hallinnointi ei ole päivitykset asentavan ohjelman vastuulla.


Milan Mäkipää
Ohjelmistosuunnittelija

Työskentelen ohjelmistosuunnittelijana teollisuuden asiakasprojekteissa. Aloitin työt Atostekilla 2019 opintojen ohessa. Alalla kiinnostaa tällä hetkellä erityisesti IoT-järjestelmien ja mobiilipuolen ohjelmistokehitys.