Pwojè LLVM a devlope tanpon an sekirite nan C++

Devlopè pwojè LLVM yo te pwopoze yon kantite chanjman ki vize ranfòse sekirite pwojè C++ ki enpòtan pou misyon yo epi bay yon mwayen pou elimine erè ki te koze pa depase tanpon yo. Travay la konsantre sou de domèn: bay yon modèl devlopman ki pèmèt travay san danje ak tanpon, epi travay pou ranfòse bibliyotèk estanda libc++ fonksyon yo.

Modèl pwogramasyon an sekirite yo pwopoze pou C++ enplike nan sèvi ak klas bibliyotèk estanda yo bay lè w ap travay ak tanpon olye pou yo manipile endikasyon yo. Pou egzanp, li pwopoze pou itilize klas std::array, std::vector ak std::span, ki pral ajoute yon chèk tan pou egzekite pou memwa ki depase.

Pou konbat pratik pwogramasyon danjere nan clang, yo pwopoze pou montre avètisman konpilatè pou tout operasyon aritmetik pointeur, menm jan ak pwodiksyon avètisman linter clang-tidy lè w ap itilize drapo "cppcoreguidelines-pro-bounds-pointer-arithmetic", sipò pou ki pral parèt nan lage LLVM 16 la. Pou pèmèt avètisman sa yo, yo pral ajoute yon drapo separe nan clang, pa aktif pa default.

Li planifye pou aplike yon mòd pwoteksyon amelyore opsyonèl nan libc++, ki, lè li aktive, pral trape kèk sitiyasyon nan ègzekutabl ki mennen nan konpòtman endefini. Pa egzanp, nan klas std::span ak std::vector, yo pral kontwole yon aksè memwa andeyò limit, epi si yo detekte, pwogram nan ap fè aksidan. Devlopè yo kwè ke ajoute chanjman sa yo pral kenbe libc++ an konfòmite ak estanda C++ yo, depi chwa pou yo jere ka konpòtman endefini se ak devlopè bibliyotèk yo, ki ka, pami lòt bagay, trete konpòtman endefini kòm yon echèk, ki egzije pwogram pou fini.

Chèk egzekite nan libc++ yo planifye pou divize an kategori ki ka aktive endividyèlman. Gen kèk nan chèk yo pwopoze yo, ki pa mennen nan konpleksite nan operasyon oswa chanjman nan ABI a, yo deja aplike nan mòd nan libc++ san danje.

Anplis de sa, li planifye pou prepare zouti pou mete ajou kòd la, ki pèmèt ou ranplase varyab ak endikasyon ki vid ak resipyan epi sèvi ak moun kap okipe altènatif nan sitiyasyon kote veso a pa ka ranplase dirèkteman konsèy la (pa egzanp, konstriksyon "if(array_pointer)" ka dwe konvèti nan "if(span.data) ()"). Ajisteman yo ka aplike pa sèlman nan varyab lokal yo, men tou nan paramèt nan kalite konsèy.

Sous: opennet.ru

Achte hosting serye pou sit ki gen pwoteksyon DDoS, sèvè VPS VDS 🔥 Achte yon hébergement sit entènèt serye ak pwoteksyon DDoS, sèvè VPS VDS | ProHoster