Tăng cường bảo mật cho site WordPress

Thông qua một khảo sát cho Sài Gòn WordPress Meetup #23, chúng mình nhận được khá nhiều request cho topic về Security và Performance cho WordPress. Chính bản thân mình dù dùng WordPress nhiều nhưng có ít nhu cầu về hai vấn đề này, đa số các site đều không lớn. Nhân tiện đây mình cũng đã tìm hiểu và tổng kết lại những gì tìm hiểu được trong bài viết này, cũng là nội dung cho bài talk trong meetup.

Thực ra có một bài viết rất đầy đủ về vấn đề này trên WordPress là: Hardening WordPress. Nội dung bài viết này cũng tương tự như vậy.

Trước khi muốn bảo mật site thì nên biết vì sao người ta lại muốn tấn công vào website của bạn, thường thì không ai làm gì mà không có mục đích cả.

Tại sao người khác muốn tấn công website của bạn?

  1. SEO
    Hacker có thể muốn chiếm quyền điều khiển của bạn để tăng cường SEO cho các site khác bằng cách chèn back-link vào site của bạn hoặc chèn link affiliate để dẫn dụ người đọc của bạn click vào.
  2. SPAM
    Server của bạn cũng có thể bị dùng để gửi email. Hacker có thể xâm nhập vào server của bạn để chiếm quyền gửi email SPAM.
  3. Phát tán malware
    Website với lượng user lớn luôn là mảnh đất màu mỡ để phát tán malware, hacker có thể tấn công site của bạn để dùng nó làm công cụ phát tán malware.
  4. Đánh cắp dữ liệu
    Một lý do thường gặp đó là hacker muốn lấy thông tin về order và nhất là khách hàng. Nó sẽ rất có giá trị đối với đối thủ cạnh tranh của bạn.
  5. Làm bàn đạp để tấn công site khác
    Khi tấn công local attack, hacker sẽ tìm những site nằm trên cùng 1 server và có độ bảo mật kém nhất để tấn công, từ đó làm bàn đạp để tấn công site mà họ chủ đích muốn tấn công.
  6. Luyện tập
    Nhiều khi ai đó tấn công bạn chỉ vì họ mới học được cái gì đó mới và muốn tìm đối tượng thực hành thôi. Có thể họ sẽ không làm gì nguy hiểm với bạn, nhiều khi để thể hiện ta đây giỏi nên họ còn thông báo cho bạn để fix nữa.

Các phương pháp dưới đây đều là để phòng ngừa, đối với mỗi phương thức tất công của hacker thì các phương pháp tương ứng sẽ phát huy tác dụng và có thể những cái khác sẽ trở nên vô dụng. Nhưng phòng ngừa phải toàn diện, vì vậy bạn nên dành thời gian để tâm đến mọi phương pháp này.

Không bao giờ sử dụng username admin cho tài khoản administrator

Đây là nguyên tắc cơ bản, không chỉ cho site WordPress mà kể cả những dịch vụ, phần mềm khác cũng vậy. Có một loại tấn công là brush force. Để tấn công brush force, hacker sẽ cố đoán username/password của bạn bằng cách thử qua tất cả những gì mà họ đoán được. Thông thường họ sẽ có một danh sách những từ thường dùng, luôn có từ admin ở top đầu danh sách.

Nếu bạn dùng admin làm username thì sẽ giúp hacker tiết kiệm rất nhiều thời gian.

Cách thay đổi username

Bạn có thể làm theo ba cách.

Cách thứ nhất: Tạo một user administrator mới, login vào account mới đó và xóa account cũ đi.

Cách thứ hai: Cài đặt các plugin hỗ trợ thay đổi username để đổi.

Cách thứ ba: Truy cập vào database và trực tiếp đổi username.

Bạn đọc bài này để biết chi tiết: Thay đổi username trong WordPress.

Sử dụng account editor để viết bài

Bênh cạnh admin thì hacker sẽ thử những username mà họ biết chắc là tồn tại trên blog của bạn. Vì account adnimistrator cũng có quyền đăng bài, và người ta thì lười, dùng chính account đó để đăng bài luôn.

Hãy tạo thêm một account có quyền editor và đăng bài băng bằng account nó, giữ bí mật administrator account của bạn.

Giảm tối đa số lượng administrator

Nếu bạn cẩn thận mà bạn bè của bạn vô ý thì cũng hoài công. Mà cũng không có nhiều lý do để phân quyền admin cho một nhóm người. Vì vậy hãy hạn chế tối đa số lượng administrator. Tốt nhất là chỉ nên có một account duy nhất cho một mình bạn mà thôi.

Gỡ bỏ những thứ không cần thiết

