Redan vid vissa tillfällen här i bloggen har vi pratat om det arbete som utförts av Andrey Konovalov (en Google-utvecklare) i Linux, från sitt arbete med att upptäcka fel i USB-drivrutinerna i Linux-kärnan och även i Wifi-enheter.
Nu arbetar han för närvarande med utvecklingen av en ny modul för Linux-kärnan som han har utsett till "USB Raw Gadget" som beskrivs som ett verktyg som gör det möjligt att emulera USB-enheter i användarutrymmet.
Förutom det nämner att en applikation övervägs för att inkludera denna modul i huvud Linux-kärnan. Google Raw Gadget används redan av Google för att förenkla suddig testning av USB-kärnstacken med syzkaller-verktygssatsen.
Inledningsvis använde jag GadgetFS (tillsammans med Dummy HCD / UDC-modulen) för att emulera USB-enheter för fuzzing, men sedan byttes det till ett specialskrivet gränssnitt.
Incitamentet för att implementera ett annat gränssnitt var att ge en genväg och något rå åtkomst till USB Gadget-skiktet för användarutrymme, där varje USB-begäran skickas till användarutrymmet för ett svar.
Om USB Raw Gadget
Modulen tar hand om att lägga till ett nytt gränssnitt programmering till kärnsystemet kallas "USB Gadget" och som utvecklas som ett alternativ till GadgetFS.
Skapandet av ett nytt API beror på behovet av direkt och lågnivååtkomst till Gadget USB-delsystemet från användarutrymmet, så att alla möjliga USB-förfrågningar kan behandlas (GadgetFS behandlar vissa förfrågningar på egen hand utan att överföra det till användarutrymme).
USB Raw Gadget styrs via / dev / raw-gadget-enheten analogt med / dev / gadget i GadgetFS, men ett ioctl () -baserat gränssnitt istället för en pseudo-FS används för interaktionen.
Förutom direkt behandling av alla USB-förfrågningar av en process i användarutrymmet har det nya gränssnittet också möjlighet att returnera alla data som svar på en USB-begäran (GadgetFS kontrollerar riktigheten hos USB-deskriptorer och filtrerar bort vissa svar, vilket stör felavkänning under USB-stackens rensningstest).
USB Raw Gadget låter dig också välja en specifik UDC-enhet (USB-enhetsdrivrutin) och en drivrutin för anslutning, medan GadgetFS ansluter till den första tillgängliga UDC-enheten.
För olika UDC: er mappas slutpunktsnamn till olika typer av separata kommunikationskanaler inom en enda enhet.
Slutligen, om du vill veta mer om det, kan du kontrollera detaljerna samt loggen för de ändringar som gjorts i USB Raw Gadget I följande länk.
Hur installerar jag Raw Gadget USB-modulen i Linux?
För dem som är intresserade av att kunna testa den här modulen på sitt system kan de göra det genom att följa instruktionerna som beskrivs här.
För Dummy HCD / UDC (en modul som konfigurerar virtuella USB-enheter och värdkontroller som är anslutna till varandra i kärnan). Vi måste öppna en terminal och i den ska vi skriva följande kommando:
svn checkout https://github.com/xairy/raw-gadget/trunk/dummy_hcd
Med detta ska vi hämta mappen med modulerna som vi ska kompilera genom att utföra följande kommando i terminalen:
cd dummy_hcd make
Och vi fortsätter att installera dem med:
./insmod.sh
Om vi vill uppdatera modulen gör vi det med:
./update.sh
Nu för dem som vill installera kärnmodulen. I en terminal kommer vi att erhålla nödvändiga filer för detta genom att utföra följande kommando:
svn checkout https://github.com/xairy/raw-gadget/trunk/raw_gadget
Med detta ska vi hämta mappen med modulerna som vi ska kompilera genom att utföra följande kommando i terminalen:
cd dummy_hcd make
Och vi fortsätter att installera dem med:
./insmod.sh
Om vi vill uppdatera modulen gör vi det med:
./update.sh
Du kan kolla in arbetet följande länk.