ایمنی حافظه: تفاوت میان نسخه‌ها

محتوای حذف‌شده محتوای افزوده‌شده
بدون خلاصۀ ویرایش
جز ویرایش با ابرابزار
خط ۳:
{{پیشنهاد حذف۲|امنیت حافظه|}}<!-- الگوی پیشنهاد حذف را فقط مدیران می‌توانند بردارند لطفاً آن را برندارید -->
 
'''امنیت حافظه''' نگرانی در توسعه نرم افزار است که قصد دارد ازاشکالات نرم افزاری که باعث آسیب پذیری هایپذیری‌های امنیتی در برخورد با دسترسی به حافظه دسترسی تصادفی (RAM)است جلوگیری کند، مانند انوع buffer Overflow و اشاره گر آویزان. {{سرخط}}
زبان کامپیوتر مانند C و C + + است که پشتیبانی از اشاره گر دلخواه حساب، ریخته گری، معمولا حافظه امن است. چندین روش مختلف برای پیدا کردن خطاهای موجود در زبان هاییزبان‌هایی وجود دارد، نگاه کنید به بخش تشخیص زیر. {{سرخط}}
زبان سیکلون با استفاده از یک روش ترکیبی، از جمله «اشاره گر چربی" (اشاره گر که حمل ابرداده خود را به طور مستقیم دارد) و مناطق را به برنامه نویسان برخی از کنترل سطح پایین در حالی که هنوز به اطمینان از ایمنی از حافظه است. {{سرخط}}
بالا ترین سطح زبان های برنامه نویسی اجتناب از مشکل را با رد کردن حساب
 
زبان سیکلون با استفاده از یک روش ترکیبی، از جمله «اشاره گر چربی" (اشاره گر که حمل ابرداده خود را به طور مستقیم دارد) و مناطق را به برنامه نویسان برخی از کنترل سطح پایین در حالی که هنوز به اطمینان از ایمنی از حافظه استحافظه‌است. {{سرخط}}
اشاره گر و ریخته گری به طور کامل، و با اجرای ردیابی زباله به عنوان مجموعه ای در این طرح تنها مدیریت حافظه است. {{سرخط}}
بالا ترین سطح زبان هایزبان‌های برنامه نویسی اجتناب از مشکل را با رد کردن حساب
 
اشاره گر و ریخته گری به طور کامل، و با اجرای ردیابی زباله به عنوان مجموعه ایمجموعه‌ای در این طرح تنها مدیریت حافظه استحافظه‌است. {{سرخط}}
یک زبان می تواند حساب، ریخته گری اشاره گر را بدون به خطر انداختن امنیت حافظه با استفاده از اثبات قضیه خودکار
 
به عنوان یک شکل از تجزیه و تحلیل کد ایستا پشتیبانی می کند. ESC / جاوا و نشان دادن دو راه است که برنامه نویسان می توانند از ویژگیهای خود را در راه اعلام است که می تواند توسط prover قضیه درک شود. {{سرخط}}
یک زبان می تواندمی‌تواند حساب، ریخته گری اشاره گر را بدون به خطر انداختن امنیت حافظه با استفاده از اثبات قضیه خودکار
به عنوان یک شکل از تجزیه و تحلیل کد ایستا پشتیبانی می کندمی‌کند. ESC / جاوا و نشان دادن دو راه است که برنامه نویسان می توانندمی‌توانند از ویژگیهای خود را در راه اعلام است که می تواندمی‌تواند توسط prover قضیه درک شود. {{سرخط}}
 
'''انواع خطاهای حافظه'''{{سرخط}}
 
