Một trang web Drupal bị hack có thể gây đau đớn cực độ. Bây giờ, có thể có nhiều lý do cho việc hack. Nhưng những phổ biến nhất là mã độc, chèn mã (code injection), spam, v.v. Nếu bạn đang tìm kỹ thuật gỡ mã độc Drupal, bạn đã đến đúng chỗ. Hướng dẫn này chứa hướng dẫn từng bước để dọn dẹp file và cơ sở dữ liệu Drupal của trang web bị hack. Cũng đề cập đến phát hiện mã độc và cửa hậu. Bài viết được khung khéo để dễ áp dụng bởi người dùng trung bình.
Drupal là một trong những CMS lâu đời & an toàn nhất trong số các CMS phổ biến ngày nay. Nó phục vụ hơn một triệu trang web. Tuy nhiên, nhiều lỗ hổng đã được khám phá trong Drupal năm nay. Giống như chuỗi lỗ hổng RCE được đặt tên là Drupalgeddon. Điều này dẫn đến nhiều cài đặt Drupal bị hack trong vài tháng, hầu hết được dùng để khai thác tiền điện tử (mine cryptocurrency). Tuy nhiên, đội ngũ bảo mật Drupal đã kịp phát hành bản vá cần thiết.
Drupal Bị Hack: Hậu Quả Có Thể Của Việc Bị Hack
- Trang lừa đảo (phishing) được thiết kế để đánh cắp thông tin nhạy cảm xuất hiện trên trang web.
- Khách hàng phàn nàn về chuyển hướng độc hại.
- Thông tin nhạy cảm như đăng nhập, ngân hàng, v.v. được bán trên darknet.
- Nội dung vô nghĩa xuất hiện trên trang do Japanese Keyword Hack hoặc Pharma Hack, v.v.
- Thông báo 'Tài khoản của bạn đã bị tạm khóa!' xuất hiện khi đăng nhập.
- Trang Drupal bị đen (blacklisted) bởi công cụ tìm kiếm.
- Trang web Drupal trở nên rất chậm & hiển thị thông báo lỗi.
- Nhiều quảng cáo độc hại & Pop-up xuất hiện trên trang.
- Người dùng ngại truy cập trang do thiếu niềm tin.
- Giảm lưu lượng người dùng và doanh thu.
- Admin mới, độc hại xuất hiện trong cơ sở dữ liệu đăng nhập.
Drupal Bị Hack: Ví Dụ Về Hack Drupal
Khi trang Drupal bị hack, người dùng bị ảnh hưởng có thể tìm thấy sự giúp đỡ từ diễn đàn cộng đồng. Một ví dụ về Drupal bị hack được đưa ra trong hình dưới.
Nguyên Nhân Có Thể Của Hack Drupal
Drupal Bị Hack: SQL Injection Drupal
Lỗ hổng SQLi Drupal thường được tìm thấy trong mô-đun được viết kém (poorly coded modules). Tuy nhiên, SQLi trong lõi (core) rất hiếm và nguy hiểm. Một lỗ hổng nguy hiểm như vậy từng được tìm thấy trong lõi Drupal và được gọi là 'Drupalgeddon', mặc dù Drupal dùng PDO (PHP Data Object) để tách biệt giữa yêu cầu SQL tĩnh và giá trị động.
$query = $db->prepare("SELECT * FROM users WHERE user = :user AND password = :password"); $account = $query->execute(array(':user' => $_POST['user'], ':password' => $_POST['password']));
Mọi thứ có vẻ ổn vì đầu vào được làm sạch đúng cách trước khi đến cơ sở dữ liệu. Tuy nhiên, điểm tranh cãi nằm trong mảng placeholder (placeholder arrays) của Drupal. Chúng nhằm mang lại sự linh hoạt cho nhà phát triển mô-đun, vì chúng cho phép cấu trúc truy vấn cơ sở dữ liệu được thay đổi động.
db_query("SELECT * FROM {node} WHERE nid IN (:nids)", array(':nids' => array(13, 42, 144)));
Sau đó, placeholder :nids sẽ khớp với số lượng đối số cung cấp. Như sau:
SELECT * FROM {node} WHERE nid IN (:nids_0, :nids_1, :nids_2)
Tính năng này kết hợp với mảng chỉ mục (indexed arrays) của PHP có thể dùng để truyền tham số như (GET, POST và cookie). Mảng placeholder của Drupal mặc định giả định tham số $_POST['user'] là một mảng. Sau đó, nó dùng chỉ mục mảng thô (raw array string indexes) để tạo tên placeholder mới. Kết quả, kẻ tấn công có thể cung cấp giá trị độc hại như Tham số: user[0 #], Giá trị:foo. Truy vấn kết quả sẽ là:
SELECT * FROM {users} WHERE user = :user_0 #
Do đó, kẻ tấn công thành công vượt qua xác thực đăng nhập. Hơn nữa, kẻ tấn công thậm chí có thể tạo user mới bằng cách sửa tham số thành user[0; INSERT INTO users VALUES 'MalUser', 'Passw0rd!', 'Administrators'; #]. Đây là lỗ hổng cực kỳ nghiêm trọng vì ảnh hưởng đến lõi Drupal. Đáng báo động hơn là mô-đun Metasploit cũng đã được phát布 để khai thác lỗ hổng này!
Drupal Bị Hack: Vượt Qua Kiểm Soát Truy Cập (Access Bypass) Drupal
Vượt qua kiểm soát truy cập Drupal có thể dẫn đến người dùng truy cập tài nguyên không dành cho họ. Lỗ hổng mới nhất như vậy được đặt tên là SA-CONTRIB-2018-081. Nguyên nhân là do mô-đun Drupal tên JSON:API module 8.x-1.x cho Drupal 8.x. Nó chủ yếu dùng cho:
- Truy cập thực thể nội dung và cấu hình Drupal.
- Thao túng thực thể nội dung và cấu hình Drupal.
Trong trường hợp này, nó không kiểm tra quyền cẩn thận khi phản hồi một số yêu cầu. Điều này cho phép kẻ xấu với quyền không đủ lấy được thông tin nhạy cảm. Kết quả, chỉ yêu cầu GET có thể dùng cho loại tấn công này.
Drupal Bị Hack: Cross-Site Scripting (XSS) Drupal
Lỗ hổng như XSS và SQLi khá phổ biến trong mô-đun Drupal. Mới nhất trong chuỗi này là SA-CONTRIB-2018-080. Mô-đun E-Sign bị phát hiện dễ bị XSS. Mô-đun E-Sign cơ bản cho phép tích hợp Signature Pad vào Drupal. Tại thời điểm viết bài, khoảng 875 trang dùng mô-đun này. Lỗ hổng nảy sinh do thiếu làm sạch đầu vào khi hiển thị chữ ký. Do đó, kẻ tấn công có thể kiểm tra XSS dùng mã <script>alert('XSS Found!')</script>. Trường chữ ký dễ bị tấn công sẽ phun ra thông báo "XSS Found!". Lỗ hổng này có thể được kẻ tấn công dùng để:
- Đánh cắp cookie người dùng.
- Chuyển hướng người dùng.
- Tải mã độc xuống thiết bị người dùng cuối khi truy cập trang Drupal.
Drupal Bị Hack: Thực Thi Mã Từ Xa (RCE) Drupal
Bảo mật Drupal bị ám ảnh bởi chuỗi lỗi Drupalgeddon. Drupalgeddon 3 là lỗi mới nhất tìm thấy năm nay. Nó cho phép người dùng không xác thực chạy mã trên trang Drupal. Mặc dù Drupalgeddon 2 cũng cho phép RCE. Tuy nhiên, để khai thác lỗi đó, kẻ tấn công cần khả năng xóa một node. URL hoàn chỉnh trông như sau:
POST /?q=node/99/delete&destination=node?q[%2523][]=passthru%26q[%2523type]=markup%26q[%2523markup]=whoami HTTP/1.1 [...] form_id=node_delete_confirm&_triggering_element_name=form_id&form_token=[CSRF-TOKEN]
Ở đây, với cái cớ xóa node, kẻ tấn công chèn lệnh whoami. Dòng mã thứ hai là để kiểm tra token CSRF. Token CSRF cơ bản kiểm tra xem yêu cầu có được tạo trên cùng máy chủ hay không. Sau đó, kẻ tấn công lấy form_build_id từ phản hồi như thấy trong mã dưới:
POST /drupal/?q=file/ajax/actions/cancel/%23options/path/[FORM_BUILD_ID] HTTP/1.1 [...] form_build_id=[FORM_BUILD_ID]
Cuối cùng này kích hoạt khai thác và đầu ra của lệnh Whoami được hiển thị. Do đó, kẻ tấn công có thể thực thi mọi loại lệnh để thao túng máy chủ. Điều làm cho lỗi RCE này nghiêm trọng hơn là mã khai thác đã được phát布!
Dọn Dẹp Trang Drupal Bị Hack: Các Bước Dọn Dẹp Mã Độc Drupal
Phát Hiện Nhiễm
Sử Dụng Chẩn Đoán Google (Google Diagnostics)
Khi trang Drupal của bạn bị hack, thường là công cụ tìm kiếm như Google blacklist nó. Do đó, công cụ chẩn đoán của Google có thể dùng để xác định loại và nguyên nhân nhiễm. Báo cáo minh bạch của Google (Google Transparency Report) hữu ích trong trường hợp này. Để kiểm tra:
- Truy cập trang Safe Browsing Site Status từ liên kết sau.
- Trên trang này, tìm tùy chọn 'Check Site Status'.
- Cuối cùng, nhập URL trang web của bạn bên dưới và nhấn nút 'Search'.
- Điều này sẽ cung cấp thông tin về chuyển hướng spam v.v. nếu trang của bạn bị nhiễm. Xác định nguyên nhân nhiễm Drupal và làm việc để loại bỏ nó.
Quét Trang Web Của Bạn
Để phát hiện trang bị nhiễm, hãy quét trang web. Có nhiều lựa chọn miễn phí như VirusTotal. Hoặc, bạn có thể nén toàn bộ file thành .zip và tải lên quét. Tuy nhiên, giải pháp bảo mật miễn phí có thể không cho kết quả mong muốn, do đó khuyến cáo liên hệ chuyên gia gỡ mã độc.
Kiểm Tra File Đã Sửa Đổi
Thường, cửa hậu nhiễm trang Drupal có thể sửa đổi file lõi Drupal. Sửa đổi file trang Drupal có thể kiểm tra bằng các bước sau:
- Kết nối đến trang Drupal qua SSH.
- Tạo thư mục mới bằng lệnh: mkdir drupal-y.x. Thay 'y' bằng series Drupal của bạn i.e. 7,8,9. và 'x' bằng bản phát hành Drupal i.e. 4.7.1, 2.1.3, v.v.
- Điều hướng đến thư mục đó bằng lệnh:
cd drupal-y.x - Tải bản sao mới của phiên bản Drupal bằng lệnh:
wget https://github.com/drupal/core/archive/y.x.tar.gz - Giải nén file tar.gz bằng lệnh:
tar -zxvf core-y.x.tar.gz - Cuối cùng so sánh khác biệt giữa file lõi bằng lệnh:
diff -r core-y.x ./public_html
Hoặc, cũng có thể làm bằng cách đăng nhập trang web qua SSH và chạy lệnh:
find ./ -type f -mtime -20
Lệnh này sẽ liệt kê tất cả file được sửa đổi trong 20 ngày qua. Kiểm tra ngày sửa đổi của file và nếu có gì đáng ngờ, quét file đó để tìm mã độc.
Kiểm Tra Nhật Ký Người Dùng
Nhật ký người dùng có thể giúp bạn xác định bất kỳ đăng nhập đáng ngờ nào vào trang của bạn bởi hacker. Để làm vậy:
- Đăng nhập vào trang quản trị (Administrative page) của trang Drupal.
- Từ Menu, Nhấp vào tùy chọn 'People'
- Xem người dùng có trong danh sách này và cả 'Last Access Time' của mỗi user. Nếu tìm thấy đăng nhập đáng ngờ, tiến hành tìm lỗ hổng trong trang.
Dọn Dẹp File Nhiễm Và Xóa Mã Che Giấu (Obfuscated Code)
Sau khi trang bị nhiễm được xác định, nhiễm có thể là một phần (một ít mã trong file lõi) hoặc toàn bộ file. Nếu file chứa ký tự vô nghĩa, có thể do hầu hết thời gian kẻ tấn công che giấu mã trong định dạng không đọc được. Định dạng Base64 rất phổ biến בקרב kẻ tấn công. Để xóa mã như vậy:
- Đăng nhập trang web qua SSH.
- Sau đó, kiểm tra mã base64 bằng lệnh:
find . -name "*.php" -exec grep "base64"'{}'; -print &> hiddencode.txt.
Mã này sẽ quét mã được mã hóa base64 và lưu vào hiddencode.txt. - Tải văn bản từ hiddencode.txt lên dịch vụ trực tuyến như liên kết này để phân tích thêm.
- Nhấp vào tùy chọn 'Decode' trên trang này. Sẽ hiển thị mã gốc.
- Các che giấu khác như FOPO cũng có thể giải mã bằng dịch vụ trực tuyến.
- Nếu nhiễm là toàn bộ file không thuộc gói lõi. Xóa file.
- Nếu nhiễm một phần trong file lõi, nếu bạn xác định được mã độc, xóa nó. Ngược lại, bình luận (comment) nó và nhờ giúp đỡ
Vô Hiệu Hóa Cửa Hậu (Backdoors) Drupal
Cửa hậu Drupal có thể tìm thấy ẩn trong thư mục như: /modules, /themes, /sites/all/modules, và /sites/all/themes. Phát hiện chúng không dễ vì mã thường được che giấu. Để tìm mã như vậy, làm theo bước ở "Dọn Dẹp File Nhiễm Và Xóa Mã Che Giấu". Cũng, các cửa hậu này dùng một số hàm PHP.
Để vô hiệu hóa các hàm đó, làm theo các bước:
- Đăng nhập trang web và mở trình quản lý file (file manager).
- Duyệt và mở file php.ini.
- Thêm mã sau vào file:
disable_functions = "show_source, system, shell_exec, passthru, exec, popen, proc_open, allow_url_fopen, eval"
Dọn Dẹp Cơ Sở Dữ Liệu Drupal
Cơ sở dữ liệu Drupal thường bị mã độc nhắm vào. Để dọn dẹp cơ sở dữ liệu trang Drupal bị nhiễm, làm theo các bước:
- Đăng nhập trang Drupal qua Administrator panel.
- Điều hướng đến Data Access>Drupal Database

- Ở đây, trong thanh tìm kiếm, tìm liên kết hoặc nội dung đáng ngờ hiển thị khi quét mã độc.
- Mở bảng chứa nội dung spam và liên kết đó. Sau đó, xóa thủ công nội dung.
- Khi xong, xác minh trang web vẫn hoạt động và xóa bất kỳ công cụ quản lý cơ sở dữ liệu nào khác.
Bảo Mật Drupal: Chặn Kẻ Tấn Công
Đảm bảo không có thông tin đăng nhập nào bị xâm phạm. Đặt lại mật khẩu trang Drupal sau khi dọn dẹp mã độc. Để đổi mật khẩu, đăng nhập trang Drupal.
Dùng phpMyAdmin
- Nếu bạn cài phpMyAdmin, Điều hướng đến cPanel>Databases box>phpMyAdmin.
- Sau đó, chọn cơ sở dữ liệu Drupal và nhấp vào tab SQL.
- Bây giờ, trong trường văn bản nhập lệnh sau:
update users set pass=md5('YOURPASS') where uid = 1; - Thay 'YOURPASS' bằng mật khẩu bạn muốn đặt và cuối cùng nhấn Go!
Dùng Drush
- Để quản trị trang qua Drush, đảm bảo mô-đun Drush được cài đặt.
- Để dùng Drush, kết nối trang web qua SSH.
- Bây giờ, cho người dùng Drupal-8, chạy lệnh:
drush user-password UserName --password="your-new-password". - Cho Drupal-9, chạy lệnh:
drush user:password UserName "your-new-password"
Ở đây, thay 'UserName' bằng User của trang Drupal và 'your-new-password' bằng mật khẩu bạn muốn. Đảm bảo mật khẩu an toàn và có kết hợp tốt chữ cái, số, ký tự.
Bảo Mật Drupal: Khôi Phục File
Khôi phục trang bị nhiễm từ bản sao lưu. Nếu bản sao lưu không có thì dùng bản sao mới. Sau khi file được dọn dẹp thì xóa cache theo cách sau:
- Đăng nhập trang Drupal qua SSH.
- Từ terminal, chạy lệnh:
drush cache-rebuild(cho Drupal 8)
hoặc
drush cache-clear all(cho Drupal 7).
Nếu trang Drupal của bạn bị blacklist bởi Google hoặc nhà cung cấp hosting, gửi trang để xem xét lại (review).
Giảm Thiếu Hack Drupal
Bảo Vệ Thư Mục Nhạy Cảm
Quan trọng là chặn truy cập vào thư mục nhạy cảm. Có thể làm qua các bước:
- Đăng nhập trang web và mở trình quản lý file.
- Tạo file mới tên .htaccess bên trong thư mục bạn muốn bảo vệ.
- Trong file đó chèn mã sau:
Order Deny,Allow
Deny from all
Allow from 22.33.44.55
Đoạn mã này sẽ từ chối truy cập người truy cập vào những thư mục cụ thể. Ở đây, dòng cuối chỉ định IP được phép. Cũng xem bên trong file .htaccess đã sửa đổi. Nếu tìm thấy file như vậy hãy ưu tiên dọn dẹp nó trước.
Cập Nhật Và Sao Lưu
Đảm bảo bạn dùng phiên bản Drupal mới nhất. Đội ngũ bảo mật Drupal vá lỗi nghiêm trọng với mỗi bản cập nhật. Điều này có thể xác minh bằng changelog. Hơn nữa, tránh dùng plugin không uy tín vì chúng có thể chứa mã lỗi. Đảm bảo tạo bản sao trang web. Điều này có thể giúp khôi phục trang sau tấn công. Cập nhật và sao lưu là phương pháp rẻ nhất và hiệu quả nhất để bảo mật trang Drupal.
Kiểm Tra Bảo Mật (Security Audit)
Kiểm tra bảo mật có thể tiết lộ lỗ hổng quan trọng trong trang Drupal. Không phải admin web nào cũng là chuyên gia bảo mật. Do đó dịch vụ như Astra có thể lo bảo mật cho admin web. Kiểm tra bảo mật và pentesting của Astra có thể tiết lộ trách nhiệm (responsibly disclose) các mối đe dọa nghiêm trọng trên trang.
Điều này cho phép admin web thực hiện biện pháp phòng ngừa để ngăn chặn trang Drupal bị hack. Kiểm tra bảo mật như của Astra mô phỏng tấn công thời gian thực trong môi trường an toàn để không gây hại cho trang và đồng thời tìm thấy lỗ hổng quan trọng. Kiểm tra bảo mật như của Astra có thể tìm thấy lỗ hổng phổ biến như OWASP Top 10 trong trang Drupal.
Drupal Malware Scanner Và Firewall
Lỗ hổng mới được khám phá trong Drupal mỗi tháng. Tuy nhiên, điều này không ngụ ý trang Drupal sẽ vẫn không an toàn. Tường lửa có thể ngăn kẻ tấn công khai thác lỗ hổng này ngay cả khi trang Drupal dễ bị tấn công. Tuy nhiên, quan trọng là chọn tường lửa phù hợp trong nhiều tường lửa có sẵn trên thị trường. Tường lửa Astra là cái nổi bật trên tất cả tham số. Nó rất mạnh mẽ và có khả năng mở rộng. Nghĩa là, dù blog nhỏ hay trang thương mại điện tử lớn, Astra có thể bảo mật tất cả. Hơn nữa, Astra có thể honeypot (bẫy) kẻ tấn công và chặn các tấn công phổ biến.
Bộ quét mã độc Drupal của Astra có thể phát hiện mã độc từ trang bị hack trong vài phút. Nó cũng sẽ lấy sự khác biệt file cho bạn mà bạn có thể xóa bằng một cú nhấp chuột nếu chúng độc hại.