Stack under attack: what we learned about handling DDoS attacks
Bài tóm tắt Stack Overflow 2022 3. Quy mô lớn Độ khó: Trung bình
Stack Overflow · 2022 · 3. Quy mô lớn · Độ khó: Trung bình — bài gốc
Bối cảnh
Trong vài tháng trước 5/2022, Stack Overflow liên tục bị DDoS theo hai kiểu: tầng ứng dụng nhắm vào API, và dồn lưu lượng nhắm vào site chính. Đến lúc viết bài, nhiều đợt chỉ còn thấy trong log và dashboard.
Thay đổi chính
- Tấn công tầng ứng dụng:
- một botnet rất lớn gọi một query rất đắt, đẩy vài server backend lên 100% CPU. Mỗi IP chỉ gửi vài request (có IP chỉ hai), nên rate limit theo IP vô dụng;
- đội viết bộ lọc theo dấu hiệu của request; lúc đầu chặn quá tay, sau tinh chỉnh dần;
- kẻ tấn công đổi sang trang user với số trang cực lớn và tăng dần số trang để tránh bị chặn, cùng khai thác một điểm yếu ở chỗ khác. Lại thêm bộ lọc.
- Tấn công dồn lưu lượng:
- botnet gửi rất nhiều
POSTtới/questions/(có dấu/cuối, URL site không dùng) nên chặn cả path; kẻ tấn công bỏ dấu/rồi quay lại; - đổi cách: gom IP botnet và chặn ở CDN (Fastly), traffic không tới được server. Lần tấn công thứ ba bị chặn ngay;
- kẻ tấn công chuyển sang mỗi lần chỉ bật vừa đủ bot, chặn đợt này thì đợt khác tới. Đội viết script đọc log traffic, tự đưa IP có hành vi đặc trưng vào blocklist, nên mỗi đợt phản ứng nhanh hơn.
- Có lúc chặn cả exit node Tor vì chiếm phần lớn traffic tấn công; user hợp lệ phản đối nên phải lên Meta giải thích.
- botnet gửi rất nhiều
- Khuyến nghị theo bài:
- API: bắt mọi lời gọi xác thực (hoặc giới hạn chặt hơn cho ẩn danh), giới hạn lượng dữ liệu mỗi lời gọi (phân trang, chỉ tải phần đang hiển thị), rate limit mọi API, lọc traffic xấu trước khi tới app (HAProxy), giữ log dễ truy vấn;
- lưu lượng: chặn URL lạ (dấu
/thừa,POSTtới path không có), chặn IP độc hại dù có chút traffic hợp lệ đi chung ("chặn một ít traffic tốt vẫn hơn sập với mọi người"), tự động hoá blocklist, dùng tarpit để làm chậm botnet.
Vì sao
Theo bài: DDoS đi kèm với thành công trên Internet. Bị tấn công liên tục cho thấy rõ thao tác nào lặp lại để tự động hoá, và chỗ nào monitoring còn thiếu (tấn công tầng ứng dụng có dấu hiệu sớm mà trước đó không có alert).
Bài học cho SWE
- Endpoint đắt mà ai cũng gọi được là bề mặt tấn công; giới hạn kích thước trang và độ sâu phân trang là phòng thủ chứ không chỉ là UX.
- Rate limit theo IP không đủ trước botnet phân tán; cần lọc theo dấu hiệu của request, và chặn càng xa app (CDN) càng tốt.
- Sau sự cố: tự động hoá thao tác lặp lại, viết runbook cho phần chưa tự động được, và đưa việc thông báo cho user vào runbook.
- Log HTTP dễ truy vấn (ở Stack Overflow là log HAProxy trong SQL, xem Stack Overflow 2018) là thứ giúp tìm ra mẫu tấn công.
Liên quan
#DDoS#Application-layer attack#Volumetric attack#Botnet#Rate limit#CDN blocklist#Fastly#HAProxy#Tarpit#Runbook#Tor
Được nhắc tới trong
Công ty (1)