USB Raw Gadget, เป‚เบกเบ”เบนเบ™ Linux เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบˆเปเบฒเบฅเบญเบ‡เบญเบธเบ›เบฐเบเบญเบ™ USB, เบกเบตเปƒเบซเป‰

Andrey Konovalov เบˆเบฒเบ Google เบเปเบฒเบฅเบฑเบ‡เบžเบฑเบ”เบ—เบฐเบ™เบฒเป‚เบกเบ”เบนเบ™เปƒเบซเบกเปˆ เป€เบ„เบทเปˆเบญเบ‡ USB เบ”เบดเบš, เบญเบฐเบ™เบธเบเบฒเบ” emulate เบญเบธเบ›เบฐเบเบญเบ™ USB เปƒเบ™เบžเบทเป‰เบ™เบ—เบตเปˆเบœเบนเป‰เปƒเบŠเป‰. เบฅเปเบ–เป‰เบฒเบขเบนเปˆ เบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบ เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบฅเบงเบกเป€เบญเบปเบฒเป‚เบกเบ”เบนเบ™เบ™เบตเป‰เบขเบนเปˆเปƒเบ™เปเบเปˆเบ™ Linux เบ•เบปเป‰เบ™เบ•เป. USB Raw Gadget เปเบฅเป‰เบง เบ™เบณ เปƒเบŠเป‰เปเบฅเป‰เบง เบขเบนเปˆ Google เป€เบžเบทเปˆเบญเป€เบฎเบฑเบ”เปƒเบซเป‰เบเบฒเบ™เบ—เบปเบ”เบชเบญเบš fuzz เบ‚เบญเบ‡ kernel stack เบ‚เบญเบ‡ USB เบ‡เปˆเบฒเบเบ‚เบถเป‰เบ™เป‚เบ”เบเปƒเบŠเป‰เป€เบ„เบทเปˆเบญเบ‡เบกเบท syzkaller.

เป‚เบกเบ”เบนเบ™เป€เบžเบตเปˆเบกเบเบฒเบ™เป‚เบ•เป‰เบ•เบญเบšเบเบฒเบ™เบ‚เบฝเบ™เป‚เบ›เบฅเปเบเบฅเบกเปƒเบซเบกเปˆเปƒเบซเป‰เบเบฑเบšเบฅเบฐเบšเบปเบšเบเปˆเบญเบ kernel USB Gadget เปเบฅเบฐเบเปเบฒเบฅเบฑเบ‡เบ–เบทเบเบžเบฑเบ”เบ—เบฐเบ™เบฒเป€เบ›เบฑเบ™เบ—เบฒเบ‡เป€เบฅเบทเบญเบเบชเปเบฒเบฅเบฑเบš GadgetFS. เบเบฒเบ™เบชเป‰เบฒเบ‡ API เปƒเบซเบกเปˆเป„เบ”เป‰เบ–เบทเบเบ‚เบฑเบšเป€เบ„เบทเปˆเบญเบ™เป‚เบ”เบเบ„เบงเบฒเบกเบ•เป‰เบญเบ‡เบเบฒเบ™เบ—เบตเปˆเบˆเบฐเป„เบ”เป‰เบฎเบฑเบšเบฅเบฐเบ”เบฑเบšเบ•เปˆเปเบฒเปเบฅเบฐเบเบฒเบ™เป€เบ‚เบปเป‰เบฒเป€เบ–เบดเบ‡เป‚เบ”เบเบเบปเบ‡เบเบฑเบšเบฅเบฐเบšเบปเบšเบเปˆเบญเบ USB Gadget เบˆเบฒเบเบžเบทเป‰เบ™เบ—เบตเปˆเบœเบนเป‰เปƒเบŠเป‰, เป€เบฎเบฑเบ”เปƒเบซเป‰เบกเบฑเบ™เบชเบฒเบกเบฒเบ”เบ›เบฐเบกเบงเบ™เบœเบปเบ™เบเบฒเบ™เบฎเป‰เบญเบ‡เบ‚เป USB เบ—เบตเปˆเป€เบ›เบฑเบ™เป„เบ›เป„เบ”เป‰เบ—เบฑเบ‡เบซเบกเบปเบ” (GadgetFS เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบšเบฒเบ‡เบ„เปเบฒเบฎเป‰เบญเบ‡เบ‚เปเป€เบ›เบฑเบ™เป€เบญเบเบฐเบฅเบฒเบ”, เป‚เบ”เบเบšเปเปˆเบกเบตเบเบฒเบ™เบชเบปเปˆเบ‡เบ•เปเปˆเบžเบทเป‰เบ™เบ—เบตเปˆเบœเบนเป‰เปƒเบŠเป‰). . USB Raw Gadget เบ–เบทเบเบ„เบงเบšเบ„เบธเบกเบœเปˆเบฒเบ™เบญเบธเบ›เบฐเบเบญเบ™ /dev/raw-gadget, เบ„เป‰เบฒเบเบ„เบทเบเบฑเบš /dev/gadget เปƒเบ™ GadgetFS, เปเบ•เปˆเบเบฒเบ™เป‚เบ•เป‰เบ•เบญเบšเปƒเบŠเป‰เบญเบดเบ™เป€เบ•เบตเป€เบŸเบ”เบ—เบตเปˆเปƒเบŠเป‰ ioctl() เปเบ—เบ™เบ—เบตเปˆเบˆเบฐเป€เบ›เบฑเบ™ pseudo-FS.

