Již při některých příležitostech zde v blogu jsme hovořili o práci Andrey Konovalov (vývojář Google) v Linuxu, z jeho práce v oblasti včasné detekce poruch v USB ovladačích Linuxového jádra a také ve Wifi zařízeních.
Nyní v současné době pracuje vývoj nového modulu pro linuxové jádro, které pojmenoval jako „USB Raw gadget“ který popisuje jako nástroj, který umožňuje emulovat zařízení USB v uživatelském prostoru.
kromě toho zmiňuje, že se uvažuje o zařazení tohoto modulu do hlavního linuxového jádra. Gadget Google Raw již Google používá ke zjednodušení fuzzy testování zásobníku jádra USB pomocí sady nástrojů syzkaller.
Zpočátku jsem používal GadgetFS (spolu s Dummy HCD / UDC modulem) k emulaci USB zařízení pro fuzzing, ale pak to bylo přepnuto na vlastní psané rozhraní.
Pobídkou pro implementaci jiného rozhraní bylo poskytnout přímý a poněkud surový přístup k vrstvě USB Gadget pro uživatelský prostor, kde je každý požadavek USB předán do uživatelského prostoru pro odpověď.
O zařízení USB Raw Gadget
Modul se postará o přidání nového rozhraní programování do subsystému jádra s názvem „USB Gadget“ a který je vyvíjen jako alternativa k GadgetFS.
Vytvoření nového API je způsobeno potřebou přímého a nízkoúrovňového přístupu do USB subsystému Gadget z uživatelského prostoru, což umožňuje zpracování všech možných požadavků USB (GadgetFS zpracovává některé požadavky samostatně, aniž by je přenášel do uživatelského prostoru).
Gadget USB Raw se ovládá pomocí zařízení / dev / raw-gadget analogicky s / dev / gadget v GadgetFS, ale pro interakci je použito rozhraní založené na ioctl () místo pseudo-FS.
Kromě přímého zpracování všech požadavků USB procesem v uživatelském prostoru má nové rozhraní také schopnost vracet veškerá data v reakci na požadavek USB (GadgetFS kontroluje správnost deskriptorů USB a odfiltruje určité odpovědi, což narušuje detekce chyb během testu vymazání zásobníku USB).
USB Raw Gadget také umožňuje vybrat konkrétní zařízení UDC (Ovladač zařízení USB) a ovladač pro připojení, zatímco GadgetFS se připojuje k prvnímu dostupnému zařízení UDC.
Pro různé UDC jsou předvídatelné názvy koncových bodů mapovány na různé typy samostatných komunikačních kanálů v rámci jednoho zařízení.
Nakonec, pokud se o tom chcete dozvědět více, můžete zkontrolovat podrobnosti a protokol změn provedených v USB Raw Gadget Na následujícím odkazu.
Jak nainstalovat modul Raw Gadget USB v systému Linux?
Pro ty, kteří mají zájem o možnost otestovat tento modul na svém systému, mohou tak učinit podle pokynů zde podrobně popsaných.
Pro fiktivní HCD / UDC (modul, který konfiguruje virtuální zařízení USB a hostitelské řadiče, které jsou navzájem propojeny v jádře). Musíme otevřít terminál a v něm zadáme následující příkaz:
svn checkout https://github.com/xairy/raw-gadget/trunk/dummy_hcd
S tímto získáme složku s moduly, které budeme kompilovat provedením následujícího příkazu v terminálu:
cd dummy_hcd make
A pokračujeme v jejich instalaci pomocí:
./insmod.sh
V případě, že chceme modul aktualizovat, uděláme to pomocí:
./update.sh
Nyní pro ty, kteří chtějí nainstalovat modul jádra. V terminálu získáme potřebné soubory provedením následujícího příkazu:
svn checkout https://github.com/xairy/raw-gadget/trunk/raw_gadget
S tímto získáme složku s moduly, které budeme kompilovat provedením následujícího příkazu v terminálu:
cd dummy_hcd make
A pokračujeme v jejich instalaci pomocí:
./insmod.sh
V případě, že chceme modul aktualizovat, uděláme to pomocí:
./update.sh
Můžete zkontrolovat práci následující odkaz.