6.4.8 Sandboxing va dasturiy ta'minotga asoslangan nosozliklarni izolyatsiya qilish
6.4.7 Kod ko'rsatkichining yaxlitligi
Turli kontekstlarda ishonchli va ishonchsiz kod bir xil manzil
maydonida ishlashi kerak. Ishonchsiz kod ishonchli kodning biron
bir kodi yoki maÿlumotlariga kira olmasligi uchun sinov muhitida
boÿlishi kerak , ishonchli kod esa odatda ishonchsiz kodning kodi
va maÿlumotlariga kira oladi. Ishonchsiz kod faqat o'zining
ma'lumotlar segmentini (va stekini) o'qishi/yozishi mumkin. Bunday
Code Pointer Integrity (CPI) [16] - bu ilovalarni boshqaruv oqimini
o'g'irlash hujumlaridan himoya qiluvchi himoya mexanizmi .
Xotira xavfsizligi va turdagi xavfsizlik barcha boshqaruv oqimini
o'g'irlash hujumlaridan himoya qilsa-da, bu past darajadagi tillar
ustiga qo'llanilganda taqiqlovchi yukga olib keladi . Kontseptual
tarzda, xotira xavfsizligi kod ko'rsatkichlarini murosaga qarshi himoya qiladi.
CPI ning asosiy g'oyasi xotira xavfsizligini sezgir ko'rsatkichlar bilan
cheklashdir. Nozik ko'rsatkichlar kod ko'rsatgichlari va to'g'ridan-to'g'ri yoki
bilvosita kod ko'rsatgichlariga ishora qiluvchi ko'rsatgichlardir. Ushbu
ko'rsatkichlar uchun yaxlitlikni (xotira xavfsizligini) ta'minlash dasturdagi
xatolik ushbu ko'rsatkichlarni o'zgartira olmasligini va shu bilan boshqaruv
oqimini o'g'irlay olmasligini kafolatlaydi. CPI sezgir ko'rsatkichlarni raqib
kirishidan himoyalangan xavfsiz (sandboxed) xotira maydoniga o'tkazadigan
kompilyator o'tish vositasi sifatida amalga oshiriladi . E'tibor bering, CPI
nozik ko'rsatkichlar uchun turdagi xavfsizlikni ta'minlamaydi.
Xotira xavfsizligi va turdagi xavfsizlik dasturdagi barcha ko'rsatkichlarning
yaxlitligini himoya qiladi . Afsuski, xotira xavfsizligi va turdagi xavfsizlik
taqiqlangan qo'shimcha xarajatlarga olib keladi.
6 Mudofaa strategiyasi
102
Machine Translated by Google
Agar SFI xotirani yozishdan oldin qo'shimcha tekshiruvlar qo'shish
orqali amalga oshirilgan deb faraz qilsak, SFI nazorat oqimini
tekshirishdan o'tib, lekin yozishdan oldin o'tkazish uchun bilvosita
sakrash yordamida chetlab o'tish mumkin. CISC arxitekturalarida
sakrash hatto boshqaruvni mo'ljallanmagan ko'rsatmani bajarish
uchun buyruqqa o'tkazishi mumkin (masalan, x86 da, mov
$0x80cd01b0, (%rax) mov $1, %al; int $0x80 ni o'z ichiga oladi ).
Shuning uchun barcha bilvosita sakrashlar amaldagi ko'rsatmalarning
boshlanishiga va tekshirishdan oldin yozish ko'rsatmalariga mos kelishi kerak.
6 Mudofaa strategiyasi
103
bo'limlarga bo'lish primitivi kuchli foydalanish holatlariga imkon
beradi, masalan, brauzerning maxfiy ma'lumotlariga kirishga ruxsat
bermasdan yoki brauzerning manzil maydonida ikkilik plaginni ishga
tushirish yoki nozik qiymatlarni qolgan katta kod bazasidan
himoyalangan yumshatish (potentsial tasdiqlangan kod bilan) unda
xatolar bo'lishi mumkin .
Dasturiy ta'minotga asoslangan nosozliklarni izolyatsiya qilish
ishonchli va ishonchsiz tomonlar o'rtasidagi manzil maydonini
bunday ajratishni amalga oshirish usulidir. Xotiraga kirishni cheklash
har bir xotiraga kirishni doimiy bilan maskalash orqali amalga
oshirilishi mumkin: va rax, 0x00ffffff; mov [rax], 0xc0fe0000.
Misoldagi niqob yozishni manzil maydonining past 24 bit/16 MB
bilan cheklaydi.
X86 segment registrlarining 32-bitli versiyasida manzil
bo'shliqlarini qattiq ajratishni ta'minlovchi segment registrlari
bilan ajratish imkonini berdi . Afsuski, x86_64 kengaytmasida
segment chegaralari endi qo'llanilmaydi.
Machine Translated by Google
Do'stlaringiz bilan baham: |