VietTechiesHIỂU CÔNG NGHỆ. MỞ GÓC NHÌN.
☰ Chuyên mục

Một bug âm thầm giấu kíp vận hành chuyện lưới điện đang sụp. Rồi 50 triệu người Bắc Mỹ mất điện năm 2003

12/10/2026 · VietTechies · Biên tập

Toàn cảnh Toronto về đêm trong vụ mất điện tháng 8 năm 2003, với những dãy phố tối om bên dưới vài tòa cao ốc ở khu trung tâm còn sáng đèn, dòng chữ ghi ngày 14 tháng 8 năm 2003 và một hình đồ họa tối giản mô phỏng nhật ký cảnh báo im bặt.


Gần hai tiếng trước vụ mất điện diện rộng ở Đông Bắc Mỹ ngày 14 tháng 8 năm 2003, phần mềm cảnh báo trong phòng điều khiển của công ty điện lực FirstEnergy ở bang Ohio đã âm thầm ngừng hoạt động. Không có gì trong phòng báo hiệu sự cố ấy. Sau 14 giờ 14, cảnh báo mới cứ thế không hiện lên nữa, và người vận hành không biết họ đang điều hành phần lưới điện của mình mà thiếu chúng.

Trong 90 phút sau đó, ba đường dây cao áp của FirstEnergy lần lượt gặp sự cố. Các công ty điện lực lân cận và các tổ chức điều phối lưới điện gọi điện báo về những lần ngắt đường dây mà người vận hành FirstEnergy không tin là thật.

Lúc 16 giờ 05 phút 57 giây, đường dây chính thứ tư bị ngắt, và trong vòng bảy phút, vụ mất điện lan từ khu vực Cleveland–Akron ra phần lớn vùng Đông Bắc nước Mỹ và Canada. Ước tính có 50 triệu người mất điện.

Lỗi phần mềm gây ra sự im lặng ấy không làm ngắt đường dây nào trong số đó. Cây cối mọc um tùm khiến ba đường dây đầu tiên và một đường dây 138 kilôvôn (kV) nhỏ hơn bị ngắt; số còn lại bị ngắt do quá tải và rơ le bảo vệ. Thứ bug lấy mất là những cảnh báo lẽ ra phải cho người vận hành biết hệ thống của họ đang thay đổi.

IT được báo, phòng điều khiển thì không

Thông báo lỗi tự động được gửi tới nhân viên công nghệ thông tin (IT). Lúc 14 giờ 20, một số bàn điều khiển từ xa thuộc hệ thống quản lý năng lượng (EMS) của FirstEnergy bị hỏng; EMS là phần mềm người vận hành dùng để theo dõi và điều khiển lưới điện. Kỹ sư IT của công ty nhận được một tin nhắn tự động. Lúc 14 giờ 41, server chính, nơi chạy chức năng cảnh báo, bị hỏng và chuyển việc sang một máy dự phòng: thêm một tin nhắn nữa. Lúc 14 giờ 54, máy dự phòng cũng hỏng nốt, và IT lại nhận tin nhắn.

Nhân viên IT lo sửa các trục trặc máy tính, nhưng theo tổ công tác chung Mỹ–Canada điều tra vụ mất điện, họ không báo cho người vận hành trong phòng điều khiển. Đến 15 giờ 08, họ hoàn tất một lần khởi động nóng (warm reboot) cho server chính. Kết quả chẩn đoán lúc khởi động cho thấy máy tính và mọi tiến trình cần có đều đang chạy, nên họ tin là đã khởi động lại thành công. Nhưng hệ thống cảnh báo vẫn bị treo, và IT không kiểm tra lại với người vận hành xem cảnh báo đã chạy lại chưa.

Theo bản phân tích của chính FirstEnergy mà tổ công tác dẫn lại, dường như tiến trình cảnh báo “về cơ bản đã bị kẹt” khi đang xử lý một sự kiện cảnh báo, rồi dữ liệu đổ về sau đó đã “làm tràn bộ đệm đầu vào của tiến trình”. Ứng dụng bị kẹt đã chuyển nguyên trạng sang máy dự phòng, vì thế máy dự phòng cũng hỏng 13 phút sau khi tiếp quản. Hệ thống cũng không có cảnh báo nào cho người vận hành biết chính hệ thống cảnh báo đã ngừng chạy.

