بازی فلش ویندوز RG
فوریه 6, 2015
متن چپ چین left-to-right در پاراگراف راست چین right-to-left
فوریه 12, 2015
نمایش همه

مشکل هک شدن سایت های وردپرس در اثر آسیب پذیری یک یا چند تا از پلاگین های نصب شده. راه های پاک سازی پس از ویروسی شدن سایت وردپرس و راه پیشگیری از ورود ویروس

شش ماه پیش توسعه دهندگان وردپرس اعلام کردند که یک آسیب پذیری در وردپرس بوجود آمده است. این واقعه پس از این بود که تعداد زیادی از سایت هایی که بر روی سیستم مدیریت محتوای وردپرس نصب شده بودند مورد آماج حمله سایبری هکر ها قرار گرفتند. گفته می شود 50000 سایت در چند شبانه روز هک شدند.

 

آسیب پذیری پلاگین وردپرس

هک وب سایت وردپرس دست بردآسیب پذیری از سوی یکی از پلاگین های وردپرس بود به نام MailPoet Newsletters. وردپرس یکی از محبوب ترین CMS های موجود است، با بیش از 75 میلیون سایت که آنرا در خود دارند (آمار فوریه 2014).

این پلاگین، سایت هایی که آنرا نصب کرده بودند آسیب پذیر می ساخت و در ورژن 2.6.7 برطرف شد، ولی به شرط اینکه سایت ها آنرا بروز رسانی می کردند.

آسیب پذیری بدین صورت بود که هکر ها می توانستند فایل های دلخواه PHP خود را بر روی سرور آپلود کرده و کنترل سایت را بدست بگیرند. در ابتدا تعدادی سایت تخریب شدند و هکر ها اصلاحاتی در کد های خود دادند و سایت های بعدی که هک می شدند آسیبی نمی دیدند و کسی متوجه حضور آنها نمی شد. کدی که در اکثر سایت ها اینجکت شده بود، یک راه مخفی برای ورود هکر ها باز می کرد (backdoor). آنها یک کاربر ادمین بنام 1001001 ایجاد می کردند بطوریکه فقط خودشان رمز ورودشان را داشتند.

همچنین تعدادی از سایت هایی که این پلاگین را نداشتند و یا حتی وردپرس نداشتند نیز هک شدند که به آن cross-contamination می گویند. یعنی همۀ سایت هایی که تحت نام یک اکانت هاست شده اند بخاطر آسیب پذیری یک سایت هک می شوند. البته در برخی شرکت های هاستینگ یک سایت دسترسی به سایت های مجاور در اکانت های دیگر را ندارد، ولی خوب در سرور هایی که بخوبی تنظیم نشده بودند، این اتفاق افتاد و همۀ سایت های موجود در هاست با اکانت های دیگر نیز هک شدند.

تجربه ما

چندی پیش، تعدادی از سایت های دوستان ما نیز هک شد. این در حالی است که پلاگین MailPoet در این سایت ها نصب نشده بود. وقتی ما بررسی کردیم، مشاهده کردیم که یک یوزر ادمین بنام 1001001 در کنار دیگر کاربران در جدول wp-users دیتابیس ایجاد شده است. اولین کاری که کردیم، پاک کردن این کاربر بود.

سپس یک فایل مشکوک پیدا کردیم بنام license.php این فایل تحت هیچ شرایطی متعلق به وردپرس نبوده است، پس آنرا پاک کردیم.

همچنین دیدیم که همۀ پلاگین ها محو شدند با خطای “bad header”. وقتی بررسی کردیم، مشاهده کردیم که یک کد مضر در بالای همۀ صفحات PHP اضافه شده است.

کد شبیه این بود:

