حملات XML-RPC در واقع تلاش های بروت فورس برای تست و بدست آوردن اعتبارنامه های کاربران سایت وردپرسی هدف هستند که در بیشتر موارد کاربردی نبوده و نتیجه ای در بر ندارند ولی در صورتیکه سایت هدف به درستی پیکربندی نشده باشد می توانند نتیجه بخش باشند.
XMLRPC چیست ؟ حملات xmlrpc کدامند؟
قبل از اینکه با حملات xml-rpc آشنا شویم بایستی مفهوم xml-rpc را درک کنیم. xml-rpc یک استاندارد ارتباطی درون سیستمی مخصوص سیستم مدیریت محتوا وردپرس می باشد. به زبان ساده اینکه xml-rpc مکانیزمی است که وردپرس با استفاده از آن با سیستم های دیگر و وب سایت های دیگر ارتباط برقرار می کند. در این ارتباط پروتکل http در نقش بستر ارتباطی بوده و زبان ابرمتن xml مکانیزم انکودینگ و حامل ارتباطی می باشد.
وردپرس با استفاده از مکانیزم xml-rpc با دیگر سیستم های مدیریت محتوا همچون بلاگر و کلاینت های موبایل و دسکتاپ ارتباط برقرار می کند. هرچند با معرفی WP API دیگر این سیستم قدیمی طرفداری ندارد. WP API از مکانیزم JSON به جای XML به منظور ارسال و دریافت داده ها استفاده می کند که کارایی به مراتب بهتری دارد. تا وردپرس نسخه ۳.۵ قابلیت Xml-rpc به صورت پیش فرض غیرفعال بود و شما بایستی از تنظیمات وردپرس آن را فعال می کردید.
xml-rpc در واقع بخشی از هسته اولیه وردپرس بوده و همه چیز در فایل xmlrpc.php تعریف می شد. حجم این فایل در ابتدا ۲۳۸ کیلوبایت بود که بعد از تغییراتی حجم آن به تنها ۳ کیلوبایت کاهش یافت و برخی فعالیت های دیگر آن به کلاس کوچک دیگری با نام wp_xmlrpc_server تقلیل یافت که این کلاس حاوی چندین تابع می باشد.
از آنجایی که وردپرس به سازگاری با نسخه های قدیمی (Backward Compatibility) اهمیت می دهد این قابلیت هم اکنون در وردپرس فعال می باشد.
مشکل XML-RPC
مشکل XML-rpc کجاست؟ برای درک مشکل xml-rpc بهتر است ابتدا به توضیح مزیت های WP API بپردازیم. همانطور که گفتیم WP API از مکانیزم JSON استفاده کرده که در مقایسه با XML به مراتب بهتر است. مشکل اصلی xml-rpc در استفاده از احرازهویت به شیوه Basic Authentication می باشد. به این معنا که مثلا زمانیکه قصد مدیریت سیستم وردپرس از طریق یک اپلیکیشن موبایل را داریم اعتبارنامه ها یا همان نام کاربری و رمزعبور از طریق BA ارسال و دریافت می شود.
در مقابل WP API از مکانیزم Oauth استفاده می کند که در آن به هیچ وجه نام کاربری و رمزعبور ارسال و دریافت نمی شود بلکه از توکن ها به منظور احرازهویت استفاده کرده که به مراتب امن تر است.
علاوه بر مسئله امنیت XML-RPC از نظر توسعه پذیری دارای مستندات خوبی نیست و کار توسعه دهندگان وب را با مشکل مواجه می کند.
چرا حملات بروت فورس
XML-RPC متد های مختلفی را برای ارتباط ایجاد می کند که در این متد ها برای احرازهویت نام کاربری و رمزعبور وردپرسی مورد نیاز است. همین قابلیت به دیگر اشخاص این امکان را داده تا به سادگی اقدام به پیاده سازی حملات بروت فورس نمایند. در واقع هیچ آسیب پذیری در کار نیست بلکه درخواست های XML-RPC که توسط مهاجمین به سایت شما ارسال می شود امکان بروت فورس اعتبارنامه های وردپرسی با استفاده از یک لیست از اسامی و پسوردها را فراهم می کند.
مقابله با حملات xml-rpc
چرا حملات xmlrpc کاربردی نیستند ؟ حملات بروت فورس آنلاین بر روی سرور به سرعت در لایه های مختلف شناسایی و بلاک می شوند. کافی است تا سرور شما یک فایروال ساده داشته باشد و پس از تعدادی درخواست متوالی , آدرس آیپی به سرعت بلاک می شود. همچنین اگر یک اپلیکیشن امنیتی در وردپرس خود داشته باشید , پس از تعدادی درخواست نادرست آدرس آیپی هدف بلاک می شود. راهکار مقابله با حملات xml-rpc بسیار ساده است. می توانید آن را غیرفعال کنید!
همانطور که گفتیم از وردپرس نسخه ۳.۵ به بعد امکان غیرفعال سازی Xml-rpc به صورت آپشنی در وردپرس وجود ندارد. هرچند به منظور غیرفعال سازی راهکارهای مختلفی وجود دارد و در صورتیکه نمی خواهید وارد فایل های سرور شوید ساده ترین راهکار نصب یکی از پلاگین های موجود در این زمینه است. کافی است در بخش جستجو افزونه های وردپرس disable xmlrpc را جستجو کنید.
راهکار دیگر اضافه کردن کد فیلتر زیر به فایل functions.php در قالب وردپرسی خودتون می باشد:
add_filter( 'xmlrpc_enabled', '__return_false');
همچنین می توانید اگر سرور آپاچی دارید می توانید با ویرایش فایل پیکربندی htaccess و اضافه کردن کد زیر به آن xml-rpc را غیرفعال کنید:
<Files xmlrpc.php> order deny,allow deny from all allow from address-ip </Files>
به همین شکل در Nginx می توانید فایل کانفیگ را ویرایش و کد زیر را اضافه کنید:
location ~* ^/xmlrpc.php$ { return 403; }
در صورتیکه قصد غیرفعال سازی xml-rpc را ندارید بهترین کار استفاده از یک پلاگین قدرتمند امنیتی همچون Wordfence می باشد. این افزونه به شما این امکان را می دهد تا با تعیین محدودیت هایی برای درخواست های اشتباه به سرور آدرس آیپی شخص مخرب را به سرعت بلاک کنید. این روش به قدری موثر است که با وجود استفاده از پروکسی های مختلف عملا حمله بی اثر می شود.
نکته پایانی اینکه همیشه برای کاربران سایت خود پالیسی تعریف کنید که امکان استفاده از پسوردهای ساده وجود نداشته باشد. مسلما در صورتیکه کاربری از رمزعبور ۱۲۳۴۵۶ استفاده کند با بدست آوردن نام کاربری وی به سادگی بدون نیاز به حتی بروت فورس حساب کاربری وی را می توان در اختیار گرفت.