
io_uring er et Linux-kjernesystemanropsgrensesnitt for asynkrone I/O-operasjoner av lagringsenheter
Google avduket nylig gjennom et blogginnlegg som det har tok avgjørelsen om å deaktivere som standard på ChromeOS, Android og servere av produksjon, det asynkrone grensesnittet io_uring, dette på grunn av den beklagelige sikkerhetssituasjonen i io_uring.
Og det under analysen av resultatene fra "Vulnerability Bounty Program" av kCTF, som har vært på plass siden 2020, har det vist seg at 60 % av søknadene mottatt under programmet utnytter nye sårbarheter, og situasjonen endrer seg ikke over tid, noe som er ganske bekymringsfullt ettersom det har blitt et sårbart punkt.
Totalt ble det utbetalt rundt 1 million dollar i dusører. ved utnyttelser relatert til io_uring, mens det totale beløpet som ble betalt for sårbarheter i Linux-kjernen under eksistensen av initiativet var $1,8 millioner for 42 utnyttelser gitt for sårbarheter som ennå ikke er fikset (maksimal godtgjørelse – $133 tusen).
Siden Linux-kjernen er en nøkkelkomponent ikke bare for Google, men også for Internett, begynte vi å investere mye i dette området. Vi utvidet VRP-rekkevidden og maksimal belønning i 2021 (til $50 000), deretter igjen i februar 2022 (til $91 000), og til slutt i august 2022 (til $133 000). I 2022 oppsummerte vi også erfaringene våre så langt i kokeboken vår og introduserte våre eksperimentelle avbøtende tiltak for de vanligste gruveteknikkene.
Fjor, for å forbedre kjernesikkerheten av Linux brukt i referansemiljøet der utnyttelsen som krever prisen ble produsert, Google brukte ytterligere justeringer og oppdateringer for å blokkere typiske metoder for utnyttelse. For eksempel ble korrupsjonsbeskyttelse lagt til Freelist-strukturen, skriving utenfor grensene til plate ble forbudt, og blokkeringsangrep relatert til cachedeling ble implementert. Men disse endringene påvirket ikke muligheten til å utnytte sårbarheter i io_uring, noe som førte til at Google sluttet å støtte io_uring i produktene deres.
Mens io_uring gir ytelsesfordeler og reagerer raskt på sikkerhetsproblemer med omfattende sikkerhetsrettinger (som backporting 5.15 til 5.10-stabiltreet), er det en ganske ny del av kjernen. Som sådan fortsetter io_uring å være aktivt utviklet, men er fortsatt påvirket av alvorlige sårbarheter og gir også sterke utnyttelsesprimitiver. Av disse grunnene anser vi det for øyeblikket kun som trygt for pålitelige komponenter.
På ChromeOS er støtte for io_uring deaktivert når kjernen kompileres (CONIFG_IO_URING i kernelconfig). Android bruker midlertidig et seccomp-bpf-basert filter for å blokkere tilgang til io_uring og planlegger å bruke SELinux for å selektivt begrense tilgangen til io_uring til pålitelige systemkomponenter i en fremtidig utgivelse.
Som sådan tar Google ikke et svakt syn på io_uring grensesnitt, levert av Linux-kjernen siden versjon 5.1, siden den nevner at blant de positive punktene, skiller seg ut for sin støtte for I/O polling og muligheten til å jobbe med eller uten buffering, men som sådan er den fortsatt robust nok til å fortsette å ta risiko og fremfor alt fortsette å investere i å fikse feil og sårbarheter som stadig oppstår.
Med io_uring API prøvde kjerneutviklerne å adressere manglene til det gamle aio-grensesnittet.
Når det gjelder ytelse, io_uring er veldig nær SPDK og overgår libaio betydelig når polling er aktivert. For eksempel resulterte bruk av io_uring i libuv-biblioteket i en 8x ytelsesøkning, og inkludert io_uring-basert asynkron skrivebuffring i XFS-filsystemet førte til et 80x fall i latens og en 2,7 ganger økning i dataoverføringshastighet.
Det er verdt å nevne at Google i tillegg vurderer muligheten for å deaktivere io_uring som standard i GKE AutoPilot (Google Kubernetes Engine).
Til slutt, hvis du er interessert i å vite mer om det, kan du se detaljene I den følgende lenken.