Lỗi xử lý BGP gây ra tình trạng bất ổn định định tuyến Internet
(blog.benjojo.co.uk)- Do lỗi xử lý thông điệp BGP, vào ngày 20 tháng 5 năm 2025 đã xảy ra tình trạng bất ổn định định tuyến trên diện rộng và hiện tượng gián đoạn kết nối Internet ở một số mạng
- Nguyên nhân của sự cố là BGP Prefix-SID Attribute bị lỗi, gây ra phản ứng bất thường trong các triển khai BGP lớn, đặc biệt là JunOS và Arista EOS
- Một số nhà mạng transit, bao gồm Hutchison và Starcloud, đã chuyển tiếp thông điệp gây lỗi, khiến thiệt hại lan rộng
- Sự cố đã gây ra reset hàng loạt các phiên BGP và bất ổn định tại hơn khoảng 100 mạng
- Sự việc lần này nhấn mạnh lỗ hổng trong khả năng chịu lỗi BGP theo từng vendor và nhu cầu cải thiện
27 tháng 5 năm 2025
Tình trạng bất ổn định định tuyến Internet toàn cầu do lỗi xử lý BGP
Vào 7 giờ sáng UTC thứ Ba, ngày 20 tháng 5 năm 2025, khi một thông điệp BGP được lan truyền, đã xuất hiện hành vi ngoài dự kiến ở hai triển khai BGP chủ chốt thường được dùng để xử lý lưu lượng Internet
Hệ quả là nhiều “phiên BGP kết nối Internet” bị tự động đóng, dẫn đến từ mức bất ổn định định tuyến tối thiểu cho đến nghiêm trọng nhất là mất kết nối tạm thời ở một số mạng
Thông điệp BGP gây sự cố
- Phân tích các phiên được thu thập bởi bgp.tools cho thấy thông điệp BGP Update gây ra hiện tượng này trông có vẻ bình thường, nhưng chứa BGP Prefix-SID Attribute bị hỏng với dữ liệu bên trong được lấp đầy bằng 0x00
- Hầu hết các triển khai BGP (IOS-XR, Nokia SR-OS) đều lọc đúng theo RFC7606 (BGP error handling), nhưng sự cố phát sinh trong tương tác giữa JunOS và Arista EOS
- JunOS giữ lại rồi chuyển tiếp thông điệp bị lỗi, còn Arista EOS khi nhận thông điệp đó sẽ đặt lại phiên BGP
- Trong các môi trường sử dụng nhiều phần cứng Juniper (JunOS), nếu kết nối với Arista EOS thì có thể xảy ra gián đoạn truy cập Internet kéo dài tới khoảng 10 phút
Bên phát ra thông điệp lỗi
-
Khi phân tích kho lưu trữ bgp.tools trong giai đoạn đó, có nhiều AS origin liên quan
-
Điều này cho thấy không phải mạng tạo ra Prefix, mà là nhà mạng transit ở giữa đường đi đã thêm Attribute sai
-
Các AS chính có liên quan đến sự cố gồm:
- AS9304 (Hutchison Global Communications Limited)
- AS135338 (Starcloud Information Limited)
- AS151326 (DCConnect Communication Pte. Ltd.)
- AS138077 (PT Abhinawa Sumberdaya Asia)
-
Dựa trên dữ liệu bgp.tools, bên thực sự thêm Attribute nhiều khả năng là Starcloud (AS135338) hoặc Hutchison (AS9304)
-
Các Prefix tiêu biểu mà Attribute đó được lan truyền qua gồm 156.230.0.0/16, 138.113.116.0/24, v.v.
-
Hutchison/AS9304 kết nối với nhiều Internet exchange (IX), đồng thời thông điệp cũng được lan tới các route server dùng bird
-
Bird không hỗ trợ BGP SID nên đã chuyển thông điệp tới rất nhiều IX mà không lọc, làm mức độ hỗn loạn trên toàn mạng trở nên trầm trọng hơn
BGP Prefix-SID là gì?
- BGP Prefix-SID Attribute thông thường chỉ nên được dùng trong các phiên iBGP, và được sử dụng để định nghĩa đường đi tới đích trong một mạng duy nhất (RFC8669)
- Nguyên nhân Attribute này bị rò rỉ ra bảng định tuyến toàn cầu có thể là do các phiên eBGP được cấu hình giống như phiên nội bộ
Đối tượng bị ảnh hưởng
- Dù khó xác định chính xác nạn nhân, sự cố đã được ghi nhận ở khoảng hơn 100 mạng có mức biến động (churn) rất lớn sau thông điệp BGP ban đầu
- Bình thường, route collector của bgp.tools thu thập 20.000 đến 30.000 thông điệp mỗi giây, nhưng tại thời điểm sự cố đã ghi nhận trung bình hơn 150.000 trong mỗi 10 giây
- Đây là tín hiệu cho thấy sự cố nghiêm trọng đã xảy ra trên diện rộng đối với các tuyến Internet
Trách nhiệm của vendor và hàm ý từ sự cố
- Dù nguyên nhân gốc chưa hoàn toàn chắc chắn, việc một thông điệp lỗi có thể lan rộng ở quy mô Internet chứng minh rằng các vấn đề xử lý lỗi BGP hiện có là rủi ro thực tế
- Các vendor khác đã lọc Attribute lỗi, nhưng Juniper đã gián tiếp cho phép nó đi qua và chuyển tới thiết bị Arista, dẫn tới reset phiên do phần mã chịu lỗi BGP còn thiếu sót
- Tài liệu chính thức của JunOS cũng nêu rõ rằng hệ thống “không kiểm tra toàn bộ thông điệp”
- Với thiết kế này, JunOS ngăn được rủi ro reset phiên từ xa đối với chính nó, nhưng vẫn có khả năng chuyển tiếp thông điệp lỗi sang peer hoặc khách hàng khác
Kết luận
-
Sự cố lần này chỉ kéo dài trong thời gian ngắn, nhưng cho thấy nếu quy mô lớn hơn thì hậu quả có thể nghiêm trọng hơn nhiều
-
Khi các dịch vụ ngày càng chuyển sang nền tảng IP, tác động của sự cố Internet có thể vượt xa việc người dùng không truy cập được email, mà còn lan sang phát sóng TV bị gián đoạn, không gọi được dịch vụ khẩn cấp, v.v.
-
Điều này nhấn mạnh rằng về mặt thực tế, thậm chí có thể dẫn tới thiệt hại về nhân mạng, và do đó cần triển khai chắc chắn hơn khả năng chịu lỗi BGP ở từng vendor
-
Có thông tin mời các nhà vận hành mạng tham gia hỗ trợ phân tích dữ liệu bgp.tools (có cung cấp liên kết)
1 bình luận
Ý kiến trên Hacker News
Nhìn chung, nguyên tắc "hào phóng khi nhận, cụ thể khi gửi ra" được biết đến như cách tiếp cận tiêu chuẩn
Có các lựa chọn như lọc bỏ thông điệp bị lỗi (drop, filter), bỏ qua riêng thuộc tính rồi vẫn chuyển tiếp (break), hoặc cắt hẳn kết nối (như Arista)
Tôi cho rằng cách thứ tư (kiểu Arista) là hành vi thực sự khó chấp nhận nhất
Cách thứ ba (Juniper) cũng không lý tưởng, nhưng tôi không nghĩ có thể xem đó là vấn đề mang tính chí mạng
Chỉnh sửa: đọc lại thì hóa ra Arista không phải cách thứ tư mà là cách thứ hai (đóng kết nối)
Họ chỉ coi luôn kết nối là không hợp lệ rồi đóng lại; xét về trải nghiệm người dùng thì đây không hẳn là quyết định tốt, nhưng vẫn ở mức có thể chấp nhận được
RFC 7606 (xử lý lỗi cải tiến cho thông điệp BGP UPDATE) đã tồn tại từ trước, và trong đó nêu rất cụ thể cách xử lý thông điệp bị lỗi
Nguyên tắc "hào phóng khi nhận và cụ thể khi gửi ra" chính là điều người ta vẫn gọi là "robustness principle" hoặc "Postel's law"
Đã từng có nhiều vấn đề diễn ra trên toàn mạng do lợi dụng đặc tính hoạt động của BGP, cụ thể là thiết bị cục bộ có thể chuyển tiếp nguyên trạng các thuộc tính mà nó không hiểu
Tác giả cũng chỉ ra điểm này trong bài viết liên quan
Tôi không đồng ý với cách tiếp cận đó
Tôi vẫn còn nhớ như in cảnh phải cuống cuồng vá lỗi CVE-2023-4481 trên toàn mạng
Trước đây tôi từng phát triển tính năng BGP ở một hãng thiết bị viễn thông (chuyện cũng khá lâu rồi)
Tôi vẫn thấy BGP quá phức tạp
Người ta cứ tiếp tục thêm tính năng mới, còn vendor thì lặp đi lặp lại việc triển khai theo tiêu chuẩn hoặc draft
Với bản chất gần như sẽ không bao giờ bị loại bỏ của BGP, tôi có cảm giác các lỗi kiểu này sẽ cứ tái diễn mãi
HGC Global Communications Limited (đổi tên từ Hutchison Global Communications Limited, viết tắt là HGC) là một nhà cung cấp dịch vụ Internet ở Hồng Kông
Có cảm giác BGP sẽ ổn định hơn nhiều nếu các vendor phần cứng cùng thống nhất tiêu chuẩn cho những vấn đề như thế này
Không biết có phải chỉ mình tôi không, nhưng trước khi nghe nói nó gây ra sự cố gì đó thì tôi còn chưa từng nghe đến BGP
Nếu có cách nào để tự thực hành BGP tại nhà thì tôi rất muốn biết
Bạn có thể mua router thật có triển khai BGP (trong phân khúc rẻ có những thiết bị như Mikrotik), hoặc dùng các implementation mã nguồn mở
DN42 là một sân chơi để thực hành kỹ thuật định tuyến
Trong môn mạng ở bậc cử nhân của tôi không có BGP, nhưng ở lớp cao học thì có học về BGP
Trong lớp mạng bậc cử nhân mà tôi từng học, BGP chỉ được nhắc sơ qua trên bảng
Có cảm giác muốn thật sự "thực hành" BGP thì phải quản lý một mạng quy mô lớn có kết nối với lưu lượng Internet thật
Trước đây nhiều vendor khác cũng từng có lỗi tương tự như trong bài
Thiết bị chassis IOS XR của chúng tôi cũng từng nhận gói tin tương tự
Đồng thời cũng có trải nghiệm xuất hiện rất nhiều quảng bá tuyến BGP
Tôi không rõ chính xác thiết bị upstream là gì
Điều này khiến tôi tự hỏi liệu giao thức BGP có đang được fuzz test một cách bài bản hay không
Vì đây là giao thức quá quan trọng nên có thể người ta cũng không dám chủ động tạo sự cố để thử
Viết fuzzer cho BGP có lẽ không khó, nhưng việc chẩn đoán crash thì có thể cực kỳ khó
Điều này khiến người ta phải tự hỏi liệu còn có hệ thống nào khác vừa đồ sộ như Internet backbone lại vừa chồng chất nhiều độ phức tạp ngẫu phát đến vậy hay không
Xét đến mức độ ảnh hưởng của kiểu lỗi này, tôi khá ngạc nhiên vì tưởng phải có một consortium nào đó vận hành bộ kiểm thử tương tác như interoperability test suite