เบ™เบญเบเป€เบซเบ™เบทเบญเบˆเบฒเบเบเบฒเบ™เบ›เบฐเบกเบงเบ™เบœเบปเบ™เป‚เบ”เบเบเบปเบ‡เบ‚เบญเบ‡เบ—เบธเบเบ„เปเบฒเบฎเป‰เบญเบ‡เบ‚เป USB เป‚เบ”เบเบ‚เบฐเบšเบงเบ™เบเบฒเบ™เปƒเบ™เบžเบทเป‰เบ™เบ—เบตเปˆเบ‚เบญเบ‡เบœเบนเป‰เปƒเบŠเป‰, เบเบฒเบ™เป‚เบ•เป‰เบ•เบญเบšเปƒเบซเบกเปˆเบเบฑเบ‡เบกเบตเบ„เบธเบ™เบชเบปเบกเบšเบฑเบ”เบ—เบตเปˆเบˆเบฐเบชเบปเปˆเบ‡เบ„เบทเบ™เบ‚เปเป‰เบกเบนเบ™เปƒเบ”เป†เปƒเบ™เบเบฒเบ™เบ•เบญเบšเบชเบฐเบซเบ™เบญเบ‡เบ•เปเปˆเบเบฒเบ™เบฎเป‰เบญเบ‡เบ‚เป USB (GadgetFS เบเบงเบ”เป€เบšเบดเปˆเบ‡เบ„เบงเบฒเบกเบ–เบทเบเบ•เป‰เบญเบ‡เบ‚เบญเบ‡เบ•เบปเบงเบญเบฐเบ—เบดเบšเบฒเบ USB เปเบฅเบฐเบเบฒเบ™เบเบฑเปˆเบ™เบ•เบญเบ‡เบเบฒเบ™เบ•เบญเบšเบชเบฐเบซเบ™เบญเบ‡เบšเบฒเบ‡เบขเปˆเบฒเบ‡, เป€เบŠเบดเปˆเบ‡เบ›เป‰เบญเบ‡เบเบฑเบ™เบเบฒเบ™เบเบงเบ”เบžเบปเบš. เบ„เบงเบฒเบกโ€‹เบœเบดเบ”โ€‹เบžเบฒเบ”โ€‹เปƒเบ™โ€‹เบฅเบฐโ€‹เบซเบงเปˆเบฒเบ‡โ€‹เบเบฒเบ™โ€‹เบ—เบปเบ”โ€‹เบชเบญเบš fuzz เบ‚เบญเบ‡ stack USBโ€‹)โ€‹. Raw Gadget เบเบฑเบ‡เปƒเบซเป‰เบ—เปˆเบฒเบ™เบกเบตเบ„เบงเบฒเบกเบชเบฒเบกเบฒเบ”เปƒเบ™เบเบฒเบ™เป€เบฅเบทเบญเบเบญเบธเบ›เบฐเบเบญเบ™ UDC (USB Device Controller) เบชเบฐเป€เบžเบฒเบฐเปเบฅเบฐเป„เบ”เป€เบงเบตเป€เบžเบทเปˆเบญเปเบ™เบšเปƒเบชเปˆ, เปƒเบ™เบ‚เบฐเบ™เบฐเบ—เบตเปˆ GadgetFS เบ•เบดเบ”เบเบฑเบšเบญเบธเบ›เบฐเบเบญเบ™ UDC เบ—เปเบฒเบญเบดเบ”เบ—เบตเปˆเบกเบตเบขเบนเปˆ. เบŠเบทเปˆเบ—เบตเปˆเบ„เบฒเบ”เป€เบ”เบปเบฒเป„เบ”เป‰เปเบกเปˆเบ™เบกเบญเบšเปƒเบซเป‰ UDCs เบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™ endpoint เป€เบžเบทเปˆเบญเปเบเบเบŠเปˆเบญเบ‡เบ—เบฒเบ‡เบเบฒเบ™เปเบฅเบเบ›เปˆเบฝเบ™เบ‚เปเป‰เบกเบนเบ™เบ›เบฐเป€เบžเบ”เบ•เปˆเบฒเบ‡เป†เบžเบฒเบเปƒเบ™เบญเบธเบ›เบฐเบเบญเบ™เบ”เบฝเบง.

เปเบซเบผเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™: opennet.ru

เป€เบžเบตเปˆเบกเบ„เบงเบฒเบกเบ„เบดเบ”เป€เบซเบฑเบ™