LLVM kūrėjai siūlo saugų buferio tvarkymą C++

LLVM logotipas

LLVM yra sistema, skirta kurti kompiliatorius, taip pat padėti kurti naujas programavimo kalbas ir tobulinti esamas kalbas.

Los LLVM projekto kūrėjai pasiūlė keletą pakeitimų, skirtų saugumui stiprinti projektų C + + svarbi užduotis ir suteikti priemones, skirtas pašalinti klaidas, kurias sukelia buferio viršijimas.

Iš esmės jų paskelbtame pasiūlyme daugiausia dėmesio skiriama darbui dviejose srityse: sukurti kūrimo modelį, leidžiantį saugiai dirbti su buferiais ir sustiprinti standartinės libc++ funkcijų bibliotekos saugumą.

Paminėta, kad siūlomas saugaus programavimo modelis C++ «yra naudoti standartinės bibliotekos teikiamas klases dirbant su buferiais, o ne manipuliuoti neapdorotomis rodyklėmis». Pavyzdžiui, siūloma naudoti std::masyvas, std::vector ir std::span klases, kurios bus pridėtos su vykdymo laiko patikra, ar nėra paskirtos atminties.

Mūsų tikslas – pagerinti svarbiausių C++ kodų bazių saugumą. Šiuo tikslu planuojame įgyvendinti dvi idėjas.

Sustiprinta C++ standartinė biblioteka
C++ saugaus buferio programavimo modelis ir priėmimo įrankiai
Sustiprintas libc++ skirtas C++ standartines bibliotekos sąsajas apskritai padaryti saugesnėmis.

C++ saugaus buferio programavimo modelis kartu su sugriežtintu libc++ užtikrina neribotos atminties prieigos mažinimą vykdymo metu. Priėmimo įrankiai automatizuos kodo perkėlimą į šį naują programavimo modelį.

Be to, jame taip pat minima kovoti su „pavojinga“ programavimo praktika skamba, jei siūlo išleisti kompiliatoriaus įspėjimus dėl visų rodyklės aritmetinių veiksmų, panašus į perspėjimus dėl skambėjimo, kai naudojama vėliavėlė „cppcoreguidelines-pro-bounds-pointer-aritmetic“, kurios palaikymas bus rodomas LLVM 16. Norint įjungti tokius įspėjimus, prie clang bus pridėta atskira vėliavėlė, pagal numatytuosius nustatymus neaktyvi .

Planuojama įdiegti pasirenkamą apsaugos režimą libc++, kuri, kai įjungta, aptiks kai kurias situacijas, dėl kurių vykdymo metu elgsis neapibrėžtas. Pavyzdžiui, pamokose std::span ir std::vektorius, bus stebima neribota prieiga, tokiu atveju programa nepavyks.

Šie papildomi vykdymo laiko patikrinimai bus sugrupuoti į kelias kategorijas, kurias galima valdyti atskirai. Siekiama, kad pardavėjas, siunčiantis libc++ savo platformoje, galėtų nuspręsti, kuriuos patikrinimus įjungti siuntimo bibliotekoje (jei yra), atsižvelgdamas į pageidaujamą saugos lygį.

Kūrėjai mano, kad pridėjus tokius pakeitimus libc++ bus suderinamas su C++ standartais, nes pasirinkti, kaip elgtis su neapibrėžto elgesio atvejais, priklauso bibliotekos kūrėjams, kurie, be kita ko, gali neapibrėžtą elgesį traktuoti kaip užraktą, reikalaujantį, kad programa išeiti.

The vykdymo laiko patikras libc++ planuojama suskirstyti į kategorijas kuriuos galima įtraukti atskirai. Kai kurios siūlomos patikros, dėl kurių neatlieka sudėtingesnių operacijų ar ABI pakeitimų, jau įdiegtos saugiuoju libc++ režimu (saugiuoju režimu).

Pakartojama, kad galutinis tikslas yra, kad išsiųsta biblioteka įgalintų šiuos patikrinimus gamyboje; tai nėra „tik derinimo“ funkcija, nors galiausiai ji pakeis ilgai neveikiantį „derinimo režimą“.

Be to, planuojama parengti kodo taisymo priemonių rinkinį kuri leis kintamuosius pakeisti neapdorotomis rodyklėmis konteineriuose ir pritaikyti alternatyvias tvarkykles tais atvejais, kai konteineris negali tiesiogiai pakeisti žymeklio (pvz., „if(masyvo_pointer)“ konstrukciją galima konvertuoti į „if(span.data ( )»).Nustatymai gali būti taikomi ne tik vietiniams kintamiesiems, bet ir įvedant parametrus rodyklėmis.

Taip pat minima, kad svarsto galimybę naudoti „statinio analizatoriaus žvangėjimą“ maršrutas jautrus, kuris įspėja, jei std::span yra pagamintas iš konteinerio, kuris yra mažesnis nei nurodytas tarpatramio konstruktoriuje. Minėtas tikrintuvas yra savarankiškas ir naudingas pats, jei viskas gerai, jis bus įjungtas pagal nutylėjimą visiems vartotojams

Pagaliau jei norite sužinoti daugiau apie tai, išsamią informaciją galite patikrinti sekanti nuoroda.


Palikite komentarą

Jūsų elektroninio pašto adresas nebus skelbiamas. Privalomi laukai yra pažymėti *

*

*

  1. Už duomenis atsakingas: AB Internet Networks 2008 SL
  2. Duomenų paskirtis: kontroliuoti šlamštą, komentarų valdymą.
  3. Įteisinimas: jūsų sutikimas
  4. Duomenų perdavimas: Duomenys nebus perduoti trečiosioms šalims, išskyrus teisinius įsipareigojimus.
  5. Duomenų saugojimas: „Occentus Networks“ (ES) talpinama duomenų bazė
  6. Teisės: bet kuriuo metu galite apriboti, atkurti ir ištrinti savo informaciją.