Twierdzenia wirtualizacji Popka i Goldberga

https://chacker.pl/

W 1974 r. Gerald J. Popek i Robert P. Goldberg opublikowali swoje twierdzenia wirtualizacji3, w których formalnie przedstawili wymagania dotyczące wydajnych architektur wirtualizowalnych. Musimy poznać tę teorię, zanim przejdziemy do bardziej namacalnych implementacji, abyśmy mogli zrozumieć ich powiązania.

Ich praca zaczyna się od założenia modelu komputera składającego się z procesora z trybami wykonywania użytkownika/nadzorcy i prostym mechanizmem pułapki. W tym modelu pamięć jest jedynym zasobem systemowym, do którego procesor uzyskuje dostęp poprzez liniowe, względne adresowanie z rejestru relokacji. Instrukcje procesora są klasyfikowane w następujący sposób:

  • Instrukcje uprzywilejowane Te instrukcje są dostępne tylko w trybie wykonywania nadzorcy. W tym modelu każda próba wykonania instrukcji uprzywilejowanej powoduje pułapkę, jeśli tryb wykonywania procesora jest trybem użytkownika.
  • Instrukcje wrażliwe na sterowanie Te instrukcje mają wpływ na konfigurację jednego lub wielu zasobów systemowych. W obecnym modelu te efekty obejmują wartość rejestru relokacji i tryb wykonywania procesora.
  • Instrukcje wrażliwe na zachowanie Te instrukcje wykazują różne zachowanie w zależności od konfiguracji zasobów systemowych. W obecnym modelu mogą być one dotknięte konfiguracją rejestru relokacji (wrażliwe na lokalizację) lub bieżącym trybem wykonywania procesora (wrażliwe na tryb).
  • Instrukcje nieszkodliwe Te instrukcje nie są ani wrażliwe na sterowanie, ani wrażliwe na zachowanie.

UWAGA Niektóre z oryginalnych definicji odzwierciedlają aspekty architektur, które istniały w czasie publikacji pracy. Dla uproszczenia niektóre definicje zastąpiono mniej precyzyjnymi.

VMM jest definiowany jako część oprogramowania działająca w trybie nadzorcy i składa się z następujących modułów:

  • Dispatcher Jest to punkt wejścia obsługi pułapki i wywołuje albo alokator, albo interpreter w zależności od źródła pułapki.
  • Allocator Jest wywoływany przez dyspozytora, gdy VM próbuje wykonać instrukcję wrażliwą na sterowanie. Alokator zarządza zasobami systemu, izolując zasoby VMM od maszyn wirtualnych i te przypisane do maszyn wirtualnych od siebie.
  • Interpreter Jest wywoływany przez dyspozytora, gdy VM próbuje wykonać instrukcję uprzywilejowaną. Interpreter symuluje zachowanie błędnej instrukcji, tak jakby była wykonywana natywnie.

VM jest definiowany jako środowisko wirtualne — a dokładniej jako „wydajny, odizolowany duplikat rzeczywistej maszyny”. Maszyny wirtualne działają w trybie użytkownika i prezentują następujące właściwości:

  • Equivalence Programy działające na maszynie wirtualnej powinny wykazywać identyczne zachowanie jak wykonywanie natywne.
  • Wydajność Nieszkodliwe instrukcje powinny być wykonywane bezpośrednio przez

CPU. Programy uruchamiane na maszynie wirtualnej powinny wykazywać „w najgorszym przypadku tylko niewielkie spadki prędkości”.

  • Kontrola zasobów Programy uruchamiane na maszynie wirtualnej nie mogą uzyskać dostępu do zasobów, które nie zostały wyraźnie przydzielone przez maszynę wirtualną lub które w jakikolwiek sposób wpływają na inne zasoby systemu.

Z tych definicji wynikają trzy twierdzenia wirtualizacji:

  • Dla dowolnego komputera można skonstruować maszynę wirtualną, jeśli zestaw jego wrażliwych instrukcji jest podzbiorem zestawu instrukcji uprzywilejowanych.
  • Komputer jest rekurencyjnie wirtualizowalny, jeśli (a) jest wirtualizowalny i (b) można skonstruować dla niego maszynę wirtualną bez zależności czasowych.
  • Hybrydową maszynę wirtualną (HVM) można skonstruować dla dowolnego komputera, w którym zestaw wrażliwych instrukcji użytkownika jest podzbiorem zestawu instrukcji uprzywilejowanych.

