6.4.3 Stackning yaxlitligi
Dastlabki kodni bajarish hujumlari ko'pincha
kodni kiritish uchun stekga
asoslangan bufer to'lib ketishiga qaratilgan. Erta mudofaa aynan shu bufer
to'lib ketishiga qaratilgan. Xotira xavfsizligi bu muammoni yumshatgan
bo'lsa-da , yuqori unumdorlik tufayli to'liq xavfsizlik tekshiruvlarini qo'shish
mumkin emas . Buferning o'zboshimchalik bilan to'lib ketishini aniqlash
uchun har bir dereferentni tekshirish o'rniga biz ma'lum bir o'zgaruvchining
yaxlitligini tekshirishni qo'shishimiz mumkin. Ushbu yumshatishning
maqsadi dasturni saqlangan qaytarish yo'riqnomasi ko'rsatgichini yoki
saqlangan stek bazasi ko'rsatkichini o'zgartiradigan
stekga asoslangan
to'lib ketishdan himoya qilishdir. Xususiyat sifatida stekning yaxlitligi
qaytish yo'riqnomasi ko'rsatgichini ham, stek ko'rsatgichini ham noqonuniy
ravishda o'zgartirib bo'lmasligini ta'minlaydi.
ilovalar stekda past entropiyaga ega edi va asosiy bajariladigan (PIE
bo'lmagan bajariladigan fayllar) uchun x86 da entropiya yo'q edi. Linux
(Exec Shield orqali) stek uchun 19 bit entropiyadan (16 bayt
hizalangan) va 8 bit mmap entropiyasidan (4096 bayt/sahifaga
tekislangan) foydalanadi.
87
6 Mudofaa strategiyasi
Qaytish yo'riqnomasi ko'rsatkichlarining huquqiy o'zgarishlariga,
masalan, boshqaruv oqimini boshqa joyga yo'naltiruvchi trambolin
(qo'ng'iroq yo'riqnomasidan saqlangan qaytish yo'riqnomasi
ko'rsatgichining ustiga yozish) yoki qaytarish yo'riqnomasi
ko'rsatgichini umumiy maqsadda ochadigan ta'riflar kiradi.
registr
(keyingi ko'rsatma qo'ng'irog'i orqali ko'rsatma ko'rsatkichining joriy
qiymatini kiritish uchun kodga ruxsat berish; ko'rsatma ko'rsatgichiga
aniq kirishga ruxsat bermaydigan x86 kabi ISAlar uchun
generalPurposeRegister ketma-ketligini ochadi ). Stack pivoti stek ko'rsatkichini o'zgartiradi
Machine Translated by Google
Turli xil yumshatishlar stek yaxlitligining ba'zi shakllarini amalga oshiradi.
Yumshatish uchun qiziqarli muammolar qatorida
xavfsizlik kafolatlari
bilan bir qatorda C++ da istisnolarni qo‘llab-quvvatlash, C dasturlari
uchun setjmp/longjmp va bir xil stek ramkasini qayta ishlatish uchun
barg funksiyasiga qo‘ng‘iroqni o‘rnini bosuvchi qo‘ng‘iroqni optimallashtirish
kiradi . Bu xususiyatlar orqa tomonda g'ayritabiiy boshqaruv oqimini va
zanjirdagi bir nechta freymlarni o'tkazib yuborishi mumkin bo'lgan
stackning yuqori qismidagi freymlarni uzatish kodini beradi .
Bu yumshatish kanareykani muhim ma'lumotlar oldiga qo'yadi va (i)
funktsiya
kiritilganda kanareykani saqlash uchun asboblarni qo'shadi va (ii) funktsiya
qaytishidan oldin uning butunligini tekshiring . Kompilyator barcha buferlarni stek
ramkasining oxiriga, kanareykani esa birinchi buferdan oldin joylashtirishi mumkin.
Shunday qilib, bufer bo'lmagan barcha mahalliy o'zgaruvchilar ketma-ketlikdan
himoyalangan
Stek kanareykalari uchun asosiy tushuncha shundan iboratki,
qaytarish
yo'riqnomasi ko'rsatgichi yoki asosiy stek ko'rsatgichining ustiga yozish uchun
ushbu ko'rsatkichlarga boradigan yo'ldagi barcha boshqa ma'lumotlar ham ustiga yozilishi kerak.
va joriy stek ramkasini tajovuzkor nazorati ostidagi boshqa
joyga o'tkazadi, masalan, to'kilgan stek ko'rsatkichi qiymatini
qayta yozish orqali.
Do'stlaringiz bilan baham: