Thủ thuật Website

Dọn dẹp WordPress: Bài học kinh nghiệm về bảo mật trang web

Ai đó đang cầm một chiếc máy tính xách tay với dòng chữ 'Bạn đã bị tấn công!'  hiển thị trên màn hình

Bạn đã làm việc trong một dự án trong nhiều tháng, bạn đã giao chìa khóa cho khách hàng, và sau đó bạn nhận được email đáng sợ đó …

… trên trang [x] một số người dùng đã gặp phải các quảng cáo và cửa sổ bật lên kỳ lạ. Tôi nghĩ rằng trang web đã bị tấn công! Tôi không biết phải làm gì. Xin vui lòng giúp đỡ! …

Tôi đã phải đối mặt với tình huống này gần đây. Tôi tình nguyện hoàn thành một dự án cho một tổ chức phi lợi nhuận (không phải tổ chức nơi tôi làm việc 9 -5). Họ đã mất một năm để xây dựng một trang web mới khi nhà phát triển mà họ thuê ban đầu đã tạo ma cho họ.

Tôi là một chàng trai JavaScript, vì vậy tôi không quen thuộc với toàn bộ WordPresshệ sinh thái, nhưng tôi nghĩ rằng tôi biết đủ, tôi đã xây dựng plugin của riêng mình cho công việc để đưa một Reactứng dụng thông qua một mã ngắn, nghĩ rằng, “Làm thế nào Nó thậm chí không phải là sự phát triển thực sự … “(đừng xúc phạm, chỉ thể hiện những gì tôi đang nghĩ vào thời điểm đó).

Tôi rất ý thức về các vấn đề bảo mật trong Node.jsmôi trường, nhưng tôi đã luôn dựa vào các dịch vụ khác để chăm sóc bảo mật cho máy chủ . Tôi đã nghe nói về .htaccesstệp, nhưng tôi chưa bao giờ đưa ứng dụng ngăn xếp LAMP của riêng mình vào sản xuất từ ​​đầu. Tôi thậm chí đã không suy nghĩ về nó vì tôi đã tập trung nhiều hơn và vào công nghệ như , Reactvà thậm chí một chút .GatsbyReact NativeAngular

Dễ dàng (về độ khó) là xử lý tất cả các yêu cầu của front-end để hoàn thành trang web theo mong đợi của khách hàng, tôi đã tự cho mình là người không biết về phần còn lại của những gì liên quan. Tôi muốn chia sẻ những gì tôi đã học được trong hai tuần qua để (1) Tôi sẽ không quên lần sau, và (2) để bạn có thể tránh nhiều sai lầm mà tôi đã mắc phải.

Tôi sẽ cố gắng cung cấp liên kết đến tất cả các nguồn đã giúp tôi trong hành trình gần đây của tôi và để nói ngắn gọn qua một số phần quan trọng hơn. Hãy gọi điều này:

WordPress Security 101

1. Luôn thuê một nhà phát triển mà bạn biết hoặc có thể tin cậy có thể xác minh được

Rất hấp dẫn để thuê nhà phát triển rẻ nhất mà bạn có thể tìm thấy. Nhưng đôi khi bạn nhận được những gì bạn phải trả cho.

Tôi thích rằng có những trang web nơi các nhà phát triển có thể được xếp hạng hoặc để lại các bài đánh giá công khai, như Upwork hoặc LinkedIn (bạn muốn đề xuất những người khác?). Những điều này giúp cung cấp trách nhiệm giải trình cho nhà phát triển và một số cảm giác an toàn cho khách hàng. Trong trường hợp cụ thể này, nhà phát triển ban đầu đã lấy một khoản phí thấp cho một trang web khá phức tạp và cắt bỏ một loạt các góc.
Liên kết:

  • https://www.upwork.com/