Pierwsze twierdzenie ma ważne implikacje dla właściwości równoważności i kontroli zasobów. Jeśli zbiór wrażliwych instrukcji (związek instrukcji wrażliwych na sterowanie i wrażliwych na zachowanie) jest instrukcjami uprzywilejowanymi, wówczas każda próba wykonania wrażliwej instrukcji przez maszynę wirtualną spowoduje pułapkę w dyspozytorze maszyny wirtualnej. Dyspozytor wywoła alokator, jeśli pułapka pochodzi z instrukcji wrażliwej na sterowanie (właściwość kontroli zasobów jest zachowana) lub interpreter, jeśli pułapka pochodzi z instrukcji wrażliwej na zachowanie (właściwość równoważności jest zachowana). Nieszkodliwe instrukcje są albo bezpośrednio wykonywane przez procesor, albo obsługiwane przez interpreter, jeśli są instrukcjami uprzywilejowanymi (właściwość równoważności jest zachowana). Ten rodzaj implementacji maszyny wirtualnej jest znany jako „pułapka i emulator”, a architektura jest uważana za „klasycznie wirtualizowalną”, jeśli maszynę wirtualną można w pełni zaimplementować w ten sposób. Drugie twierdzenie odnosi się do komputera rekurencyjnie wirtualizowalnego, obecnie nazywanego „wirtualizacją zagnieżdżoną”. Podczas gdy teoretycznie środowisko wirtualne dostarczane przez maszynę wirtualną powinno być duplikatem rzeczywistej maszyny, w praktyce nie zawsze tak jest. Zamiast tego może reprezentować ograniczony podzbiór lub podobną rodzinę komputerów. Przykładem z tamtego okresu jest CP-67 działający na IBM S/360-67, który obsługiwał stronicowanie, ale udostępniał środowisko wirtualne S/360-65 bez obsługi stronicowania. Brak stronicowania nie pozwalał na rekurencyjne uruchamianie CP-67, do czego wymagał modyfikacji. Nawet jeśli VMM zapewnia środowisko wirtualne ze wszystkimi wymaganymi przez siebie funkcjami, nadal musi działać wydajnie w tym środowisku. W trzecim twierdzeniu napotykamy kilka nowych definicji: instrukcja wrażliwa na użytkownika jest definiowana jako instrukcja, która jest wrażliwa, gdy jest wykonywana w trybie użytkownika; podobnie instrukcja wrażliwa na nadzorcę jest wrażliwa, gdy jest wykonywana w trybie nadzorcy. Wreszcie, HVM jest definiowany jako mniej wydajna implementacja VMM, w której cały kod wykonywany w trybie wirtualnego nadzorcy jest interpretowany. Twierdzenie to łagodzi wymagania pierwszego twierdzenia, dzięki czemu niektóre istniejące wówczas architektury mogą je spełnić.

Czym jest hiperwizor?

https://chacker.pl/

Hiperwizor lub monitor maszyny wirtualnej (VMM) to składnik działający w hoście, który zarządza tworzeniem, przydzielaniem zasobów i wykonywaniem maszyn wirtualnych (VM). Każda maszyna wirtualna zapewnia odizolowane środowisko wirtualne, w którym mogą działać różne systemy operacyjne (OS). Wirtualizacja to koncepcja sięgająca końca lat 60., kiedy IBM rozwijał swoje pierwsze systemy CP/CMS1: oprogramowanie VMM o nazwie Control Program (CP), które mogło uruchamiać maszyny wirtualne z lekkim systemem operacyjnym o nazwie CMS. Jednak pierwszy udany produkt, który w pełni wirtualizował 32-bitowe procesory x86, pojawił się dekady później, kiedy w 1999 r. wprowadzono VMware Workstation2.

Hiperwizory

https://chacker.pl/

