Ariane 5 Flight 501 trước khi bị phá hủy.Tháng trước, hãng sản xuất ô tô Toyota tuyên bố thu hồi 160.000 chiếc hybrid Prius tại Bắc Mỹ. Tuy nhiên, khác với những đợt "triệu hồi" lớn trước đây, rắc rối của Prius không xuất phát từ phần cứng mà là do lỗi lập trình.
Với sự kiện này, Prius đã góp mặt trong danh sách những rắc rối liên quan đến phần mềm máy tính. Bảng thống kê này bắt đầu từ năm 1945 khi các kỹ sư tại Đại học Harvard phát hiện một khiếm khuyết trong Panel F, Relay #70 của hệ thống Harvard Mark II. Họ đã khắc phục trục trặc này và ghi chú trong sổ lộ trình: "Trường hợp lỗi phần mềm đáng kể đầu tiên được phát hiện".
Tròn 60 năm đã trôi qua, lỗi vẫn liên tục xuất hiện và không có dấu hiệu nào chứng tỏ nó sẽ biến mất. Chúng không chỉ ngụ cư trong hệ điều hành và ứng dụng, mà còn ẩn náu trong điện thoại, thiết bị y tế và bây giờ là ô tô.
Liệt kê những lỗi gây ra hậu quả lớn là thao tác khá đơn giản nhưng để "xếp hạng" chúng lại không hề dễ dàng. Vấn đề nào nghiêm trọng hơn: một lỗ hổng bảo mật khiến mạng Internet ngừng hoạt động hay hệ thống điện thoại quốc gia bị trục trặc suốt một ngày? Đáp án sẽ tùy thuộc người trả lời cần check thư hay gọi điện.
Nhiều người lại cho rằng lỗi sẽ được coi là ghê gớm nhất nếu nó dẫn đến tử vong. Tuy hiếm hoi, trường hợp như Therac-25 là lời cảnh báo mỗi khi triển khai phần mềm cho những ứng dụng đòi hỏi sự an toàn cao. Tuy nhiên, nhiều chuyên gia nghiên cứu lập luận rằng, dù phần mềm có thể khiến 1 vài người tử nạn, việc áp dụng công nghệ trong những lĩnh vực yêu cầu quá trình xử lý thông minh là đặc biệt cần thiết. Sự thiếu vắng phần mềm có khi còn giết chết nhiều người hơn là tai nạn do những lỗi lập trình không thể tránh khỏi.
Tạp chí Wired News đã thống kê 10 tai nạn phần mềm lớn nhất theo trình tự thời gian:
28/6/1962: Tàu thăm dò vũ trụ Mariner I
Con tàu này có sứ mệnh bay đến sao Kim nhưng đã bị phá hủy 293 giây sau khi phóng do bay chệch hướng so với dự kiến ban đầu. Những cuộc điều tra sau đó đã khám phá ra rằng một công thức được viết trên giấy bằng bút chì đã không được chuyển đổi sang mã điện toán, khiến hệ thống máy tính tính toán sai đường đi của tên lửa.
1982: Đường ống dẫn gas của Xô viết
Cơ quan tình báo Mỹ CIA bị cho là đã cố tình tạo ra một lỗi trong hệ thống máy tính Canada mà Liên Xô cũ mua về để kiểm soát đường ống dẫn khí sang Siberia. Chính quyền Xô viết đã trang bị hệ thống này nhằm tìm hiểu và khai thác bí mật công nghệ của Mỹ. Theo một số nguồn tin, CIA đã phát hiện kế hoạch trên và quyết định cho nổ sớm một bộ phận nhằm làm lỗi hoạt động. Hậu quả là Nga phải hứng chịu một vụ nổ không liên quan đến hạt nhân lớn nhất trong lịch sử.
1985 - 1987: Máy gia tốc Therac-25
Therac-25 là một hệ thống trị liệu cải tiến, có khả năng phóng hai loại bức xạ: tín hiệu điện tử năng lượng thấp (hạt beta) hoặc tia X. Những tia X này sinh ra khi ta bắn hạt electron tới một tấm bia kim loại đặt giữa súng điện tử và bệnh nhân. Các chuyên thiết kế thuộc hãng AECL (Canada) đã thay thế khóa an toàn cơ học trong Therac-20 bằng một phần mềm kiểm soát nhằm tăng độ tin cậy cho Therac-25. Sự cố xảy ra khi nguồn năng lượng cao được kích hoạt và bia kim loại chưa xoay vào đúng vị trí nhưng phần mềm không phát hiện ra. Dòng điện cực cao được bắn thẳng vào bệnh nhân, gây cảm giác shock điện, phát nhiệt và cháy bức xạ. Có ít nhất 5 người chết và nhiều người bị thương nặng. Therac-25 đã được xếp vào những vụ tai nạn kinh điển trong y tế và điện toán.
1988: Lỗi tràn bộ đệm trong trình Berkeley Unix
Morris, sâu Internet đầu tiên, đã lây lan tới khoảng 2.000 - 6.000 máy tính của nhiều tổ chức ở Mỹ trong vòng chưa đầy một ngày bằng cách tận dụng lỗi tràn bộ nhớ trung gian. Mã lập trình get() được thiết kế để nhận dòng text qua mạng nhưng nó không được dự tính trước để hạn chế khối lượng nhập. Tận dụng khiếm khuyết này, một lượng lớn dữ liệu đã được gửi tới, tạo điều kiện cho phép sâu kiểm soát bất cứ hệ thống nào nó có thể kết nối. Các chuyên gia đã quyết định loại get() trong mã. Tuy nhiên, họ từ chối xóa get() trong thư viện nhập/xuất chuẩn của ngôn ngữ lập trình C và nó vẫn còn tồn tại đến ngày nay.
1988 - 1996: Lỗi trong công cụ tạo số ngẫu nhiên của hệ thống xác thực Kerberos
Các tác giả của cơ chế bảo mật nổi tiếng này đã hơi cẩu thả khi xử lý thông tin cơ sở trong phần mềm tạo số ngẫu nhiên (random number generator). Hậu quả là suốt 8 năm người ta có thể xâm nhập một cách đơn giản vào bất kỳ máy tính nào sử dụng hệ thống xác thực Kerberos. Đến nay vẫn chưa có lời khẳng định rằng lỗi nói trên đã bị lợi dụng nhiều hay chưa.
15/1/1990: Mạng AT&T ngừng hoạt động
Một lỗ hổng xuất hiện trong phiên bản mới của phần mềm kiểm soát thiết bị chuyển mạch (switch) từ xa AT&T's #4ESS. Nó khiến hệ thống gặp vấn đề mỗi khi chúng nhận một thông điệp từ switch kế cận (thông điệp này được một switch gửi đi nếu nó vừa phục hồi sau một trục trặc nào đó).
Ngày 15/1/90, một thiết bị chuyển mạch tại New York bị trục trặc và hoạt động trở lại, khiến cho switch lân cận gặp rắc rối, ảnh hưởng một loạt hệ thống khác theo hiệu ứng domino. 114 switch liên tiếp bị sập và khôi phục cứ sau mỗi 6 giây và khoảng 60 nghìn người không thể nhận dịch vụ từ xa trong suốt 9 giờ. Các kỹ sư của AT&T sau đó đã phải chuyển đổi sang phần mềm cũ.
1993: Phép chia dấu phẩy động (floating point) Intel Pentium
Một lỗi silicon khiến chip Pentium nổi tiếng của hãng sản xuất thiết bị xử lý Mỹ gặp sai sót khi chia số floating-point trong một chuỗi cụ thể. Ví dụ, chia 4195835.0/3145727.0 sẽ ra 1.33374 thay vì 1.33382, sai số 0,0006%. Dù lỗi ảnh hưởng đến rất ít người sử dụng, nó trở thành một cơn ác mộng về PR (quan hệ cộng đồng) cho Intel. Đã có khoảng 3 - 5 triệu chip gặp khiếm khuyết lưu thông trên thị trường. Intel ban đầu chỉ cung cấp thiết bị xử lý mới cho những khách hàng chứng minh được rằng công việc của họ đòi hỏi độ chính xác cao. Tuy nhiên, công ty sau đó đã nhún nhường và chấp nhận thay thế chip cho bất cứ ai gửi phàn nàn. Tổng thiệt hại của Intel cho lỗi này là 475 triệu USD.
1995 - 1996: Gói ping độc (Ping of Death)
Việc thiếu thận trọng trong khâu kiểm tra và lỗi khi xử lý hợp mã phân đoạn IP (IP fragmentation reassembly code) đã tạo cơ hội cho hacker phá sập nhiều hệ điều hành bằng cách gửi một gói "ping" độc từ bất cứ đâu trên Internet. Hệ thống bị ảnh hưởng nghiêm trọng nhất là PC chạy trên Windows. Máy tính bị khóa và hiển thị "màn hình xanh chết chóc" (blue screen of death) khi nhận được những gói này. Vụ tấn công cũng ảnh hưởng đến hệ thống Macintosh và Unix.
4/6/1996 - Ariane 5 Flight 501
Mã hoạt động cho tên lửa Ariane 4 được sử dụng lại trong phiên bản tiếp theo Ariane 5. Tuy nhiên, rắc rối đã xảy ra khi mã này thực hiện quá trình chuyển đổi số chứa dấu phấy động 64 bit sang ký hiệu số nguyên 16 bit. Động cơ trong Ariane 5 có tốc độ nhanh hơn đã khiến các số 64 bit trở lên lớn hơn so với Ariane 4, gây tình trạng quá tải và sập máy tính điều khiển. Hệ thống backup cũng gặp trục trặc ngay 0,05 giây sau đó và thiết bị xử lý cơ sở của tên lửa bị tiếp quá nhiều năng lượng. Ariane 5 đã phát nổ chỉ 40 giây sau khi phóng.
11/2000: Viện ung thư quốc gia, thành phố Panama
Phần mềm trị liệu của công ty Multidata Systems International (Mỹ) cho phép bác sỹ đặt trên màn hình máy tính 4 tấm kim loại (block) để bảo vệ những tế bào khỏe mạnh của bệnh nhân khỏi chất phóng xạ. Chương trình chỉ hỗ trợ 4 tấm chắn trong khi các bác sỹ tại viện Panama lại muốn sử dụng 5 block.
Sau đó, họ phát hiện ra là có thể lừa phần mềm bằng các kéo tất cả 5 block thành một block đơn lớn với một lỗ hổng ở giữa. Tuy nhiên, điều mà họ không hiểu là phần mềm Multidata sẽ đưa ra những kết quả khác nhau phụ thuộc vào lỗ hổng được kéo theo chiều nào: kéo nó theo hướng này, lượng phóng xạ sẽ được tính toán chuẩn, kéo theo hướng khác, phần mềm sẽ nhân liều lượng lên gấp đôi.
Có ít nhất 8 bệnh nhân đã chết và 20 người khác gặp vấn đề lớn về sức khỏe. Những bác sỹ này đã bị kết án với tội danh ám sát.
Theo VNE
(*) Không sao chép dưới mọi hình thức khi chưa có sự đồng ý bằng văn bản của Báo Hànộimới.