ใช้อุปกรณ์จัดเก็บข้อมูลจำนวนมากในพอร์ต USB ที่เลือก - อย่างไร


14

บนพอร์ต USB ที่กำหนดฉันต้องการยอมรับความสามารถของ USB Mass Storage เท่านั้นและไม่มีอะไรอื่นอีก ไม่มีอุปกรณ์ HID ไม่มีอะแดปเตอร์บลูทู ธ ไม่มีตัวแปลง RS232 ไม่มีอะไรเลย มีวิธีทำเช่นใช้ udev หรือไม่ ฉันรู้ว่าฉันสามารถเขียนกฎ udev ที่กำหนดเองสำหรับการรวมไดรเวอร์สำหรับอุปกรณ์ที่กำหนดหรือพอร์ตที่กำหนด แต่ฉันสามารถแยกไดรเวอร์อื่น ๆ ทั้งหมดได้หรือไม่? ฉันพยายามอนุญาตอุปกรณ์เพียงหนึ่งคลาสนั่นคือ USB Mass Storage; มีอุปกรณ์รุ่นต่าง ๆ มากมายในคลาสนี้และฉันไม่รู้ว่ากำลังจะเชื่อมต่อกับพอร์ตใด (ลูกค้าจะนำของพวกเขามาเองไม่มีทางที่ฉันจะส่งผลกระทบนี้)

ภัยคุกคามจากเฟิร์มแวร์ USB ที่ถูกโปรแกรมใหม่จะแย่ลงในอนาคตอันใกล้ ฉันพยายามที่จะลดขนาดพวกเขาสำหรับกรณีการใช้งานนี้: ฉันมีคอมพิวเตอร์ที่มีอุปกรณ์ต่อพ่วง USB ที่เชื่อมต่อภายใน (การ์ดเครือข่ายอุปกรณ์ต่อพ่วงพิเศษแป้นพิมพ์) และพอร์ต USB สาธารณะหนึ่งพอร์ตซึ่งควรจะใช้สำหรับการถ่ายโอนไฟล์เท่านั้น ดังนั้นฉันไม่สามารถขึ้นบัญชีดำกับโมดูล USB อื่นทั้งหมดได้ แต่ฉันต้องการที่จะ "ฆ่าเชื้อ" พอร์ตนั้นเพื่อให้การเสียบอุปกรณ์ประเภทอื่นจะไม่ทำอะไรเลย

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

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


2
หนอ ฉันเพิ่งเรียนรู้สิ่งต่าง ๆ ดังนั้นไม่แน่ใจว่าสิ่งนี้อาจช่วยได้หรือไม่ แต่ดูว่าสิ่งนี้เกี่ยวข้องหรือไม่: " linux-usb.org/FAQ.html " เลื่อนไปที่ "เหตุใดฉันจึงเห็นอุปกรณ์เดียวจากอุปกรณ์เก็บข้อมูลอเนกประสงค์ของฉัน "คำถามและมีบรรทัด" หากคุณไม่ต้องการทำเช่นนี้กับอุปกรณ์ SCSI ทั้งหมดคุณสามารถบอกให้เคอร์เนลสแกนหาอุปกรณ์ที่ระบุโดยใช้ echo> / proc / scsi / scsi "scsi add-single-device 0 0 0 1 ""
Sergiy Kolodyazhnyy

1
คุณต้องการเฉพาะพอร์ตเฉพาะที่ถูกล็อคใน USB Mass Storage หรือไม่
Kaz Wolfe

3
"ด้วยการเข้าถึงทางกายภาพการต่อสู้เพื่อความปลอดภัยจะหายไป" ~ ผู้ใช้ Security.SE ทุกคนตลอดไป
Kaz Wolfe

1
@Piskvor ฉันไม่แน่ใจ แต่คุณอาจโชคดีกว่าที่จะหาคำตอบได้ที่security.stackexchange.comหรือหนึ่งในไซต์ขั้นสูง / เชิงอาชีพอื่น ๆ
Brian Z

2
อาจช่วยได้: irongeek.com/โดยเฉพาะอย่างยิ่ง 3.2 การล็อก Linux โดยใช้ UDEV
alci

คำตอบ:


16

