Hiện nay với việc WordPress ngày càng phổ biến thì vấn đề bảo mật website WordPress ngày càng được chú trọng do các hacker cũng tập trung ngày càng nhiều vào nền tảng này. Một trong những phương pháp thường được sử dụng là local attack hoặc hack local. Vậy local attack nghĩa là gì ?
Local Attack thực chất là tấn công 1 trang web thông qua 1 trang khác cùng server với nó. Vì sao phải làm như vậy? Vì trang ta cần tấn công không có (hoặc không tìm thấy lỗi) nên phải nhờ 1 trang khác cùng server, và trang này phải dính lỗi.
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.
Và 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ệ.
Quy trình local attack (hay hack local ) bao gồm các bước như sau:
- Dò tìm các user có trong server.
- Dò tìm và đọc nội dung file config của các website (trong WordPress nó là wp-config.php).
- Lấy thông tin login vào database từ file config.
- Tấn công tài khoản quản trị admin.
- Bước cuối cùng là up shell.
Và ở trong bài viết này, chúng ta cùng nhau tìm hiểu một số cách thức hỗ trợ 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.
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:
01
02
03
04
|
<php if ( !defined( 'ABSPATH' ) ) define( 'ABSPATH' , dirname( __FILE__ ) . '/' ); require_once (ABSPATH . '../giauconfig/wp-config.php' ); |
Bạn thay chữ giauconfig
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?
01
02
03
04
05
06
07
08
|
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
01
|
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
01
|
define( 'DISALLOW_FILE_MODS' ,true); |
6. CHMOD 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.
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
01
02
03
|
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
01
02
03
04
|
<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.
01
02
03
04
05
|
<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.
01
02
03
04
|
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.