Điện thoại báo một đằng, màn hình hiện một nẻo

Những bên khác thì vẫn thấy lưới điện của FirstEnergy. EMS của công ty vẫn liên tục gửi dữ liệu thời gian thực chính xác cho American Electric Power (AEP), một công ty điện lực lân cận, cũng như cho Đơn vị Vận hành Hệ thống Độc lập vùng Trung Tây (MISO) và PJM Interconnection, hai tổ chức điều phối độ tin cậy của khu vực. Lúc 14 giờ 32, AEP gọi điện báo một đường dây của FirstEnergy đã bị ngắt rồi tự đóng lại. Phía FirstEnergy không có cảnh báo hay dòng nhật ký nào về chuyện đó.

Rồi đến lượt cây cối. Lúc 15 giờ 05 phút 41 giây, đường dây Harding–Chamberlin, một trong các đường dây 345 kV của FirstEnergy, bị ngắt khi mới mang tải 44% định mức. Tiếp theo là Hanna–Juniper lúc 15 giờ 32 phút 03 giây, ở mức tải 88%. Star–South Canton, chính đường dây AEP đã gọi điện báo, bị ngắt hẳn lúc 15 giờ 41 phút 35 giây, ở mức 93% định mức khẩn cấp. Cả ba lần ngắt đều không phải do quá tải. Mỗi đường dây đều chạm phải một cái cây mà qua nhiều năm đã mọc lấn vào khoảng cách an toàn của đường dây.

Mỗi khi một đường dây bị ngắt, tải dồn sang các đường dây còn lại, và từ 15 giờ 39, các đường dây 138 kV nhỏ hơn của FirstEnergy cũng bắt đầu gặp sự cố. Điện thoại vẫn liên tục reo, và người vận hành bắt đầu nghĩ là có gì đó không ổn, nhưng không phải ở hệ thống của mình. “Chắc chắn là ở lưới phân phối, hay cái gì đại loại vậy, hoặc là chuyện của bên khác… nhưng bên tôi chẳng thấy gì cả,” một người trong số họ nói.

Lúc 15 giờ 42, một người vận hành nói với IT: “Hình như trên máy tính chẳng có gì cập nhật cả… Tôi nghĩ là bên mình có cái gì đó hỏng nặng rồi.” Tổ công tác gọi đây là bằng chứng đầu tiên cho thấy có người trong phòng điều khiển đã phần nào nhận ra EMS đang bị suy giảm chức năng.

Bốn phút sau, người vận hành ở nhà máy điện hạt nhân Perry gọi tới lần thứ ba: “Bên tôi không trụ được lâu nữa đâu, rồi các anh sẽ gặp rắc rối lớn hơn đấy.”

Lúc 16 giờ 05 phút 57 giây, đường dây Sammis–Star bị ngắt do dòng điện cao và điện áp thấp. Đến 16 giờ 13, hơn 508 tổ máy phát điện tại 265 nhà máy điện đã bị tách khỏi lưới. Một số nơi ở Mỹ phải chờ bốn ngày mới có điện lại, và các ước tính thiệt hại tại Mỹ dao động từ 4 tỷ đến 10 tỷ USD.

Nhiều tuần sau, bug mới lộ diện

Chức năng cảnh báo chạy trên XA/21, một hệ thống quản lý năng lượng của General Electric (GE) mà FirstEnergy dùng từ năm 1995. Năm 2004, Kevin Poulsen của SecurityFocus đưa tin rằng bug bị lật tẩy khoảng tám tuần sau vụ mất điện, ẩn trong một chương trình con xử lý cảnh báo và sự kiện dài chừng một triệu dòng code.

Đó là một lỗi tranh chấp thời điểm (race condition): loại bug chỉ xuất hiện khi hai phần của một chương trình thay đổi cùng một dữ liệu gần như đồng thời. “Có hai tiến trình cùng tranh chấp một cấu trúc dữ liệu dùng chung,” Mike Unum của GE Energy nói với Poulsen. Theo Unum, một lỗi lập trình đã để cả hai tiến trình ghi vào cấu trúc đó cùng một lúc, và dữ liệu bị hỏng sau đó đã đẩy ứng dụng cảnh báo “vào một vòng lặp vô hạn, cứ thế quay mãi”. GE đã tái hiện được sự cố trong phòng thí nghiệm của hãng ở Florida và gửi bản vá cho khách hàng vào mùa thu năm đó.

