Mayhem - sudo болон OpenSSH нэвтрэлт танилтыг тойрч гарах санах ойн битийн авлигын халдлага

Worcester Polytechnic Institute (АНУ)-ын судлаачид Rowhammer динамик санамсаргүй хандалтын санах ойн бит гажуудлын техникийг ашиглан нэвтрэлт танилт, аюулгүй байдлын шалгалт байгаа эсэхийг шийдэхийн тулд программд туг болгон ашигладаг стек хувьсагчийн утгыг өөрчлөх шинэ төрлийн Mayhem халдлагыг нэвтрүүлэв. өнгөрчээ. Довтолгооны практик жишээг SUDO, OpenSSH болон MySQL-ийн нэвтрэлт танилтыг тойрч гарах, мөн OpenSSL номын сан дахь аюулгүй байдалтай холбоотой шалгалтын үр дүнг өөрчлөхийг харуулсан.

Уг халдлагыг тэгээс ялгаатай утгуудыг харьцуулах шалгалт ашигладаг програмуудад хэрэглэж болно. Эмзэг кодын жишээ: int auth = 0; ... // баталгаажуулалт амжилттай хийгдсэн тохиолдолд баталгаажуулах кодыг өөрчилдөг, хэрэв(auth != 0) AUTH_SUCCESS буцаавал; өөрөөр буцаана AUTH_FAILURE;

Энэ жишээн дээр амжилттай халдлага хийхийн тулд стек дээрх 32 битийн auth хувьсагчтай холбоотой санах ойн дурын битийг гэмтээхэд хангалттай. Хэрэв хувьсагчийн аль нэг бит эвдэрсэн бол утга нь тэг байхаа больж, нөхцөлт оператор баталгаажуулалтыг амжилттай гүйцэтгэсэн эсэхийг тодорхойлно. Ийм баталгаажуулалтын загварууд нь програмуудад нэлээд түгээмэл байдаг бөгөөд жишээлбэл, SUDO, OpenSSH, MySQL болон OpenSSL дээр байдаг.

Mayhem - sudo болон OpenSSH нэвтрэлт танилтыг тойрч гарах санах ойн битийн халдлага

Довтолгоог мөн “if(auth == 1)” хэлбэрийн харьцуулалтад хэрэглэж болно, гэхдээ энэ тохиолдолд 32-ын аль ч бит биш, харин сүүлчийн битийг гажуудуулах шаардлагатай тул хэрэгжилт нь илүү төвөгтэй болно. Контекст шилжүүлэгч, функцын дуудлага эсвэл дохионы зохицуулагч асах үед регистрүүдийн агуулгыг түр зуур стек рүү оруулах боломжтой тул энэ аргыг процессорын регистр дэх хувьсагчийн утгуудад нөлөөлөхөд ашиглаж болно. Регистрийн утгууд санах ойд байх хугацаанд энэ санах ойд гажуудал үүсч, өөрчлөгдсөн утга нь бүртгэлд сэргээгдэх болно.

Mayhem - sudo болон OpenSSH нэвтрэлт танилтыг тойрч гарах санах ойн битийн халдлага

Битүүдийг гажуудуулахын тулд RowHammer ангийн халдлагын нэг өөрчлөлтийг ашигладаг. DRAM санах ой нь тус бүр нь конденсатор ба транзистороос бүрдэх хоёр хэмжээст эсийн массив тул ижил санах ойн бүсийг тасралтгүй унших нь хөрш зэргэлдээх эсүүдэд бага хэмжээний цэнэгийн алдагдал үүсгэдэг хүчдэлийн хэлбэлзэл, гажиг үүсгэдэг. Хэрэв унших эрч хүч өндөр байвал хөрш зэргэлдээх эс хангалттай их хэмжээний цэнэг алдаж магадгүй бөгөөд дараагийн нөхөн сэргээх мөчлөг нь анхны төлөвөө сэргээх цаг хугацаа байхгүй бөгөөд энэ нь нүдэнд хадгалагдсан өгөгдлийн үнэ цэнийг өөрчлөхөд хүргэдэг. . RowHammer-аас хамгаалахын тулд чип үйлдвэрлэгчид TRR (Target Row Refresh) механизмыг нэмсэн бөгөөд энэ нь онцгой тохиолдолд эсийн эвдрэлийг блоклодог боловч бүх боломжит халдлагын өөрчлөлтөөс хамгаалдаггүй.

Mayhem халдлагаас хамгаалахын тулд харьцуулалт хийхдээ тэгээс ялгаатай эсвэл нэгтэй давхцаж буй үнэлгээг бус харин тэгээс өөр октет бүхий санамсаргүй үрийн утгыг ашиглан тохирох шалгалтыг ашиглахыг зөвлөж байна. Энэ тохиолдолд хувьсагчийн хүссэн утгыг тохируулахын тулд нэг битийн гажуудлаас ялгаатай нь бодитой бус олон тооны битийг үнэн зөв гажуудуулах шаардлагатай. Халдлагад өртөх боломжгүй кодын жишээ: int auth = 0xbe406d1a; ... // баталгаажуулалт амжилттай болсон тохиолдолд баталгаажуулалтын кодыг 0x23ab8701 болгож баталгаажуулах код if(auth == 0x23ab8701) AUTH_SUCCESS-ийг буцаана; өөрөөр буцаана AUTH_FAILURE;

Заасан хамгаалалтын аргыг sudo хөгжүүлэгчид аль хэдийн ашигласан бөгөөд CVE-1.9.15-2023 эмзэг байдлын засвар болгон 42465 хувилбарт оруулсан болно. Тэд гол эмзэг төслүүдэд засвар хийгдсэний дараа халдлага үйлдэх кодын эх загварыг нийтлэхээр төлөвлөж байна.

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

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