Zabijał, a miał leczyć. Śmierć pacjentów przez błąd oprogramowania

Zabijał, a miał leczyć. Śmierć pacjentów przez błąd oprogramowania

Historia zabójczej maszyny do radioterapii Therac-25.
Historia zabójczej maszyny do radioterapii Therac-25.
Źródło zdjęć: © Unsplash, YouTube
Przemysław Juraszek
27.11.2022 11:28, aktualizacja: 27.11.2022 17:54

W latach 80. XX wieku jeden z najstraszliwszych błędów oprogramowania w historii doprowadził do śmierci pięciu osób. Ofiary, pacjenci korzystający z przełomowego urządzenia do radioterapii Therac-25, otrzymywały dużo wyższe dawki promieniowania, niż powinny. Kulisy sprawy pokazują, że przynajmniej części wypadków można było uniknąć.

Maszynę Therac-25 zaprojektowała kanadyjska korporacja federalna Atomic Energy of Canada Limited (AECL) przy współpracy z francuską firmą Compagnie Générale de Radiologie (CGR). Było to trzecie urządzenie Therac, którego prototyp zaprezentowano w 1976 r., a do sprzedaży trafiło w 1982 r.

Therac-25 w przeciwieństwie do poprzedników był sterowany wyłącznie programowo i pominięto w nim wiele dotychczasowych mechanicznych zabezpieczeń. Ułatwiało to obsługę, ponieważ wcześniej operator musiał ręcznie ustawiać dawkę promieniowania, a w przypadku Therac-25 wystarczyło kilka kliknięć na komputerze. Pozbycie się dodatkowych mechanicznych części spowodowało też, że maszyna była bardziej kompaktowa i tańsza w produkcji.

Co więcej, było to podwójne urządzenie mogące działać zarówno w trybie promieniowania rentgenowskiego (mocna wiązka przepuszczana przez odpowiednie filtry), jak i wiązki elektronowej o mocy od 5 do 25 MeV, co bardzo odpowiadało szpitalom. Wkrótce w Kanadzie znalazło się sześć takich maszyn, a w USA pięć.

Dalsza część artykułu pod materiałem wideo

Tajemnicza śmierć pacjentów i niekompetencja twórcy Therac-25

Wszystko działało, jak należy aż do 3 czerwca 1985 r., kiedy to 61-letnia pacjentka amerykańskiego szpitala w stanie Georgia otrzymała dawkę promieniowania szacowaną na 20 tys. radów zamiast planowanych 200 radów. To więcej niż dawki przyjęte przez amerykańskich naukowców igrających z "diabelskim rdzeniem" opisanym przez Łukasza Michalika. Pacjentka skarżyła się, że podczas zabiegu poczuła jakby porażenie prądem. Później o tym uczuciu wspominali także inni pacjenci, którzy dostali zbyt wysokie dawki promieniowania.

Fizyk szpitalny poinformował o wypadku AECL, które powiedziało wprost, że taki przypadek jest niemożliwy. Ponadto firma skrytykowała fizyka za to, że o sytuacji poinformował także amerykańską rządową Agencję Żywności i Leków (FDA). Pacjentka przeżyła, ale straciła w wyniku wypadku pierś i doznała paraliżu ręki (zmarła pięć lat później).

  • Interfejs Therac-25.
  • Therac-25. Jeśli w ciągu ośmiu sekund operator zamieni wiązkę X na E to pojawi się błąd 54.
  • Przepełnienie bufora w Therac-25.
  • Interfejs Therac-25.
  • Błąd 54 w Therac-25.
  • Schemat Therac-25 po finalnych poprawkach.
  • Therac-25 w gabinecie zabiegowym.
  • Wizualizacja błędu 54 w Therac-25.
[1/8] Interfejs Therac-25.Źródło zdjęć: © Wikimedia Commons

Drugi incydent miał miejsce 26 lipca 1985 r. w Kanadzie, kiedy pacjentka pojawiła się na planowanym zabiegu naświetlania i przypadkowo otrzymała dawkę aż 17 tys. radów. Zmarła kilka miesięcy później. Opracowanie wypadków spowodowanych przez Therac-25 sporządzone przez ekspertkę w dziedzinie oprogramowania Nancy Leveson wskazuje, że do AECL trafiły sugestie poprawek od Kanadyjskiego Biura Ochrony przed Promieniowaniem (CRPB). Te proponujące dodanie do Therac-25 poprawek sprzętowych zostały zignorowane.

Technicy AECL po sprawdzeniu urządzenia stwierdzili tylko uszkodzone mikroprzełączniki, które zostały wymienione, a do oprogramowania dodano funkcję sprawdzania ich stanu. Firma po dokonaniu poprawek w dokumentach marketingowych (fragment na 27 stronie) chwaliła się zwiększeniem bezpieczeństwa systemu o około 10 mln proc.

AECL dalej ignoruje ostrzeżenia, a pacjenci umierają dalej

Kolejny wypadek miał miejsce w Waszyngtonie w USA w grudniu 1985 r. Pacjentka przeżyła, niezbędne były jednak przeszczepy skóry. Szpital poinformował o sprawie AECL, które po raz kolejny zaprzeczyło, aby podobny incydent miał miejsce. Niedługo później, 21 marca 1986 r., w teksańskim szpitalu pacjent zamiast 180 radów dostał dawkę nawet 25 tys. radów. To tyle, ile otrzymywali likwidatorzy oczyszczający dach elektrowni w  Czarnobylu.

