Udviklerne af projektet Chromium 912 farlige og kritiske sårbarheder, der er blevet identificeret i stabile versioner af Chrome siden 2015, og man er kommet frem til, at 70% af dem blev forårsaget af usikker håndtering af hukommelse (fejl i arbejdet med pointere i C/C++-koden). Halvdelen af disse problemer (36,1%) stammer fra adgang til buffere efter frigivelse af den tilknyttede hukommelse (use-after-free).
Ved designning af Chromium blev der fra starten , at der ikke kan udelukkes fejl i koden, hvorfor der blev lagt stor vægt på at anvende sandbox-isolering for at begrænse konsekvenserne af sårbarheder. I dag er mulighederne for anvendelse af denne teknologi nået grænsen for, hvad der er fornuftigt, og yderligere opdeling i processer er ikke hensigtsmæssigt med hensyn til ressourceforbrug.
For at opretholde sikkerheden i kodebasen anvender Google også "" hvorefter enhver tilføjet kode skal falde ind under højst to betingelser ud af tre: arbejde med upålidelige inddata, brug af usikre programmeringssprog (C/C++) og udførelse med forhøjede privilegier. Af denne regel følger det, at kode til håndtering af ekstern data enten skal være nedskaleret til minimale privilegier (isoleret) eller skrevet på et sikkert programmeringssprog.
For yderligere at forbedre sikkerheden i kodebasen er der startet et projekt for at forhindre opståen af hukommelsesfejl i kodebasen. Der er tre hovedtilgange: oprettelse af C++-biblioteker med funktioner for sikker hukommelseshåndtering og udvidelse af anvendelsesområdet for affaldsopsamleren, anvendelse af hardwarebeskyttelsesmekanismer (Memory Tagging Extension) og skrivning af komponenter i sprog, der sikrer sikker hukommelseshåndtering (Java, Kotlin, JavaScript, Rust, Swift).
Det forventes, at arbejdet vil fokusere på to retninger:
- En væsentlig ændring af udviklingsprocessen i C++, som ikke udelukker negative konsekvenser for ydeevnen (yderligere grænsekontroller og affaldsindsamling). I stedet for rå-pointern anbefales det at bruge typen , som reducerer udnyttede fejl af klassen use-after-free til ikke-sikkerhedstruende systemnedbrud, uden mærkbar negativ indvirkning på ydeevnen, hukommelsesforbruget og stabiliteten.
- Anvendelse af sprog, der er designet til at udføre sikkerhedstjek af hukommelse under kompileringen (vil eliminere den negative indvirkning på ydeevnen, der er typisk for sådanne kontroller under kørsel af koden, men vil medføre ekstra omkostninger til organisering af interaktionen mellem koden på det nye sprog og koden på C++).
Brugen af biblioteker for sikker hukommelsesstyring er den enkleste, men også mindre effektive metode. At omskrive koden til Rust anses for den mest effektive, men også en meget dyr vej.
Kilde: opennet.ru