Càng nhiều code thì càng nhiều điều phải lo lắng, chi bằng hãy gỡ bỏ tất cả những plugin, theme mà bạn không dùng tới, thậm chí là những plugin đã deactive lâu ngày cũng nên gỡ bỏ, vì nếu nó có bug, thì sẽ dễ bị khai tác hơn nếu đoạn code gây bug của nó nằm trên server của bạn.

Sử dụng mật khẩu mạnh

Quay lại brush force như đã nói ở trên, hacker sẽ cố đoán username/password, Vì vậy hãy đặt một cái thật khó, để nó không tồn tại trong words list của hacker, nếu hacker cố đoán bằng cách tổ hợp các chữ cái thì cũng sẽ mất rất rất nhiều thời gian.

Bạn có thể sử dụng các tool như lastpass, 1password để tạo password tự động. Nhưng password quá khó đối với chính não của bạn thì hãy dùng lastpass hoặc 1password, hoặc google chrome để lưu lại, chứ đừng viết ra giấy hoặc note.

Giới hạn số lần login sai

Vẫn là brush force. Nếu bạn nhớ lại lần cuối cùng bạn thử đoán mật khẩu mở khóa điện thoại của bồ thì bạn sẽ hiểu phương pháp này. Brush force cũng giống như bạn cố thử đi thử lại nhiều mật khẩu khác nhau, nếu sau n lần mà điện thoại chưa cấm bạn thử login thì có lẽ bạn vẫn sẽ tiếp tục thử thêm và biết đâu đã thành công.

Bảo vệ site WordPress cũng vậy, hãy cài các plugin giúp giới hạn số lần login sai. Nó sẽ kéo dài thời gian của hacker và có thể làm họ nản chí với cách tấn công brush force này.

Dưới đây là các plugin bạn có thể sử dụng:

  1. Jetpack
  2. WP Limit Login Attempts

Ngoài ra còn các plugin lâu đời như:

  1. Login Lockdown
  2. Limit Login Attempts

Sử dụng Two-Factor Authentication

Nếu mật khẩu mạnh thôi thì cũng đã tốt rồi, nhưng nếu muốn an toàn nữa thì hãy cài thêm plugin hỗ trợ Two-Factor Authentication để mỗi lần đăng nhập thì phải thêm một bước xác minh từ điện thoại.

Việc này sẽ làm hacker khó khăn hơn. Tất nhiên là cũng còn tùy vào phương thức tấn công của họ.

Có vài plugin tốt mà bạn có thể sử dụng như sau:

  1. Google Authenticator
  2. Duo Two-Factor Authentication
  3. Two Factor Authentication
  4. Rublon 2FA

Theo dõi dấu hiệu tấn công

Nên cài đặt plugin theo dõi để biết được dấu hiệu của một cuộc tấn công, nhờ vậy bạn có thể chủ động chống lại nó. Dưới đây là các plugin bạn nên cài đặt:

  1. Sucuri Security
  2. WP Security Audit Log

Trong trường hợp site bị tấn công cho đến mức sập luôn thì nó sẽ không thể thông báo cho bạn. Trừ các plugin có kèm theo dịch vụ theo dõi từ bên ngoài hoặc các dịch vụ theo dõi như UptimeRobot hoặc Pingdom

Khi mã độc chèn vào file của bạn thì các file này bị thay đổi, vậy bạn cũng nên theo dõi sự thay đổi của file bằng các plugin sau:

  1. Wordfence
  2. Sucuri Security

Ẩn giấu file wp-config.php

Cấu hình server để không cho phép bất kỳ ai truy cập vào các file quan trọng như wp-config.php

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

Tắt file editing

Dù không phải là cách hiệu quả, nhưng dù sao đi nữa bạn cũng chẳng mấy khi cần phải chỉnh sửa file trong dashboard, nếu cần chỉnh sửa thì FTP tiện lợi hơn nhiều. Mặt khác, nếu hacker chiếm được account admin của bạn thì File Editing này sẽ rất tiện lợi cho họ. Dù răng nếu không có nó thì họ cũng sẽ tấn công vào file của bạn, nhưng sẽ mất thêm một ít thời gian, tùy vào phương thức của họ.

Tắt nó đi rất đơn giản, mở file wp-config.php và thêm dòng này vào:

define( 'DISALLOW_FILE_EDIT', true );

Chọn hosting tốt

Để tấn công một website thì có rất nhiều đường, nếu bạn bảo mật code rất kỹ, giả sử như không có bất kỳ một lỗi nào trong code, thì hacker vẫn có thể tấn công bạn một cách đơn giản hơn rất nhiều so với việc cố tìm bug trong code, đó là thông qua con đường server.

