Linux kernel module recognition using static binary analysis
Kuuva, Oula (2018-03-02)
Kuuva, Oula
O. Kuuva
02.03.2018
© 2018 Oula Kuuva. Tämä Kohde on tekijänoikeuden ja/tai lähioikeuksien suojaama. Voit käyttää Kohdetta käyttöösi sovellettavan tekijänoikeutta ja lähioikeuksia koskevan lainsäädännön sallimilla tavoilla. Muunlaista käyttöä varten tarvitset oikeudenhaltijoiden luvan.
Julkaisun pysyvä osoite on
https://urn.fi/URN:NBN:fi:oulu-201803081334
https://urn.fi/URN:NBN:fi:oulu-201803081334
Tiivistelmä
Software composition analysis (SCA) is a type of program analysis that aims to provide a software bill of materials (BOM) — a comprehensive list of components that are the building blocks of the analyzed program. This list of components can be used to detect license violations and vulnerabilities in the analyzed program. An SCA tool is only as good as the BOM it produces, with false positives requiring unnecessary manual audition work and false negatives possibly leaving the code vulnerable.
Linux is the most widespread operating system (OS) in the world, ranging from the tiniest embedded devices to the largest super computers and being the core of the mobile OS, Android. Being so popular, it has also gone through rigorous testing, having over 3000 known security vulnerabilities reported against it. The Linux kernel follows a modular design, with the ability of expanding the capabilities of the kernel by loading extensions called Linux kernel modules (LKM) on demand. The modularity of the Linux kernel is emphasized by the fact that most of the code in the Linux kernel source tree belongs to kernel modules instead of the kernel core itself.
This led to the hypothesis that a significant number of vulnerabilities reported against the Linux kernel are actually affecting some LKM instead. To test this theory, an extension for detecting LKMs from binary code was developed for Protecode SC, a commercial SCA tool using Static Binary Analysis (SBA). This extension was tested by scanning Linux based firmware images with a known kernel configuration compiled for different processor architectures.
The results were promising. Even though the unique properties of LKM file format and the sheer number of individual LKMs made the teaching process harder than initially thought, the developed extension is certainly accurate enough to detect about 60% of LKMs in every test case. The research showed that there indeed is a notable number of vulnerabilities in LKMs. However, the quality of the vulnerability data regarding Linux kernel vulnerabilities in National Vulnerability Database (NVD) is not sufficient for automatically mapping vulnerabilities to individual LKMs. Further studies are required for other vulnerability sources and automatic data improvements for NVD. Ohjelmistokoostumusanalyysi on ohjelmistoanalyysin muoto, jonka tavoitteena on tuottaa kattava lista analysoidussa ohjelmistossa käytetyistä kolmannen osapuolen kirjastoista. Tätä listaa voidaan hyödyntää tunnistamaan lisenssiehtojen rikkomuksia ja analysoidun ohjelmiston sisältämiä tunnettuja haavoittuvuuksia. Ohjelmistokoostumusanalyysityökalun laadun määrittelee sen tuottaman listan tarkkuus — väärät positiiviset aiheuttavat ylimääräisiä manuaalisia tarkastuksia ja väärät negatiiviset voivat jättää koodiin aukkoja.
Linux on maailman laajimmille levinnyt käyttöjärjestelmä, jota käytetään kaikkein pienimmistä sulautetuista järjestelmistä aina tehokkaimpiin supertietokoneisiin. Se on myös mobiilikäyttöjärjestelmä Androidin ydin. Suuren suosionsa vuoksi sitä on myös testattu perusteellisesti ja sille on raportoitu yli 3000 tunnettua haavoittuvuutta. Linux- järjestelmäydin noudattaa modulaarista suunnittelua, joka mahdollistaa ytimen ominaisuuksien laajentamisen lataamalla järjestelmäydinlaajennoksia tarvittaessa. Järjestelmäytimen modulaarisuutta alleviivaa se, että suurin osa koodista Linuxin lähdekoodivarastossa kuuluu järjestelmäydinlaajennoksille itse ytimen sijaan.
Tämä johti hypoteesiin siitä, että huomattava osuus Linux-järjestelmäytimelle raportoiduista haavoittuvuuksista koskisivat itse asiassa järjestelmäydinlaajennoksia. Tämän testaamiseksi kehitettiin laajennos Protecode SC:hen, kaupalliseen ohjelmistokoostumusanalyysityökaluun, joka hyödyntää staattista binäärianalyysiä. Tätä laajennosta testattiin skannaamalla eri prosessoriarkkitehtuureille käännettyjä Linux-pohjaisia laiteohjelmistoja, joiden järjestelmäydinasetukset tunnettiin.
Tulokset olivat lupaavia. Vaikka järjestelmäydinlaajennosten omaleimaiset ominaisuudet ja yksittäisten laajennosten suuri määrä tekivätkin niiden opettamisesta odotettua vaikeampaa, kehitetty järjestelmä on silti tarpeeksi tarkka havaitsemaan noin 60 % laajennoksista jokaisessa testissä.
Tutkimus osoitti, että järjestelmäydinlaajennoksia koskevia haavoittuvuuksia on huomattava määrä. Linux-järjestelmäydintä koskevien haavoittuvuustietojen laatu Yhdysvaltain kansallisessa haavoittuvuustietokannassa on kuitenkin riittämätön, jotta niitä voitaisiin automaattisesti yhdistää yksittäisiin järjestelmäydinlaajennoksiin. Muiden haavoittuvuustietokantojen käyttöä ja kansallisen haavoittuvuustietokannan tietojen automaattista parantamista on syytä tutkia lisää.
Linux is the most widespread operating system (OS) in the world, ranging from the tiniest embedded devices to the largest super computers and being the core of the mobile OS, Android. Being so popular, it has also gone through rigorous testing, having over 3000 known security vulnerabilities reported against it. The Linux kernel follows a modular design, with the ability of expanding the capabilities of the kernel by loading extensions called Linux kernel modules (LKM) on demand. The modularity of the Linux kernel is emphasized by the fact that most of the code in the Linux kernel source tree belongs to kernel modules instead of the kernel core itself.
This led to the hypothesis that a significant number of vulnerabilities reported against the Linux kernel are actually affecting some LKM instead. To test this theory, an extension for detecting LKMs from binary code was developed for Protecode SC, a commercial SCA tool using Static Binary Analysis (SBA). This extension was tested by scanning Linux based firmware images with a known kernel configuration compiled for different processor architectures.
The results were promising. Even though the unique properties of LKM file format and the sheer number of individual LKMs made the teaching process harder than initially thought, the developed extension is certainly accurate enough to detect about 60% of LKMs in every test case. The research showed that there indeed is a notable number of vulnerabilities in LKMs. However, the quality of the vulnerability data regarding Linux kernel vulnerabilities in National Vulnerability Database (NVD) is not sufficient for automatically mapping vulnerabilities to individual LKMs. Further studies are required for other vulnerability sources and automatic data improvements for NVD.
Linux on maailman laajimmille levinnyt käyttöjärjestelmä, jota käytetään kaikkein pienimmistä sulautetuista järjestelmistä aina tehokkaimpiin supertietokoneisiin. Se on myös mobiilikäyttöjärjestelmä Androidin ydin. Suuren suosionsa vuoksi sitä on myös testattu perusteellisesti ja sille on raportoitu yli 3000 tunnettua haavoittuvuutta. Linux- järjestelmäydin noudattaa modulaarista suunnittelua, joka mahdollistaa ytimen ominaisuuksien laajentamisen lataamalla järjestelmäydinlaajennoksia tarvittaessa. Järjestelmäytimen modulaarisuutta alleviivaa se, että suurin osa koodista Linuxin lähdekoodivarastossa kuuluu järjestelmäydinlaajennoksille itse ytimen sijaan.
Tämä johti hypoteesiin siitä, että huomattava osuus Linux-järjestelmäytimelle raportoiduista haavoittuvuuksista koskisivat itse asiassa järjestelmäydinlaajennoksia. Tämän testaamiseksi kehitettiin laajennos Protecode SC:hen, kaupalliseen ohjelmistokoostumusanalyysityökaluun, joka hyödyntää staattista binäärianalyysiä. Tätä laajennosta testattiin skannaamalla eri prosessoriarkkitehtuureille käännettyjä Linux-pohjaisia laiteohjelmistoja, joiden järjestelmäydinasetukset tunnettiin.
Tulokset olivat lupaavia. Vaikka järjestelmäydinlaajennosten omaleimaiset ominaisuudet ja yksittäisten laajennosten suuri määrä tekivätkin niiden opettamisesta odotettua vaikeampaa, kehitetty järjestelmä on silti tarpeeksi tarkka havaitsemaan noin 60 % laajennoksista jokaisessa testissä.
Tutkimus osoitti, että järjestelmäydinlaajennoksia koskevia haavoittuvuuksia on huomattava määrä. Linux-järjestelmäydintä koskevien haavoittuvuustietojen laatu Yhdysvaltain kansallisessa haavoittuvuustietokannassa on kuitenkin riittämätön, jotta niitä voitaisiin automaattisesti yhdistää yksittäisiin järjestelmäydinlaajennoksiin. Muiden haavoittuvuustietokantojen käyttöä ja kansallisen haavoittuvuustietokannan tietojen automaattista parantamista on syytä tutkia lisää.
Kokoelmat
- Avoin saatavuus [34516]