Już od czasu do czasu tutaj na blogu rozmawialiśmy o pracy wykonanej przez Andrieja Konowałowa (programista Google) w Linuksie, z jego pracy nad wykrywaniem błędów w sterownikach USB jądra Linuksa, a także w urządzeniach Wi-Fi.
Obecnie pracuje nad opracowanie nowego modułu dla jądra Linuksa, który nazwał „Gadżet USB Raw” który opisuje jako narzędzie, które pozwala emulować urządzenia USB w przestrzeni użytkownika.
poza tym wspomina, że rozważane jest włączenie tego modułu do głównego jądra Linuksa. Google Raw Gadget jest już używany przez Google do uproszczenia rozmytego testowania stosu jądra USB za pomocą zestawu narzędzi syzkaller.
Początkowo używałem GadgetFS (wraz z modułem Dummy HCD / UDC) do emulacji urządzeń USB do fuzzingu, ale potem został przełączony na niestandardowy napisany interfejs.
Zachętą do wdrożenia innego interfejsu było zapewnienie bezpośredniego i nieco surowego dostępu do warstwy gadżetów USB dla przestrzeni użytkownika, gdzie każde żądanie USB jest przekazywane do przestrzeni użytkownika w celu uzyskania odpowiedzi.
Informacje o gadżecie USB Raw
Moduł dba o dodanie nowego interfejsu programowanie do podsystemu jądra nazywa się „Gadżet USB” i jest rozwijany jako alternatywa dla GadgetFS.
Utworzenie nowego API wynika z potrzeby bezpośredniego i niskiego poziomu dostępu do podsystemu Gadget USB z przestrzeni użytkownika, umożliwiając przetwarzanie wszystkich możliwych żądań USB (GadgetFS przetwarza niektóre żądania samodzielnie, bez przenoszenia ich do przestrzeni użytkownika).
Gadżet USB Raw jest kontrolowany przez urządzenie / dev / raw-gadget analogicznie do / dev / gadget w GadgetFS, ale do interakcji używany jest interfejs oparty na ioctl () zamiast pseudo-FS.
Oprócz bezpośredniego przetwarzania wszystkich żądań USB przez proces w przestrzeni użytkownika, nowy interfejs ma również możliwość zwrócenia dowolnych danych w odpowiedzi na żądanie USB (GadgetFS sprawdza poprawność deskryptorów USB i odfiltrowuje określone odpowiedzi, co przeszkadza wykrycie błędów podczas testu czyszczenia stosu USB).
Gadżet USB Raw umożliwia również wybranie określonego urządzenia UDC (Sterownik urządzenia USB) i sterownik do podłączenia, podczas gdy GadgetFS łączy się z pierwszym dostępnym urządzeniem UDC.
W przypadku różnych KDPU przewidywalne nazwy punktów końcowych są mapowane na różne typy oddzielnych kanałów komunikacyjnych w ramach jednego urządzenia.
Na koniec, jeśli chcesz dowiedzieć się więcej na ten temat, możesz sprawdzić szczegóły, a także dziennik zmian wprowadzonych w gadżecie USB Raw W poniższym linku.
Jak zainstalować moduł Raw Gadget USB w systemie Linux?
Osoby zainteresowane możliwością przetestowania tego modułu w swoim systemie mogą to zrobić, postępując zgodnie z instrukcjami opisanymi tutaj.
Dla Dummy HCD / UDC (moduł konfigurujący wirtualne urządzenia USB i kontrolery hosta, które są ze sobą połączone w jądrze). Musimy otworzyć terminal iw nim wpiszemy następujące polecenie:
svn checkout https://github.com/xairy/raw-gadget/trunk/dummy_hcd
W ten sposób uzyskamy folder z modułami, które będziemy kompilować, wykonując następujące polecenie w terminalu:
cd dummy_hcd make
I przystępujemy do ich instalacji za pomocą:
./insmod.sh
W przypadku, gdy chcemy zaktualizować moduł, robimy to za pomocą:
./update.sh
Teraz dla tych, którzy chcą zainstalować moduł jądra. W terminalu uzyskamy potrzebne do tego pliki, wykonując następujące polecenie:
svn checkout https://github.com/xairy/raw-gadget/trunk/raw_gadget
W ten sposób uzyskamy folder z modułami, które będziemy kompilować, wykonując następujące polecenie w terminalu:
cd dummy_hcd make
I przystępujemy do ich instalacji za pomocą:
./insmod.sh
W przypadku, gdy chcemy zaktualizować moduł, robimy to za pomocą:
./update.sh
Możesz sprawdzić pracę poniższy link.