Mężczyzna, dla którego była to już dziewiąta sesja, wiedział, że uczucie rażenia prądem oznaczało problem i w panice próbował dać znać operatorce maszyny o problemie, uderzając w pobliskie drzwi oddzielające pomieszczenie z maszyną od reszty gabinetu. Dopiero to zaalarmowało operatorkę, która chwilę wcześniej po zobaczeniu błędu 54 i informacji o niedostatecznej dawce promieniowania rutynowo go zignorowała i naświetliła mężczyznę ponownie. Takie zachowanie było normą ze względu na liczne błędy w przypadku Therac-25. Wcześniej nic złego się nie działo, a AECL nie widziało problemu.

Pacjenta po przebadaniu odesłano do domu i zalecono powrót w przypadku problemów. Wrócił po paru tygodniach, kaszląc krwią, i ostatecznie zmarł parę miesięcy później. Także po tym przypadku AECL odrzucało możliwość problemów z maszyną i zasłaniało się niewiedzą o innych drobnych incydentach, toteż Therac-25 wrócił do pracy.

11 kwietnia 1986 r. teksański Therac-25 zabił ponownie, kiedy pacjent z nowotworem skóry twarzy także otrzymał dawkę 25 tys. radów i zmarł trzy tygodnie później. Zeznawał, że widział niebieskie światło (promieniowanie Czerenkowa) będące zwiastunem zgonu dla wielu fizyków jądrowych w przeszłości.

Jego śmierć była pierwszym potwierdzonym przypadkiem zgonu z powodu radioterapii na świecie. Operatorka maszyny (ta sama, która była przy incydencie z grudnia) wraz z innym fizykiem na własną rękę zostali w pracy w weekend po wypadku, próbując odtworzyć błąd 54, który uważali za powód obydwu incydentów. Ostatecznie go odkryli i ustalili, że następował po zmianie rodzaju wiązki z rentgenowskiej na elektronową, jeśli ta została dokonana w mniej niż osiem sekund.

Ostatnia ofiara "naprawionego" Therac-25

Błąd został zgłoszony do AECL i do FDA, które ogłosiło Therac-25 wadliwym i zakazało jego użytkowania. Firma wprowadziła poprawki obejmujące nawet wymontowanie klawiszy kierunkowych, co przywróciło maszynę do użytku w listopadzie 1986 r. Jednakże w oprogramowaniu czyhała jeszcze jedna ukryta bomba, która "wybuchła" 17 stycznia 1987 r. zabijając piątą osobę.

W tym przypadku pacjent otrzymał dawkę 10 tys. radów i zmarł trzy miesiące później z powodu choroby popromiennej. FDA ponownie oznaczyło Therac-25 jako wadliwe urządzenie. Okazało się, że tym razem winny był inny błąd, który został ostatecznie rozwiązany wprowadzeniem nowych aktualizacji oprogramowania i fizycznych zabezpieczeń sprzętowych.

Te poprawki zostały dopuszczone przez FDA w czerwcu 1987 r. i zakończyły wypadki, ale historia o niekompetencji i ignorowaniu problemu przez AECL już się rozniosła po środowisku medycznym i żaden szpital nie chciał być kojarzony ze śmiertelnym Therac-25. Związany z tym brak zamówień spowodował, że firma pozbyła się działu medycznego w 1988 r.

Oprogramowanie napisane przez hobbystę

Jak okazało się w toku śledztwa prowadzonego przez FDA, oprogramowanie zostało napisane przez jednego nieznanego hobbystę z firmy AECL na bazie starszego Therac-6/20. Ponadto nie sporządzono dokumentacji, a możliwe 64 błędy nie zostały w żaden sposób opisane. Co więcej, błędy były bardzo liczne, na co wskazują zeznania operatorów mówiące o nawet 40 przypadkach dziennie, więc rutyna ich pomijania przy bierności AECL nie dziwiła. Firma nie przeprowadziła też rewizji kodu oraz skupiła się na kwestii sprzętowej, a nie programowej.

Błąd 54 pojawiał się w dość rzadkim przypadku: jeżeli po wprowadzeniu parametrów leczenia, gdy maszyna już ustawiała filtry za pomocą magnesów, operator wprowadził zmiany w ciągu ośmiu sekund, to zmiany nie były wykonane. W AECL uważano, że tak szybkie wprowadzenie danych nie jest możliwe, ale niektórzy operatorzy byli w stanie zmieścić się w ośmiu sekundach, co skutkowało tragediami.

Z kolei ostatni przypadek z 1987 r. już po poprawkach eliminujących błąd 54, dotyczył innego błędu. Było nim tzw. przekroczenie zakresu liczb całkowitych dotyczące procesu sprawdzającego poprawność ustawień maszyny. W tym przypadku każdorazowe sprawdzenie zwiększało wartość procesu class3 o 1. Granicą pamięci był jeden bajt więc przy wartości 255 kolejny test doprowadzał do przepełnienia bufora skutkującego nadpisaniem sąsiedniej komórki pamięci, co w tym przypadku było śmiertelne.

Przypadek Therac-25 jest bardzo ważnym przypomnieniem dla programistów, do czego może doprowadzić niskiej jakości oprogramowanie. Wnioski z tej katastrofy zostały wykorzystane do stworzenia normy IEC 62304 dotyczącej sprzętu medycznego.

Przemysław Juraszek, dziennikarz dobreprogramy.pl

Programy

Zobacz więcej
Oceń jakość naszego artykułuTwoja opinia pozwala nam tworzyć lepsze treści.
Wybrane dla Ciebie
Komentarze (26)