Programiści komputerowi często recytują mantrę, że instrukcje x86 są całkowicie nieprzejrzyste: Intel mówi nam, że coś robią, ale nie ma nadziei, że każdy może sprawdzić, co się dzieje, więc jeśli NSA powie im, aby wycofali się z RNG, to nie możemy tak naprawdę zrób coś z tym.
Uważam, że programiści komputerowi nie mogą nic poradzić na ten problem. Ale jak zaatakowałby to inżynier elektryk? Czy istnieją techniki, które inżynier elektryk mógłby zastosować, aby sprawdzić, czy obwód faktycznie wykonuje operacje opisane w specyfikacji i żadnych innych operacji?
cpu
reverse-engineering
użytkownik14717
źródło
źródło
Odpowiedzi:
Najlepszy artykuł, jaki przeczytałem na ten temat, to „Stealthy Dopant-Level Hardware Trojans” (Becker i in.) Z 2014 roku.
W artykule opisano, w jaki sposób dokonano zmiany, jak bardzo trudno jest wykryć po sprawdzeniu krzemu, techniki ukrywania go przed testem produkcyjnym i jak można to zrobić, aby zmniejszyć bezpieczeństwo sprzętowego szyfrowania RNG lub wyciec kluczowe informacje poprzez boczny kanał szyny zasilającej wdrożenia AES.
Kanały boczne to nowe pole zainteresowań. Intel nękają problemy związane z wykonywaniem spekulacyjnym, wycieku informacji z pamięci, które nawet nie były używane przez program. Czy to może być celowa wada projektowa? Prawie niemożliwe jest powiedzieć.
źródło
Czy istnieją techniki, które inżynier elektryk mógłby zastosować, aby sprawdzić, czy obwód faktycznie wykonuje operacje opisane w specyfikacji i żadnych innych operacji?
Teoretycznie tak, myślę, że jest to możliwe. Jednak w przypadku złożonego procesora zajmie to dużo czasu i pieniędzy. Ponadto, jeśli nie w pełni znasz i nie rozumiesz projektu, nie będziesz w stanie ocenić, czy jakiekolwiek działanie jest „legalne”, czy nie.
Procesor jest „tylko” złożonym układem cyfrowym składającym się z wielu komórek logicznych.
Możliwe jest wykonanie inżynierii wstecznej układu i zrekonstruowanie projektu poprzez obserwację metalowych połączeń. Może istnieć wiele takich warstw połączeń, na przykład do 8 warstw lub więcej.
Będziesz potrzebować ekspertów w tej dziedzinie, aby rozpoznać komórki logiczne, a następnie może niektóre programy mogą dowiedzieć się, w jaki sposób są one połączone, abyś mógł zrekonstruować listę sieci.
Gdy masz już listę sieci, „znasz” projekt. To nie znaczy, że teraz już wiesz, jak to działa!
Może się zdarzyć, że pewna funkcja aktywuje 2 sekcje projektu, podczas gdy uważasz, że jedna powinna wystarczyć, więc podejrzewasz, że dzieje się podejrzana aktywność. Jednak konstrukcja ma sprytną sztuczkę, o której nie wiesz, aby przyspieszyć operacje.
Bez znajomości i zrozumienia projektu wszelkie wyciągnięte wnioski mogą być błędne. Tylko inżynierowie, którzy zaprojektowali procesor, mają wszystkie informacje projektowe i mają największą szansę, aby dowiedzieć się lub zgadnąć, co się właściwie dzieje lub co powinno się wydarzyć w procesorze.
źródło
Nie ma dobrych sposobów na znalezienie tylnych drzwi, jednym ze sposobów na znalezienie sprzętowego backdoora byłoby przetestowanie kombinacji lub nieudokumentowanych instrukcji. Oto dobra rozmowa o kimś, kto to robi i przeprowadza audyty na sprzęcie x86 . Można to zrobić bez łamania układu. Jednym z problemów z intelem (nie jestem pewien co do innych układów) jest to, że tak naprawdę ma on procesor z Linuksem, więc na niektórych procesorach działa także oprogramowanie i nie masz do niego dostępu.
Istnieją sposoby przetestowania używania samego sprzętu do testowania funkcjonalności. Ponieważ x86 ma nieudokumentowaną część zestawu instrukcji, wprowadzanie backdoorów w normalnych instrukcjach byłoby niezwykłe, ponieważ wprowadzałoby to możliwość błędów (tak jakbyś miał backdoora w instrukcji add lub mult), więc pierwsze miejsce na spojrzenie będzie w nieudokumentowanych instrukcjach.
Jeśli trzeba było przetestować funkcjonalność regularnych instrukcji, można było obserwować czas potrzebny na wykonanie instrukcji, obserwować ilość energii potrzebnej do uruchomienia instrukcji, aby sprawdzić, czy istnieją różnice w stosunku do tego, czego można oczekiwać.
źródło
Jedynym sposobem byłoby zdejmowanie mikroukładu warstwa po warstwie i rejestrowanie każdego tranzystora za pomocą mikroskopu elektronowego, a następnie wprowadzanie go do jakiegoś programu symulacyjnego, a następnie obserwowanie jego działania.
Jest to w zasadzie problem czarnej skrzynki, w którym próbujesz zrekonstruować elementy wewnętrzne z pomiarów wejść i wyjść. Gdy złożoność elementów wewnętrznych lub liczba wejść / wyjść wykracza poza trywialny, następuje kombinatoryczna eksplozja, w której liczba możliwych stanów wewnętrznych staje się astronomiczna. Gdzie rzucane są liczby takie jak Googol .
źródło
Niezwykle trudne jest udowodnienie, że procesor nie robi czegoś podstępnego. Klasycznym przykładem jest automat do głosowania. Jeśli ma w sobie choćby odrobinę, która pobiera kopię twojego głosu, a później przekracza ją dyktatorowi, w niektórych miejscach może to być dla ciebie życie lub śmierć. A udowodnienie, że wśród miliardów nie ma nawet jednego takiego, jest dość trudne.
Możesz pomyśleć o fizycznym odizolowaniu układu, więc dobrze jest zauważyć, że nie ma do niego niewłaściwych połączeń przewodów. I umieszczenie innego układu lub więcej niż jednego układu szeregowo (z różnych źródeł) w jego połączeniu sieciowym, co gwarantuje, że łączy się tylko we właściwym miejscu. Następnie włączaj i wyłączaj zasilanie po głosowaniu. I mając nadzieję, że nie ma tam nielotnych kawałków. Lub podstępne połączenia bezprzewodowe. Ale czy zaufałbyś swojemu życiu?
źródło
Przesyłanie dowolnych danych do NSA będzie wymagało dostępu do sieci, więc dość łatwo będzie wykryć takie backdoor, uruchamiając system operacyjny z wyłączonymi usługami sieciowymi i sprawdzając ruch w interfejsach sieciowych. W przypadku systemu operacyjnego typu open source możliwe jest nawet uruchomienie z pełną obsługą sieci i wykrycie nieuczciwego połączenia według docelowego adresu IP, który nie będzie pasował do żadnego adresu, do którego system operacyjny mógłby uzyskać dostęp.
Backdoor oparty na RNG bez transmisji danych będzie miał bardzo ograniczoną użyteczność. O ile CPU RNG nie jest jedynym źródłem entropii, szanse, że taki backdoor zapewni atakującemu jakąkolwiek korzyść, a jednocześnie nie będzie oczywiste, są praktycznie zerowe . O ile nie upierasz się, że czajnik Russela jest na miejscu, mimo że nie ma żadnego dobrego powodu, powinieneś być w stanie zastosować ten sam argument do backdoorów sprzętowych RNG.
źródło
rdrand
lubrdseed
jak sugeruje Intel: jako jedyne źródło entropii dla materiału siewnego PRNG. Linux (jądro) nie zdecydował się to zrobić za/dev/random
, ale glibc / libstdc ++ 's prądstd::random_device
robi wykorzystania tylkordrand
jeśli jest ona dostępna w czasie wykonywania zamiast otwierania/dev/random
. Wejdź do standardowego połączenia z biblioteką z godboltstd::random_device
nie jest kryptograficznie silnym RNG. Standard C ++ pozwala zaimplementować go za pomocą PRNG, skutecznie zwracając tę samą sekwencję za każdym razem , więc jest oczywiste, że nikt nie powinien używać go do szyfrowania.