<?php if(!isset($GLOBALS["\x61\156\x75\156\x61"])) { $ua=strtolower($_SERVER["\x48\124\x54\120\x5f\125\x53\105\x52\..........$shvfyowley=$ieeriuxlhx; $shvfyowley=(581-460); $ilabsgxcei=$shvfyowley-1; ?>

این کد در همۀ صفحات پی اچ پی در بالای کد اصلی اضافه شده بود (prepend). و پارامتر های آن در هر صفحه تغییر می کرد یعنی یکسان نبود.

خوب، کاری که ما کردیم، این بود که با استفاده از رگولار اکسپرشن و تابع بازگشتی یک برنامه نوشتیم که همۀ حالت ها را تحت پوشش قرار میداد و لیستی از همۀ فایل های PHP در زیر فولدر ها تهیه کرده و همه را پاک سازی می کرد. آنرا اجرا کردیم و چیزی حدود 30 هزار فایل پی اچ پی را در کمتر از 5 دقیقه پاک سازی کرد. این کد را در اختیار شما قرار می دهیم که اگر مشکل مشابهی داشتید آنرا اجرا کنید، ولی مراقب باشید!

توجه: این کد همه منظوره نیست و ممکن است به فایل های شما آسیب بزند. پیش از اینکه از آن استفاده کنید، آنرا در یک فولدر کوچک تست کرده و از عملکرد آن مطمئن شوید، و اگر OK بود، آنرا به روت فایل های خود اعمال کنید. ولی باید از چند و چون عملکرد این اسکریپت آشنا باشید و اگر لازم است در آن تغییراتی بدهید. نئو مارکت مسوولیتی را در قبال این اسکریپت قبول نمی کند. پیش از استفاده، از فایل های تان نسخه پشتیبان تهیه کنید!

کد زیر را در فایلی بنام cleanser.php ذخیره کرده و طبق دستورالعمل فوق ابتدا در یک فولدر کوچک تست کرده و سپس به www هاست خود اعمال کنید تا صفحات PHP شما از این ویروس پاک شود:

<?php
$files = array();
$direct = getcwd();
function listFolderFiles($dir){
	global $files;
    $ffs = scandir($dir);
    foreach($ffs as $ff){
        if($ff != '.' && $ff != '..' && $ff != 'cleanser.php'){			
            if(is_dir($dir.'/'.$ff)) listFolderFiles($dir.'/'.$ff);
			else{
				if(strtolower(substr($ff,strlen($ff) - 4)) == '.php')	array_push($files, $dir.'/'.$ff);
			}
        }
    }
}

listFolderFiles($direct);

foreach($files as $filename){
	if(file_exists($filename)){
		$contents = file_get_contents($filename);
		if(!strpos($contents,'if(!isset($GLOBALS[') === false){
			preg_match('/\<\?php\sif\(!isset\(\$GLOBALS(.*)-1;\s\?\>/i',$contents,$matches);
			$malware = '<?php if(!isset($GLOBALS'.$matches[1].'-1; ?>';
			$new_contents = substr($contents , strlen($malware));	
			file_put_contents($filename, $new_contents);	
		}else{}
	}
	//die;
}

حتما نسخه پشتیبان تهیه کنید پیش از استفاده از این کد. همچنین بخاطر داشته باشید که این کد برای نمونه ویروس فوق ساخته شده است. امکان دارد مشکل شما متفاوت باشد و این کد عمل نکند.

 

چکار کنیم که وردپرس هک نشود

در زیر راهکار هایی داده می شود که کمک می کند امنیت سایت شما در آینده در برابر چنین حملاتی حفظ شود:

  • فایل های بک آپ بر روی هاست نگه ندارید.
  • همیشه از آخرین نسخه وردپرس و پلاگین ها استفاده کنید.
  • اطلاعات ورود سایت خود را در فایل های متنی بر روی دسکتاپ ذخیره نکنید.
  • به کسی که اعتماد ندارد مشخصات ورود سایت خود را ندهید.
  • تولبار های مختلف و ناشناخته بر روی سیستم عامل خود نصب نکنید.
  • آنتی ویروس بروز داشته باشید.
  • تعداد زیادی سایت را بر روی یک اکانت هاست نکنید.
  • به همۀ دیتابیس ها یک یوزر اختصاص ندهید.
  • تم ها و پلاگین های “نال” شده استفاده نکنید.
  • و…

 

5/5 - (3 امتیاز)
امین بهداروند
فارغ التحصیل کارشناسی برق مخابرات هستم. هم اکنون بعنوان کارشناس تجهیزات فیبر نوری و مخابراتی فعالیت می کنم. به زمینه های دیگر شامل برنامه نویسی vb.net و PHP و MySQL و همچنین طراحی وب سایت، طراحی گرفیکی و بازی سازی سه بعدی، بلاگ نویسی، موسیقی و... نیز علاقه مند هستم.

4 دیدگاه ها

  1. بهمن گفت:

    با تشکر از شما
    اما چرا نباید این کار را کرد و چه مشکلی پیش میاره ؟
    تعداد زیادی سایت را بر روی یک اکانت هاست نکنید.

    • امین بهداروند گفت:

      سایت هایی که امکان هاست چند سایت با یک اکانت را میدهند، معمولاً حساب امنیت کار را نمی کنند، و یک هکر می تواند برا حتی با چند تا نقطه و اسلش به فولدر های دیگر نیز دسترسی داشته باشد. این برای ما هم اتفاق افتاد و با هک شدن یک سایت از طریق SQL Injection، همه سایت های مرتبط هم هک شدند.

  2. نیل وب گفت:

    عالی بود. ممنون از شما.

پاسخ دادن به بهمن لغو پاسخ

نشانی ایمیل شما منتشر نخواهد شد.