انواع مختلفی از خطاهای حافظه می تواندمی‌تواند رخ دهد، بسته به نوع زبان برنامه نویسی استفاده می شودمی‌شود: {{سرخط}}
سرریز بافر - در خارج از محدود میمی‌نویسد، نویسد، می تواندمی‌تواند محتوای اشیاء مجاور، یا داده هایداده‌های داخلی مانند اطلاعات حسابداری برای پشته و یا آدرس بازگشت را فاسد کند. {{سرخط}}{{•}} خطاهای حافظه - مدیریت حافظه و اشاره گرها نادرست: {{سرخط}}
درجه معلق اشاره گر - اشاره گر ذخیره آدرس یک شی است که حذف شده استشده‌است. {{سرخط}}
• خطاهای حافظه - مدیریت حافظه و اشاره گرها نادرست: {{سرخط}}
درجه دو آزاد - تماس هایتماس‌های مکرر برای آزاد جسم در حال حاضر آزاد شده است میشده‌است تواندمی‌تواند باعث freelist مبتنی بر allocators به شکست است. {{سرخط}}
درجه معلق اشاره گر - اشاره گر ذخیره آدرس یک شی است که حذف شده است. {{سرخط}}
ميدرجه نامعتبر - پس از گذشت یک آدرس نامعتبر به رایگان می‌توانید توده را فاسدکنید. و یا گاهی اوقات منجر به رفتار تعریف نشده‌است. {{سرخط}} تواندمی‌تواند دسترسی به اشاره گر نول درجه یک استثنا یا خاتمه برنامه در بسیاری از محیطها را ایجاد کند، اما همچنينهمچنین می تواندمی‌تواند باعث فساد در مغز سیستم عامل و یا سیستم بدون حفاظت از حافظه، و یا زمانی که استفاده از اشاره گر تهی شامل افست هایافست‌های بزرگ و یا منفی است. {{سرخط}}{{•}} - متغیر‌های مقدار دهی نکردن یک متغیر است که تعیین یک مقدار استفاده شده‌است. ممکن است ناخواسته و یا در بعضی زبان‌ها، ارزش‌های فاسد داشته باشد. {{سرخط}}
درجه دو آزاد - تماس های مکرر برای آزاد جسم در حال حاضر آزاد شده است می تواند باعث freelist مبتنی بر allocators به شکست است. {{سرخط}}
 
درجه نامعتبر - پس از گذشت یک آدرس نامعتبر به رایگان می توانید توده را فاسدكنيد. و یا گاهی اوقات منجر به رفتار تعریف نشده است. {{سرخط}}
اشاره گر وحشی درجه بوجود می آیندمی‌آیند که یک اشاره گر قبل از مقدار دهی اولیه به برخی از دولت شناخته شده استفاده می شودمی‌شود. آنها نشان می دهدمی‌دهد رفتار غیر قابل پیشبینی به عنوان اشاره گر آویزان، هر چند آنها هستند، کمتر احتمال دارد برای ماندن غیر قابل تشخیص است. {{سرخط}}{{•}} خارج از خطاهای حافظه: {{سرخط}}
مي تواند دسترسی به اشاره گر نول درجه یک استثنا یا خاتمه برنامه در بسیاری از محیطها را ایجاد کند، اما همچنين می تواند باعث فساد در مغز سیستم عامل و یا سیستم بدون حفاظت از حافظه، و یا زمانی که استفاده از اشاره گر تهی شامل افست های بزرگ و یا منفی است. {{سرخط}}
• - متغیر های مقدار دهی نکردن یک متغیر است که تعیین یک مقدار استفاده شده است. ممکن است ناخواسته و یا در بعضی زبان ها، ارزش های فاسد داشته باشد. {{سرخط}}
 
درجه سرریز پشته - هنگامی رخ می دهدمی‌دهد که یک برنامه خارج از فضای پشته اجرا می شود ،می‌شود، به طور معمول به دلیل از بازگشت بیش از حد عمیق است. {{سرخط}}
اشاره گر وحشی درجه بوجود می آیند که یک اشاره گر قبل از مقدار دهی اولیه به برخی از دولت شناخته شده استفاده می شود. آنها نشان می دهد رفتار غیر قابل پیشبینی به عنوان اشاره گر آویزان، هر چند آنها هستند، کمتر احتمال دارد برای ماندن غیر قابل تشخیص است. {{سرخط}}
شکست تخصیص - این برنامه تلاش می کندمی‌کند تااز حافظه بیش از مقدار موجوداستفاده شود. در برخی از زبانها، این وضعیت را باید بعد از هر تخصیص دستی بررسی شود. {{سرخط}}
• خارج از خطاهای حافظه: {{سرخط}}
درجه سرریز پشته - هنگامی رخ می دهد که یک برنامه خارج از فضای پشته اجرا می شود ، به طور معمول به دلیل از بازگشت بیش از حد عمیق است. {{سرخط}}
شکست تخصیص - این برنامه تلاش می کند تااز حافظه بیش از مقدار موجوداستفاده شود. در برخی از زبانها، این وضعیت را باید بعد از هر تخصیص دستی بررسی شود. {{سرخط}}
 
