سرریز بافر: تفاوت میان نسخهها
جز ربات: حذف میانویکی موجود در ویکیداده: ۱۹ میانویکی |
|||
خط ۸۰: | خط ۸۰: | ||
این مهم است توجه داشته باشید که NOP-سورتمه لزوما شامل دستورالعمل دستگاه تنها سنتی بدون عملیات، دستور العملها که ماشین حالت به یک نقطه که در آن شل کد اجرا نمیشوند ومی تواند از سخت افزار مورد استفاده قرار میگیرد. |
این مهم است توجه داشته باشید که NOP-سورتمه لزوما شامل دستورالعمل دستگاه تنها سنتی بدون عملیات، دستور العملها که ماشین حالت به یک نقطه که در آن شل کد اجرا نمیشوند ومی تواند از سخت افزار مورد استفاده قرار میگیرد. |
||
در نتیجه آن سورتمه روش معمول برای بهره برداری نویسندگان بدون عملیات با دستورالعمل که هیچ اثر واقعی در مورد اعدام شل کد نوشتن تبدیل شدهاست.{{سخ}} |
در نتیجه آن سورتمه روش معمول برای بهره برداری نویسندگان بدون عملیات با دستورالعمل که هیچ اثر واقعی در مورد اعدام شل کد نوشتن تبدیل شدهاست.{{سخ}} |
||
[[رده:حافظه رایانه]] |
|||
[[رده:عملکرد امنیتی رایانه]] |
|||
[[رده:اشکالهای برنامهنویسی]] |
نسخهٔ ۱۲ آوریل ۲۰۱۳، ساعت ۱۷:۳۷
این مقاله نیازمند ویکیسازی است. لطفاً با توجه به راهنمای ویرایش و شیوهنامه، محتوای آن را بهبود بخشید. |
این مقاله به هیچ منبع و مرجعی استناد نمیکند. |
در امنیت کامپیوتر و برنامه نویسی، سرریز بافر، و یا تاخت و تاز کردن بافر، یک استثنا است که در آن برنامه، هنگامی که در حال نوشتن دادهها به بافر است، از مرز بافر تخطی میکند و باعث رونویسی حافظه مجاور میشود. این یک مورد خاص از نقض ایمنی حافظهاست.
سرریزهای بافر توسط ورودی طراحی شدهاند که برای اجرای کد، و یا راه عمل برنامه را تغییر میدهند، باعث شدهاست. این امر ممکن است در رفتار نامنظم، از جمله خطاهای دسترسی به حافظه، نتایج نادرست، تصادف، یا نقض امنیت سیستم منجر شود. بنابراین، آنها اساس بسیاری از آسیب پذیریهای نرم افزار است و میتواند مخرب مورد سوء استفاده قرار بگیرند.
زبان برنامه نویسی معمولا با سرریزهای بافر همراه عبارتند از C و C + +، ساخته شدهاست، در حفاظت در برابر دسترسی و یا جای نوشتن دادهها در هر بخشی از حافظه و انجام به طور خودکار نیست بررسی کنید که دادهها به آرایه (ساخته شده در نوع بافر) داخل مرزهای آن آرایه نوشته شدهاست. توصیف فنی سرریز بافر هنگامی رخ میدهد که دادهها نوشته شده به یک بافر، با توجه به مرزهای کافی بررسی، فساد مقادیر داده در حافظه آدرس مجاور به بافر اختصاص دادهاست. شایع ترین این زمانی اتفاق میافتد که کپی کردن رشته از کاراکترها از یک بافر به دیگری است.
مثال پایهای
در مثال زیر، یک برنامه تعریف شده دو داده که مجاور در حافظه: ۸-بایت بافر رشتهای، A، و یک عدد صحیح دو بایتی، B. در ابتدا،A دارای هیچ چیزی صفر بایت و B شامل شماره ۱۹۷۹. طول هر کاراکتر یک بایت است.
variable name | A | B | ||||||||
---|---|---|---|---|---|---|---|---|---|---|
value | [null string] | ۱۹۷۹ | ||||||||
hex value | ۰۰ | ۰۰ | ۰۰ | ۰۰ | ۰۰ | ۰۰ | ۰۰ | ۰۰ | ۰۷ | BB |
در حال حاضر، برنامه اقدام به ذخیره سازی رشته تهی پایان "بیش از حد" در بافرA. با شکست چک کردن طول رشته، آن را رونویسی مقدار B:
variable name | A | B | ||||||||
---|---|---|---|---|---|---|---|---|---|---|
value | 'e' | 'x' | 'c' | 'e' | 's' | 's' | 'i' | 'v' | ۲۵۸۵۶ | |
hex | ۶۵ | ۷۸ | ۶۳ | ۶۵ | ۷۳ | ۷۳ | ۶۹ | ۷۶ | ۶۵ | ۰۰ |
با وجودی که برنامه نویس قصد ندارد برای تغییر B در مقدار B در حال حاضر تعداد شکل گرفته از بخشی از رشته کاراکتر جایگزین میشود. در این مثال، بر روی یک سیستم big-endian است که با استفاده از ASCII، "E" به دنبال یک بایت صفر تبدیل شدن به تعداد ۲۵۲۵۶ است. اگر B تنها متغیر قلم دوم از اقلام دادههای تعریف شده توسط برنامه بود، نوشتن یک رشته طولانی که رفت و گذشته از B میتواند باعث خطا مانند گسل تقسیم بندی شود، فسخ این روند بود.
بهره برداری
تکنیک بهره برداری از آسیب پذیری سرریز بافر با توجه به نوع معماری، سیستم عامل و منطقه حافظه متفاوت است. به عنوان مثال، بهره برداری بر اساس هیپ (برای حافظه به صورت پویا اختصاص داده شده استفاده میشود)، بسیار متفاوت از بهره برداری در پشته است.
پشته مبتنی بر بهره برداری
کاربر تمایل به لحاظ فنی ممکن است سرریزهای بافر مبتنی بر پشته این برنامه برای دستکاری در یکی از راههای مختلفی را به نفع خود بهره برداری کند:
با جای نوشتن یک متغیر محلی است که در نزدیکی بافر در حافظه در پشته به تغییر رفتار از برنامهای که ممکن است مهاجم بهره مند شوند
با جای نوشتن آدرس برگشت در قاب پشته. پس از بازده عملکرد، اجرا خواهد شد در آدرس برگشت، به عنوان مهاجم، معمولا پر از بافر ورودی کاربر را مشخص سر گرفته شود.
با جای نوشتن تابع یک اشاره گر، و یا برنامه کنترل استثنا است که پس از آن اجرا شدهاست.
با استفاده از یک روش به نام "trampolining"، در صورتی که آدرس دادههای کاربر را تامین ناشناختهاست، اما محل در ثبت نام ذخیره میشود، و سپس آدرس برگشت، میتواند با آدرس شناسنده رونویسی است که باعث میشود که اجرای حکم اعدام به پرش تامین شده توسط کاربر دادهاست.
اگر محل در ثبت نام R ذخیره میشود، سپس پرش محل حاوی شناسنده برای مراجعه R، تماس R و یا دستور العمل مشابه، اعدام از دادههای کاربر عرضه میشود. محل opcodes مناسب، و یا بایت در حافظه، میتواند در DLLها و یا اجرایی خود را در بر داشت.
با این حال آدرس شناسنده به طور معمول هر کاراکتر تهی نیست و محل این opcodesها میتواند در میان برنامهها و نسخههای سیستم عامل متفاوت باشد. پروژه Metasploit یک پایگاه دادههای چنین opcodes مناسب است، هر چند تنها افراد موجود در سیستم عامل ویندوز ذکر شدهاست.
هیپ، مبتنی بر بهره برداری
سرریز بافر در منطقه پشته داده به عنوان یک سرریز پشته اشاره میشود و بهره برداری را به شیوهای متفاوت از سرریزهای مبتنی بر پشته انجام میدهد. حافظه پشته به صورت پویا توسط برنامه در زمان اجرا اختصاص داده شده و به طور معمول شامل دادههای برنامه میباشد. استثمار با فساد این دادهها در روشهای خاص باعث میشود برنامه را بازنویسی سازههای داخلی مانند اشاره گر لیست پیوندی انجام میشود. روش سرریز پشته استاندارد، رونویسی پیوندی تخصیص حافظههای پویا (مانند دادههای meta malloc) و با استفاده از ارز اشاره گر منجر به بازنویسی برنامه اشاره گر تابع است.
موانع استثمار
دستکاری بافر رخ میدهد که قبل از آن خوانده میشود و یا اعدام شدهاست، ممکن است منجر به شکست تلاش بهره برداری شود. این دستکاری میتواند تهدید از بهره برداری، کاهش، اما ممکن است آن را غیر ممکن سازد. دستکاری میتواند تبدیل به بالا و یا پایین تر مورد، حذف metacharacters و فیلترینگ از رشتههای غیر الفبایی باشد. با این حال، تکنیکها یی برای دور زدن این فیلتر و دستکاری وجود داشته باشد ؛کد عدد و الفبایی، کدهای چند شکلی، خود را تغییر کد و بازگشت به حملات-libc. از روش مشابه میتواند مورد استفاده قرار گیرد برای جلوگیری از شناسایی توسط سیستمهای تشخیص نفوذ است. در برخی موارد، از جمله که در آن کد را به یونیکد تبدیل شده، خطر از آسیب پذیری شدهاند تحریف توسط disclosers به عنوان انکار تنها از خدمات که در واقع اعدام از راه دور کد دلخواه، امکان پذیر است.
نکات بهره برداری
در دنیای واقعی سوء استفادههای مختلف از چالشهای است که باید بر طرف شود برای سوء استفاده به عمل قابل اعتماد وجود دارد. این عوامل عبارتند از بایتهای پوچ در آدرسها، تنوع در محل شل کد، تفاوت میان محیطهای مختلف مقابله با اقدامات در عمل است.
NOP روش سورتمه
NOP-سورتمه قدیمی ترین و روش به طور گستردهای شناخته شده برای موفقیت بهره برداری از یک سرریز بافر پشتهاست.
راه حل این مشکل، پیدا کردن آدرس دقیق از بافر به طور موثر افزایش اندازه از منطقه هدف است.
برای انجام این بخش بسیار بزرگتر از پشتهها را با دستور العمل دستگاه بدون عملیات خراب شدهاست. در پایان از دادههای مهاجم تامین، پس از دستورالعملهای بدون عمل، دستور العمل به انجام پرش نسبت به بافر که در آن شل کد واقع شدهاست. این مجموعهای از هیچ OPS به عنوان "NOP-سورتمه" می گویند چرا که اگر آدرس بازگشت با هر آدرس در منطقه بدون عملیات بافر رونویسی است از آن خواهد شد "اسلاید" پایین بدون-OPS تا آن را به کد مخرب واقعی پرش در پایان هدایت میشود. این روش نیاز به مهاجم که در پشته NOP-سورتمهاست به جای استفاده ازشل کد نسبتا کوچک، آن راحدس زد.
از آنجا که از محبوبیت از این روش، بسیاری از فروشندگان سیستمهای پیشگیری از نفوذ این الگوی دستورالعمل دستگاه بدون عملیات در تلاش برای شناسایی شل کد در استفاده از جستجو میباشد.
این مهم است توجه داشته باشید که NOP-سورتمه لزوما شامل دستورالعمل دستگاه تنها سنتی بدون عملیات، دستور العملها که ماشین حالت به یک نقطه که در آن شل کد اجرا نمیشوند ومی تواند از سخت افزار مورد استفاده قرار میگیرد.
در نتیجه آن سورتمه روش معمول برای بهره برداری نویسندگان بدون عملیات با دستورالعمل که هیچ اثر واقعی در مورد اعدام شل کد نوشتن تبدیل شدهاست.