Тууралттай засварын үр дүнд Линуксийн цөм дэх Spectre-ийн эмзэг байдлыг бүрэн засаагүй байна

Grsecurity төслийн хөгжүүлэгчид хуваалцсан Хөрвүүлэгчийн сэрэмжлүүлгийг хайхрамжгүй арилгах нь кодын эмзэг байдалд хэрхэн хүргэж болохыг харуулсан сэрэмжлүүлэг үлгэр. XNUMX-р сарын сүүлээр Линуксийн цөмийн хувьд ptrace системийн дуудлагаар дамжуулан Spectre-ийн эмзэг байдлыг ашиглах шинэ векторыг засахыг санал болгов.

Нөхөөсийг турших явцад хөгжүүлэгчид бүтээхдээ хөрвүүлэгч нь код, тодорхойлолтыг холих тухай анхааруулга харуулдаг болохыг анзаарсан (бүтэц нь одоо байгаа хувьсагчдад утга оноож кодын дараа тодорхойлогдсон):

int индекс = n;
хэрэв (n < HBP_NUM) { индекс = массив_индекс_носпек(индекс, HBP_NUM); struct perf_event *bp = thread->ptrace_bps[индекс];

Линус зөвшөөрөв залруулга мастер салбар руугаа, ангижрах Хувьсагчийн тодорхойлолтыг if блокт боож, анхааруулга:

if (n < HBP_NUM) { int index = array_index_nospec(n, HBP_NUM); struct perf_event *bp = thread->ptrace_bps[индекс];

Долдугаар сард уг засварыг 4.4, 4.9, 4.14, 4.19, 5.2 тогтвортой цөмийн салбарууд руу шилжүүлсэн. Ачаа хамгаалагчид ч гэсэн анхааруулгатай тулгарсан бөгөөд Линусын мастер салбарт аль хэдийн зассан эсэхийг шалгахын оронд өөрсдөө засвар хийсэн. Асуудал нь тэд нэг их бодолгүйгээр зүгээр л шилжсэн бүтцийн тодорхойлолтыг дээшлүүлснээр эмзэг байдлаас шууд хамгаалах array_index_nospec руу залгахыг бүтцийн тодорхойлолтод ашиглахаа больсон бөгөөд "индекс" хувьсагчийн оронд "n" хувьсагчийг үргэлж ашигласан болно:

int индекс = n;
if (n < HBP_NUM ){ struct perf_event *bp = thread->ptrace_bps[индекс];
индекс = массив_индекс_носпек(индекс, HBP_NUM);

Эх сурвалж: opennet.ru

сэтгэгдэл нэмэх