Đọc số liệu lưu lượng khi bị tấn công: pps, bps, cps và vì sao Gbps chưa nói hết

Khi báo một đợt tấn công, điều đầu tiên hay được hỏi là “lưu lượng bao nhiêu”. Phần lớn câu trả lời là một con số Gbps. Con số đó cần thiết nhưng không đủ, và nhiều đợt tấn công gây thiệt hại nặng lại có số Gbps rất nhỏ.

Bài này giải thích ba con số thật sự quyết định, và cách đo chúng trên máy của quý Khách hàng.

1. Ba con số, ba kiểu tấn công khác nhau

Viết tắt Tên Đo cái gì Kiểu tấn công tương ứng
bps bit mỗi giây Khối lượng dữ liệu. Thường nói theo Gbps Làm nghẽn đường truyền
pps gói tin mỗi giây Số lượng gói tin, không kể to nhỏ Làm cạn sức xử lý của thiết bị mạng
cps hoặc rps kết nối hoặc yêu cầu mỗi giây Số lượt kết nối, số lượt gọi vào ứng dụng Làm cạn sức xử lý của máy chủ và ứng dụng

Ba con số này không tỷ lệ với nhau. Đây là chỗ gây nhầm nhiều nhất.

Hai ví dụ cho thấy vì sao:

Đợt A: 20 Gbps, gói tin cỡ lớn. Nhìn con số thì đáng sợ, nhưng đây là kiểu dễ nhận và dễ lọc nhất, vì nội dung gói tin vô nghĩa và chặn được ở lớp mạng trước khi tới máy chủ. Đợt B: 0,2 Gbps, nhưng là hàng chục nghìn lượt gọi mỗi giây vào trang tìm kiếm. Con số băng thông nhỏ tới mức không ai để ý, nhưng mỗi lượt gọi làm cơ sở dữ liệu chạy một truy vấn nặng. Máy chủ sập trong vài phút.

Đợt B khó hơn đợt A, dù số Gbps nhỏ hơn một trăm lần. Lý do: lưu lượng ấy trông giống khách thật, nên không chặn được bằng cách lọc đơn giản.

Nên khi báo sự việc, gửi đủ cả ba con số. Chỉ gửi Gbps thì bên nhận chưa biết đang đối phó với loại nào.

2. Đo bps: khối lượng dữ liệu

# Can goi sysstat
# Lay mau moi giay, 10 lan, tren moi card mang
sar -n DEV 1 10

Kết quả cho hai cột đáng chú ý:

Cột Nghĩa
rxkB/s Nhận vào, kB mỗi giây
txkB/s Gửi ra, kB mỗi giây

Đổi sang Gbps: lấy rxkB/s nhân 8 rồi chia một triệu.

Không có sar thì đo bằng công cụ có sẵn:

# Doc hai lan cach nhau 1 giay roi tru. Thay eth0 bang ten card mang that
# Xem ten card mang: ip -br link
C=eth0
A=$(cat /sys/class/net/$C/statistics/rx_bytes)
sleep 1
B=$(cat /sys/class/net/$C/statistics/rx_bytes)
echo "nhan vao: $(( (B - A) * 8 / 1000000 )) Mbps"

⚠️ Giới hạn quan trọng: con số đo trên máy chủ là lưu lượng đã tới được máy. Khi đường truyền bị nghẽn, phần lớn lưu lượng tấn công bị chặn hoặc rơi ở trước đó, nên máy chủ thấy con số nhỏ hơn thực tế rất nhiều. Số đo thật của đợt tấn công nằm ở lớp mạng, và đó là số Cloudzone đo được.

Nói cách khác: máy chủ đo thấy 0,5 Gbps không có nghĩa đợt tấn công chỉ 0,5 Gbps. Nó có thể nghĩa là đường truyền đã đầy và phần còn lại không vào được, kể cả lưu lượng của khách thật.

3. Đo pps: số gói tin

Đây là con số bị bỏ qua nhiều nhất, và là con số làm thiết bị mạng quá tải.

sar -n DEV 1 10

Hai cột cần nhìn:

Cột Nghĩa
rxpck/s Gói tin nhận vào mỗi giây
txpck/s Gói tin gửi ra mỗi giây

Hoặc không có sar:

C=eth0
A=$(cat /sys/class/net/$C/statistics/rx_packets)
sleep 1
B=$(cat /sys/class/net/$C/statistics/rx_packets)
echo "goi tin nhan vao: $(( B - A )) pps"

Cách đọc: chia rxkB/s cho rxpck/s để biết kích cỡ gói tin trung bình.

Cỡ gói trung bình Thường nghĩa là
Lớn, gần mức tối đa của đường truyền Truyền dữ liệu thật, hoặc tấn công kiểu làm nghẽn băng thông
Rất nhỏ, vài chục byte Dấu hiệu rõ của tấn công nhằm vào số lượng gói tin

Vì sao gói tin nhỏ lại nguy hiểm hơn: thiết bị mạng và nhân hệ điều hành xử lý theo từng gói. Mỗi gói đều phải được xem xét, dù nó chứa 40 byte hay 1500 byte. Nên một triệu gói nhỏ mỗi giây tốn sức xử lý hơn nhiều so với cùng khối lượng dữ liệu đóng trong các gói lớn.

Cũng kiểm số gói bị rơi:

ip -s link show eth0