ดูเหมือนว่าฉันจะทำงานกับฉันใน Ubuntu 14.04 โดยมีปุ่มแฟลช 2 ปุ่มและโทรศัพท์ Android เป็นที่เก็บข้อมูลและอะแดปเตอร์เครือข่าย usb & เว็บแคมเป็นประเภทอื่น ๆ (ฉันไม่สามารถทดสอบการวางฮับ usb)

  1. ตรวจสอบพอร์ต USB (ซึ่งเป็นอุปกรณ์หลักสำหรับอุปกรณ์ที่เสียบ)

    $ udevadm info --name=/dev/sdc --attribute-walk
    
      looking at parent device '/devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.2/2-1.2:1.0':
        KERNELS=="2-1.2:1.0"
        SUBSYSTEMS=="usb"
        DRIVERS=="usb-storage"
        ATTRS{bInterfaceClass}=="08"
        ATTRS{bInterfaceSubClass}=="06"
        ATTRS{bInterfaceProtocol}=="50"
        ATTRS{bNumEndpoints}=="02"
        ATTRS{supports_autosuspend}=="1"
        ATTRS{bAlternateSetting}==" 0"
        ATTRS{bInterfaceNumber}=="00"
    
  2. สร้างกฎ udev จับคู่ชื่อเคอร์เนลพอร์ต usb ที่ไม่มีusb-storageไดรเวอร์

    /etc/udev/rules.d/90-remove-non-storage.rules

    อนุญาตอุปกรณ์ใด ๆ ที่มีที่เก็บข้อมูลเป็นอินเทอร์เฟซแรก (อนุญาตให้ใช้อุปกรณ์คอมโพสิต)

    KERNELS=="2-1.2:1.0", DRIVERS!="usb-storage", RUN+="/bin/sh -c 'echo 1 > /sys/bus/usb/drivers/hub/2-1\:1.0/port2/device/remove'"
    

    บล็อกอุปกรณ์ใด ๆ ที่มีส่วนต่อประสานที่ไม่ใช่ที่เก็บข้อมูล (อุปกรณ์คอมโพสิตถูกปฏิเสธ)

    ที่จริงแล้วโทรศัพท์จะได้รับการเชื่อมต่อเป็นโมเด็มเพื่อ/dev/ttyACM0เป็น KERNELS == "2-1.2: 1.1" สิ่งนี้จะไม่อนุญาตให้โทรศัพท์ (อุปกรณ์ประกอบ) ติดตั้งได้เฉพาะอุปกรณ์เก็บข้อมูลแบบธรรมดาเท่านั้น

    KERNELS=="2-1.2:1.[0-9]*", DRIVERS!="usb-storage", RUN+="/bin/sh -c 'echo 1 > /sys/bus/usb/drivers/hub/2-1\:1.0/port2/device/remove'"
    

    บล็อกเฉพาะส่วนต่อประสานที่ไม่ใช่ที่จัดเก็บข้อมูล (อุปกรณ์ประกอบอนุญาตให้ใช้เป็นที่เก็บข้อมูลเท่านั้น)

    หลังจากค้นหาบางอย่างเกี่ยวกับวิธีปิดใช้งานอินเทอร์เฟซที่ไม่อนุญาตเท่านั้น ดูเหมือนว่าการยกเลิกการผูกไดรเวอร์จะทำงานได้ โทรศัพท์ของฉันสามารถใช้เป็นที่เก็บข้อมูลเท่านั้นมันไม่ได้สร้าง/dev/ttyACM0ขึ้น

    KERNELS=="2-1.2:1.[0-9]*", DRIVERS!="usb-storage", RUN+="/bin/sh -c 'echo -n %k >/sys%p/driver/unbind'"
    
  3. โหลดกฎ udev อีกครั้ง

    udevadm control --reload-rules
    

อ้างอิง:


เอาชนะฉันไป ...
Kaz Wolfe

@Whaaaaaat, yep authorizedก็ใช้งานได้เหมือนกัน แต่removeก็เป็นวิธีที่สะอาดกว่าในขณะที่ผู้ใช้จะต้องถอดปลั๊กออกด้วยล่ะ ฉันตรวจสอบไดรฟ์ที่ไม่ต่อเชื่อมแล้วพวกเขายังคงusb-storageเป็นไดร์เวอร์สำหรับโหนดพาเรนต์ ฉันเห็นด้วยมีบางกรณีที่usb-storageไม่สามารถใช้งานได้ BTW, :) คุณใช้ความคิดเห็นมากเกินไป (2 นาที, 1 นาที) คุณสามารถแก้ไขข้อที่หนึ่ง (ใน <5 นาที)
user.dz

@Whaaaaaat: เมื่อฉันทดสอบสิ่งนี้ไดรเวอร์อุปกรณ์จัดเก็บข้อมูล USB ก็ถูกโหลดก่อนที่อุปกรณ์บล็อกจะถูกสร้างขึ้น ไม่จำเป็นต้องติดตั้ง
Piskvor ออกจากอาคาร

@Piskvor นี่ตอบคำถามของคุณหรือไม่ ถ้าเป็นเช่นนั้นคุณควรทำเครื่องหมายว่าเป็นคำตอบที่ถูกต้องและให้รางวัลแก่คุณ
John Scott
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.