ข้ามไปเนื้อหาหลัก

วิธีป้องกัน BadUSB บน macOS ด้วย Swift และ CGEventTap

เจาะลึกวิธีบล็อก BadUSB บน macOS ในเวลาไม่ถึง 500 มิลลิวินาที ด้วยการสร้างระบบกักกันคีย์บอร์ดเสมือนจริงโดยใช้ Swift และ CGEventTap

เรียบเรียงโดย AI
Inewgen
01 Sep 2026ที่มา: Dev.to3 นาทีอ่าน (0 ครั้ง)
แชร์
วิธีป้องกัน BadUSB บน macOS ด้วย Swift และ CGEventTap

ภาพประกอบจากคลังภาพสต็อก ไม่ใช่ภาพจากเหตุการณ์จริง

ขนาดตัวอักษร
  • สายชาร์จ OMG Cable สามารถจำลองเป็นคีย์บอร์ดและรันคำสั่งโจมตีได้ภายใน 500 มิลลิวินาที
  • macOS Ventura มีระบบแจ้งเตือนการเชื่อมต่ออุปกรณ์ แต่ช้าเกินกว่าจะรับมือกับการพิมพ์อัตโนมัติ
  • โซลูชันของ RoamSwitch ใช้ IOHIDManager ร่วมกับ CGEventTap เพื่อดักจับและทำลายคีย์บอร์ดปลอมทันทีในระดับผู้ใช้
  • นอกจากบล็อกคีย์บอร์ดแล้ว ระบบยังมีความสามารถในการตัดการเชื่อมต่อ USB แฟลชไดรฟ์ที่ไม่ได้รับอนุญาตอัตโนมัติ

การสาธิตการโจมตีเครื่อง Mac ด้วยสายชาร์จ OMG Cable เผยให้เห็นความน่ากลัวของช่องโหว่ทางกายภาพ รูภายนอกของสายชาร์จนี้ดูเหมือนสาย USB-C มาตรฐานทุกประการ แต่วรรคตอนที่เชื่อมต่อเข้ากับแล็ปท็อป ไมโครคอนโทรลเลอร์ที่ซ่อนอยู่จะแสดงตัวเป็นคีย์บอร์ด USB เสมือน และส่งคำสั่งแป้นพิมพ์รวดเร็วกว่า 1,000 คำต่อนาที

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

usb cable computer hardware macro

ภาพประกอบจากคลังภาพสต็อก ไม่ใช่ภาพจากเหตุการณ์จริง

ในระหว่างการพัฒนา RoamSwitch ยูทิลิตี้รักษาความปลอดภัยบน macOS นักพัฒนาพบว่าขอบเขตความปลอดภัยดิจิทัลมีความหมายน้อยลงทันทีหากมีผู้ประสงค์ร้ายเข้าถึงพอร์ตเชื่อมต่อทางกายภาพได้โดยตรง ด้วยเหตุนี้จึงเป็นที่มาของการพัฒนาเกราะป้องกันคีย์บอร์ดชั่วคราวด้วยภาษา Swift เพื่อบล็อกคีย์บอร์ด BadUSB ก่อนที่ระบบปฏิบัติการ macOS จะประมวลผลทัน

500msเวลาที่ใช้ในการโจมตีจนสำเร็จ
1000 WPMความเร็วในการพิมพ์คำสั่งอัตโนมัติ

แม้ว่า Apple จะเปิดตัวกล่องข้อความถามยืนยันการเชื่อมต่ออุปกรณ์ใน macOS Ventura แต่กลไกดังกล่าวเผชิญกับอุปสรรคสำคัญสองประการ ระบบปฏิบัติการมองว่าทุกแป้นพิมพ์ที่เชื่อมต่อคือเจตนาอันบริสุทธิ์ของผู้ใช้ และหากต้องรอให้มนุษย์อ่านและคลิกปุ่มบล็อก การโจมตีก็เสร็จสิ้นไปนานแล้ว

"Before your brain even registers that a device was plugged in, you see Spotlight flicker for a fraction of a second, Terminal pops up, and a one-line payload is executed."

ไม่อยากพลาดข่าวใหม่?

สมัครรับสรุปข่าวสารใหม่ทางอีเมล ไม่บ่อยจนรำคาญ

โฆษณา

ผู้พัฒนา RoamSwitch

แนวทางแก้ไขที่ได้ผลคือระบบกักกันแบบ Fail-closed เมื่อมีการเชื่อมต่อคีย์บอร์ด USB ใหม่ ตัว IOHIDManager Callback จะตรวจจับอุปกรณ์ที่ไม่ได้รับอนุญาต ตั้งค่าสถานะการบล็อกเป็นใช้งานอยู่ และใช้ CGEventTap Callback เพื่อคืนค่าเป็น nil สำหรับเหตุการณ์กดแป้นพิมพ์ทั้งหมดในทันที

บริบทเพิ่มเติม: การใช้ DriverKit System Extension ของ Apple เป็นแนวทางที่เป็นทางการสำหรับการรักษาความปลอดภัย USB แต่สำหรับนักพัฒนาอิสระหรือโปรเจกต์ขนาดเล็ก การทำเช่นนั้นสร้างความยุ่งยากสูงมาก การใช้การผสมผสานระหว่าง IOHIDManager และ CGEventTap ในพื้นที่ผู้ใช้ (User Space) จึงเป็นทางเลือกที่ชาญฉลาดและยืดหยุ่นกว่า โดยไม่ต้องรีสตาร์ทเครื่องและไม่ต้องขอสิทธิ์พิเศษระดับเคอร์เนล

นอกจากปัญหาคีย์บอร์ดปลอมแล้ว การป้องกันพอร์ตทางกายภาพยังต้องครอบคลุมถึงการเสียบแฟลชไดรฟ์ USB โดยไม่ได้รับอนุญาต RoamSwitch จึงได้เพิ่มระบบตรวจสอบการเชื่อมต่อไดรฟ์ผ่าน NSWorkspace เพื่อถอดการเชื่อมต่อและอีเจ็ทหน่วยความจำภายนอกที่ไม่มีรายชื่อใน UUID ที่เชื่อถือได้ทันที ก่อนที่ macOS จะทำการจัดทำดัชนีข้อมูล

ท้ายที่สุด การใช้ปรัชญา Zero-Trust กับฮาร์ดแวร์ภายนอกที่เชื่อมต่อเข้ามา ถือเป็นมาตรการที่ช่วยปิดช่องโหว่ที่มักถูกมองข้าม แม้ทีมวิศวกรจะทุ่มเทแรงกายแรงใจในการป้องกันเครือข่ายอย่างแน่นหนา แต่พอร์ต USB ยังคงเป็นทางด่วนที่เปิดเข้าสู่เซสชันของผู้ใช้โดยตรงหากไม่มีการป้องกันที่รัดกุม

ที่มา: Dev.to

ความคิดเห็น

แสดงความคิดเห็น
0/2000

พบข้อมูลผิดพลาดในบทความนี้? แจ้งปัญหาบทความนี้