선택한 USB 포트에서만 대용량 저장 장치를 사용하세요. 어떻게 하나요?

선택한 USB 포트에서만 대용량 저장 장치를 사용하세요. 어떻게 하나요?

특정 USB 포트에서는 USB 대용량 저장소 기능만 허용하고 그 외에는 허용하지 않습니다. HID 장치도, Bluetooth 어댑터도, RS232 변환기도, 아무것도 없습니다. 예를 들어 udev를 사용하여 이를 수행할 수 있는 방법이 있습니까? 나는 다음에 대한 사용자 정의 udev 규칙을 작성할 수 있다는 것을 알고 있습니다.포함특정 장치 또는 특정 포트에 대한 드라이버가 있지만 어떻게든 할 수 있습니까?들어오지 못하게 하다다른 운전자들은 다? 하나만 허용하려고 해요수업장치, 즉 USB 대용량 저장소; 이 클래스에는 무수히 많은 장치 모델이 있으며 어떤 장치가 포트에 연결될지 모르겠습니다(클라이언트가 자신의 장치를 가져오므로 이에 영향을 미칠 수 있는 방법이 없습니다).

재프로그래밍된 USB 펌웨어의 위협가까운 미래에 더 악화될 뿐입니다. 저는 이 사용 사례에서 이를 완화하려고 노력하고 있습니다. 내부적으로 연결된 USB 주변 장치(네트워크 카드, 특수 주변 장치, 키보드)가 있는 컴퓨터와 파일 전송에만 사용되는 공용 USB 포트가 하나 있습니다. 따라서 다른 USB 모듈을 모두 블랙리스트에 올릴 수는 없습니다. 하지만 해당 특정 포트를 "위생 처리"하여 다른 장치 유형을 연결해도 아무 일도 일어나지 않도록 하고 싶습니다.

케이스는 물리적으로 잠겨 있으므로 외부에서 특정 USB 포트 하나만 접근할 수 있으며, 케이스를 만지작거리거나 키보드 케이블을 연결하는 것은 물리적 보안 대응을 유발할 만큼 충분히 의심되어야 합니다. 게다가 대부분의 사용자가 적극적으로 악의적일 것이라고는 예상하지 않지만, 재플래시된 USB 드라이브를 무의식적으로 운반하는 사람의 수가 증가할 것으로 예상합니다(예전의 플로피 부트 섹터 감염과 마찬가지로). 보안에 관한 한, 사용자가 악의적인 의도로 "무기화된" USB 디스크를 가져왔는지, 아니면 단순히 "감염"되었는지 알지 못하는지는 중요하지 않습니다.

나는 여기서 완벽한 보안이 불가능하다는 것을 알고 있으며 사용자가 시스템과 상호 작용할 수 있도록 허용합니다.어느방법은 위험합니다. 하지만 아쉽게도 보안과 유용성의 균형을 맞춰야 합니다. 컴퓨터는 클라이언트에서 사용할 수 있어야 합니다. 또한 나는 이것을 통해 표적화되고 단호한 공격자를 방어하려는 것이 아닙니다. 오히려 저는 이것을 완화 기술 중 하나로 사용하여 시스템이 쉬운 일이 되지 않도록 하고 있습니다.

답변1

Ubuntu 14.04에서는 2개의 플래시 키와 안드로이드 폰을 스토리지로, 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. usb-storage드라이버 없이 USB 포트 커널 이름과 일치하는 udev 규칙 생성

    /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/ttyACM0KERNELS=="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
    

참고자료:

관련 정보