ДоступСн USB Raw Gadget, Linux-ΠΌΠΎΠ΄ΡƒΠ»ΡŒ для эмуляции USB-устройств

АндрСй Коновалов ΠΈΠ· ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ Google Ρ€Π°Π·Π²ΠΈΠ²Π°Π΅Ρ‚ Π½ΠΎΠ²Ρ‹ΠΉ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ USB Raw Gadget, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠΉ ΡΠΌΡƒΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ USB-устройства Π² пространствС ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ. Находится Π½Π° рассмотрСнии заявка Π½Π° Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π΄Π°Π½Π½ΠΎΠ³ΠΎ модуля Π² основной состав ядра Linux. USB Raw Gadget ΡƒΠΆΠ΅ примСняСтся Π² ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ Google для упрощСния fuzzing-тСстирования USB-стСка ядра ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ инструмСнтария syzkaller.

ΠœΠΎΠ΄ΡƒΠ»ΡŒ добавляСт Π½ΠΎΠ²Ρ‹ΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΉ интСрфСйс Π² подсистСму ядра USB Gadget ΠΈ развиваСтся Π² качСствС Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Ρ‹ GadgetFS. Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π½ΠΎΠ²ΠΎΠ³ΠΎ API обусловлСно Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒΡŽ получСния Π½ΠΈΠ·ΠΊΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²ΠΎΠ³ΠΎ ΠΈ прямого доступа ΠΊ подсистСмС USB Gadget ΠΈΠ· пространства ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰Π΅Π³ΠΎ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ всС Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Π΅ USB-запросы (GadgetFS ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ запросы ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ, Π½Π΅ пСрСдавая Π² пространство ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ). Π£ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ USB Raw Gadget производится Ρ‡Π΅Ρ€Π΅Π· устройство /dev/raw-gadget ΠΏΠΎ Π°Π½Π°Π»ΠΎΠ³ΠΈΠΈ с /dev/gadget Π² GadgetFS, Π½ΠΎ для взаимодСйствия примСняСтся интСрфСйс Π½Π° основС ioctl(), Π° Π½Π΅ псСвдо-Π€Π‘.

ΠšΡ€ΠΎΠΌΠ΅ прямой ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ всСх USB-запросов процСссом Π² пространствС ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ Π½ΠΎΠ²Ρ‹ΠΉ интСрфСйс Ρ‚Π°ΠΊΠΆΠ΅ отличаСтся Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒΡŽ возвращСния Π»ΡŽΠ±Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ… Π² ΠΎΡ‚Π²Π΅Ρ‚ Π½Π° USB-запрос (GadgetFS выполняСт ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ коррСктности USB-дСскрипторов ΠΈ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΡƒΠ΅Ρ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½Ρ‹Π΅ ΠΎΡ‚Π²Π΅Ρ‚Ρ‹, Ρ‡Ρ‚ΠΎ ΠΌΠ΅ΡˆΠ°Π΅Ρ‚ Π²Ρ‹ΡΠ²Π»Π΅Π½ΠΈΡŽ ошибок ΠΏΡ€ΠΈ fuzzing-тСстировании USB-стСка). Raw Gadget Ρ‚Π°ΠΊΠΆΠ΅ Π΄Π°Ρ‘Ρ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ΅ устройство UDC (USB Device Controller) ΠΈ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ для прикрСплСния, Π² Ρ‚ΠΎ врСмя ΠΊΠ°ΠΊ GadgetFS прикрСпляСтся ΠΊ ΠΏΠ΅Ρ€Π²ΠΎΠΌΡƒ доступному устройству UDC. Для Ρ€Π°Π·Π½Ρ‹Ρ… UDC Π½Π°Π·Π½Π°Ρ‡Π°ΡŽΡ‚ΡΡ прСдсказуСмыС ΠΈΠΌΠ΅Π½Π° endpoint для раздСлСния Ρ€Π°Π·Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ² ΠΊΠ°Π½Π°Π»ΠΎΠ² ΠΎΠ±ΠΌΠ΅Π½Π° Π΄Π°Π½Π½Ρ‹ΠΌΠΈ Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ устройства.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: opennet.ru