برنامه نویسی بازگشت محور

دانشنامه عمومی

برنامه نویسی بازگشت محور ( به انگلیسی: Return Oriented Programming ) یکی از تکنیک هایی می باشد برای انجام exploit در زمان هایی که مکانیزم های امنیتی مانند مکانیزم هایی که جلوگیری از اجرای کد در قسمت های مختلف حافظه پیاده سازی شده اند استفاده می شود. در این تکنیک حمله کنند بعد از به دست گرفتن control flow برنامه، لیستی از دستورات اسمبلی مناسب داخل برنامه را پیدا کرده که به آنها ابزارک گفته می شود، که هرکدام از این ابزارکها قسمتی از کار اصلی مخرب را انجام می دهند، و معمولاً این ابزارکها با دستور return خاتمه پیدا می کنند و محل آنها می تواند داخل خود کد برنامهٔ مورد هدف باشد یا داخل کد کتابخانه های بارگذاری شده در حافظه. حمله کننده به ترکیب این ابزارکها و پیدا کردن ترتیب مناسب برای پرش به هرکدام کار مخرب خود را انجام می دهد.
برنامه نویسی بازگشت محور یکی از حملات پیشرفته ای می باشد که زیر مجموعهٔ حملات stack smashing می باشد. معمولاً اینگونه حملات با سوءاستفاده از یک باگ داخل کد برنامه call stack برنامه را تغییر می دهند تا کنترل به دست حمله کننده بیافتد، در اینگونه باگ ها به دلیل اینکه برنامه نویس اندازهٔ ورودی دریافت شده را چک نکرده است حمله کننده می تواند مقدار دلخواه ورودی به برنامه بفرستند و با اینکار محتوای stack را تغییر دهد، اینکار باعث می شود که مقدار return address که داخل stack می باشد نیز تغییر کرده و در نتیجه کنترل رجیستر Instruction Pointer به دست حمله کننده بایفتد و در نتیجه control flow برنامه تحت نظر حمله کننده خواهد بود.
در حملات stack smashing ساده حمله کنند مقدار آدرس return address را به آدرسی داخل خود stack تغییر خواهد داد و در نتیجه کد یا payload خود را داخل stack می نویسد، و با پرش به کد خود کار مخرب را انجام خواهد داد. اما بسیاری از سیستم های عامل و کامپایلرها برای جلوگیری از اینگونه حملات مکانیزم های امنیتی مختلفی را معرفی کردند که در این تکنیک محل هایی از حافظه که داده ها در آنها ذخیره می شوند مانند stack که قابلیت write نیز دارند نباید قابلیت اجرایی داشته باشند، تکنیکی که بعدها به W^X معروف شد که به معنای این می باشد که محل هایی از حافظه که قابلیت write دارند نباید قابلیت executable نیز داشته باشند زیرا حمله کننده می تواند با تغییر مقادیر این محل ها کنترل برنامه را به دست بگیرد.
عکس برنامه نویسی بازگشت محور
این نوشته برگرفته از سایت ویکی پدیا می باشد، اگر نادرست یا توهین آمیز است، لطفا گزارش دهید: گزارش تخلف

پیشنهاد کاربران