Published on

Cảnh báo về việc public các server Redis

Authors

Bài viết đầu năm xin gửi đến những bạn làm hệ thống, hãy luôn kiểm tra và theo dõi hệ thống của mình một cách sát sao nhất có thể. Mọi việc bắt đầu khi mình có tài khoản Shodan.io 🔗 nhờ deal 1$ lifetime 🔗 và thật sự không biết làm gì sau khi mua nó. Sau một hồi dùng thử và định bỏ cuộc, mình nhận ra Shodan có sẵn một số preset tìm kiếm, trong đó bao gồm các hệ cơ sở dữ liệu. Mình chọn ngay Redis vì cách access rất đơn giản, thông thường không được bảo vệ bằng mật khẩu và kết quả không làm mình thất vọng.


Sau khi lọc kết quả từ Việt Nam 🔗, có khoảng 100 server chạy Redis đang được mở public và việc của mình chỉ cần vào và "tìm hiểu" thôi. Như mình đã nói, cách access vào một server Redis rất đơn giản, bạn chỉ việc dùng câu lệnh redis-cli -h ip.address là xong. Với những bạn chưa có tài khoản Shodan.io thì không thể tìm kiếm nhưng có thể xem qua Shodan.io "biết" gì về mình bằng cách truy cập vào đường dẫn https://www.shodan.io/host/103.109.43.20 🔗 và thay địa chỉ IP thành của bạn.

true


Mở server Redis có vấn đề gì?

Mặc định khi cài đặt, Redis chỉ cho phép kết nối từ local tức là chỉ có những phần mềm cùng máy mới có thể kết nối được. Do đó, việc mở server Redis chỉ có thể là chủ động từ phía người quản lý và hậu quả (nếu có) cũng từ sự lơ là này.

Lúc đầu mình cũng chỉ dự định tìm hiểu cho vui và cũng không nghĩ có quá nhiều thông tin quan trọng nằm trong các server này. Nhưng trò vui có thể vẫn còn phía trước. Trong quá trình tìm kiếm, mình thấy các server Redis có thể bị lợi dụng để:

Một số server sử dụng Redis để làm full page caching cho Nginx, vì vậy nếu muốn thay đổi "tạm" nội dung hiển thị đều có thể được. Hoặc nếu đỏng đảnh hơn, mình có thể gửi request để xóa hết toàn bộ cache của Redis server này mỗi 5s, từ đó, bạn sẽ không nhận được lợi ích gì từ việc caching cả.

Cái thứ hai mình có nhiều thông tin quan trọng hơn mà mình tìm được, đó là các key-value lưu tạm thông tin người dùng, người chơi game. Có 2 server mà mình tìm được. Một để lưu tạm OTP để verify cho số điện thoại (lúc đăng ký, mình nghĩ vậy), từ đó mình có đầy đủ thông tin người dùng bao gồm năm sinh, địa chỉ email, số điện thoại và mật khẩu OTP. Một dạng khác là của các server game dùng để lưu tạm thông tin của người chơi và các item khác, có thể dùng để trục lợi.

Cái cuối cùng và bị lợi dụng hơn cả là sử dụng như một máy đào tiền ảo. Các hacker tiêm các đoạn mã độc vào trong Redis và bằng cách nào đó khiến các đoạn mã này thực thi được, dẫn tới server trở thành một mạng lưới đào tiền ảo cho người khác. Theo thống kê của Imperva, hơn 75% server Redis 🔗 cho phép truy cập từ bên ngoài dính phải trường hợp này, bạn có thể đọc thêm tại đây 🔗.


Bạn phải làm gì?

Việc đầu tiên cần làm là kiểm tra server Redis của bạn có đang bị mở public hay không bằng nhiều cách rất đơn giản, chẳng hạn như sử dụng tool Open Port Check 🔗 kiểm tra có đang mở cổng 6379 không.

true

Nếu kết quả trả về là Open, bạn nên cấu hình lại server Redis nếu không cần mở public bằng cách chỉnh bind-address về 127.0.0.1 trong tập tin cấu hình. Trong trường hợp bạn cần sử dụng Redis cho một kiến trúc server nào đó, hãy chỉ giới hạn access cho những server thật sự cần, còn lại luôn là tinh thần BLOCK ALL toàn bộ.

Trong đêm đó, mình gửi khoảng 5 email thông báo cho các đơn vị cũng khá lớn, báo điện tử có, game nhiều người chơi có và thật sự thất vọng khi chỉ có duy nhất 1 đơn vị phản hồi. Số còn lại có fix hay nhận được email không không mình cũng không rõ :D

true