Nollaviittauksien hyödyntäminen Linux-ytimessä
Äskettäin ilmoitettiin, että Google Project Zero -tiimin tutkijat ovat kehittäneet menetelmän hyödyntää Linux-ytimen haavoittuvuuksia, jotka johtuvat NULL-osoittimen dereferoinnista.
Tähän asti NULL-osoittimen viittausten poistoon liittyvät ytimen ongelmat eivät ole saaneet asianmukaista huomiota , koska on pidetty epärealistisena muuttaa tällaisia ongelmia hyökkäyksiksi, jotka johtaisivat etuoikeuksien laajentamiseen tai oman koodin suorittamiseen (etuoikeudettomien prosessien yhdistäminen osoiteavaruuden alempaan alueeseen on kielletty).
Yleissääntönä tällaiset virheet johtavat ytimen tuottamiin oops-varoituksiin, minkä jälkeen ongelmalliset tehtävät suoritetaan ja tila palautetaan ilman järjestelmän pysäyttämistä.
Uusi hyökkäysmenetelmä perustuu "oops"-tilojen käsittelyyn , jotka voivat johtaa referenssilaskurin (recount) arvon kasvuun, mikä puolestaan voi aiheuttaa laskurin ylivuodon ja vapauttaa recount-laskurin muistia.
Tässä tapauksessa hyväksikäyttö rajoittuu use-after-free -hyökkäyksille tyypillisiin manipulaatioihin (syntyy tilanne, jossa kohteen viiteluku on nolla, muistia vapautuu, mutta itse asiassa on toimivia linkkejä, jotka osoittavat vapautuneeseen muistiin).
Tällä hetkellä, kun Linux-ydin laukaisee null-viittauksen poiston prosessikontekstista, se luo oops-virheen , joka eroaa kernel-paniikista. Paniikki tapahtuu, kun ydin päättää, ettei suorituksen jatkamiselle ole turvallista tapaa ja sen on siksi keskeytettävä kaikki suoritus. Ydin ei kuitenkaan pysäytä kaikkea suoritusta oops-virheen aikana; sen sijaan ydin yrittää toipua parhaansa mukaan ja jatkaa suoritusta.
NULL-osoittimen viittauksen poistamista käytetään tässä tapana luoda "oops"-tila hallitusti. Ongelmana on, että 232-bittisen uudelleenlaskennan ylivuoto saavuttaa noin 32 "oops"-tilakutsua.
Käytännössä hyökkäyksen suorittaminen ehdotetun hyökkäyksen avulla vie noin kahdeksan päivää jatkuvaa out-of-place (OOP) -tilojen generointia. Jos hyökkäys onnistuu, se mahdollistaa koodin suorittamisen kernel-tasolla.
Hyödynnyksessä käytetty NULL-osoittimen viittaus korjattiin lokakuussa, mutta koska vastaavat ongelmat eivät ole harvinaisia ja niitä käsiteltiin aiemmin bugeina, ei haavoittuvuuksina, kehittäjät lisäävät yleisen suojan Linux-ytimeen estääkseen hyökkäykset, jotka manipuloivat "oops" ."
Tehtävän tapauksessa se tarkoittaa olemassa olevan ydinpinon hylkäämistä ja siirtymistä suoraan make_task_deadiin, joka kutsuu do_exit-komentoa. Ydin lähettää myös dmesgiin "kaatumislokin" ja ytimen jäljityksen, joka näyttää, missä tilassa ydin oli virheen tapahtuessa. Tämä voi tuntua oudolta valinnalta, kun muisti on selvästi vioittunut; Tarkoituksena on kuitenkin tehdä ytimen virheistä helpompi havaita ja kirjautua sen filosofian mukaisesti, että käynnissä oleva järjestelmä on paljon helpompi viankorjaus kuin alhainen.
Erityisesti ydin 6.2 sisältää muutoksia, jotka rajoittavat "oopsien" enimmäismäärää . Kun raja on saavutettu, joka on oletusarvoisesti 10 000 oopsia (voit muuttaa tätä halutessasi oops_limit-parametrilla), ydin aloittaa siirtymisen "paniikkitilaan", jota seuraa uudelleenkäynnistys, joka ei salli recountin nollaamiseen tarvittavien iteraatioiden määrää.
On myös suunniteltu, että rajoitus siirretään aiemmin julkaistuihin, mutta edelleen tuettuihin ydinhaaroihin sekä suosittujen jakelujen ydinpaketteihin.
Lopuksi, jos olet kiinnostunut oppimaan lisää tästä , löydät yksityiskohdat seuraavasta linkistä.