Czy mikroprocesory są bezpieczne?

W nowszych procesorach takie instrukcje również istnieją (na przykład LOADALLD w 80386), zatem jeśli oprogramowanie potrafi z nich skorzystać, można w ten sposób ukryć działania, które wykraczają poza oficjalnie udokumentowaną funkcjonalność kontrolowanego urządzenia. Niektóre z tych podprogramów mogłyby uruchamiać się samoczynnie po pewnym czasie albo przy ustalonych kombinacjach danych.

Atak odmowy obsługi

Jednym ze sposobów przeprowadzenia sabotażu w krytycznej infrastrukturze jest zablokowanie mikroprocesorowych kontrolerów, które nadzorują jej pracę. Oprócz błędów w oprogramowaniu można do tego celu wykorzystać niektóre błędy procesorów. Przykładem dwóch najpopularniejszych jest błąd HCF (nazywany "Halt and Catch Fire"), obecny w procesorach z serii Pentium w architekturze P5 Intela, a także "błąd przecinkowy" w procesorach 6x86 firmy Cyrix. Błąd ten powoduje zablokowanie pracy mikroprocesora, gdy napotka on na konkretny zestaw instrukcji - w przypadku Intel Pentium jest to binarnie f0 0f c7 c8. W normalnych warunkach instrukcja cmpxch8b użyta z rejestrem eax powoduje wyjątek, ale poprzedzenie jej instrukcją lock skutkowało brakiem obsługi przerwań i konieczność resetowania procesora, by wznowił pracę. Atak taki nie wymagał uprawnień systemowych. Obecnie większość systemów operacyjnych, na przykład Linux, ma programowe obejście problemu, ale nadal nie wiadomo, czy podobne błędy nie czają się jeszcze w nowszych procesorach. Mikroprocesory CISC są tak skomplikowane, że możliwe jest istnienie błędów w jednostce tłumaczącej instrukcje kodu maszynowego x86/x86-64 na mikrokod procesora. Wykorzystanie zestawu takich błędów umożliwiłoby naruszenie podstawowej funkcjonalności sterowanych mikroprocesorem urządzeń.

Jak się zabezpieczyć?

Jedną z żelaznych zasad powinno być wybieranie osobnych dostawców sprzętu i oprogramowania. Dywersyfikacja technologii i dostawców sprawia, że prawdopodobieństwo ukrycia niepożądanych instrukcji jest znacznie mniejsze. Kolejną zasadą jest przeprowadzanie audytu oprogramowania, w celu poszukiwania niepożądanych instrukcji. "Audyt przeprowadza się w taki sposób, by znaleźć miejsca w kodzie maszynowym oprogramowania zawierające instrukcje, które wykraczają poza standardowy zestaw lub wykorzystują znane już błędy. Audyt taki jest pracochłonny przy rozległym oprogramowaniu, ale konieczny w przypadku istotnej infrastruktury" - wyjaśnia Robert Kępczyński z IBM Polska.

Kolejnym sposobem zabezpieczenia jest użycie wspierających systemów opartych na zupełnie innej zasadzie działania. W przypadku automatyki przemysłowej stosuje się awaryjne rozwiązania o bardzo prostej konstrukcji, wykorzystujące prawa fizyki, mechanikę precyzyjną, podstawową elektronikę i nieskomplikowane pętle sprzężenia zwrotnego. Takie awaryjne zabezpieczenia uniemożliwiają przekroczenie niektórych parametrów, na przykład prędkości obrotowej, ciśnienia czy napełnienia zbiornika, ale czasami zadziałanie odbywa się kosztem naruszenia innych warunków procesu lub zmniejszenia jego wydajności.


TOP 200