Những điều bug không gây ra

Những lời giải thích ban đầu chỉ sang hướng khác. Người phát ngôn của Thủ tướng Canada Jean Chrétien nói sét đã đánh trúng một nhà máy điện ở vùng Niagara, phía Mỹ; Cơ quan Điện lực New York thì cho biết họ không thấy sét đánh ở đó. Về sau, nhóm an ninh của tổ công tác đã xem xét cả những thông tin cho rằng al-Qaeda nhận trách nhiệm lẫn sâu máy tính Blaster. Họ không tìm thấy bằng chứng nào cho thấy kẻ xấu đã gây ra hoặc góp phần gây ra sự cố, hay cho thấy sâu hoặc virus máy tính trên internet đã ảnh hưởng tới hệ thống điện của các công ty liên quan.

Bug là có thật, nhưng tổ công tác không coi đó là nguyên nhân. Họ chia nguyên nhân thành bốn nhóm: FirstEnergy và hội đồng độ tin cậy khu vực của công ty không hiểu được những điểm yếu trong hệ thống của FirstEnergy; “FirstEnergy không nắm bắt đầy đủ tình hình”; cây dưới các đường dây của công ty không được cắt tỉa đúng mức; và các tổ chức điều phối khu vực không hỗ trợ chẩn đoán theo thời gian thực một cách hiệu quả. Chuyện cảnh báo bị treo thuộc nhóm thứ hai, cạnh những phát hiện chẳng liên quan gì tới code:

  • FirstEnergy thiếu quy trình để người vận hành luôn biết các công cụ giám sát quan trọng của mình có đang hoạt động hay không.
  • Nhân viên hỗ trợ máy tính và nhân viên vận hành của công ty không có quy trình hiệu quả để trao đổi với nhau.
  • Công ty thiếu quy trình kiểm tra xem các công cụ giám sát có thực sự hoạt động sau khi sửa hay không.

Báo cáo cuối cùng của tổ công tác, công bố tháng 4 năm 2004, xếp một khuyến nghị lên hàng đầu: “Biến các tiêu chuẩn độ tin cậy thành quy định bắt buộc và có hiệu lực thi hành, kèm chế tài xử phạt khi không tuân thủ.” Từ ngày 18 tháng 6 năm 2007, các tiêu chuẩn của Tổ chức Độ tin cậy Điện Bắc Mỹ (NERC) đã mang tính bắt buộc và có hiệu lực thi hành tại Mỹ, với mức phạt có thể lên tới 1 triệu USD mỗi ngày.

Bài học từ sự im lặng

Tổ công tác mô tả chính xác cái bẫy này: vì không biết cảnh báo đã biến mất, người vận hành chẳng có lý do gì để thôi mặc định rằng “không nhận được cảnh báo nghĩa là tình trạng hệ thống vẫn an toàn và không thay đổi”. Một dashboard không có chút màu đỏ nào chỉ đáng yên tâm khi bạn biết chính dashboard ấy vẫn đang hoạt động.

Lần khởi động lại lúc 15 giờ 08 mang lại bài học thứ hai cho bất kỳ ai vận hành phần mềm: tiến trình đang chạy không đồng nghĩa với tính năng đang hoạt động. Kết quả chẩn đoán cho thấy mọi tiến trình cần có đều đang chạy, vậy mà cảnh báo vẫn bị treo. Còn những tin nhắn gửi cho IT là bài học thứ ba: cảnh báo đến tay những người có thể sửa máy tính, chứ không đến những người phải dựa vào chính các máy tính ấy.

Những điều này không làm giảm vai trò của cây cối. Nhưng trong một giờ quyết định ấy, phòng điều khiển của FirstEnergy đã coi sự im lặng là tin tốt.

Nếu ngay lúc này các cảnh báo của bạn im bặt, đội của bạn sẽ mất bao lâu mới nhận ra?

Bài liên quan

Đọc bằng ngôn ngữ khác: English

Nguồn