9 cách hạn chế local attack trong WordPress

Bài này thuộc phần 3 của 7 phần trong serie Bảo mật WordPress

Từ trước tới nay, việc upload shell lên host sau đó deface đến cơ sở dữ liệu nhằm chiếm đoạt toàn quyền quản trị website là một trong những hình thức tấn công phổ biến nhất trên tất cả mọi mã nguồn, WordPress cũng không ngoại lệ.

Nhiệm vụ của local attack là tấn công vào các mục tiêu bảo mật kém trên server để giành quyền kiểm soát các website khác trên cùng một hệ thống. Do đó khi sử dụng share host, bạn sẽ dễ bị local attack hơn là dùng máy chủ riêng hoặc máy chủ ảo, nhưng nếu bạn có nhiều website mà không thể kiểm soát nổi thì dù là máy chủ gì thì cũng bị local attack.

Thông thường, các bước thực hiện trong quy trình hack local (hay Local Attack) bao gồm:

  1. Dò tìm các user có trong server.
  2. Dò tìm và đọc nội dung file config (trong WordPress nó là wp-config.php).
  3. Get thông tin login vào database.
  4. Tấn công tài khoản admin.
  5. Cuối cùng là up shell.

Mình không phải là một người chuyên về hacking nên các biến thể của nó có thể khác đi với kỹ năng của từng người, nhưng nhìn chung đa phần là vậy.

Như vậy, một trong những cách phổ biến mà sẽ khiến các hacker mất thời gian hơn trong việc tấn công đó là bảo mật file config thật kỹ. Và ở trong bài viết này, mình sẽ hướng dẫn bạn một số tips để bảo mật file wp-config.php trong WordPress để hạn chế local attack.

1. Giấu file wp-config.php

Mặc dù có một vài shell như Coleil có thể dò ra file config của mã nguồn dù bạn có giấu ở đâu nhưng việc cất kỹ file nhạy cảm này cũng sẽ giúp bạn hạn chế phần nào, ít ra là các hacker “thực tập”.

Trong host linux, thông thường các tập tin của website sẽ đều nằm trong thư mục public_html và thường path sẽ là /home/username/public_html/wp-config.php.

Do đó, cách giấu file config tốt nhất là bạn nên đưa file wp-config.php ra khỏi thư mục public_html, bạn có thể đăng nhập vào host thông qua FTP và tạo thêm một thư mục tên bất kỳ nằm ngang hàng với public_html.

Tạo thư mục ngang hàng với public_html

Tạo thư mục ngang hàng với public_html

Sau đó tải file wp-config.php trong thư mục public_html và upload nó vào thư mục mới tạo. Cuối cùng là sửa file wp-config.php trong thư mục public_html thành như sau, xem liên kết ở dưới:

<php
  if ( !defined('ABSPATH') )
    define('ABSPATH', dirname(__FILE__) . '/');
  require_once(ABSPATH . '../baomat/wp-config.php');

Bạn thay chữ baomat thành tên thư mục của bạn mà bạn đã tạo nó ngang hàng với public_html.

Lưu ý: Cách này chỉ áp dụng cho các website có file cài đặt ngay trong thư mục public_html chứ không hỗ trợ một lớp thư mục khác. Bạn có thể áp dụng với thư mục www nếu có.

2. Thay đổi database prefix

Database prefix (tiền tố CSDL) mặc định của WordPress sẽ là wp_, điều này vô tình làm cho các hacker biết rõ tên của từng table của website bạn nếu bạn không đổi tiền tố này đi.

Cách đổi tiền tố có nhiều cách, nhưng tốt hơn hết là sử dụng plugin iThemes Security để đổi, nhớ backup lại toàn bộ dữ liệu trước khi làm nhé mặc dù mình làm rất nhiều lần mà không bị lỗi.

3. Đổi security key

Bạn thử mở file wp-config.php ra, kéo xuống dưới và có thấy một đoạn nội dung giống thế này?

define('AUTH_KEY', 'jpwfcb9izge9gnz9unoakwpovdtn754sekxebbs5zvdzgl187lftu51o6qucv6py');
define('SECURE_AUTH_KEY', 'lqodqrrfksxmn8qsy6i3kwshu7su1czmnt6xj6wtpx54er9c5dmweqptupwzzfpa');
define('LOGGED_IN_KEY', 'pxo6nd6mnfw04m3u0m38layynhrh7atesuqgonitzf0xxnqxyydqpfurqr3znsoi');
define('NONCE_KEY', 'bhlrnqwfoxfzhpcyhyqlo8jh7vhdh3ov4swgsmygwvfzx8q65hmilhwt4iylgkd8');
define('AUTH_SALT', 'prfbyplbizqiqu1i42hm622ovsznaoayr9abxcbz15xks54nnkhguzqhwkndzy6v');
define('SECURE_AUTH_SALT', 'erjzw2objjfmachy7vt9mq2ktufh2331ypnuaeanjl1oegorjrngvzvcrftnywkd');
define('LOGGED_IN_SALT', 'kpvryyyj1zwznarx4l8lloigurf9mqetnlojnxtygjhuqtj9acq4lpr5jsm2kyjg');
define('NONCE_SALT', 'arimerdvr8fbw7pkigotdb7psvc2ysa7bqrnunrzwbcqlkqhs6xzokhzwnrmsg3a');