Wirtualizacja to proces tworzenia wielu odizolowanych środowisk wirtualnych, w których systemy operacyjne (goście) mogą być jednocześnie wykonywane na maszynie fizycznej (hoście). W ciągu ostatnich kilku lat zainteresowanie tą technologią wzrosło ze względu na korzyści, jakie zapewnia w zakresie redukcji kosztów operacyjnych. Jednak takie współdzielenie zasobów fizycznych wiąże się z nowymi zagrożeniami bezpieczeństwa. Na przykład atakujący mający dostęp do jednego ze środowisk wirtualnych może wykorzystać lukę w stosie wirtualizacji i naruszyć bezpieczeństwo hosta, udzielając dostępu do pozostałych środowisk wirtualnych działających na tej maszynie fizycznej. Tutaj dowiesz się o rdzeniu stosu wirtualizacji: oprogramowaniu hiperwizora. Zaczniemy od teoretycznego modelu architektury wirtualizowalnej, omawiając jej właściwości i ogólne koncepcje wirtualizacji. Następnie przejdziemy do szczegółów x86, gdzie porównamy tę konkretną architekturę z modelem teoretycznym. Aby zrozumieć ten rozdział, powinieneś znać architektury 86/x86_64 i koncepcje, takie jak różne tryby wykonywania, wyjątki, segmentacja i stronicowanie.

Podsumowanie

https://chacker.pl/

Chociaż ledwie musnęliśmy powierzchnię tego, co można zrobić za pomocą SDR z GNU Radio, udało nam się przeanalizować bardzo proste urządzenie RF. Używając procesu SCRAPE, odkryliśmy częstotliwość roboczą, przechwyciliśmy dane, przeprowadziliśmy atak odtwarzania, zrozumieliśmy strukturę danych i zsyntetyzowaliśmy dane od podstaw. Zobaczyłeś również, jak GNU Radio pozwala symulować sygnały bez konieczności łączenia się ze sprzętem. Mamy nadzieję, że ten rozdział wzbudził Twoje zainteresowanie SDR i dał Ci pewność, że temat nie jest poza Twoim zasięgiem.

Wykonaj

https://chacker.pl/

Sprawdziliśmy, że zsyntetyzowane dane wyglądają jak dane, które otrzymaliśmy bezprzewodowo. Pozostało tylko włączyć odbiornik osmocom

przesłać, wykonując wykres przepływu i obserwować, jak włącza się gniazdo zasilania. Aby włączyć odbiornik, po prostu kliknij prawym przyciskiem myszy blok i wybierz Włącz. Jeśli grasz, prawdopodobnie będziesz chciał wyłączyć odbiornik plików, aby zminimalizować używane miejsce do przechowywania. W tym momencie możesz się pokłonić, ponieważ pomyślnie odtworzyłeś funkcjonalność pilota od podstaw, używając SDR.

Podgląd

https://chacker.pl/

Jesteśmy teraz w punkcie, w którym mamy nadzieję, że cały wysiłek się opłaci i będziemy mogli zsyntetyzować nasze własne dane, korzystając z wyników analizy. Celem kroku podglądu jest sprawdzenie, czy dane, które zamierzamy wysłać, wyglądają tak, jak oczekujemy, przed wysłaniem ich bezprzewodowo. Ten krok można połączyć z krokiem wykonania, ale myślę, że jest wystarczająco ważny, aby uzasadnić jego osobny krok, aby upewnić się, że go nie pominiemy i nie zaczniemy przesyłać. Do tej pory tworzone przez nas wykresy przepływu były stosunkowo proste i zawierały bardzo mało ruchomych części. Aby utworzyć sygnał od podstaw, użyjemy kilku nowych bloków, jak opisano w Tabeli

Wykres przepływu na Rysunku  obejmuje blok odbiornika osmocom, ale zauważ, że strzałka i blok mają inny kolor niż pozostałe strzałki i bloki.

Oznacza to, że są wyłączone. Inną subtelną zmianą jest to, że przełączyliśmy się na 1 MSps zamiast typowych 4 MSps. Ponieważ syntetyzujemy dane, nie musimy używać tej samej częstotliwości próbkowania, co wcześniej. Ponadto wybrana częstotliwość próbkowania ułatwiła wykazanie, że szybkość symboli wynosiła 275 μs. Wzory są pobierane z binarnej reprezentacji zdalnej na polecenie:

Po uruchomieniu wykresu przepływu otrzymasz nowy plik przechwytywania o nazwie test-preview. Powtórzenie kroków analizy na przechwycie test-preview powinno dać takie same (lub podobne) wyniki, jeśli nie popełniłeś żadnych błędów w wykresie przepływu