2. Không bao giờ tải xuống và sử dụng các chủ đề hoặc nulledchủ đề đã mở khóa – trả phí thông thường từ một thị trường chủ đề uy tín. Nếu không, bạn có thể cài đặt Phần mềm độc hại !!!

Tôi thậm chí không đặt câu hỏi về việc sử dụng chủ đề trên trang web của khách hàng. Khi biết khách hàng, tôi cho rằng họ sẽ tự mua chủ đề nhưng hóa ra họ lại giao nó cho nhà phát triển, người có lẽ vì thiếu hiểu biết hoặc sẵn sàng cắt giảm tải xuống một chủ đề trực tuyến đã bị hỏng với wp_vcdphần mềm độc hại.

Tôi chỉ phát hiện ra phần mềm độc hại đã ở đó bao lâu bằng cách so sánh trang web hiện tại với các phiên bản của cơ sở mã đã tồn tại trong khi trang web ngoại tuyến hoặc ở chế độ bảo trì.

Phần mềm độc hại cụ thể này đã được tìm thấy bên trong functions.phpvà nó đã tạo ra ba tệp bên trong wp-includeswp-feed.php,, wp-vcd.phpwp-tmp.phpNó bao bọc các trang bằng các tập lệnh quảng cáo độc hại và cũng thêm một tập lệnh ghi lại địa chỉ IP của người dùng có quyền chỉnh sửa trang web và bỏ qua những người dùng đó một cách có hệ thống, vì vậy họ sẽ không bao giờ phát hiện hành vi độc hại khi tự duyệt trang web, cho dù đã đăng nhập hay chưa, cho dù duyệt web riêng tư hay không.

Sau khi đăng nhập vào máy chủ từ xa với tư cách là người dùng cấp quản trị viên, lúc đầu tôi thấy các tệp trông kỳ lạ trong wp-includesthư mục. Tôi đã gỡ bỏ chúng, nghĩ rằng tôi đã giải quyết được vấn đề. Phần mềm độc hại đang tạo chuyển hướng đến các trang web có oclaservermiền và ghi địa chỉ IP vào wp-feed.php. Tôi đã sử dụng tập lệnh dòng lệnh sau để tìm các tệp này.

grep -Ril "oclaserver"
  • greptìm kiếm các tệp cho các dòng phù hợp với một mẫu nhất định.
  • Rthực hiện tìm kiếm đệ quy, xem qua tất cả các tệp và thư mục trong giám đốc hiện tại
  • ibỏ qua trường hợp
  • lchặn đầu ra để chỉ liệt kê tên tệp

Ban đầu, tôi mặc dù điều này đã giải quyết được vấn đề, nhưng lần sau khi tôi kiểm tra, các tệp đã trở lại. Tôi xóa các tập tin, sau đó kiểm tra lại, ngay lập tức, các tập tin một lần nữa ở đó, đầy đủ nội dung giống nhau. Điều này có nghĩa là của tôi wpdbđã bị hỏng hoặc một số tệp khác được WordPress gọi liên tục đã bị hỏng, hoặc có thể cả hai.

Tôi đã làm gì tiếp theo?

Trước khi xem qua DB của tôi phpMyAdmin, trước tiên tôi đã xác định và xóa tất cả các chủ đề và plugin không sử dụng. Các tệp liên tục xuất hiện. Vì vậy, tôi bắt đầu tìm kiếm các thuật ngữ trong các tệp.

Điều tôi tìm ra thủ phạm là trong wp-tempđoạn mã đã đặt một biến mật khẩu. Suy nghĩ duy nhất của tôi là đây là mã băm của mật khẩu quản trị (vì vậy tôi đã ghi chú để thay đổi mật khẩu quản trị sau khi dọn dẹp). Tôi đã chạy greplệnh tương tự nhưng thay vào đó đã tìm kiếm giá trị mật khẩu đó.

Lo và kìa, functions.phpchủ đề cha mẹ sáng lên. Ở đó, tôi tìm thấy một loạt mã hack đang quấn tất cả các trang bằng tập lệnh độc hại và bỏ qua một cách có hệ thống các IP nơi người dùng quản trị đã đăng nhập.