Bên trên là các chuỗi ký tự ngẫu nhiên lưu lại các session của từng user khi đăng nhập vào bảng điều khiển Admin. Hãy chắc chắn rằng bạn đã nhập ký tự ngẫu nhiên cho các key trên. Bạn có thể truy cập vào đây để tự động tạo ra các chuỗi security key ngẫu nhiên sau mỗi lần F5 rồi copy vào.

Cũng nên lưu ý rằng, nếu website bạn đã đang bị hack thì cũng nên đổi lại key này vài lần trong tuần để đảm bảo.

4. Cấm sửa theme và plugin trong bảng điều khiển

Có một vài hacker khá tinh vi đó là sau khi đã xâm nhập vào được website bạn thì họ sẽ chèn một vài đoạn mã nào đó nằm rải rác bên trong các theme/plugin mà bạn đang dùng.

Do đó, hãy cân nhắc dùng tính năng Editor trong bảng quản trị, tốt nhất là hãy tắt nó đi nếu bạn không dùng tới, cách tắt là chèn đoạn này vào bất kỳ dòng nào trong file wp-config.php

define('DISALLOW_FILE_EDIT',true);

5. Cấm cài thêm theme/plugin

Cũng không có ngoại lệ trong trường hợp hacker có thể tự ý cài thêm một plugin hay theme nào đó mà bên trong đó toàn chứa mã độc nếu họ có quyền truy cập vào bảng điều khiển. Do đó, nếu bạn không có nhu cầu cài theme theme/plugin thì hãy đặt đoạn sau vào file wp-config.php

define('DISALLOW_FILE_MODS',true);

6. CHMOD file wp-config.php

CHMOD lại file wp-config.php

CHMOD lại file wp-config.php

Mặc định các file trong WordPress sẽ được CHMOD thành 644 và folder là 755. Tuy nhiên đối với file wp-config.php thì bạn cũng nên CHMOD tối ưu hơn, bạn có thể thay thành 440, 444 hoặc 400. Cứ thử 400 trước, không được thì thử 444.

Xem thêm: Cách CHMOD an toàn cho WordPress.

7. Chặn thực thi file wp-config.php

Đây cũng là một tip hay nếu bạn không thích bất cứ ai sờ mó đến file wp-config.php trên host.

Đối với máy chủ NGINX thì chèn đoạn sau vào file config

location ~* wp-config.php {
  deny all;
}

Còn đối với máy chủ Apache thì chèn đoạn sau vào file .htaccess

<Files wp-config.php>;
    order allow,deny
    deny from all
</Files>

8. Khóa đường dẫn wp-admin

Dĩ nhiên thư mục wp-admin và file wp-login.php luôn là điểm tấn công nếu một ai đó muốn truy cập vào website của bạn. Do đó, tốt hơn hết là chặn hết tất cả lượt truy cập vào hai khu vực này, trừ bạn ra.

Để làm được việc này bạn có thể sử dụng tính năng Login Protect trong Incapsula hoặc tạo một file .htaccess trong thư mục wp-admin và chèn đoạn sau vào.

<FilesMatch ".*">
 Order Deny,Allow
 Deny from all
 Allow from 123.456.789
</FilesMatch>

Thay số 123.456.789 thành IP của máy bạn, muốn biết IP mình là gì thì vào đây.

Đối với NGINX thì chèn đoạn này vào file config.

location ~ ^/(wp-admin|wp-login\.php) {
                allow 123.456.789;
                deny all;
  }

9. Sử dụng các plugin quét mã độc

Bước này có thể may mắn cho bạn biết trên host của bạn đang chứa các file nào để mà bạn có thể xóa nó đi hoặc tải về….ngâm cứu. Dưới đây là các plugin tốt nhất để bạn quét mã độc trên host hoàn toàn miễn phí mà bạn có thể dùng:

và nếu bạn có tiền, mình khuyến khích các bạn nên sử dụng Sucuri Premium (chỉ $90/năm) để tìm và tự quét sạch mọi mã độc. Thachpham.com đang dùng dịch vụ này và thấy rất tốt.

Xem thêm: Các plugin hỗ trợ quét mã độc trong WordPress.

Lời kết

Việc bảo vệ mình trước nạn local attack không chỉ dừng lại với các cách ở trên nhưng mình nghĩ nếu bạn làm hết tất cả các bước thì sẽ hạn chế một phần nào khả năng bị tấn công qua hình thức này.

Ngoài ra, có một lưu ý vô cùng quan trọng để hạn chế local hack đó là dùng các shared hosting có uy tín và được hỗ trợ nhanh chóng, danh sách các shared host uy tín bạn có thể xem tại đây.

Đừng quên tham khảo thêm kinh nghiệm Bảo mật WordPress căn bản để có thêm nhiều cách hay hơn để bảo mật WordPress nhé.

Thạch Phạm

Đam mê với web và lập trình, thích viết và chia sẻ, nghiện cà phê và xăm mình, hứng thú với nhạc dân ca và nhạc không lời.

Xem thêm bài viết Subscribe
Do mình về Việt Nam có công việc nên tạm đóng bình luận tới ngày 28/02/2017 vì trong thời gian này mình không hỗ trợ được. Chân thành cáo lỗi về sự bất tiện này.
menu
menu
Hãy ấn nút chia sẻ nếu bạn thấy bài viết có ích!