Բուֆերի գերլցման պաշտպանություն

Բուֆերի գերլցման պաշտպանությունը (անգլերեն՝ Buffer overflow protection) հղվում է տարբեր մեթոդների վրա, որոնք ծրագրի իրականացման ժամանակ օգտագործվում են կատարվող ծրագրերի անվտանգությունը բարելավելու համար, անմիջապես հայտնաբերելով ստեկում փոփոխականներին հատկացված հիշողության բուֆերի գերլցումը։ Գոյություն ունեն բուֆերային հիշող սարքի գերլցման պաշտպանության մի քանի իրականացումներ։

Այս հոդվածը նվիրված է ստեկի գերլցմանը․ նման պաշտպանություն գոյություն ունի նաև heap-ի գերլցման դեպքում։

Աշխատանքի սկզբունքը խմբագրել

Բուֆերի գերլցման պաշտպանությունը փոփոխում է տվյալների կազմակերպումը ֆունկցիայի կանչի ստեկում, ներառելով “canary” արժեքը, որը ոչնչանալիս, ցույց է տալիս, որ հիշողության մեջ նրան նախորդող բուֆերը գերլցված է եղել։

Canaries խմբագրել

Canaries կամ canary բառերը հայտնի արժեքներ են, որոնք տեղադրվում են ստեկում բուֆերի և ղեկավարման տվյալների միջև բուֆերի գերլցումները վերահսկելու նպատակով։ Երբ բուֆերը գերլցվում է, canary-ն է առաջին վնասվող տվյալը և canary տվյալի ստուգման ձախողումը գերլցման ազդանշան է, որն այնուհետև կարելի է ֆիքսել, օրինակ, չեղյալ համարելով վնասված տվյալները։

Canary տերմինը կապված է ածխահանքերում դեղձանիկների օգտագործման պատմության հետ։ Լինելով ավելի զգայուն թունավոր գազերի նկատմամբ, քան հանքագործները, նրանք ապահովում են կենսաբանական զգուշացման համակարգ։

Օգտագործվում են երեք տեսակի canary-ներ՝ Terminator, Random և Random XOR։ StackGuard-ի ընթացիկ տարբերակները ապահովում են այս երեք տեսակները, մինչ ProPolice-ն ապահովում է միայն Terminator-ը և Random canary-ները։

Տես նաև խմբագրել