Hack các trang WordPress trên shared server như thế nào?

Một trang web chỉ an toàn như mắt xích yếu nhất trên shared server của nó. Một khi hacker chiếm được quyền truy cập vào một trang trên server, họ có thể dễ dàng xâm nhập vào các trang khác nằm trên cùng máy chủ có cùng quyền hạn. Điều này gọi là cross-site contamination. Khi điều tương tự xảy đến với các trang web sử dụng WordPress thì nó càng trở nên nguy hiểm vì các hacker đã nắm rõ cấu trúc core trong lòng bàn tay.
Người dùng WordPress hiểu rằng tập tin wp-config.php chứa thông tin chứng thực cơ sở dữ liệu nên việc ngăn người lạ có khả năng đọc tập tin nhạy cảm này là rất quan trọng. Nếu các hacker đánh cắp được những chứng thực cơ sở dữ liệu này, họ sẽ có thể làm những việc ví dụ như: tạo ra các tài khoản quản trị viên mới hoặc chèn dữ liệu spam vào các bài viết.

Có hai điều mà hầu hết các công ty hosting và các chủ trang web thường làm để ngăn chặn những kiểu hack trên:

  • Làm cho wp-config.php không thể đọc bởi bất cứ ai trừ chủ trang web (và tiến trình máy chủ web). Ví dụ như cấu hình quyền hạn 400 (CHMOD).
  • Làm cho các IP từ ngoài không thể kết nối tới cơ sở dữ liệu (chỉ chấp nhận 127.0.0.1 hoặc bên ngoài subnetwork của máy chủ).

Hai bước này giúp bạn tránh khỏi nhiều vấn đề… cho tới khi trang của bạn dính một lỗ hổng Arbitrary File Download (tải về tập tin tùy ý).

1. Lỗ hổng Arbitrary File Download

Lỗ hổng này cho phép các hacker tạo ra một truy vấn tới trang của bạn và trả lại nội dung của tập tin bất kỳ trên máy chủ của bạn (nếu tiến trình máy chủ web có quyền đọc nó). Ví dụ điển hình nhất về một lỗi như vậy là lỗ hổng bảo mật trong các phiên bản cũ của plugin RevSlider cực kỳ phổ biến dẫn đến việc hàng trăm hàng ngàn các trang web WordPress bị lộ thông tin trong năm 2014.

Xem thêm:  Hướng dẫn cài đặt email cơ bản?

Đây là một truy vấn thường thấy trong log của các trang web bị hack:
http://victim.com/wp-admin/admin-ajax.php?action=revslider_show_image&img=../wp-config.php
Hacker đã sử dụng truy vấn này để tải về nội dung của wp-config.php và sau đó dùng các thông tin đăng nhập cơ sở dữ liệu để tạo ra các tài khoản admin WordPress.

2. Những bước ngăn chặn đó đã không giúp được gì?

Thiết lập quyền hạn 400 cho wp-config.php có thể ngăn chặn kiểu tấn công này?

Không. Tập tin đã được truy cập bởi tiến trình máy chủ web – nó có quyền đọc tập tin (nếu nó không thì WordPress không thể hoạt động).

Vậy còn về việc chặn các kết nối tới cơ sở dữ liệu từ bên ngoài mạng máy chủ hay thậm chí từ bất cứ máy chủ nào trừ localhost?

Tất nhiên. Sau khi đánh cắp các thông tin đăng nhập cơ sở dữ liệu, hacker không thể nào đăng nhập từ chính máy tính của họ. Vậy là chúng ta an toàn chứ? Thật không may, có một cách giải quyết điều này và chúng tôi thường xuyên thấy các hacker sử dụng nó.

3. Shared Server

Các hacker có thể kết nối tới cơ sở dữ liệu của WordPress từ cùng máy chủ (mạng) với chính trang web mà họ muốn hack. Làm sao họ có thể làm điều này nếu như họ chưa từng xâm nhập vào trang web trước đó? Câu trả lời là shared server. Các hacker sử dụng một trang đã bị xâm nhập trước kia để khám phá và hack các trang WordPress khác trên cùng máy chủ.

Xem thêm:  6 công cụ Linux để giúp khôi phục dữ liệu từ ổ đĩa bị hỏng

4. Quét các trang bị lỗi bảo mật

Có rất nhiều script phổ biến tận dụng sức mạnh ip của Bing: lệnh để tự động phát hiện các trang bị lỗi trên cùng địa chỉ IP.

Đây là một ví dụ:

