Biện Pháp Phòng Chống Tấn Công Man-in-the-Middle
Vài tháng trước, một nhóm kỹ sư phát triển game trong công ty đã chia sẻ với tôi về một hình thức tấn công MITM tinh vi nhắm vào hệ thống game của chúng tôi. Kẻ tấn công đã thiết lập một dịch vụ proxy, cài đặt phần mềm độc hại lên máy người dùng để chuyển hướng toàn bộ kết nối TCP từ client đến server game qua proxy này. (Cần lưu ý rằng việc can thiệp này không nhất thiết phải thực hiện trực tiếp trên máy người dùng - các thiết bị mạng như gateway hay router cũng có thể bị tấn công mà người dùng không thể kiểm soát.)
Dịch vụ proxy này có khả năng theo dõi toàn bộ giao tiếp giữa client và server, chờ đợi đến giai đoạn xác thực hoàn tất, sau đó thay thế hoàn toàn kết nối của người dùng bằng kết nối giả mạo để chiếm quyền điều khiển tài khoản. Hậu quả nghiêm trọng nhất là dẫn đến việc đánh cắp tài sản ảo của người chơi.
Trong buổi thảo luận gần đây với các đồng nghiệp, chúng tôi đã phân tích kỹ lưỡng vấn đề này và tìm kiếm giải pháp khắc phục. Mặc dù nhóm phát triển game đã triển khai nhiều cải tiến bảo mật cho giao thức truyền thông, nhưng qua phân tích chuyên sâu, tôi nhận thấy vẫn còn những điểm yếu tiềm ẩn cần được khắc phục triệt để.
Dưới đây là phiên bản đơn giản hóa của giao thức hiện tại cùng phân tích điểm yếu:
Giao thức xác thực hiện tại:
- Client tạo một số ngẫu nhiên, mã hóa bằng bí mật chung giữa client và server (kết hợp mật khẩu người dùng và OTP từ thiết bị xác thực cứng như将军令)
- Gửi kèm giá trị kiểm tra (checksum) để xác minh tính toàn vẹn
- Server giải mã, xác thực checksum, sau đó sử dụng số ngẫu nhiên này làm khóa phiên để thiết lập kênh truyền bảo mật
Điểm yếu chính:
- OTP từ将军令 và các thiết bị tương tự chỉ có độ dài 6 chữ số thập phân (~20 bit), mức độ bảo mật quá thấp khi đối mặt với tấn công brute-force
- Kẻ tấn công MITM có thể ghi lại toàn bộ quá trình bắt tay xác thực, sau đó thực hiện tấn công offline để dò tìm OTP dựa trên tiêu chí xác thực thành công
- Với độ dài 20 bit và thời hạn hiệu lực OTP lên đến 60 giây, việc dò quét toàn bộ không gian khóa (~1 triệu giá trị) có thể hoàn thành trong vài giây
Giải pháp đề xuất:
1. Ứng dụng mã hóa bất đối xứng RSA:
- Thay thế bí mật chung bằng cặp khóa RSA (public/private)
- Độ dài khóa 128 bit trở lên cung cấp mức bảo mật vượt trội so với OTP 20 bit
- Khóa công khai (public key) có thể phân phối linh hoạt qua nhiều kênh an toàn
- Thách thức: Tăng tải tính toán do xử lý thuật toán RSA, cần cân nhắc giữa bảo mật và hiệu năng hệ thống
2. Tối ưu hóa cơ chế checksum:
- Giảm độ dài checksum xuống còn 8 bit
- Tạo ra hiện tượng “nhiễu” khi tấn công brute-force: Mỗi OTP hợp lệ sẽ có ~4,096 giá trị giả mạo (fake OTP) cũng thỏa mãn checksum
- Kết hợp với giới hạn số lần thử (ví dụ: 4 lần/60 giây/IP) sẽ giảm xác suất thành công của mỗi lần tấn công xuống còn ~0.1%
- Triển khai cơ chế giới hạn tần suất đăng nhập theo IP và tài khoản để ngăn chặn tấn công quy mô lớn
Trong quá trình thảo luận, anh Châu Phong từ Youdao đã chia sẻ một tài liệu trình bày (slide 16-19) phân tích chi tiết vấn đề này với tiêu đề “How to set up a strong, shared key given only a short OTP”, tài liệu này cung cấp nhiều góc nhìn chuyên sâu và giải pháp
Phân tích bổ sung:
- Với mô hình game hiện đại, việc tích hợp đa lớp bảo mật (multi-factor authentication) kết hợp phần cứng và phần mềm là xu hướng tất yếu
- Có thể nghiên cứu ứng dụng các thuật toán mã hóa nhẹ (lightweight cryptography) như Curve25519 để giảm tải cho server khi sử dụng mã hóa bất đối xứng
- Triển khai hệ thống phát hiện hành vi bất thường (anomaly detection) để phát hiện sớm các cuộc tấn công MITM dựa trên mẫu kết nối và hành vi người dùng
Việc nâng cấp hệ thống bảo mật cần được thực hiện theo từng giai đoạn, đảm bảo tính khả thi kỹ thuật và cân bằng giữa yếu tố bảo mật, hiệu năng hệ thống và trải nghiệm người dùng.