Sau khi xóa mã, tôi đã xóa các tệp độc hại từ bên trong wp-includesvà các tệp không quay trở lại. Tôi vẫn chưa chắc chắn Phần mềm độc hại đã biến mất hoàn toàn vì tôi nhận thấy rằng mã trong wp-tempđang tạo một cookie trên máy khách.

Sau khi xóa mã, tôi đã xóa các tệp độc hại từ bên trong wp-includesvà các tệp không quay trở lại. Tôi vẫn chưa chắc chắn Phần mềm độc hại đã biến mất hoàn toàn vì tôi nhận thấy rằng mã trong wp-tempđang tạo một cookie trên máy khách.

Trước khi thay đổi mật khẩu quản trị, tôi đặt lại SALT Keystrong wp-config.phptệp bằng https://api.wordpress.org/secret-key/1.1/salt/ .

Sau đó, tôi đã xóa bộ nhớ cache và cookie khỏi trình duyệt của mình và đăng nhập vào wp-admintrang web từ cửa sổ ẩn danh. Chỉ sau đó tôi mới đặt lại mật khẩu quản trị viên.

Cuối cùng, tôi đã tạo một người dùng quản trị mới cho chính mình và khuyến khích khách hàng thêm 2FA để đăng nhập thông qua Plugin Google Authenticator .

Liên kết:

  • https://www.getastra.com/blog/911/how-to-fix-wp-vcd-backdoor-hack-in-wordpress-functions-php/
  • https://stackoverflow.com/questions/46219263/php-code-in-functions-php-of-all-wordpress-websites-on-my-shared-hosting
  • https://labs.sucuri.net/wp-vcd-malware-comes-with-nulled-themes/
  • https://blog.sucuri.net/2016/05/nulled-wordpress-themes-malvertising-black-hat-seo.html

3. Trên máy chủ của bạn, hãy thêm người dùng mới và xóa thông tin đăng nhập root để khiến ai đó khó hack máy chủ của bạn hơn.

Vì khách hàng đã cài đặt trang web của họ và chạy trên Ubuntu 18.04 một giọt Digital Ocean, nhà phát triển trước đó đã có sshquyền truy cập vào giọt này. Tôi thực sự không muốn họ có thể đăng nhập lại, cho dù họ có ý định bất chính hay không. Tôi nhận thấy chỉ có một người dùng root trên hệ thống, vì vậy tôi đã tạo một người dùng mới cho chính mình:

sudo adduser myuniqueusername

Sau đó, tôi đã thêm người dùng mới của mình vào sudonhóm người dùng:

sudo usermod -aG sudo myuniqueusername

Và sau đó tôi đã thêm các đặc quyền quản trị vào myuniqueusername:

sudo visudo

Trong vòng /etc/sudoers:

myuniqueusername ALL=(ALL:ALL) ALL

Cuối cùng, trong /etc/ssh/sshd_config:

PermitRootLogin no

Sau đó, từ dòng lệnh, khởi động lại ssh:

sudo service ssh restart

Từ đó, hãy làm bất cứ điều gì cần thiết để tạo sshkhóa cho tài khoản mới của bạn , thiết lập các khóa đó, đăng xuất và sau đó đăng sshnhập lại với tư cách là bạn.

4. Quản lý quyền đối với tệp trên máy chủ để ngăn chặn những thay đổi không chính đáng. Từ trong thư mục gốc của cài đặt WordPress của bạn (có thể /var/www/html/), hãy làm như sau:

Tìm người dùng và máy chủ của bạn thuộc nhóm nào và đảm bảo rằng người dùng của bạn có quyền sở hữu tất cả các tệp WordPress của bạn.

sudo groups
sudo usermod -aG groupname myuniqueusername
sudo find . -exec chown myuniqueusername:groupname {} +

