Spectre 4 халдлагын хамгаалалтыг тойрч гарах боломжийг олгодог eBPF-ийн эмзэг байдал

Линуксийн цөмд eBPF дэд системийг Specter v4 халдлагаас хамгаалах (SSB, Speculative Store Bypass) ашиглах боломжийг олгодог хоёр эмзэг байдлыг илрүүлсэн. Давуу эрхгүй BPF програмыг ашигласнаар халдагчид тодорхой үйлдлүүдийг таамаглах нөхцлийг бүрдүүлж, цөмийн санах ойн дурын хэсгүүдийн агуулгыг тодорхойлж чадна. Цөм дэх eBPF дэд системийг дэмжигчид практикт халдлага хийх чадварыг харуулсан прототипийн ашиглалтад хандах эрхтэй болсон. Асуудлыг засварууд (1, 2) хэлбэрээр зассан бөгөөд энэ нь дараагийн Линуксийн цөмийн шинэчлэлд багтах болно. Түгээлтийн иж бүрдэлүүдийн шинэчлэл хараахан хийгээгүй байна (Debian, RHEL, SUSE, Arch, Fedora, Ubuntu).

Spectre 4 халдлагын арга нь шууд бус хаяглалт ашиглан ээлжлэн бичих, унших үйлдлүүдийг боловсруулах үед үйлдлүүдийн таамаглалын гүйцэтгэлийн үр дүнг устгасны дараа процессорын кэшэд хадгалагдсан өгөгдлийг сэргээхэд суурилдаг. Унших үйлдэл нь бичих үйлдлийг дагах үед (жишээ нь, mov [rbx + rcx], 0x0; mov rax, [rdx + rsi]) ижил төстэй үйлдлүүд хийгдэж байгаа тул унших хаягийн офсет аль хэдийн мэдэгдэж байж болно (унших үйлдлүүд нь илүү олон удаа хийгдэх ба уншихыг кэшээс гүйцэтгэх боломжтой) ба процессор нь бичихийн шууд бус офсетийг тооцоолохыг хүлээлгүйгээр бичихийн өмнө унших үйлдлийг таамаглаж чадна.

Хэрэв офсетийг тооцоолсны дараа бичих, унших санах ойн хэсгүүдийн огтлолцол илэрсэн бол процессор нь аль хэдийн олж авсан уншсан үр дүнг зүгээр л хаяж, энэ үйлдлийг давтах болно. Энэ функц нь дэлгүүрийн ажиллагаа дуусаагүй байхад зарим хаяг дээрх хуучин утгыг унших зааварт хандах боломжийг олгодог. Амжилтгүй хийсэн таамаглалыг устгасны дараа түүний гүйцэтгэлийн ул мөр кэшэд үлддэг бөгөөд үүний дараа кэшийн агуулгыг тодорхойлох аргуудын аль нэгийг кэштэй болон кэшгүй өгөгдөлд хандах хугацааны өөрчлөлтийн дүн шинжилгээнд үндэслэн сэргээхэд ашиглаж болно.

Эхний эмзэг байдал (CVE-2021-35477) нь BPF програмын баталгаажуулалтын механизмын алдаанаас үүдэлтэй. Spectre 4 халдлагаас хамгаалахын тулд шалгагч нь өмнөх үйлдлийн ул мөрийг арилгахын тулд хоосон утгыг хадгалдаг санах ойд асуудал үүсгэж болзошгүй хадгалалтын дараа нэмэлт зааварчилгааг нэмж өгдөг. Null бичих үйлдэл нь зөвхөн BPF стек фреймийн заагчаас хамаардаг тул маш хурдан бөгөөд таамаглалын гүйцэтгэлийг хаадаг байх төлөвтэй байсан. Гэвч үнэн хэрэгтээ дэлгүүрийн урьдчилсан үйл ажиллагаа эхлэхээс өмнө таамаглалаар гүйцэтгэх зааварчилгааг гүйцэтгэх нөхцөлийг бүрдүүлэх боломжтой болсон.

Хоёрдахь эмзэг байдал (CVE-2021-3455) нь BPF баталгаажуулагч нь санах ой хадгалах аюултай үйлдлүүдийг тодорхойлохдоо BPF стекийн эхлээгүй хэсгүүдийг харгалздаггүй, эхний бичих үйлдэл нь хамгаалагдаагүйтэй холбоотой юм. Энэ функц нь дэлгүүрийн зааварчилгааг гүйцэтгэхийн өмнө санах ойн эхлээгүй хэсгээс хамаарсан таамаглал бүхий унших үйлдлийг гүйцэтгэх боломжийг бий болгодог. BPF стекийн шинэ санах ойг хуваарилагдсан санах ойн агуулгыг шалгахгүйгээр хуваарилдаг бөгөөд BPF програмыг ажиллуулахаас өмнө санах ойн бүсийн агуулгыг удирдах арга байдаг бөгөөд дараа нь BPF стект хуваарилагдах болно.

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

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