Tip: How to Protect Your WordPress site from WPScan

ជាទូទៅហេគឃ័រ រឺជនដែលមានគំនិតអាក្រក់ប្រើប្រាស់កម្មវិធីស្កេនមួយចំនួនដើម្បីធ្វើការវិភាគទៅលើវេបសាយដែលប្រើប្រាស់ Wordpress ដើម្បីធ្វើការរកចំនុចខ្សោយ ហើយចាប់ផ្តើមធ្វើការវាយប្រហារចូលទៅក្នុងវេបសាយ។ នៅពេលគេធ្វើការវាយប្រហារបានសម្រេច ​ហេគឃ័រអាចធ្វើការដាក់មេរោគទាញយកព័ត៌មានផ្សេងៗពីក្នុងវេបសាយ រឺអាចកំទេចវេបសាយនោះចោលតែម្តង …ល។

កម្មវិធី WPScan ជាកម្មវិធីដែលមានប្រសិទ្ធភាពខ្ពស់ក្នុងការរកចំនុចខ្សោយវេបសាយដែលប្រើប្រាស់ Wordpress ហើយវាត្រូវបានប្រើប្រាស់ដោយហេគឃ័រជាច្រើននៅជុំវិញពិភពលោក ប៉ុន្តែវាអាចមានសមត្ថភាពក្នុងការទាញយកព័ត៌មានផ្សេងបានតែប្រភេទវេបសាយប្រើប្រាស់ Wordpress តែប៉ុណ្ណោះ។

សមត្ថភាពទូទៅ

– ស្កេនទូទៅ
– ទាយលេខសំងាត់ Login Wordpress
– រកមើល Plugin អ្នកប្រើប្រាស់
– មើល Theme
– ទាញយក Username Login Wordpress
– មើល Timthumbs
– ប្រើប្រាស់ជាមួយ Proxy ដើម្បីការពារខ្លួន [ HTTP proxy & SOCKS5 proxy ] – រកមើល Custom Content Directory
– និងអាចទាញយកព័ត៍មានផ្សេងៗទៀតពី Robot, XML …ល។

អ្នកអាចប្រើប្រាស់វិធីការពារ WPScan និងកម្មវិធីស្កេនមួយចំនួនផ្សេងទៀត ដូចខាងក្រោមៈ

1. បិទលើការស្កេន robots.txt

ចូលទៅ wp-includes -> functions.php រួចធ្វើការ edite ហើយស្កូលចុះក្រោម រួចដាក់កូដខាងក្រោមចូល

/** Block Robot Information */
add_action(‘do_robots’, ‘hook_robots’, 1);
function hook_robots() {
// Return 404
status_header(404);
// End script
die();
}

2. បិទលើការទាញយកព័ត៍មានពី readme.html

Readme.html ប្រើសំរាប់ទាញយកព័ត៍មានពីជំនាន់ Wordpress ។ យើងអាចបិទវាតាមរយៈ .htaccess ដោយដាក់កូដខាងក្រោម

RewriteRule ^readme\.html$ – [R=404,L,NC]

3. ការពារ Full Path Disclosure

នៅពេល Server មានការកំណត់មិនបានល្អ ( Badly Configured ) វាអាចធ្វើអោយគេអាចទាញយកព័ត៌មានទីតាំងឯកសារយើងបានពី wp-includes/rss-functions.php ។

យើងអាចបិទវាបានតាមរយះកូដខាងក្រោមដាក់ចូលក្នុង .htaccess តាមរយៈកូដខាងក្រោមនេះ

RewriteRule ^wp-includes/rss-functions\.php$ – [R=404,L,NC]

4. ការពារ WPScan ពីការទាញយកព័ត៍មានក្នុង wp-config.php

ដាក់កូដខាងចូលទៅក្នុង .htaccess ដូចខាងក្រោម

RewriteRule ^wp-config\.php\.save$index.php?wp_config_enumeration=1 [L] RewriteRule ^\.wp-config\.php\.swp$ index.php?wp_config_enumeration=1 [L] RewriteRule ^wp-config\.php\.swp$ index.php?wp_config_enumeration=1 [L]

រួចដាក់កូដខាងក្រោមចូលទៅក្នុង functions.php

/** Detect this requests and temporary block user. */
$transient_name = ‘wce_block_’.$_SERVER[‘REMOTE_ADDR’];
$transient_value = get_transient($transient_name);

if ($transient_value !== false) {
die(‘BANNED!’);
}

if (isset($_GET[‘wp_config_enumeration’])) {
set_transient($transient_name, 1, DAY_IN_SECONDS);
die(‘BANNED!’);
}

5. ការពារ User Agent

ជាធម្មតា WPScan string គឺប្រើប្រាស់ដូចទៅនិង User Agent ។ យើងអាចការពារវាតាមកូដខាងក្រោមដាក់ចូលទៅក្នុង functions.php

/** Detect User Agent */
if (!empty($_SERVER[‘HTTP_USER_AGENT’]) && preg_match(‘/WPScan/i’, $_SERVER[‘HTTP_USER_AGENT’])) {
die(‘Wrong user agent’);
}

6. បិទការជ្រៀកចូលយកព័ត៍មានពី XML-RPC Server