Server và mạng là một lĩnh vực khác so với code. Code giỏi chưa chắc đã giỏi về mạng và bảo mật server. Vì vậy chọn một server tốt là rất quan trọng.

Mình không giỏi trong vụ này, theo nhiều lời khuyên thì bạn có thể sử dụng một trong các dịch vụ sau:

  1. wpengine.com
  2. digitalocean.com
  3. azdigi.com

Mỗi server chỉ nên cài đặt 1 site

Như đã nói ở phần trước, local attack sẽ tìm một site yếu nhất và tấn công nó để chiếm server hoặc lợi dụng nó để chèn mã độc vào các site khác. Nên càng nhiều site trên 1 server thì càng nhiều rủi ro. Bạn chỉ nên cài 1 site trên 1 server.

Luôn update mọi thứ

Code luôn có lỗi, và khi lỗi bị phát hiện thì nó được fix hoặc bị khai thác. Nếu bạn không update thì bug đó sẽ bị khai thác và website của bạn bị tấn công.

Nhiều khi update sẽ làm website của bạn bị lỗi vì các plugin không tương thích. Nên hãy nhớ backup trước khi update.

Chỉ cài đặt các plugin đáng tin cậy

Plugin là nơi chủ yếu gây ra lỗi cho WordPress nên chỉ cài đặt những plugin đáng tin cậy, được update thường xuyên, được nhiều người sử dụng. Tuyệt đối không sử dụng plugin được chia sẻ không rõ nguồn gốc, plugin nulled, lâu ngày không được update.

Sử dụng SSL

Hacker có thể tấn công vào đường truyền internet của bạn và đọc dữ liệu truyền giữa bạn và server, từ đó có thể lấy được thông tin account và các dữ liệu quan trọng khác mà không cần phải đụng vào code hoặc server của bạn.

SSL giúp mã hóa dữ liệu trao đổi giữa bạn và server, đồng thời cũng giúp xác minh “danh tính” của bạn và server, giúp trách được các kiểu tấn công thông dụng.

SSL ngày nay không còn là đồ xa xỉ nữa, Let’s Encrypt cung cấp SSL miễn phí cho tất cả mọi người.

Cài đặt plugin hỗ trợ security

Có nhiều plugin hỗ trợ scurity mà bạn có thể cài dặt như:

  1. Sucuri Security
  2. iThemeSecurity

Các plugin này cung cấp nhiều tính năng về bảo mật, bao gồm nhiều phương pháp mà mình đang nhắc đến trong bài viết này, đồng thời scan và báo cáo các nguy cơ về bảo mật, gợi ý cho bạn các phương pháp khắc phục.

Không cho thực thi file php trong thư mục upload

Tạo file .htaccess trong thư mục wp-content/uploads với nội dung như sau:

# Kill PHP Execution
<Files ~ "\.ph(?:p[345]?|t|tml)$">
deny from all
</Files>

Các file php trong thư mục này sẽ không thể thực thi. Có thể vì lý do nào đó mà hacker có thể upload file php hoặc giấu code php vào các file ảnh và thực thi các file này tiếp tục tấn công.

Backup

Luôn backup để khi bị tấn công bạn có thể dễ dàn phục hồi lại sau đó. Hoặc không bị mất dữ liệu khi bị spam hoặc phá hoại.

Có khá nhiều dịch vụ backup, nhưng nên dùng dịch vụ backup ở một hosting khác hoặc có cài đặt đặt biệt. Nếu các bản backup nằm chung với code của bạn, thi khi hacker chiếm quyền server họ cũng chẳng khó khăn gì để động tay động chân với các bản backup này.

Theo dõi các website về bảo mật WordPress

Ngoài ra thì bạn nên theo dõi website wpvulndb.com. Website dữ liệu về các lỗi của WordPress, theo dõi để đảm bảo rằng mình không sử dụng một phiên bản plugin, theme, WordPress nào chưa lỗi đã được liệt kê trên website này.

Lời kết

Bảo mật là cả một vấn đề lớn và cần nhiều đầu tư. Cái giá bạn bỏ ra để đầu tư nên tương ứng với giá trị website của bạn. Nếu bạn là một công ty lớn với nhiều dữ liệu quan trọng thì nên đầu tư tương ứng để bảo vệ, những gì mình nói trong bài này có lẽ không đủ bảo vệ bạn, nhưng nếu chỉ là một website nho nhỏ và bạn chỉ muốn nó không bị chèn backlink hoặc bị phá hoại thì nhiêu đây là tương đối đầy đủ.

Mình cũng không rành lắm về bảo mật, nếu bạn có kinh nghiệm và muốn chia sẻ, hãy cho mọi người biết trong phần comment hoặc viết một bài cụ thể và gửi về cho tụi mình. Cảm ơn các bạn.