Dòng RX: ... dropped khác không và đang tăng là dấu hiệu máy không kịp xử lý lượng gói tin đang vào.

4. Đo cps và rps: số kết nối và số yêu cầu

Số kết nối đang mở, theo trạng thái:

ss -ant | awk 'NR>1 {print $1}' | sort | uniq -c | sort -rn

Các trạng thái đáng chú ý:

Trạng thái Nghĩa Nhiều bất thường thì
ESTAB Kết nối đã thiết lập, đang dùng Tải thật cao, hoặc tấn công ở lớp ứng dụng
SYN-RECV Máy đã nhận yêu cầu mở kết nối, đang chờ phía kia xác nhận Dấu hiệu kinh điển của tấn công vào quá trình bắt tay
TIME-WAIT Kết nối vừa đóng, còn giữ chỗ một lúc Thường bình thường, nhiều quá thì kiểm cấu hình ứng dụng
FIN-WAIT Đang đóng dở Nhiều có thể do phía khách ngắt giữa đường

Rất nhiều SYN-RECV là một trong vài dấu hiệu gần như kết luận được ngay: trong trao đổi bình thường, trạng thái này chỉ tồn tại vài phần nghìn giây.

Số yêu cầu mỗi giây vào ứng dụng web:

# Dem so dong nhat ky trong mot phut gan nhat roi chia 60
# Thay dinh dang ngay cho dung may cua ban: xem mot dong bang
#   tail -1 /var/log/nginx/access.log
awk -v moc="$(date -d '1 minute ago' '+%d/%b/%Y:%H:%M')" \
    '$4 ~ moc' /var/log/nginx/access.log | wc -l

Hoặc đơn giản hơn, đếm theo từng giây để thấy mức cao nhất:

awk '{print substr($4, 2, 20)}' /var/log/nginx/access.log \
  | uniq -c | sort -rn | head -10

Lệnh này cho mười giây có nhiều yêu cầu nhất trong cả tệp nhật ký, kèm con số. Đây chính là rps ở lúc cao điểm.

5. Gửi gì cho Cloudzone

Bảng này điền xong là đủ để bên kỹ thuật biết đang đối phó loại nào.

Số liệu Lúc bình thường Lúc đang có hiện tượng
Nhận vào, Mbps
Gói tin nhận vào, pps
Cỡ gói trung bình, byte
Kết nối ESTAB
Kết nối SYN-RECV
Yêu cầu mỗi giây vào web
CPU đang dùng, phần trăm

Cột “lúc bình thường” là cột quan trọng nhất và cũng là cột hay bị để trống. Không có nó thì con số bên phải không nói lên điều gì: 5000 yêu cầu mỗi giây là tấn công với một website nội bộ, nhưng là một buổi chiều bình thường với một sàn thương mại.

Vì vậy hãy đo và lưu cột bên trái ngay hôm nay, lúc hệ thống còn bình thường.

Kèm thêm:

  • Thời điểm bắt đầu, càng chính xác càng tốt.
  • Hai mươi địa chỉ gọi nhiều nhất và hai mươi đường dẫn bị gọi nhiều nhất, xem bài “Phân biệt bị tấn công DDoS với quá tải do chính hệ thống”.
  • Dịch vụ nào bị ảnh hưởng và biểu hiện ra sao: chậm, hay không vào được hẳn.

6. Ba con số còn cho biết tấn công nhắm vào lớp nào

Đây là cách dùng ba con số để suy ra lớp bị nhắm, từ đó biết việc xử lý nằm ở đâu.

Con số nào vọt lên Tấn công nhắm vào Xử lý ở lớp nào
Chủ yếu bps, gói tin lớn Đường truyền Lớp mạng, phía Cloudzone
Chủ yếu pps, gói tin nhỏ Thiết bị mạng, nhân hệ điều hành Lớp mạng, phía Cloudzone
cps với nhiều SYN-RECV Quá trình mở kết nối Lớp mạng, kèm tinh chỉnh trên máy chủ
Chủ yếu rps, kết nối trông hợp lệ Ứng dụng Cần lọc ở lớp ứng dụng, phối hợp hai bên

Hàng cuối là hàng cần phối hợp nhiều nhất. Lưu lượng ở đó là các yêu cầu hợp lệ về mặt giao thức, nên phân biệt được hay không phụ thuộc vào hiểu biết về chính ứng dụng: đường dẫn nào khách thật hay gọi, gọi với nhịp nào, tham số nào là hợp lý. Đó là thông tin chỉ phía quý Khách hàng có.

7. Khi cần hỗ trợ

Nhắn qua khung chat ở góc phải màn hình, gửi bảng ở mục 5. Đang trong lúc sự cố thì cứ gửi phần nào có trước, không cần chờ điền đủ.

Hai bài liên quan:

  • “Phân biệt bị tấn công DDoS với quá tải do chính hệ thống” để xác định có đúng là tấn công không.
  • “Nghi bị tấn công DDoS: cần làm gì và báo gì cho Cloudzone” cho các bước xử lý.

Hướng dẫn này có ích cho bạn?

Cần đặt dịch vụ? Xem cấu hình và giá tại bảng giá Cloudzone - đặt gói trực tuyến, nhận dịch vụ ngay sau thanh toán. Cần tư vấn, mở khung chat ở góc phải màn hình.

Hướng dẫn liên quan