Praktyczna implementacja tylnej furtki w pamięci flash dysku twardego

dodał 3 sierpnia 2013 o 12:04 w kategorii Info  z tagami:
Praktyczna implementacja tylnej furtki w pamięci flash dysku twardego

Wyobraźcie sobie tylną furtkę, która może być instalowania zdalnie, aktywowana na żądanie, daje dostęp do konta root, jest nie do wykrycia podczas analizy systemu plików i przetrwa pełną reinstalację systemu operacyjnego. Science fiction? Nie.

Bardzo ciekawą koncepcję tylnej furtki, ukrytej w pamięci flash dysku twardego serwera, przedstawił w swoim artykule Jeroen Domburg, twórca serwisu SpritesMods.com. Najważniejsze  jednak jest to, że nie poprzestał na koncepcji, tylko udowodnił, że można ją także wdrożyć.

Jeroen poważnie potraktował zadanie stworzenia idealnej tylnej furtki. Zaczął od zgromadzenia sterty starych dysków twardych.  Rozebrał je, przeanalizował układy scalone obecne w obudowie i skoncentrował się na kontrolerze dysku. Co prawda producenci kontrolerów nie udostępniają ich dokumentacji, ale od czego jest Google i potęga internetu. Na jednym z forów znalazł informację, że kontroler posiada działający port szeregowy, port JTAG (interfejs diagnostyczny) oraz poznał ich konfigurację. Podłączył się do obu portów i znalazł w kontrolerze swojego dysku trzy rdzenie ARM – dwa Feroceony i jednego Cortex-M3.

Laboratorium Jeroena

Laboratorium Jeroena

Kolejnym krokiem analizy było ustalenie, w jaki sposób można zmodyfikować w locie treść odczytywaną z dysku. Co prawda CPU  nie bierze udziału w odczycie danych z dysku, jednak testy wykazały, że posiada dostęp do pamięci cache, przez którą przekazywane są dane do interfejsu SATA. Aby nie musieć przeszukiwać całych 64MB RAMu za każdym razem, kiedy chce coś zmodyfikować, Jeroen przeanalizował fragment oprogramowania odpowiedzialny za zarządzanie pamięcią cache. Po odkryciu tablicy indeksującej zawartość pamięci napisał krótki fragment kodu, podmieniający wybrany ciąg po jego zapisaniu co cache, a przed przesłaniem do interfejsu SATA.

Kolejnym etapem było już „tylko” napisanie narzędzia służącego do modyfikacji zawartości pamięci flash oraz wykorzystanie fragmentów znanych wcześniej narzędzi, by umożliwić zapisywanie nowego oprogramowania bezpośrednio w pamięci flash dysku podłączonego do danego komputera. Jak wyglądał efekt końcowy jego eksperymentów?

Jeroen wprowadził następujące modyfikacje do pamięci flash dysku twardego. Po pierwsze, dysk analizuje treść, która jest na nim zapisywana, w poszukiwaniu tajnego ciągu aktywującego ukrytą funkcjonalność. Funkcja ta umożliwia np. zdalne aktywowanie tylnej furtki poprzez wywołanie na serwerze adresu www, zawierającego tajne hasło (które zostanie zapisane w logach httpd). Po aktywacji furtki, dysk czeka na próbę odczytu pliku /etc/shadow i podmienia w locie hasz hasła konta root, umożliwiając atakującemu zalogowanie się własnym hasłem (nie zmieniając jednocześnie na stałe oryginalnego hasła). Po zalogowaniu wystarczy, że atakujący wyłączy furtkę a stare hasło roota znowu będzie działało prawidłowo. Jedyną trudnością (oprócz oczywiście stworzenia samej tylnej furtki) jest zmuszenie dysku do ponownego odczytania pliku /etc/shadow, który może znajdować się w pamięci cache – wystarczy w tym celu albo poczekać, albo zmusić dysk do intensywniejszej pracy przez kilka sekund.

Jeroenowi udało się także inaczej wykorzystać architekturę ARM – uruchomił na niej odpowiednio skompilowanego Linuxa. Niestety z braku interfejsów użytkownika (oprócz portu szeregowego) nie dało się z niego korzystać, ale może teraz twierdzić, że odpalił Linuxa na samym dysku. Opublikował również kod źródłowy opisanej powyżej tylnej furtki – wyciął z niej jedynie ze względów etycznych fragment podmieniający zawartość /etc/shadow.

Trzeba przyznać, że zarówno koncepcja jak i jej implementacja wyglądają niepokojąco – ile jest na świecie firm i instytucji, które nie tylko potrafią przeanalizować wbudowane oprogramowanie dysku twardego, ale także wpadną na pomysł, by to zrobić, albo przynajmniej regularnie sprawdzać sumy kontrolne?