ISAC Cambodia (InfoSec)
GeneralKnowledgeSecurity NewsSecurity Tips

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/

Show More

Phannarith

Mr. OU Phannarith is one of the well-known cybersecurity experts in Cambodia and the region. He is the founder of the first leading information security website (www.secudemy.com) in Cambodia. He has been invited to present in global conferences, forums, and seminars and he was awarded in Information Security Leadership Achievements (ISLA) in 2016 by (ISC)2 and in December 2012 as one of the top 10 Chief Information Security Officers (CISO) in ASEAN by the International Data Group (IDG). Mr. OU has been the Professor specializing in Cybersecurity.

Related Articles

Back to top button