Thay đổi tệp để chỉ chủ sở hữu (bạn) mới có thể ghi và chỉ những người khác mới có thể đọc được, Thay đổi thư mục để chỉ được tạo, sửa đổi hoặc xóa bởi bạn hoặc WordPress và ngăn không cho bất kỳ ai khác ngoài bạn hoặc wordpress đọc hoặc ghi vào wp-config.

sudo find . -type f -exec chmod 664 {} +
sudo find . -type d -exec chmod 775 {} +
sudo chmod 660 wp-config.php

Liên kết:

  • https://www.smashingmagazine.com/2014/05/proper-wordpress-filesystem-permissions-ownerships/
  • https://wordpress.org/support/article/hardening-wordpress/#changing-file-permissions

5. Thêm cứng vào httpd.confcấu hình Apache của bạn bằng cách tắt biểu ngữ Máy chủ, tăng .htaccesscường tệp của bạn, bằng cách vô hiệu hóa danh sách thư mục, vô hiệu hóa HTTP Trace, ngăn chặn MIME dò tìm, ngăn chặn clickjacking, ngăn một số hình thức tập lệnh giữa các trang web và bảo mật cookie của bạn bên trong wp-config.php.

Trong /etc/apache2/httpd.confhoặc /etc/apache2/apache2.conf:

ServerSignature Off
ServerTokens Prod

Sau đó, từ dòng lệnh:

sudo service apache2 restart

Bên trong .htaccess, chèn giữa # BEGIN WordPressvà # END WordPress:

Options -Indexes
RewriteEngine On 
RewriteCond %{REQUEST_METHOD} ^TRACE 
RewriteRule .* - [F]
Header set X-Content-Type-Options nosniff
Header always append X-Frame-Options SAMEORIGIN
Header set X-XSS-Protection "1; mode=block"

Bên trong wp-config.php, thêm vào cuối:

@ini_set('session.cookie_httponly', true);
@ini_set('session.cookie_secure', true);
@ini_set('session.use_only_cookies', true);

Có một số thảo luận về việc liệu phương pháp trên có tốt nhất hay không, bạn có thể và có lẽ cũng nên thêm cookie cứng vào cấu hình máy chủ apache của mình, xem các liên kết bên dưới.

Liên kết:

  • https://docs.sucuri.net/warnings/hardening/
  • https://geekflare.com/wordpress-x-frame-options-httponly-cookie/
  • https://wordpress.stackexchange.com/questions/175436/cookie-set-without-httponly-flag
  • https://geekflare.com/http-header-implementation/

6. Thêm các Plugin bảo mật như Sucuri Sannervà Limit Login Attempts.

Liên kết:

  • https://wordpress.org/plugins/limit-login-attempts/
  • https://wordpress.org/plugins/sucuri-scanner/

Lời kết

Danh sách trên không có nghĩa là đầy đủ và nó chỉ dựa trên những điều tôi đã học được trong vài tuần qua. Tôi rất sẵn lòng sửa chữa, cộng hoặc trừ những điều ở trên bởi bất kỳ ai có nhiều kinh nghiệm hơn. Mặc dù tôi không có kế hoạch tập trung chủ yếu vào WordPress, nhưng tôi đang học hỏi ngày càng nhiều thứ hơn LAthông LAMPqua trải nghiệm này và vào cuối ngày, với sự quan tâm của tôi Gatsby, tôi có thể sẽ tham gia ngày càng nhiều hơn vào hệ sinh thái .

Điều đó đang được nói, không có gì sai khi tìm hiểu thêm về bảo mật trang web.

Ngay cả khi các trang web tĩnh là tương lai, việc giữ an toàn cho CMS và máy chủ web của chúng tôi sẽ không bị mất hoặc vẫn là kiến ​​thức giả định.

Related Articles

Trả lời

Email của bạn sẽ không được hiển thị công khai.

Back to top button