Hướng dẫn Fix lỗi tấn công flood ra ngoài của Memcached

IP binding của memcached

Memcached hiện được sử dụng rất phổ biến nhất là trên các VPS chạy wordpress.

Các plugins tiêu biểu là W3 Total Cache sử dụng memcached để lưu dữ liệu Page. Trên MediaWiki memcached là một trong những cấu hình mặc định hỗ trợ.

Mục tiêu bài viết này chủ yếu phân tích để bạn hiểu nguyên lý khai thác lỗ hổng bảo mật và hướng dẫn fix lỗi trên Memcached một cách nhanh chóng. Nếu trên VPS của bạn đang sử dụng Memcached hãy làm theo các bước hướng dẫn bên dưới để fix lỗi.

Nguyên lý khác thác lỗ hổng bảo mật của Memcached

Hacker lợi dụng phản hồi của Memcached và gửi đến cho server bạn địa chỉ phản hồi là IP của nạn nhân thông qua giao thức UDP.

Mặc định memcached hoạt động trên cổng 11211 và bind trên địa chỉ 0.0.0.0

IP binding của memcached

Khi một ứng dụng được bind trên địa chỉ 0.0.0.0 thì có nghĩa là nó cho phép các địa chỉ IP ở bên ngoài (Internet) truy vấn. Do đó các hacker đã lợi dụng điều này để tạo ra các truy vấn tới Memcached trên server của bạn.

Vì sao lại chọn giao thức UDP, vì giao thức này không cần xác minh địa chỉ IP trước khi gửi gói tin. Nên địa chỉ mà hacker gửi là một fake IP của nạn nhân sẽ bị DDOS.

Memcached sẽ hoạt động như bản năng của nó lưu lại truy vấn và phản hồi truy vấn, với tốc độ truy suất nhanh của RAM tạo ra các phản hồi nhanh chóng tới địa chỉ fake IP mà hacker yêu cầu.  Điều này vô tình khiến máy chủ của bạn trở thành một công cụ tấn công DDOS.

Giải pháp fix lỗi

Có hai giải pháp để fix lỗi này rất ngắn gọn:

  1. Chỉ cho phép Memcached bind trên địa chỉ local 127.0.0.1 đây là địa chỉ localhost và hacker không thể giao tiếp với Memcached từ bên ngoài.
  2. Sử dụng firewall (ví dụ CSF firewall) hoặc iptables không mở cổng 11211 trên giao thức UDP.

Giải pháp triệt để nhất vẫn là sửa lại cấu hình Memcached vì có thể có bạn không sử dụng firewall.

Hướng dẫn thực hiện

Bước 1: Thay đổi địa chỉ Bind của Memcached

Vào VPS của bạn bằng tài khoản root và sửa file cấu hình của Memcached :

nano /etc/sysconfig/memcached

Nếu trên VPS của bạn chưa cài nano bạn có thể sử dụng lệnh vi để thay thế

vi /etc/sysconfig/memcached

Ở đây tôi sử dụng nano vì thói quen và các tổ hợp phím dễ nhớ.

Nội dung của file /etc/sysconfig/memcached

PORT="11211"
USER="memcached"
MAXCONN="1024"
CACHESIZE="64"
OPTIONS=""

Bạn sẽ thay thế dòng OPTIONS=”” bằng

OPTIONS="-l 127.0.0.1 -U 0"

Chú ý: chữ  “L” thường không phải số 1

Ý nghĩa cú pháp trên là chỉ cho phép Memcached được bind trên địa chri localhost và không cho phép giao thức UDP.

Bấm Ctrl + O để lưu.

Bấm Ctrl + X để thoát khỏi soạn thảo.

Bước 2: Khởi động lại Memcached

Để khởi động lại Memcached bạn gõ lệnh như sau:

service memcached restart

Bước 3: Kiểm tra kết quả

Kiểm tra xem Memcached đã bind trên địa chỉ local hay chưa bạn gõ lệnh sau:

netstat -ntpl | grep "memcached"
Memcached bind trên 127.0.0.1

Memcached bind trên 127.0.0.1

Nếu kết quả hiện ra như hình sau thì đã fix lỗi thành công.

Was this article helpful?

Related Articles

Leave A Comment?

This site uses Akismet to reduce spam. Learn how your comment data is processed.