$sites = array_map(“site”, bing(“ip:$ip”));
$un=array_unique($sites);
echo “[+] Scanning -> “, $ip, “”.”\n”;
echo “Found : “.count($sites).” sites\n\n”;
foreach($un as $pok){
$linkof=’/wp-content/themes/vulnerable-theme/css/css.php?files= ../../../../wp-config.php’;
$dn=($bda).($linkof);
$file=@file_get_contents($dn);
if(eregi(‘DB_HOST’,$file) and !eregi(‘FTP_USER’,$file) ){
echo “[+] Scanning => “.$bda.”\n\n”;
echo “[+] DB NAME : “.findit($file,”DB_NAME’, ‘”,”‘);”).”\n\n”;
echo “[+] DB USER : “.findit($file,”DB_USER’, ‘”,”‘);”).”\n\n”;
echo “[+] DB PASS : “.findit($file,”DB_PASSWORD’, ‘”,”‘);”).”\n\n”;
echo “[+] DB host : “.findit($file,”DB_HOST’, ‘”,”‘);”).”\n\n”;

Kịch bản này sử dụng hàm bing() để tìm các trang WordPress đã lập chỉ mục trên máy chủ. Với mỗi trang tìm thấy, nó cố gắng nạp URL sẽ trả về nội dung của tập tin wp-config.php. Nếu trang không bị lỗi thì bước này bị bỏ qua. Tập tin wp-config.php đã lấy được sẽ được phân tích và các thông tin đăng nhập cơ sở dữ liệu của các trang WordPress này giờ đã thuộc về các hacker.

Ngoài các thông tin cơ sở dữ liệu, script tương tự có thể đánh cắp thông tin FTP từ wp-config.php (khi tiến trình máy chủ web không có quyền thay đổi tập tin, các trang sẽ có tùy chọn để cấu hình cập nhật WordPress thông qua FTP).
elseif(eregi(‘DB_HOST’,$file) and eregi(‘FTP_USER’,$file)){
echo “FTP user : “.findit($file,”FTP_USER’,'”,”‘);”).”\n\n”;
echo “FTP pass : “.findit($file,”FTP_PASS’,'”,”‘);”).”\n\n”;
echo “FTP host : “.findit($file,”FTP_HOST’,'”,”‘);”).”\n\n”;
}

Do một máy chủ dạng chia sẻ (shared server) có thể lưu trữ hơn một ngàn trang khác nhau nên cơ hội để tìm các trang khác bị lỗi là khá cao. Như bạn có thể thấy, script này cho phép các hacker nhanh chóng thu thập cơ sở dữ liệu, đôi khi là thông tin FTP từ bất cứ trang WordPress nào khác bị lỗi trên cùng máy chủ với trang mà hacker đã có sẵn quyền truy cập.

Xem thêm:  Máy chủ ảo là cánh tay phải giúp Doanh nghiệp phát triển Website

Với danh sách thông tin cơ sở dữ liệu, họ có thể sử dụng chính trang đã bị hack để chạy các script khác kết nối tới DB. Vì script hoạt động trên cùng máy chủ của các nạn nhân, kết nối này sẽ không bị chặn. Từ đây, các hacker có thể tạo tài khoản admin mới trên mỗi trang bị lỗi hoặc chỉ đơn giản thay đổi giao diện trang bằng cách thay đổi tiêu đề trang của chúng (khi động lực duy nhất của hacker chỉ để khoe trên Zone-H).

5. Các cuộc tấn công cấp độ subnetwork (mạng con)

Như bạn có thể biết, một vài nhà cung cấp hosting có các máy chủ cơ sở dữ liệu riêng biệt (dedicated server). Điều này cho phép các trang từ nhiều máy chủ web khác nhau kết nối tới cùng một máy chủ cơ sở dữ liệu. Trong một môi trường như vậy, các máy chủ cơ sở dữ liệu được cấu hình để cho phép nhiều kết nối từ nhiều IP trên cùng mạng con. Điều này khiến cho các cuộc hack hàng loạt sử dụng thông tin cơ sở dữ liệu đánh cắp được thành công hơn nữa. Các hacker chỉ cần một trang web bị xâm nhập trên mỗi mạng con (thay vì một trên mỗi IP) để bắt đầu một cuộc tấn công như vậy.

Trong trường hợp này, script sẽ bắt đầu có dạng như này:

$ip=trim(fgets(STDIN,1024));
$ip = explode(‘.’,$ip);
$ip = $ip[0].’.’.$ip[1].’.’.$ip[2].’.’;
for($i=0;$i <= 255;$i++)
{
$sites = array_map(“site”, bing(“ip:$ip.$i wordpress”));

6. Đánh giá các mối đe dọa và bảo vệ trang web của bạn

 

Tất nhiên, các hacker vẫn cần đánh cắp thông tin cơ sở dữ liệu – điều có thể xảy ra nếu phần mềm mà trang của bạn sử dụng (theme, plugin, bản thân WordPress,…) bị dính lỗ hổng chưa được biết tới hoặc được phát hiện (zero-day). Không có phần mềm nào có thể đảm bảo rằng nó không chứa lỗ hổng bảo mật.

 

 

Theo: Sucuri

0/5 (0 Reviews)