ជាធម្មតានៅពេលយើងបើក xmlrpc.php វានិងបង្ហាញ XML-RPC Server accepts POST requests only ជាលក្ខណៈ text ។ WPScan ព្យាយាមស្វែងរក String មួយនេះដើម្បីរកមើលព័ត៍មានក្នុង xmlrpc ។

យើងអាចការពារវាបានតាមការបញ្ចូលកូដខាងក្រោមចូលទៅក្នុង functions.php

/** Remove strange XML-RPC server info. */
function add_fake_xmlrpc() {
// We don’t want to display die(‘XML-RPC server accepts POST requests only.’); on $_GET
if (!empty($_POST)) {
return ‘wp_xmlrpc_server’;
} else {
return ‘fake_xmlrpc’;
}
}

add_filter(‘wp_xmlrpc_server_class’, ‘add_fake_xmlrpc’);

class fake_xmlrpc {
function serve_request() {
// Its fake 😉
die();
}
}

7. បិទ Generator info

យើងអាចដក់ ពី source code តាមរយះកូដខាងក្រោមដាក់ចូលទៅក្នុង functions.php

/** Remove generator info. */
remove_action(‘wp_head’, ‘wp_generator’);
add_filter(‘the_generator’, ‘remove_generator’);
function remove_generator() {
// Return nothing
return ”;
}

8. ការពារការស្កេនយកព័ត៍មានបែបកំរិតបច្ចេកទេសខ្ពស់ ( Advanced Fingerprinting )

នៅក្នុង wp_versions.xml គឺ WPScan រក្សាបញ្ជីរាយនាមឯកសារដែលអាចប្រើប្រាស់ដើម្បីរកមើល Wordpress version ដោយកំនត់ទៅលើ hash ។
ដំបូងបញ្ចូលកូដខាងក្រោមទៅក្នុង .htaccess

RewriteRule ^wp-includes/js/tinymce/wp-tinymce\.js\.gz$ index.php?advanced_fingerprinting=1 [L]

រួចបញ្ចូលកូដខាងក្រោមទៅក្នុង functions.php

/** Prevent advanced fingerprinting */
if (isset($_GET[‘advanced_fingerprinting’])) {
switch ($_GET[‘advanced_fingerprinting’]) {
case ‘1’:
// Unpack file
$file = gzopen(ABSPATH.’wp-includes/js/tinymce/wp-tinymce.js.gz’, ‘rb’);
// Add comment
$out = ‘// ‘.uniqid(true).”\n”;
while(!gzeof($file)) {
$out .= gzread($file, 4096);
}

// Pack again
header(‘Content-type: application/x-gzip’);
echo gzencode($out);
break;

default:
status_header(404);
}

die();
}

9. ធ្វើការដកលេខជំនាន់ Wordpress ពីក្នុង stylesheet

Wordpress បានបន្ថែមតួរលេខ Version នៅខាងក្នុង stylesheet link, ឧទាហរណ៍

ដូច្នេះយើងអាចធ្វើការផ្លាស់ប្តូរការប្រើប្រាស់ global $wp_version តាមរយះកូដខាងក្រោមដាក់ចូលទៅក្នុង functions.php

/** Remove version number from stylesheet. */
add_action(‘init’, ‘init’);
function init() {
global $wp_version;
$wp_version = ‘some_strange_number’;
}

10. បិទ Plugin enumeration

សូមបញ្ចូលកូដខាងក្រោមទៅក្នុង .htaccess

RewriteRule ^(.*)wp-content/plugins/(.*)$ index.php?plugin_enumeration=1 [L]

រូចបញ្ចូលកូដខាងក្រោមចូលទៅក្នុង functions.php

/** Stop plugin enumeration. */
if (isset($_GET[‘plugin_enumeration’])) {
// Display something random
die(‘‘);
}

11. ការពារ Username Enumeration

នៅក្នុង Wordpress នៅពេលដែលអ្នករកមើល ?author=1 វានិងនាំអ្នកទៅកាន់ author/your_username/ ។ ដូច្នេះ WPScan អាចទាញយក username login បានយ៉ាងងាយស្រួល ។

យើងអាចបិទការស្នើរ $_GET[‘author’] តាមរយះការបញ្ចូលកូដខាងក្រោមទៅក្នុង functions.php

/** Prevent username enumeration. */
if (!is_admin() && isset($_REQUEST[‘author’])) {
status_header(404);
die();
}

* ខាងក្រោមនេះជាលទ្ធផលនៃការបញ្ចូលកូដខាងលើ

ដូច្នេះអ្នកអាចជ្រើសកូដផ្នែកណាមួយដែលអ្នកពេញចិត្តដើម្បីដាក់ការពារពីរ Scanner ហើយសូមធ្វើការទទួលខុសត្រូវដោយខ្លួនឯងបើសិនជាមានការខុសឆ្គងដោយប្រការណាមួយនោះ។ ខាងលើនេះគឺគ្រាន់តែជាព័ត៌មានសម្រាប់អ្នកធ្វើជាឯកសារយោងតែប៉ុណ្ណោះ៕

ដកស្រង់ចេញពីអត្ថបទដើម https://www.camcert.gov.kh/how-to-protect-again-wpscan/

Exit mobile version