USB Raw Gadget โมดูลสำหรับเคอร์เนลที่อนุญาตให้จำลองอุปกรณ์ USB

แกดเจ็ตดิบ USB

ในบางโอกาสแล้ว ที่นี่ในบล็อกเราได้พูดคุยเกี่ยวกับงานของ Andrey Konovalov (นักพัฒนาของ Google) ใน Linux จากผลงานของเขาในการตรวจจับความล้มเหลวในไดรเวอร์ USB ของเคอร์เนล Linux และในอุปกรณ์ Wifi ได้อย่างทันท่วงที

ตอนนี้เขากำลังทำงานอยู่ การพัฒนาโมดูลใหม่สำหรับเคอร์เนลลินุกซ์ซึ่งเขาได้รับการตั้งชื่อเป็น "USB Raw Gadget" ซึ่งอธิบายว่าเป็นยูทิลิตี้ที่อนุญาตให้จำลองอุปกรณ์ USB ในพื้นที่ของผู้ใช้

นอกเหนือจากนั้น ระบุว่ามีการพิจารณาแอปพลิเคชันสำหรับการรวมโมดูลนี้ไว้ในเคอร์เนลหลักของ Linux Google Raw Gadget ถูกใช้แล้วโดย Google เพื่อลดความซับซ้อนในการทดสอบสแต็กเคอร์เนล USB ด้วยชุดเครื่องมือ syzkaller

ตอนแรกฉันใช้ GadgetFS (พร้อมกับโมดูล Dummy HCD / UDC) เพื่อเลียนแบบอุปกรณ์ USB สำหรับการเลือน แต่จากนั้นก็เปลี่ยนไปใช้อินเทอร์เฟซที่เขียนขึ้นเอง

แรงจูงใจในการใช้อินเทอร์เฟซที่แตกต่างกันคือการให้การเข้าถึงเลเยอร์ USB Gadget โดยตรงและค่อนข้างดิบสำหรับพื้นที่ผู้ใช้ซึ่งคำขอ USB แต่ละรายการจะถูกส่งไปยังพื้นที่ของผู้ใช้เพื่อตอบสนอง

เกี่ยวกับ USB Raw Gadget

โมดูลจะดูแลการเพิ่มอินเทอร์เฟซใหม่ การเขียนโปรแกรม ไปยังระบบย่อยเคอร์เนล เรียกว่า "USB Gadget" และกำลังได้รับการพัฒนาเพื่อเป็นทางเลือกให้กับ GadgetFS

การสร้าง API ใหม่เกิดจากความจำเป็นในการเข้าถึงโดยตรงและระดับต่ำ ไปยังระบบย่อย Gadget USB จากพื้นที่ผู้ใช้ทำให้สามารถประมวลผลคำขอ USB ที่เป็นไปได้ทั้งหมด (GadgetFS ประมวลผลคำขอบางอย่างด้วยตัวเองโดยไม่ต้องโอนไปยังพื้นที่ผู้ใช้)

USB Raw Gadget ถูกควบคุมผ่านอุปกรณ์ / dev / raw-gadget โดยการเปรียบเทียบกับ / dev / gadget ใน GadgetFS แต่จะใช้อินเทอร์เฟซที่ใช้ ioctl () แทนที่จะใช้หลอก FS สำหรับการโต้ตอบ

นอกเหนือจากการประมวลผลคำขอ USB ทั้งหมดโดยตรงโดยกระบวนการในพื้นที่ผู้ใช้อินเทอร์เฟซใหม่ยังมีความสามารถในการส่งคืนข้อมูลใด ๆ เพื่อตอบสนองคำขอ USB (GadgetFS ตรวจสอบความถูกต้องของตัวบอก USB และกรองการตอบสนองบางอย่างซึ่งรบกวน การตรวจจับข้อผิดพลาดระหว่างการทดสอบการล้างสแต็ก USB)

USB Raw Gadget ยังช่วยให้คุณสามารถเลือกอุปกรณ์ UDC เฉพาะได้ (ไดรเวอร์อุปกรณ์ USB) และไดรเวอร์สำหรับเชื่อมต่อในขณะที่ GadgetFS เชื่อมต่อกับอุปกรณ์ UDC เครื่องแรกที่มีอยู่

สำหรับ UDC ที่แตกต่างกันชื่อปลายทางที่คาดเดาได้จะถูกจับคู่กับช่องทางการสื่อสารที่แยกจากกันประเภทต่างๆภายในอุปกรณ์เครื่องเดียว

สุดท้ายหากคุณต้องการทราบข้อมูลเพิ่มเติมคุณสามารถตรวจสอบรายละเอียดรวมทั้งบันทึกการเปลี่ยนแปลงที่เกิดขึ้นใน USB Raw Gadget ในลิงค์ต่อไปนี้.

จะติดตั้งโมดูล Raw Gadget USB ใน Linux ได้อย่างไร?

สำหรับผู้ที่สนใจจะทดสอบโมดูลนี้ในระบบสามารถทำได้โดยทำตามคำแนะนำที่มีรายละเอียดที่นี่

สำหรับ Dummy HCD / UDC (โมดูลที่กำหนดค่าอุปกรณ์ USB เสมือนและตัวควบคุมโฮสต์ที่เชื่อมต่อกันภายในเคอร์เนล) เราต้องเปิดเทอร์มินัลและในนั้นเราจะพิมพ์คำสั่งต่อไปนี้:

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

ด้วยสิ่งนี้เราจะได้รับโฟลเดอร์พร้อมโมดูลที่เราจะรวบรวมโดยดำเนินการคำสั่งต่อไปนี้ในเทอร์มินัล:

cd dummy_hcd

make

และเราดำเนินการติดตั้งด้วย:

./insmod.sh

ในกรณีที่เราต้องการอัปเดตโมดูลเราดำเนินการกับ:

./update.sh

ตอนนี้ สำหรับผู้ที่ต้องการติดตั้งโมดูลเคอร์เนล. ในเทอร์มินัลเราจะได้รับไฟล์ที่จำเป็นสำหรับสิ่งนี้โดยดำเนินการคำสั่งต่อไปนี้:

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

ด้วยสิ่งนี้เราจะได้รับโฟลเดอร์พร้อมโมดูลที่เราจะรวบรวมโดยดำเนินการคำสั่งต่อไปนี้ในเทอร์มินัล:

cd dummy_hcd

make

และเราดำเนินการติดตั้งด้วย:

./insmod.sh

ในกรณีที่เราต้องการอัปเดตโมดูลเราดำเนินการกับ:

./update.sh

คุณสามารถตรวจสอบงานใน ลิงค์ต่อไปนี้ 


แสดงความคิดเห็นของคุณ

อีเมล์ของคุณจะไม่ถูกเผยแพร่ ช่องที่ต้องการถูกทำเครื่องหมายด้วย *

*

*

  1. รับผิดชอบข้อมูล: AB Internet Networks 2008 SL
  2. วัตถุประสงค์ของข้อมูล: ควบคุมสแปมการจัดการความคิดเห็น
  3. ถูกต้องตามกฎหมาย: ความยินยอมของคุณ
  4. การสื่อสารข้อมูล: ข้อมูลจะไม่ถูกสื่อสารไปยังบุคคลที่สามยกเว้นตามข้อผูกพันทางกฎหมาย
  5. การจัดเก็บข้อมูล: ฐานข้อมูลที่โฮสต์โดย Occentus Networks (EU)
  6. สิทธิ์: คุณสามารถ จำกัด กู้คืนและลบข้อมูลของคุณได้ตลอดเวลา