Liitännäisten haavoittuvuuksien hallinta ohjelmistokehitysprojekteissa
Tätilä, Hannu (2022)
Tätilä, Hannu
2022
All rights reserved. This publication is copyrighted. You may download, display and print it for Your own personal use. Commercial use is prohibited.
Julkaisun pysyvä osoite on
https://urn.fi/URN:NBN:fi:amk-2022113025194
https://urn.fi/URN:NBN:fi:amk-2022113025194
Tiivistelmä
Nykyaikaisissa ohjelmistoprojekteissa käytetään paljon muiden kehittämiä liitännäisiä. Näiden liitännäisten mukana ohjelmistoprojektiin on mahdollista tulla haavoittuvuuksia. Tutkimusongelmana oli, miten liitännäisiin liittyvistä haavoittuvuuksista voidaan tulla tietoisiksi ja miten ne voidaan liitännäisiä päivittämällä projektista eliminoida. Työn tavoitteena oli luoda toimeksiantajalle suositus prosessista, jolla liitännäisten haavoittuvuuksia hallitaan.
Työssä perehdyttiin olemassa olevaan tietoon ja selvitettiin keskeisten käsitteiden merkitys. Tällaisia olivat liitännäinen, haavoittuvuus, haavoittuvuustietokannat sekä versiohallinta. Suurin osa työssä läpikäydystä teoriasta on yleistä useisiin teknologioihin pätevää teoriaa, mutta teknologiaspesifisiä teorioita tai työkaluja käsitellessä rajattiin työ Angular-projekteihin.
Teorian lisäksi työssä perehdyttiin keskeisimpiin ohjelmistotyökaluihin, jotka liittyvät liitännäisten haavoittuvuuksien havaitsemiseen ja liitännäisten päivittämiseen. Osa työkaluista oli tyypillisesti ohjelmistoprojekteissa muutenkin käytössä olevia työkaluja, kuten esimerkiksi paketinhallintajärjestelmän komentoja. Selvitetyt automatisoidut ratkaisut puolestaan hyödynsivät suoraan koodivarastossa toimivia työkaluja.
Suositellun prosessin koostaminen aloitettiin arvioimalla, miten mikäkin työkalu toimisi prosessin eri vaiheissa. Prosessi ajateltiin viisivaiheisena: tietoisuus haavoittuvuudesta, korjauksen arviointi, päivittäminen, testaus ja versiohallinnointi. Jokaisen työkalun tarjoamat mahdollisuudet käytiin läpi jokaisen prosessin vaiheen osalta.
Lopuksi muodostettiin suositus prosessista. Suositellussa prosessissa käytetään automaattisia haavoittuvuushälytyksiä ja yhdistämispyyntöjä (pull request) GitHubin Dependabot-työkalua käyttäen. Tästä eteenpäin prosessia jatketaan manuaalisesti. Kehittäjä arvioi haavoittuvuuden ja korjaavan päivityksen. Jos kehittäjä katsoo, että toimivuus tulee varmistaa ennen päivityksen hyväksyntää, voidaan se tehdä manuaalista prosessia jatkaen. Manuaalisissa työvaiheissa käytetään paketinhallintajärjestelmien omia komentoja. Päivitys voidaan viedä projektin versiohallintaan manuaalisesti normaalin versiohallinnointiprosessin mukaisesti tai siinä voidaan käyttää Dependabotin automaattisesti avaamaa yhdistämispyyntöä ja liittää muutos sitä kautta.
Työssä perehdyttiin olemassa olevaan tietoon ja selvitettiin keskeisten käsitteiden merkitys. Tällaisia olivat liitännäinen, haavoittuvuus, haavoittuvuustietokannat sekä versiohallinta. Suurin osa työssä läpikäydystä teoriasta on yleistä useisiin teknologioihin pätevää teoriaa, mutta teknologiaspesifisiä teorioita tai työkaluja käsitellessä rajattiin työ Angular-projekteihin.
Teorian lisäksi työssä perehdyttiin keskeisimpiin ohjelmistotyökaluihin, jotka liittyvät liitännäisten haavoittuvuuksien havaitsemiseen ja liitännäisten päivittämiseen. Osa työkaluista oli tyypillisesti ohjelmistoprojekteissa muutenkin käytössä olevia työkaluja, kuten esimerkiksi paketinhallintajärjestelmän komentoja. Selvitetyt automatisoidut ratkaisut puolestaan hyödynsivät suoraan koodivarastossa toimivia työkaluja.
Suositellun prosessin koostaminen aloitettiin arvioimalla, miten mikäkin työkalu toimisi prosessin eri vaiheissa. Prosessi ajateltiin viisivaiheisena: tietoisuus haavoittuvuudesta, korjauksen arviointi, päivittäminen, testaus ja versiohallinnointi. Jokaisen työkalun tarjoamat mahdollisuudet käytiin läpi jokaisen prosessin vaiheen osalta.
Lopuksi muodostettiin suositus prosessista. Suositellussa prosessissa käytetään automaattisia haavoittuvuushälytyksiä ja yhdistämispyyntöjä (pull request) GitHubin Dependabot-työkalua käyttäen. Tästä eteenpäin prosessia jatketaan manuaalisesti. Kehittäjä arvioi haavoittuvuuden ja korjaavan päivityksen. Jos kehittäjä katsoo, että toimivuus tulee varmistaa ennen päivityksen hyväksyntää, voidaan se tehdä manuaalista prosessia jatkaen. Manuaalisissa työvaiheissa käytetään paketinhallintajärjestelmien omia komentoja. Päivitys voidaan viedä projektin versiohallintaan manuaalisesti normaalin versiohallinnointiprosessin mukaisesti tai siinä voidaan käyttää Dependabotin automaattisesti avaamaa yhdistämispyyntöä ja liittää muutos sitä kautta.