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

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ąć.

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

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
Wybrane dla Ciebie
Komentarze (26)