Tấn công Replay là gì?
Replay Attack (Tấn công phát lại) là kiểu tấn công mạng mà kẻ xấu chặn bắt (sniff) một gói tin hoặc chuỗi giao tiếp hợp lệ (đã được xác thực/mã hóa), sau đó phát lại (re-transmit) gói tin đó nguyên vẹn hoặc với độ trễ nhất định để lừa hệ thống nhận diện là một phiên làm việc hợp pháp, từ đó chiếm lấy quyền truy cập, thực hiện giao dịch giả mạo hoặc bypass kiểm soát truy cập.
Đặc điểm chính
- Kẻ tấn công không cần giải mã nội dung gói tin (vẫn hiệu quả ngay cả khi traffic được mã hóa).
- Khai thác việc hệ thống không kiểm tra tính tươi (freshness) của thông điệp: timestamp, nonce, sequence number, session ID dùng một lần.
- Phân loại: Tấn công chủ động (Active attack) – vì kẻ tấn công tiêm gói tin vào mạng.
Ví dụ điển hình
- Xác thực đơn giản: Client gửi hash mật khẩu (hoặc token) để login. Kẻ chặn gói tin → phát lại sau 5 phút → server chấp nhận vì token chưa hết hạn và không có nonce.
- Giao dịch tài chính: Chặn gói tin "chuyển 100$ cho A" → phát lại 10 lần → tài khoản bị trừ 1000$.
- Session Replay: Chặn cookie phiên (session ID) → dùng cookie đó để truy cập tài khoản nạn nhân mà không cần mật khẩu.
- Keyless entry (ô tô): Chặn tín hiệu key fob mở khóa → phát lại gần xe → xe mở khóa.
Phân loại Replay Attack
| Loại | Mô tả |
|---|---|
| Simple Replay | Phát lại nguyên gói tin chặn được. |
| Replay với chỉnh sửa nhẹ | Thay đổi một số trường (IP nguồn, timestamp) nhưng giữ phần xác thực. |
| Session Replay / Cookie Replay | Dùng session ID/cookie đánh cắp để chiếm phiên làm việc. |
| Credential Replay | Phát lại gói tin chứa mật khẩu/hash/OTP đã chặn. |
Mối liên quan với Man-in-the-Middle (MitM)
Replay thường là một bước trong chuỗi MitM: kẻ tấn công chặn (intercept) → có thể đọc/sửa (nếu không mã hóa end-to-end) → phát lại (replay) để duy trì phiên hoặc leo thang đặc quyền. Do đó, chống MitM (TLS 1.3, certificate pinning, HSTS) cũng giúp giảm rủi ro replay.
Cách phòng chống (Mitigation)
- Nonce / Challenge-Response: Server gửi số ngẫu nhiên (nonce) mỗi phiên, client phải ký/ mã hóa nonce đó → gói tin cũ không thể dùng lại.
- Timestamp + Window: Yêu cầu timestamp trong gói tin, server chỉ chấp nhận trong cửa sổ thời gian ngắn (vd: ±30 giây). Cần đồng bộ giờ (NTP).
- Sequence Number: Mỗi gói tin có số thứ tự tăng dần, server loại bỏ gói tin số lặp hoặc lùi.
- Session Token dùng một lần (One-time token) / JWT với exp ngắn + refresh token rotation.
- TLS 1.3 + Perfect Forward Secrecy (PFS): Khóa phiên tạm thời, không thể dùng lại session cũ.
- Anti-replay window trong IPsec/ESP (RFC 4303): Sliding window 64-bit.
- HTTP Idempotency Key / Idempotency-Header cho API tài chính.
Tóm tắt
Replay attack là mối đe dọa thực tế đối với mọi giao thức thiếu cơ chế freshness. Giải pháp cốt lõi: mỗi phiên/giao dịch phải có giá trị duy nhất, không thể dự đoán, không thể dùng lại (nonce, timestamp, sequence number, ephemeral keys). Triển khai TLS 1.3, IPsec ESP, OAuth 2.0 PKCE, JWT với exp ngắn, idempotency key là các biện pháp tốt nhất hiện nay.