Բուֆերի գերլցման պաշտպանություն
Այս հոդվածն աղբյուրների կարիք ունի։ Դուք կարող եք բարելավել հոդվածը՝ գտնելով բերված տեղեկությունների հաստատումը վստահելի աղբյուրներում և ավելացնելով դրանց հղումները հոդվածին։ Անհիմն հղումները ենթակա են հեռացման։ |
Բուֆերի գերլցման պաշտպանությունը (անգլերեն՝ Buffer overflow protection) հղվում է տարբեր մեթոդների վրա, որոնք ծրագրի իրականացման ժամանակ օգտագործվում են կատարվող ծրագրերի անվտանգությունը բարելավելու համար, անմիջապես հայտնաբերելով ստեկում փոփոխականներին հատկացված հիշողության բուֆերի գերլցումը։ Գոյություն ունեն բուֆերային հիշող սարքի գերլցման պաշտպանության մի քանի իրականացումներ։
Այս հոդվածը նվիրված է ստեկի գերլցմանը․ նման պաշտպանություն գոյություն ունի նաև heap-ի գերլցման դեպքում։
Աշխատանքի սկզբունքը
Բուֆերի գերլցման պաշտպանությունը փոփոխում է տվյալների կազմակերպումը ֆունկցիայի կանչի ստեկում, ներառելով “canary” արժեքը, որը ոչնչանալիս, ցույց է տալիս, որ հիշողության մեջ նրան նախորդող բուֆերը գերլցված է եղել։
Canaries
Canaries կամ canary բառերը հայտնի արժեքներ են, որոնք տեղադրվում են ստեկում բուֆերի և ղեկավարման տվյալների միջև բուֆերի գերլցումները վերահսկելու նպատակով։ Երբ բուֆերը գերլցվում է, canary-ն է առաջին վնասվող տվյալը և canary տվյալի ստուգման ձախողումը գերլցման ազդանշան է, որն այնուհետև կարելի է ֆիքսել, օրինակ, չեղյալ համարելով վնասված տվյալները։
Canary տերմինը կապված է ածխահանքերում դեղձանիկների օգտագործման պատմության հետ։ Լինելով ավելի զգայուն թունավոր գազերի նկատմամբ, քան հանքագործները, նրանք ապահովում են կենսաբանական զգուշացման համակարգ։
Օգտագործվում են երեք տեսակի canary-ներ՝ Terminator, Random և Random XOR։ StackGuard-ի ընթացիկ տարբերակները ապահովում են այս երեք տեսակները, մինչ ProPolice-ն ապահովում է միայն Terminator-ը և Random canary-ները։
Տես նաև
- PaX