آموزش بستن حفره های امنیتی وردپرس
در این مقاله (آموزش بستن حفره های امنیتی وردپرس) با ما همراه باشید.
مقدمه
حمله هکرها وردپرس هدف اصلی آنها است. حدود 30٪ وب سایتها در سراسر جهان از آن استفاده می کنند و طبق برخی تخمین ها حداقل 60٪ از آنها در معرض حمله قرار دارند. در این مقاله می خواهیم به شما نشان دهیم که وردپرس از طریق ابزار WPscan چقدر آسیب پذیر است.
WPScan یک اسکنر آسیب پذیری WordPress است که برای متخصصان امنیتی و مسئولان وب برای تست نفوذ و امنیت سایت های خود طراحی شده است.
قبل از ادامه آموزش ، بهتر است نسخه فعلی خود را با دستور زیر به روز کنید:
$ wpscan –update |
همچنین برای دسترسی به این ابزار ، برنامه Web Analysis را از فهرست انتخاب کرده و WPScan را از زیرمنو انتخاب کنید.
امکانات و قابلیت های WPScan
- نمایش نسخه وردپرس از طریق برچسب متا و ..
- نمایش نام های کاربری مدیران
- شناسایی آسیب پذیری ها و شمار تعداد پلاگین های نصب شده
- نمایش فایل robots.txt
- چک کردن دایرکتوری و فولدر های دارای Directory Indexing
- كرک پسورد صفحه مديريت وردپرس
- انجام حملات بروت فورس
برای اسکن سایت وردپرسی دستور زیر را تایپ کنید و URL مورد نظر را وارد کنید:
$ wpscan --url <URL>
همچنین می توانید از دستور زیر برای استخراج لیست مدیران وبسایت استفاده کنید:
wpscan --url site.com --enumerate u
راه ای مقابله در برار این آسیب پذیری ها چیست؟
گزینه ها و تکنیک هایی وجود دارد که می توانید برای محافظت در برابر افزونه ها ، قالب ها یا تعداد کاربران استفاده کنید.
جلوگیری از شمارش کاربر
تعداد کاربران از منابع مختلفی جمع آوری میشود از جمله:
- RSS feeds, /wp-json/wp/v2/users, /?authors=, etc
می توانید با افزودن این موارد به فایل functions.php در قالب خود ، برخی از این منابع و بخشهای مختلف را غیرفعال کنید
// REMOVE RSSs
function wpb_disable_feed() {
wp_die( __('No feed available,please visit our '. get_bloginfo('url') .'),"Info", 200);
}
add_action('do_feed', 'wpb_disable_feed', 1);
add_action('do_feed_rdf', 'wpb_disable_feed', 1);
add_action('do_feed_rss', 'wpb_disable_feed', 1);
add_action('do_feed_rss2', 'wpb_disable_feed', 1);
add_action('do_feed_atom', 'wpb_disable_feed', 1);
add_action('do_feed_rss2_comments', 'wpb_disable_feed', 1);
add_action('do_feed_atom_comments', 'wpb_disable_feed', 1);
//PREVENT WP JSON API User Enumeration
add_filter( 'rest_endpoints', function( $endpoints ){
if ( isset( $endpoints['/wp/v2/users'] ) ) {
unset( $endpoints['/wp/v2/users'] );
}
if ( isset( $endpoints['/wp/v2/users/(?P[\d]+)'] ) ) {
unset( $endpoints['/wp/v2/users/(?P[\d]+)'] );
}
return $endpoints;
});
//PREVENT /author=
if (!is_admin()) {
// default URL format
if (preg_match('/author=([0-9])/i', $_SERVER['QUERY_STRING']))
wp_die( 'Author archives have been disabled.', "Info", 200 );
add_filter('redirect_canonical', 'custom_check_enum', 10, 2); }
function custom_check_enum($redirect, $request) {
// permalink URL format
if (preg_match('/\?author=([0-9])(\/*)/i', $request))
wp_die( 'Author archives have been disabled.', "Info", 200 );
else
return $redirect;
}
or
function custom_block_user_enum() {
if ( is_admin() ) return;
$author_by_id = ( isset( $_REQUEST['author'] ) && is_numeric( $_REQUEST['author'] ) );
if ( $author_by_id )
wp_die( 'Author archives have been disabled.', "Info", 200 );
}
add_action( 'template_redirect', 'custom_block_user_enum' );
or simply:
if (!is_admin() && isset($_REQUEST['author'])) {
wp_die( 'Author archives have been disabled.', "Info", 200 );
}
جلوگیری از نمایش نسخه وردپرس
برای جلوگیری از شناسایی نسخه وردپرس ، می توانید موارد زیر را اضافه کنید:
// remove version from head
remove_action('wp_head', 'wp_generator');
// remove version from rss
add_filter('the_generator', '__return_empty_string');
// remove version from scripts and styles
function shapeSpace_remove_version_scripts_styles($src) {
if (strpos($src, 'ver=')) {
$src = remove_query_arg('ver', $src);
}
return $src;
}
add_filter('style_loader_src', 'shapeSpace_remove_version_scripts_styles', 9999);
add_filter('script_loader_src', 'shapeSpace_remove_version_scripts_styles', 9999);
همچنین فایل های نظیر license.txt, readme.html باعث لو رفتن ورژن وردپرس شما خواهد شد بنابراین این دو فایل را میتوانید از دایرکتوری سایت حذف کنید.
غیرفعال کردن API REST
می توانید API REST را به طور کامل غیرفعال کنید ، و فقط به IP های خاص اجازه دسترسی به آن را دهید:
//REMOVE REST API
function restrict_rest_api_to_localhost() {
$whitelist = [ '127.0.0.1', "::1" ];
if( ! in_array($_SERVER['REMOTE_ADDR'], $whitelist ) ){
wp_die( __('REST API Disabled. Go to <a href="'. get_bloginfo('url').'"> homepage </a>'), "Info", 200); }
}
add_action( 'rest_api_init', 'restrict_rest_api_to_localhost', 0 );
XMLRPC را غیرفعال کنید
XMLRPC مفید است، اما می تواند در برابر شما مورد استفاده قرار گیرد:
- Intel gathering
- اسکن پورت
- حملات DoS
- نفوذ به روتر
گزینه هایی برای غیرفعال کردن XMLRPC از function.php وجود دارد ، اما توصیه می شود این کار را از طرف وب سرور انجام دهید.به سادگی با افزودن این مورد به پیکربندی Nginx، چنین درخواست هایی مانع فشار بی رویه در منابع سرور شما خواهد شد.
location ^~ /xmlrpc.php {
#allow 1.2.3.4;
deny all;
error_page 403 =404 / ;
}
مخفی کردن ورژن پلاگین ها و قالب
پرونده های CSS توسط هکر ها و ابزار WPScan نیز برای تعیین نسخه های افزونه و قالب مورد استفاده قرار گیرد ، بنابراین می توانید با اضافه کردن چند قطعه کد زیر مانع از نمایش ورژن پلاگین ها و قالب شوید:
function remove_cssjs_ver( $src ) {
if( strpos( $src, '?ver=' ) )
$src = remove_query_arg( 'ver', $src );
return $src;
}
add_filter( 'style_loader_src', 'remove_cssjs_ver', 1000 );
add_filter( 'script_loader_src', 'remove_cssjs_ver', 1000 );
هرگز نمیتوان گفت تنها با انجام این دستورات امنیت 100% درصدی را ایجاد کرده ایم و این گوشه ای از استراتژی ما خواهد بود ، اما حداقل میتوانید کار نفوذگران دشوار و سخت کنید و با پوشاندن همه این حفره های امنیتی، اینگونه نتیجه نهایی WPScan خواهید دید:
[i] The WordPress version could not be detected.
[i] No Users Found.
امیدواریم از این آموزش (آموزش بستن حفره های امنیتی وردپرس) استفاده لازم را برده باشید.