USB Raw Gadget, un module pour le noyau qui permet d'émuler des périphériques USB

Gadget USB Raw

Déjà à certaines occasions ici dans le blog, nous avons parlé du travail effectué par Andrey Konovalov (un développeur Google) sous Linux, de son travail dans la détection rapide des pannes dans les pilotes USB du noyau Linux et également dans les périphériques Wifi.

Maintenant, il travaille actuellement sur le développement d'un nouveau module pour le noyau Linux qu'il a nommé "Gadget USB Raw" qui se décrit comme un utilitaire permettant d'émuler des périphériques USB dans l'espace utilisateur.

En plus que mentionne qu'une application est envisagée pour l'inclusion de ce module dans le noyau Linux principal. Google Raw Gadget est déjà utilisé par Google pour simplifier les tests flous de la pile du noyau USB avec la boîte à outils syzkaller.

Au départ, j'utilisais GadgetFS (avec le module Dummy HCD / UDC) pour émuler des périphériques USB pour le fuzzing, mais ensuite il a été basculé vers une interface écrite personnalisée.

L'incitation à implémenter une interface différente était de fournir un accès direct et quelque peu brut à la couche USB Gadget pour l'espace utilisateur, où chaque requête USB est transmise à l'espace utilisateur pour une réponse.

À propos du gadget USB Raw

Le module se charge d'ajouter une nouvelle interface programmation au sous-système du noyau appelé "USB Gadget" et qui est en cours de développement comme alternative à GadgetFS.

La création d'une nouvelle API est due à la nécessité d'un accès direct et de bas niveau au sous-système USB Gadget depuis l'espace utilisateur, permettant de traiter toutes les requêtes USB possibles (GadgetFS traite certaines requêtes seul, sans les transférer vers l'espace utilisateur).

Le gadget USB Raw est contrôlé via le périphérique / dev / raw-gadget par analogie avec / dev / gadget dans GadgetFS, mais une interface basée sur ioctl (), au lieu d'un pseudo-FS, est utilisée pour l'interaction.

En plus du traitement direct de toutes les requêtes USB par un processus dans l'espace utilisateur, la nouvelle interface a également la capacité de renvoyer toutes les données en réponse à une requête USB (GadgetFS vérifie l'exactitude des descripteurs USB et filtre certaines réponses, ce qui interfère avec détection d'erreur lors du test d'effacement de la pile USB).

USB Raw Gadget vous permet également de sélectionner un périphérique UDC spécifique (Pilote de périphérique USB) et un pilote à connecter, tandis que GadgetFS se connecte au premier périphérique UDC disponible.

Pour différents UDC, les noms de points de terminaison prévisibles sont mappés à différents types de canaux de communication séparés au sein d'un même appareil.

Enfin, si vous souhaitez en savoir plus à ce sujet, vous pouvez vérifier les détails, ainsi que le journal des modifications apportées dans USB Raw Gadget dans le lien suivant.

Comment installer le module USB Raw Gadget sous Linux?

Pour ceux qui souhaitent pouvoir tester ce module sur leur système, ils peuvent le faire en suivant les instructions détaillées ici.

Pour Dummy HCD / UDC (un module qui configure les périphériques USB virtuels et les contrôleurs hôtes connectés les uns aux autres dans le noyau). Nous devons ouvrir un terminal et dans celui-ci nous allons taper la commande suivante:

svn checkout https://github.com/xairy/raw-gadget/trunk/dummy_hcd

Avec cela, nous allons obtenir le dossier avec les modules que nous allons compiler en exécutant la commande suivante dans le terminal:

cd dummy_hcd

make

Et nous procédons à leur installation avec:

./insmod.sh

Si nous voulons mettre à jour le module, nous le faisons avec:

./update.sh

maintenant pour ceux qui veulent installer le module noyau. Dans un terminal, nous allons obtenir les fichiers nécessaires pour cela en exécutant la commande suivante:

svn checkout https://github.com/xairy/raw-gadget/trunk/raw_gadget

Avec cela, nous allons obtenir le dossier avec les modules que nous allons compiler en exécutant la commande suivante dans le terminal:

cd dummy_hcd

make

Et nous procédons à leur installation avec:

./insmod.sh

Si nous voulons mettre à jour le module, nous le faisons avec:

./update.sh

Vous pouvez enregistrer le travail dans le lien suivant. 


Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont marqués avec *

*

*

  1. Responsable des données : AB Internet Networks 2008 SL
  2. Finalité des données: Contrôle du SPAM, gestion des commentaires.
  3. Légitimation: votre consentement
  4. Communication des données: Les données ne seront pas communiquées à des tiers sauf obligation légale.
  5. Stockage des données: base de données hébergée par Occentus Networks (EU)
  6. Droits: à tout moment, vous pouvez limiter, récupérer et supprimer vos informations.