Na początek muszę się wytłumaczyć. Na PCLab.pl bardzo rzadko publikujemy felietony. Interesują nas fakty i technikalia, twarde liczby, najlepiej sprawdzone w powtarzalnym, kontrolowanym eksperymencie. Tym razem też będę pisał o faktach, ale nieistotnych dla użytkownika elektroniki. Pozwolę sobie również na pewne spekulacje, nawet wkraczające w dziedzinę „czapki z aluminiowej folii”. Dlatego, choć to wszystko prawda, nie traktujcie niniejszego tekstu jak typowego poważnego artykułu. Możecie potraktować moje spekulacje jako zabawę intelektualną albo zwykłe bzdury i zupełnie je zignorować – ale może przynajmniej część faktograficzna okaże się ciekawa.
Należy Wam się też jeszcze jedno wyjaśnienie. Przedstawiony temat leży na samym skraju mojej sfery zainteresowań – w innych okolicznościach nie zaprzątałbym sobie głowy pisaniem o tym. Pomysł na felieton wziął się z redakcyjnego żartu. W rozmowie z Łukaszem (chaostheory) użyłem kiedyś żartobliwego sformułowania „interes obronności USA” w odniesieniu do półprzewodników; później nie chciał mi uwierzyć, że jest w tym ziarnko prawdy. Dlatego usiadłem do tego tekstu.
O bezpieczeństwie sprzętu
Każdy słyszał o bezpieczeństwie oprogramowania. Zdajemy sobie sprawę, że programy uruchamiane na komputerach osobistych lub na serwerach usług internetowych nie są perfekcyjne i mogą się zachować w niezamierzony sposób. Te niedoskonałości mogą nam bezpośrednio zaszkodzić, na przykład mogą spowodować utratę danych albo zostać wykorzystane przez osoby o złych zamiarach. Zakładamy za to, że sprzętu to nie dotyczy. W końcu sprzęt jest tuż przy nas, nie da się go zdalnie i niepostrzeżenie zmodyfikować. W sytuacji gdy zadziała w niepożądany sposób, spodziewamy się „niebieskiego ekranu śmierci”, ponownego uruchomienia czy po prostu jakiegoś zauważalnego problemu z użytkowaniem.
Ale nie zawsze musi tak być. Podam dwa przykłady luk w bezpieczeństwie sprzętu, które mogą być zupełnie niewidoczne dla użytkownika, są niezależne od oprogramowania i mogą zostać wykorzystane w niecny sposób.
Rowhammer
Niektórzy z Was być może słyszeli o efekcie rowhammer. Po raz pierwszy określono go tą nazwą i opisano w czerwcu 2014 roku. Chodzi o sposób celowego wywołania błędów w pamięci operacyjnej w obszarze, do którego nie ma się dostępu.
Pamięć operacyjna (RAM) przechowuje wartości w komórkach złożonych z tranzystora i kondensatora. Naładowany lub rozładowany kondensator oznaczają dwa różne stany logiczne. W nowoczesnych czipach RAM komórki są tak małe i znajdują się tak blisko siebie, że szybkie wielokrotne aktywowanie jednego rzędu pamięci może spowodować szybsze rozładowanie kondensatorów w komórkach w sąsiednich rzędach. Przez wywołanie odpowiednio przygotowanych poleceń zapisu do pamięci można zatem zmienić wartość w innym jej obszarze – na przykład zarezerwowanym dla uprzywilejowanego użytkownika lub systemu operacyjnego. W 2015 roku grupa programistów Google pokazała, jak można przygotować kod JavaScript, który daje dostęp do dowolnego adresu w pamięci operacyjnej – zaprezentowany atak działa na wszystkich procesorach x86 i znakomitej większości kości RAM.
Jak się okazuje, producenci RAM-u zrzeszeni w JEDEC wiedzieli o takiej możliwości co najmniej od 2012 roku. Również firmy Intel i AMD wiedziały o tym wcześniej. W najnowszych procesorach są pewne mechanizmy sprzętowe utrudniające podobny atak. Pamięć i kontrolery DDR4 są już odporne na efekt rowhammer – kontroler pamięci monitoruje żądania dostępu i odświeża potencjalnie zagrożone rzędy odpowiednio częściej.
Losowe błędy w RAM-ie nie są niczym nowym – zdarzają się zawsze, choćby w wyniku uderzenia w komórkę pamięci wysokoenergetycznej cząstki elementarnej z promieniowania kosmicznego. Od dawna stosuje się programowe lub sprzętowe mechanizmy korekcyjne (np. sumy kontrolne). Jednak przez lata takie błędy były traktowane jako problem z niezawodnością urządzenia, a nie jako potencjalna luka w bezpieczeństwie.
Zatruty krzem
Drugi przykład to tak zwane sprzętowe trojany – niepożądane i nieprzewidziane zachowania sprzętu wywołane nieautoryzowaną modyfikacją. To również problem znany od wielu lat; występuje wszędzie tam, gdzie producent krzemowego jądra nie jest tą samą firmą lub instytucją, która go zaprojektowała lub będzie go używać.
Produkcja układu scalonego zaczyna się od schematu ideowego, na którym widać połączone ze sobą uproszczone elementy elektroniczne. To połączenie ma wykonywać zadane funkcje. Schemat ideowy przekształca się potem na layout (czasem używa się terminu topografia), czyli schemat pokazujący rozłożenie elementów na powierzchni wafla krzemowego. Na podstawie layoutu tworzy się maski, służące do wybiórczego naświetlania, domieszkowania i trawienia w procesie litografii.
Analogowe, mało skomplikowane układy scalone często tworzy się od razu z uwzględnieniem layoutu i specyfiki procesu technologicznego, w którym będą produkowane. Ich charakterystyka mogłaby być zupełnie inna, gdyby zostały wykonane w inny sposób. Za to w cyfrowych układach scalonych ważna jest funkcjonalność: schemat ideowy można przełożyć na layout i maski na wiele sposobów. W tworzeniu layoutu i masek pomagają reguły projektowe, najczęściej tworzone przez firmę opracowującą proces technologiczny. Mówią one, na jakie kształty trzeba „przetłumaczyć” elementy elektroniczne, żeby dało się je wykonać w danej fabryce i w danym procesie technologicznym. Oprócz reguł projektowych przygotowuje się starannie zoptymalizowane wersje najczęściej używanych obwodów, tak zwane komórki standardowe (w przypadku pojedynczych elementów logicznych) i makra (w przypadku dużych bloków funkcjonalnych), i tworzy z nich bibliotekę. Za każdym razem, kiedy na schemacie ideowym wystąpią takie obwody, można je zamienić na gotowe makro z biblioteki.
Skoro w cyfrowym układzie scalonym ważna jest tylko funkcjonalność, to znaczy, że w layoucie można zmienić, co się chce, jeśli działanie obwodu pozostanie niezmienione. Firma podrabiająca drogie układy może próbować zaoszczędzić przez uproszczenie layoutu lub przystosowanie go do produkcji we własnej fabryce. Nie można być pewnym, czy zmieniony layout nie ma jakichś nieoczywistych wad, które spowodują nadmierną awaryjność układu.
Ale niefrasobliwe szukanie oszczędności to tylko jedna możliwość. Można na przykład dodać do układu zintegrowaną antenę, która będzie transmitować (na małą odległość) dane z jego wnętrza albo spali go w całości po odebraniu odpowiedniego sygnału radiowego. Można dodać mały licznik, który zmieni albo zablokuje funkcjonalność układu po jakiejś liczbie pewnych zdarzeń (wykonane operacje, włączenia układu, operacje wejścia-wyjścia). Można też po prostu celowo osłabić jakiś element obwodu, by spowodować wspomnianą zwiększoną awaryjność.
Taką manipulację mogą przeprowadzić wszystkie strony biorące udział w produkcji czipu. Jeśli firma taka jak Intel czy Samsung całkowicie kontroluje produkcję od początku (schemat ideowy) do końca (pakowanie jądra w obudowę), to z pewnością wie, co siedzi w krzemie. Ale kiedy mała firma zajmuje się wyłącznie projektowaniem ideowym, oddaje schemat drugiej firmie, tworzącej layout, która z kolei posługuje się biblioteką makr stworzoną przez trzecią, a na koniec czwarta zajmuje się litografią i testowaniem, konieczna jest spora doza zaufania. Oczywiście, staranne testowanie układu częściowo rozwiązuje ten problem. Zamówione w fabryce półprzewodników czipy można dokładnie przetestować, sprawdzając, czy działają zgodnie z symulacją. Można zmierzyć pobór energii i emisję fal elektromagnetycznych bardzo czułymi przyrządami i sprawdzić, czy nie wskazują one na obecność jakichś dodatkowych obwodów. Jądro krzemowe można zbadać pod mikroskopem i wykluczyć obecność obcych dodatków, których nie było na schemacie ideowym. Proponuje się też projektowanie obwodów w taki sposób, żeby trudno było rozpoznać ich funkcjonalność i zdecydować, w którym miejscu należy wprowadzić złośliwe modyfikacje. Wciąż jednak pozostają luki.
W 2013 roku grupa naukowców z uniwersytetów w Massachusetts, Lugano i Bochum opisała możliwość wprowadzenia złośliwej modyfikacji w układzie scalonym, która polega wyłącznie na zmianie domieszkowania w kilku tranzystorach. Zaproponowany sprzętowy trojan polega na zmianie kilku tranzystorów w obwodach stanowiących część sprzętowego generatora liczb losowych. Dzięki zmianie liczby z generatora można przewidzieć, a zatem złamać, każdy oparty na nich klucz kryptograficzny. W innym przykładzie ci sami badacze demonstrują podobną zmianę w sprzętowym S-Boksie, która pozwala na podstawie poboru energii odgadnąć sekretne klucze.
To bardzo wyjątkowy rodzaj sprzętowych trojanów, bo praktycznie nie sposób ich wykryć za pomocą używanych dziś metod. Trojan przechodzi bez problemu test funkcjonalny (liczby losowe ze zmodyfikowanego TRNG spełniają warunki testów NIST i procedury zaproponowanej przez Intela). Nie widać go pod mikroskopem, bo kształt i rozmieszczenie tranzystorów oraz połączeń są zgodne z projektem. Nie da się też wykryć go testami elektrycznymi. Ustalenie rodzaju i poziomu domieszkowania w jednej elektrodzie jednego tranzystora jest możliwe, ale trzeba wiedzieć, gdzie szukać – sprawdzenie kilku miliardów tranzystorów jest logistycznie niewykonalne.
Opisanego trudno wykrywalnego trojana może wprowadzić do układu scalonego wykonawca litografii, wyłącznie przez zmianę jednej lub dwóch masek służących do domieszkowania. Nic nie stoi na przeszkodzie, żeby przygotować też „czysty” zestaw masek, na wypadek gdyby projektant układu chciał je obejrzeć :)
Jeśli nie wiadomo, o co chodzi, to chodzi o pieniądze
Nie chcę sugerować żadnych teorii spiskowych czy rozpowszechniać czarnowidztwa. Zjawiska, które przytoczyłem jako przykłady (z pewnością jest ich więcej, ale nie wszystkie są publicznie znane), zostały pierwszy raz wywołane i poznane przez chęć oszczędności. Trzeciorzędna chińska fabryka chce zarobić, więc zaczyna produkować własną wersję popularnego układu scalonego. Dla oszczędności lub z powodów technicznych zmienia się coś w krzemie i pakuje gotowe jądra w obudowę z oznaczeniami udającymi oznaczenia oryginalnego układu. Podróbki trafiają krętą drogą do końcowego odbiorcy, który po dłuższych testach wykrywa jakiś problem. Na żadnym etapie nie wystąpiła czysta zła wola albo chęć podkopania czyjegoś interesu – tylko niewiedza lub pośpiech. Podobnie jest z efektem rowhammer, który pojawił się jako skutek uboczny postępującej miniaturyzacji RAM-u oraz pewnych mechanizmów używanych przez system operacyjny i kontroler pamięci.
Choć nikt pierwotnie nie miał złego zamiaru i być może wciąż nikt go nie ma, sama wiedza, że da się coś złośliwie wykorzystać, jest pewną groźbą. Dla przeciętnego użytkownika komputera nie ma to znaczenia. Nasze przekonanie o bezpieczeństwie i tak opiera się głównie na zaufaniu. Wystarczy nam kłódka w pasku adresu przeglądarki, znajomy wygląd strony albo dobre doświadczenia z tą czy inną usługą, i już nie boimy się z nich korzystać.
Niektórzy jednak traktują poważnie wszystko, co uważają za zagrożenie. To wojsko i organizmy państwowe. W początkach mikroelektroniki, krótko po wynalezieniu układów scalonych, ich największym odbiorcą była armia amerykańska. Dziś konsumpcja mikroelektroniki przez armie świata nie jest już dominującym czynnikiem, ale to wciąż ogromny biznes. Departament Obrony USA ma stały problem z zaopatrzeniem w elektronikę; zdarzyło się nawet kilka nagłośnionych afer w tej dziedzinie (np. ta związana z podrobionymi scalakami w myśliwcach F-16 czy nuklearnych łodziach podwodnych). Do tego zadania stworzono setki procedur i powołano liczne organizacje (jedną z nich jest DMEA). Temat regularnie powraca na przesłuchaniach Kongresu, a być może ze względu na bezpieczeństwo jeszcze więcej takich wydarzeń jest tajnych.
Co więcej, ważne są już nie tylko układy scalone w komputerach sterujących pociskami balistycznymi. W miarę jak sfera etatystycznej kontroli się rozrasta, rozrasta się też „obszar chroniony”. Dziś zaufane muszą być również tysiące komputerów należących do sierżantów z zaopatrzenia i pań z księgowości, a najlepiej także tablety kongresmenów.
Wyspecjalizowane układy scalone zaprojektowane na potrzeby armii stosunkowo łatwo zabezpieczyć: wystarczy wybrać jednego z zaufanych producentów mikroelektroniki (na stronach DMEA znajdziecie ich listę), zlecić mu wykonanie wojskowego projektu i pilnować produkcji na każdym kroku. Nie można przy tym pozwolić na wytwarzanie sprzętu w zagranicznych fabrykach, a najlepiej też nie używać żadnych licencjonowanych podobwodów (np. kontrolera pamięci) zaprojektowanych przez niezaufane firmy.
Ale jak mieć pewność, czy popularne, powszechnie dostępne układy, takie jak procesory czy RAM, nie powodują żadnych luk w bezpieczeństwie? USA nie mogą kontrolować produkcji procesorów Samsunga, Chiny nie mogą kontrolować produktów Apple – a każdy chciałby jednak z nich korzystać. Być może w procesorach Apple nie ma backdoorów NSA, a chińskie fabryki nie wprowadzają trojanów do zaprojektowanych w USA układów scalonych, lecz odkąd powszechnie wiadomo, że dałoby się coś takiego zrobić, rządy nie mogą tego zignorować. Stąd ciągłe napięcie w dziedzinie eksportu technologii, stąd też takie inicjatywy jak chiński zakaz używania produktów Apple w wielu rządowych zastosowaniach. Rynek sprzętu i oprogramowania jest jednak bardzo elastyczny i zostawia paranoikom spore możliwości.
Na przykład rząd Rosji już kilka razy wyraził chęć przestawienia się na krajowe (czytaj: kontrolowane) produkty. W maju tego roku ogłoszono plan stworzenia własnego systemu operacyjnego do smartfonów i tabletów. W zeszłym roku rozpoczęto w Rosji produkcję procesora Elbrus-2SM (został zaprojektowany w Rosji, poprzednie modele powstawały za granicą), a w tym zaprezentowano procesor Baikal-T1, wykorzystujący licencjonowane rdzenie MIPS i wytwarzany w TSMC na Tajwanie.
Ale może też chodzić o władzę
Oczywiście, procesor czy system operacyjny będący produktem krajowej, ograniczonej puli wiedzy i wynalazczości nie będzie dość dobry, żeby rywalizować ceną albo stosunkiem możliwości do ceny z produktami wymiany technologii z zagranicą. Ale nie musi być. Wbrew temu, co czasem twierdzą plotkarskie witryny internetowe, motywacja wcale nie jest ekonomiczna. Wcale nie chodzi o to, żeby nie dać zarobić AMD, Apple, Intelowi czy Microsoftowi. Jeśli rząd rosyjski przestanie kupować produkty tych firm, nikt tego w dziale księgowości nawet nie zauważy. Z kolei dla samej Rosji to ekonomiczna strata, bo dlaczego używać podrzędnych produktów, jeśli za te same pieniądze można mieć coś lepszego? Chodzi wyłącznie o postrzegane przez państwo i armię bezpieczeństwo. Procesor Elbrus może być gorszy od najnowszego Core i5 – wystarczy, żeby był dość dobry do krytycznych zadań. W zamian matka Rosja ma pewność, że w proces produkcji nikt nie ingerował, że generator liczb losowych jest naprawdę losowy, a jeśli już sprzęt ma jakieś wady (co nieuniknione), to chce o tych wadach wiedzieć wszystko, łącznie ze sposobami na ich ominięcie.
Podobne rozumowanie i podobne pragnienia muszą się pojawiać w innych państwach. USA mają pod tym względem najłatwiej dzięki swojej dominującej pozycji na polu najnowszej techniki. Ale USA również najbardziej polegają na swojej pozycji. Sugerowanie, że wszystkie amerykańskie firmy technologiczne są pod kontrolą rządu, byłoby głupie – wolę przytaczać fakty, niż snuć spekulacje. Obecne rozmieszczenie rynku oprogramowania i mikroelektroniki (fabryk, biur projektowych) jest dla niektórych krajów wygodne, dla innych nie. Z całą pewnością nie jest jeszcze optymalne dla samych inżynierów ani konsumentów. A dopóki sprzętowe trojany pozostają mniej groźne od programowych, nie mamy się czym przejmować.
Wykonanie czapki z cynfolii pozostawia się jako ćwiczenie dla Czytelnika.
Dodatkowa lektura
O sprzętowych trojanach możecie więcej przeczytać w dokumencie: „Hardware Trojans”, Mohammad Tehranipoor, Uniwersytet Connecticut.
O strategii Departamentu Obrony USA związanej z mikroelektroniką można zaś przeczytać w prezentacji: „Department of Defense Microelectronics Strategy”, Zachary Lemnios, Departament Obrony USA.