'''اشاره گر معلق'''{{سرخط}}
یک اشاره گر است که اشاره به حافظه شده است شده‌است.
یک اشاره گر آویزان است. در زبان مدیریت حافظه کتابچه راهنمای کاربر، اشاره گر آویزان می تواندمی‌تواند بوجود بیاید. {{سرخط}}
<syntaxhighlight lang="c">
int *a = new int;
سطر ۴۱ ⟵ ۳۷:
*a = 4; /* Memory error: we may be overwriting another pointer's data */
</syntaxhighlight>{{سرخط}}
وجود ساده از اشاره گرها ی آویزان، خطای حافظه تلقی نمی شودنمی‌شود. با این حال، خواندن از یا نوشتن به یک اشاره گر آویزان اشتباه است، به عنوان حافظه اشاره شده ممکن است در رونویسی و یا جابجا. {{سرخط}}
'''سر ریز بافر'''{{سرخط}}
بافر ناحیه ذخیره سازی موقت داده استداده‌است. سرریز بافر معمول ترین راه برای حمله در خارج از سیستم برای به دست آوردن دسترسی غیر مجاز به سیستم هدف میمی‌باشد. باشد.سرریز بافر وقتی رخ می دهدمی‌دهد که یک برنامه سعی میمی‌کند کند داده هایداده‌های بیشتری را در یک بافر از آن برای نگهداری در نظر گرفته شده بود ذخیره کند. از آنجا که بافر حاوی مقدار محدودی از داده ها،داده‌ها، اطلاعات بیشتری می تواندمی‌تواند سرریز به بافر مجاور شود، فساد یا جای نوشتن داده هایداده‌های معتبر که در them.It برگزار شد اجازه می دهدمی‌دهد تا حمله به کد روند موجود تداخل اتفاق بیافتد. مهاجم با استفاده از بافر سرریز پشته انجام میدهد،می‌دهد،{{سرخط}}
سرریز زمینه ورودی، فضای خط فرمان و یا بافر ورودی. {{سرخط}}
بازنویسی آدرس بازگشت در پشته با آدرس از کد حمله استحمله‌است. {{سرخط}}
نوشتن یک کد ساده که مهاجم برای اجرا میخواهدمی‌خواهد. {{سرخط}}
<syntaxhighlight lang="c">
# include <stdio.h>
# define ARRAY_SIZE 128
int main(int argc, char *argv[])
{
سطر ۵۹ ⟵ ۵۵:
strcpy(arr, argv[1]);
return 0;
}
}
</syntaxhighlight>{{سرخط}}
تا زمانی به اندازه این آرایه استآرایه‌است که کمتر از برنامه ARRAY_SIZE به درستی کار میکندمی‌کند.
اگر اندازه آرگومان خط فرمان بزرگتر از ARRAY_SIZE شد سپس آن به درستی کار نمیکندنمی‌کند.
تابع کار خواهد کرد تا زمانی که برخورد کند با NULL نابودگر (\ 0۰) یا تا زمانیکه مواجه شود با NULL نابودگر (\ 0۰) یا تا زمانی که برنامه قفل شود.
این برنامه دچار مشکل سرریز بافر می باشدمی‌باشد. {{سرخط}}
راه حل برای این مشکل، از ویژگی هایویژگی‌های است که اجرای برنامه از کد را در بخش پشته از حافظه اجازه نمی دهدنمی‌دهد. {{سرخط}}
برخی از زبان هایزبان‌های برنامه نویسی سیستم نسبت به سرریز بافر ایمن هستند .
 
 
پرل به صورت خودکار تغییر و تنظیم اندازه آرایه هاآرایه‌ها را انجام میدهد،می‌دهد، و Ada95 تشخیص و جلوگیری از سرریز بافر را. {{سرخط}}
 
=== منابع ==
* http://people.cs.umass.edu/~emery/pubs/fp014-berger.pdf
 
[[ru:Безопасность доступа к памяти]]