Zwróć uwagę, że całkowita liczba okresów symboli wynosi 128, co odpowiada wzorowi z przerwą.

Analiza

https://chacker.pl/

Do tej pory udowodniliśmy, że możemy przechwytywać i odtwarzać sygnał, ale tak naprawdę nie wiemy, co jest transmitowane. Podczas tej fazy spróbujemy dowiedzieć się, jak urządzenie rozróżnia różne naciśnięcia przycisków i czy jest wystarczająco inteligentne, aby wykluczyć inne piloty. Aby wykonać oba te zadania, musimy dowiedzieć się, jak kodowane są dane. Chociaż moglibyśmy użyć gnuradio_companion do przeprowadzenia analizy, zamierzamy użyć innego narzędzia, które nieco ułatwi to zadanie: inspectrum. Inspectrum (https://github.com/miek/inspectrum) to analizator sygnału radiowego offline, który działa na przechwyconych sygnałach radiowych. W momencie pisania tego tekstu wersja inspectrum zainstalowana przez apt w Ubuntu jest opóźniona w stosunku do najnowszej wersji i nie zawiera niektórych niezwykle przydatnych funkcji. Zalecam zbudowanie jej z GitHub. Aby zbudować inspectrum ze źródła, musisz również zainstalować liquid-dsp. W podstawowej instalacji Ubuntu, inspectrum można zainstalować za pomocą poleceń znajdujących się w pliku README.txt katalogu Analyze ze strony pobierania książki. Aby przesyłać dane między stacjami, sygnał nośny jest modulowany danymi do przesłania. Sygnał nośny lub częstotliwość są znane obu stronom i „niosą” dane. Kluczowanie on-off to prosta metoda modulacji amplitudy, która skutkuje obecnością lub brakiem częstotliwości nośnej w celu przekazania informacji.

Prosta forma kluczowania on-off może mieć tylko impulsy o jednym czasie trwania, gdzie obecność impulsu to 1, a brak impulsu przez ten czas to 0. Nieco bardziej skomplikowana forma może używać długiego impulsu jako 1 i krótkiego impulsu jako 0. Najmniejszy okres czasu przejścia od pewnej amplitudy do braku amplitudy nazywa się okresem symbolu. Po zainstalowaniu inspectrum po prostu uruchamiamy je i wprowadzamy niezbędne zmiany dla naszych próbek w GUI. Jeśli nie masz urządzenia, możesz użyć plików przechwytywania zawartych w katalogu Capture ze strony pobierania książki, aby śledzić. Na rysunku 22-7 zauważysz, że otworzyliśmy przechwytywanie w celu włączenia gniazda 1 (remote1-1on-4m-316mhz) i ustawiliśmy częstotliwość próbkowania na 4000000 (częstotliwość, z jaką przechwyciliśmy sygnał).

Oś pozioma to czas, a oś pionowa to częstotliwość. Kolor informacji wyświetlanych na ekranie można traktować jako intensywność i można go dostosować, przesuwając suwaki Power Max i Min. Dostosuj suwaki Power Max i Min tak, aby w tym przypadku widzieć wyraźniejsze krawędzie. –1 MHz na skali pionowej odnosi się do 316 MHz do 1 MHz (lub 315 MHz). Co więcej, jeśli będziesz podążać za diagramem poziomo, zobaczysz mnóstwo kresek o różnych rozmiarach z odstępem między nimi. Kreski na naszej częstotliwości roboczej wyglądają jak kod Morse’a i wskazują na formę klawiszowania on-off.

Aby zdekodować dane, musimy obliczyć okres symbolu i przetłumaczyć symbole pojedynczego pakietu. Na szczęście inspectrum udostępnia kilka narzędzi do pomiaru sygnału i przechwytywania danych symboli. Funkcja kursora zapewnia sposób graficznego podziału diagramu na symbole o określonej długości. Ponadto, ukryta na środkowym przycisku myszy jest możliwość dodania wykresu amplitudy i wyodrębnienia symboli. Na rysunku widać dodanie kursora przy okresie symbolu 272μs i ośmiu okresach nałożonych na sygnał.

Aby określić okres symbolu, wyrównaj przednią krawędź kursora na początku najmniejszego symbolu i przeskaluj kursor, aby wyrównał się na końcu tego samego symbolu. Następnie po prostu przesuń region, aby wyrównać na początku wszystkich symboli i zwiększyć liczbę symboli. Oryginalny okres symbolu nie będzie dokładny, ale powinien być w przybliżeniu. Głównym pomysłem jest zapewnienie, że krawędzie wszystkich symboli są wyrównane z krawędzią okresu. Nawet przy tak prostym wykresie przekazywanych jest kilka ważnych informacji:

  • Najkrótszy impuls trwający 272μs.
  • Najdłuższy impuls trwający jest trzy razy dłuższy od najmniejszego impulsu trwającego.
  • Cztery okresy symboli 272μs występują między początkiem jednego impulsu a początkiem następnego impulsu.

Teraz, gdy mamy to, co wydaje się być okresem symboli, powinniśmy zwiększyć liczbę symboli i sprawdzić, czy nadal pokrywamy się z krawędziami kresek w całym pakiecie danych. Po prostu oddal diagram i zobacz, gdzie pokrywa się ostatni impuls. W naszym przypadku byliśmy nieco poza zasięgiem i musiałem lekko rozciągnąć okres, tak aby okres symboli wynosił 275μs zamiast 272μs. Nie jest to nieoczekiwane, biorąc pod uwagę, że wszelkie błędy w początkowym pomiarze są w tym przypadku mnożone przez 100. Po potwierdzeniu szybkości symboli i okresu możemy teraz wyodrębnić symbole i przetłumaczyć je na dane binarne. Aby to osiągnąć, używamy wykresu amplitudy ze środkowego przycisku myszy. Po dodaniu wykresu amplitudy do wykresu widma dodawany jest nowy nawias z trzema poziomymi liniami. Nawias musi być wyrównany (wyśrodkowany) na danych symbolu, aby uzyskać wykres amplitudy danych symbolu na nowo dodanym wykresie amplitudy. W takim przypadku, gdy nawiasy są wyśrodkowane na danych symbolu, a ustawienia Power Max/Min są rozsądne, wykres zaczyna wyglądać jak fala kwadratowa

Gdy fala kwadratowa wygląda jak fala kwadratowa, używamy ponownie środkowego przycisku myszy, aby wyodrębnić symbole do standardowego wyjścia (stdout). Wyodrębnione wartości są następnie drukowane w wierszu poleceń, w którym wywołano inspectrum

W tym momencie przejdziemy do małego programowania w Pythonie, aby przetłumaczyć wektor amplitudy na wektor binarny w celu dalszego przetwarzania.

Wyodrębnione symbole mieszczą się w przedziale od –1 do 17, dlatego musimy je przekonwertować na dane binarne, aby ułatwić przetwarzanie. Rozsądną metodą konwersji jest wybranie wartości progowej, gdzie wszystko powyżej progu jest binarną 1, a wszystko poniżej jest binarnym 0. Nadchodzący skrypt decode-inspectrum.py pozwala użytkownikowi wybrać próg na podstawie wartości wyodrębnionych z inspectrum.

UWAGA: Rzeczywiste wartości minimalne i maksymalne będą się różnić w zależności od ustawień Power Min/Max. Dodałem thresh (od progu) do funkcji decode, aby umożliwić uwzględnienie różnych wartości

Aby interaktywnie bawić się danymi, używam ipython3 (1), ale możesz uruchomić kod w dowolny sposób. Jedną z zalet ipython3 jest to, że możesz modyfikować rutynę i przeładowywać ją (2) według własnego uznania. Rutyna dekodowania (3) pobiera dane wyjściowe (4) symboli ekstrakcji z inspectrum i drukuje zdekodowane dane w postaci surowego dekodowania szesnastkowego (5), przetłumaczonych symboli decode(6) i surowego dekodowania binarnego (7). Dekodowanie przetłumaczonych symboli opiera się na fakcie, że kluczowanie włącz-wyłącz wydawało się mieć dwa symbole. Dane binarne odzwierciedlają te same dwa symbole, przy czym długi impuls to 0xe, a krótki impuls to 0x8. Wynik uruchomienia dekodowania dla wszystkich przechwytów pokazano poniżej:

Nie jest do końca jasne, jaki jest początek każdego pakietu, ale konsekwentnie wydaje się zaczynać od binarnej 10 (reprezentowanej jako 0xe8 w systemie szesnastkowym). Następnie dane różnią się tylko między pilotami, co może wskazywać na schemat adresowania, ponieważ piloty działają tylko na sparowanych gniazdach. Jeśli porównamy tę samą operację na obu pilotach, ostatnie 4 bity to wyraźnie wykonywana operacja (czyli włączenie gniazda 1). Jeśli wcześniej nie było to oczywiste, teraz wiemy, że ataki replay będą działać tylko na sparowanym gnieździe.

Powtórka

https://chacker.pl/

Teraz, gdy przechwyciliśmy sygnały, nadszedł czas, aby spróbować odtworzyć dane. Chociaż niemożność pomyślnego odtworzenia danych niekoniecznie oznacza, że ​​nie udało nam się ich poprawnie przechwycić, możliwość pomyślnego odtworzenia danych wskazuje na potencjalną wadę komunikacji. W przypadku systemów, w których bezpieczeństwo jest kwestią priorytetową, należy wdrożyć środki zaradcze zapobiegające powtórzeniom, aby zapobiec nieautoryzowanemu dostępowi. Ogólnym przypadkiem użycia takiego urządzenia jest po prostu włączanie lub wyłączanie światła, wentylatora lub innego prostego urządzenia. Dlatego podejrzewam, że ataki powtórzeniowe prawdopodobnie nie zostaną złagodzone. Głównym celem ataku powtórzeniowego jest pomyślne przetestowanie urządzenia przy minimalnym zrozumieniu rzeczywistego protokołu. Wykres przepływu fazy powtórzenia będzie wyglądał jak faza przechwytywania, z wyjątkiem tego, że teraz używamy pliku jako źródła i osmocom jako odbiornika. Musimy ponownie użyć tej samej częstotliwości próbkowania i częstotliwości, aby sygnał mógł zostać odtworzony w takiej postaci, w jakiej został odebrany. Dodatkowo, bloki Multiply Const, QT GUI Time Sink i Throttle zostały dodane do wykresu na Rysunku , aby ułatwić ewentualne korekty.

Throttle jest dodawany, aby utrzymać niskie wykorzystanie procesora, jeśli nie mamy zewnętrznego odbiornika, który skutecznie ograniczyłby szybkość danych. Zasadniczo, jeśli odbiornik osmocom jest wyłączony, a przepustnica nie istnieje, dane odczytywane z pliku nie są ograniczone szybkością, a wykorzystanie procesora może być wysokie.

UWAGA Upewnij się, że używasz funkcji Kill (F7), aby zamknąć bieżący wykres przepływu, aby umożliwić SDR prawidłowe oczyszczenie. Odkryłem, że czasami nadajnik nie przestaje nadawać, nawet gdy używana jest funkcja Kill, więc uważaj, aby nie kontynuować nadawania po zakończeniu. Niestety, bez dodatkowego SDR do monitorowania transmisji trudno jest określić, czy transmisja jest ciągła. Reset urządzenia może być użyty, aby upewnić się, że transmisja została zatrzymana.

Gdy wykres przepływu był pierwotnie uruchomiony ze stałą mnożnika równą 1, gniazdo zasilania nie włączało się. Z wykresu częstotliwości na rysunku wynika, że ​​przynajmniej nadajemy na prawidłowej częstotliwości, więc coś innego musi utrudniać nasz postęp.

W wielu przypadkach możliwość pomyślnego odtworzenia oznacza „koniec gry”. Na przykład, jeśli urządzenie kontroli dostępu do drzwi nie ma środków łagodzących odtwarzanie, atakujący może uzyskać próbkę i uzyskać nieautoryzowany dostęp. Teraz, gdy pomyślnie odtworzyliśmy przechwycony sygnał, możemy przejść do fazy analizy.

Przechwytywanie

https://chacker.pl/

zbrojeni w częstotliwość roboczą, mamy wystarczająco dużo informacji, aby rozpocząć eksperymenty z SDR i testowanym urządzeniem (DUT). W tym momencie musimy mieć zainstalowane SDR (HackRF) i oprogramowanie (narzędzia gnuradio i HackRF) oraz antenę zdolną do odbioru 315 MHz (ANT500 75 MHz do 1 GHz). Chociaż nie będziemy przechodzić bezpośrednio przez proces instalacji, polecam użycie PyBOMBS i zainstalowanie narzędzi w katalogu domowym przy użyciu argumentu prefiksu do PyBOMBS. Instalując go w katalogu domowym, będziesz mieć możliwość eksperymentowania z kilkoma konfiguracjami i łatwiejszego odzyskiwania po wszelkich przyszłych problemach z aktualizacjami. Na stronie pobierania książki możesz znaleźć plik README.txt z instrukcjami instalowania narzędzi, wykresy przepływu przywoływane w całym rozdziale do wykorzystania w GNU Radio Companion oraz pliki przechwytywania do wykorzystania w analizie w przypadku, gdy nie masz urządzenia, do którego się odwołujesz. GNU Radio Companion (uruchamiany przez uruchomienie gnuradio_companion) to narzędzie GUI, które pozwala użytkownikowi na tworzenie radia programowego poprzez łączenie jednego lub wielu bloków przetwarzania sygnału. Narzędzie generuje kod Pythona w tle i pozwala użytkownikowi definiować zmienne i używać instrukcji Pythona w GUI.  Aby zminimalizować liczbę wymaganych transmisji, do zapisu danych zarówno do odtwarzania, jak i analizy offline używany jest odpływ pliku.

UWAGA : Należy odnotować częstotliwość próbkowania i częstotliwość kanału, ponieważ będą one niezbędne podczas korzystania z narzędzi offline i ataków odtwarzania.

Podczas fazy przechwytywania próbowałem przechwycić plik dla każdego znanego bodźca. W przypadku naszego DUT znane bodźce naciskają przycisk włączania/wyłączania dla każdego gniazda. Ponadto, aby pomóc nam zrozumieć protokół urządzenia, do porównania użyto dwóch pilotów. W tym momencie, w oparciu o nasze zrozumienie z raportu testowego, powinniśmy zobaczyć skok przy lub w okolicach 315 MHz, jak pokazano na rysunku.

Zauważysz również, że skok występuje przy 316 MHz; jest to artefakt sprzętu testowego (przesunięcie DC) i nie jest to problem dla naszego testowania. Przesunięcie DC pojawia się na częstotliwości środkowej i jest powodem, dla którego dostroiliśmy odbiornik do 316 MHz, aby go odsunąć. W tym momencie mamy wystarczająco dużo przechwyconych danych, aby przejść do następnej fazy, odtwarzania.

Szukanie

https://chacker.pl/

Podczas fazy wyszukiwania procesu SCRAPE staramy się dowiedzieć jak najwięcej o charakterystyce radia bez konieczności używania specjalistycznego sprzętu. Wiesz już, że FCC reguluje widmo radiowe, ale możesz nie wiedzieć, że większość urządzeń nadających musi być certyfikowana przez FCC, aby mieć pewność, że działają zgodnie z ustalonymi zasadami. Gdy produkt lub moduł jest certyfikowany, wydawany jest identyfikator FCC, który musi być widoczny na produkcie lub module. Ten identyfikator FCC będzie naszym kluczem wyszukiwania do badania charakterystyki RF. Urządzeniem, które będziemy analizować, jest pilot Prime Indoor Wireless Power Outlet . Nie musisz kupować tego urządzenia, aby śledzić rozdział. Identyfikator FCC pilota to QJXTXTNRC. Identyfikator można znaleźć na etykiecie na zewnątrz produktu. Wyszukiwanie autoryzacji sprzętu FCC nie znajdzie raportu dla tego urządzenia, chyba że użyjesz „-TXTNRC” jako kodu produktu. Aby obejść takie problemy, po prostu używam Google do wyszukiwania, tak jak tutaj:

Strona internetowa fccid.io zwykle pojawia się wśród najlepszych wyników. W naszym przypadku najlepszym linkiem był https://fccid.io/QJX-TXTNRC. Na stronie fccid.io znajdujemy kilka powiązanych dokumentów i raportów, które mówią nam, że zakres częstotliwości roboczej tego urządzenia wynosi od 315,0 MHz do 315,0 MHz (lub po prostu 315,0 MHz). Raporty te zawierają częstotliwości robocze, przykładowe przebiegi wskazujące rodzaj transmisji, pomiary czasu wskazujące długość pakietu i różne szerokości impulsów. Użyjemy zakresu częstotliwości roboczej jako punktu wyjścia i pozostawimy resztę raportu testowego jako kontrolę poprawności po zakończeniu testów.