태그 보관물: udev

udev

선택한 USB 포트에서 대용량 저장 장치 만 사용하십시오-어떻게? 위협 은 당분간

주어진 USB 포트에서 USB 대용량 저장 기능 만 허용하고 싶습니다. HID 장치, Bluetooth 어댑터, RS232 변환기, 아무것도 없습니다. 예를 들어 udev를 사용하여 이것을 수행하는 방법이 있습니까? 지정된 장치 또는 지정된 포트의 드라이버 를 포함 하기 위한 사용자 지정 udev 규칙을 작성할 수 있지만 다른 모든 드라이버를 제외 할 수 있습니까? USB 대용량 저장 장치, 한 종류 의 장치 만 허용하려고합니다 . 이 클래스에는 무수히 다른 장치 모델이 있으며 어떤 포트에 연결할 것인지 모릅니다 (클라이언트가 자체적으로 가져올 것이므로 영향을 줄 방법이 없습니다).

재 프로그래밍 된 USB 펌웨어의 위협 은 당분간 더 나빠질 것입니다. 이 유스 케이스를 위해 완화하려고합니다. 내부적으로 연결된 USB 주변 장치 (네트워크 카드, 특수 주변 장치, 키보드) 및 하나의 공용 USB 포트가있는 컴퓨터가 있으며 파일 전송에만 사용해야합니다. 따라서 다른 USB 모듈을 모두 블랙리스트에 올릴 수는 없습니다. 하지만 특정 포트를 “위생 (sanitize)”하기 위해 다른 장치 유형을 연결해도 아무런 효과가 없습니다.

케이스는 물리적으로 잠겨 있으므로 외부에서이 하나의 특정 USB 포트만 액세스 할 수 있으며 케이스와 간섭하거나 키보드 케이블에 스 플라이 싱하는 것은 물리적 보안 대응을 트리거 할만큼 의심 스럽습니다. 또한 대부분의 사용자가 적극적으로 악의적 인 것으로 기대하지는 않지만 재 플래시 USB 드라이브의 무의식적 인 통신 사업자 수가 증가 할 것으로 예상합니다 (요로의 플로피 부팅 섹터 감염과 마찬가지로). 보안에 관한 한, 사용자가 악의적 인 의도로 “무기화 된”USB 디스크를 가져 왔는지 또는 “감염된”것인지 모르는 것은 실제로 중요하지 않습니다.

완벽한 보안이 불가능하다는 것을 알고 있으며 사용자가 어떤 방식 으로든 시스템과 상호 작용할 수있게 하는 것은 위험 하다는 사실을 알고 있습니다. 그러나 유용성과 보안의 균형을 맞출 필요가 있습니다. 컴퓨터는 클라이언트가 사용할 수 있어야합니다. 또한 나는 이것을 사용하여 목표로 정한 공격자를 방어하려고 노력하지 않습니다. 오히려, 나는 이것을 완화 기술 중 하나로 사용하여 시스템이 매달린 과일이 아닙니다.



답변

그것은 우분투 14.04에서 저장 장치 및 USB 네트워크 어댑터 및 다른 유형의 웹캠으로 2 개의 플래시 키 및 안드로이드 전화로 작동합니다. (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
    

참고 문헌 :


답변