1P by GN⁺ 20일전 | ★ favorite | 댓글 1개

"우리는 WebUSB가 필요 없어요!"

  • 웹 페이지가 WebUSB 없이 USB 장치에 접근할 수 있는 방법이 있음. 또한, 장치는 사용자 동의 요구 사항을 우회하도록 설계될 수 있음.

빠른 데모

  • Raspberry Pi Pico에 u2f-hax.uf2를 로드하고, localhost 또는 다른 안전한 컨텍스트에서 index.html을 로드함.
  • "On!" 및 "Off!" 버튼은 LED를 토글하며, 핀 GP22의 상태가 페이지에 정기적으로 업데이트됨.

어떻게 가능한가?

  • Pico는 U2F 동글(물리적 2단계 보안 키)을 에뮬레이트하도록 프로그래밍됨.
  • 보안 기능 대신, 임의의 데이터가 U2F_AUTHENTICATE 메시지의 "키 핸들"과 서명에 숨겨짐.
  • 키 핸들이 0xfeedface로 시작하면, Pico는 즉시 사용자 존재를 "확인"하고 데이터를 반환함.

왜 가능한가?

  • U2F 키 핸들은 보안 동글이 "소유"하는 불투명한 데이터 덩어리로 설계됨.
  • 저비용 동글이 많은 웹사이트와 연관될 수 있도록 설계됨.
  • 동글은 내부적으로 고유한 "마스터" 암호화 키를 저장하고, 등록 시 새로운 공개/비공개 키 쌍을 생성하여 반환함.
  • 키 핸들은 불투명하게 처리되어 임의의 데이터를 숨길 수 있음.

데이터 반환 방법

  • ECDSA 서명으로 데이터를 숨김.
  • 서명은 두 숫자 (r, s)로 구성되며, 각 숫자는 특정 범위 내에서 계산됨.
  • Chrome은 서명의 숫자가 범위 내에 있는지 확인하지만, Firefox는 확인하지 않음.
  • Chrome의 기본 유효성 검사를 우회하기 위해 각 숫자의 첫 바이트를 0x7f로 설정함.

보안 취약점인가?

  • 아니며, 임의의 USB 장치에 접근할 수 없음.
  • 의도적으로 규칙을 위반하는 장치에서만 작동함.
  • USB 장치의 보안 모델은 대부분의 플랫폼에서 의문스러움.
  • 임의의 알 수 없는 장치를 컴퓨터에 연결하지 말아야 함.
Hacker News 의견
  • 이 스레드는 주로 WebUSB에 관한 내용이며, OP에 대한 것은 아님. WebUSB는 멋진 해킹임

    • 한편으로는 WebUSB를 원하지만, 일반인이 WebUSB를 가지는 것은 원하지 않음
    • 동의 팝업은 효과가 없으며, 사람들은 무의식적으로 모든 것에 동의함
    • Internet Explorer의 권한 방식이 마음에 듦. 특정 사이트를 "신뢰할 수 있는" 사이트로 표시해야 기능을 사용할 수 있음
    • WebUSB, WebBluetooth 등 위험한 API를 사용하기 위해 사이트를 "신뢰할 수 있는" 사이트로 표시해야 한다면 실수로 하는 사람이 적을 것임
  • Firefox는 임의의 USB 장치와 통신을 지원하지 않음. 그러나 U2F 보안 키와의 USB 통신은 지원함

    • 이 프로젝트는 마이크로컨트롤러를 U2F 보안 키로 가장하도록 프로그래밍함. 목표는 Firefox를 통해 USB로 마이크로컨트롤러와 통신하는 것임
    • Javascript Credentials API와 약간의 기지를 사용하여 마이크로컨트롤러에 데이터를 보내고 응답을 받음
  • WebUSB를 사용하는 사람들은 그것이 훌륭하다고 말하고, 사용하지 않는 사람들은 왜 필요한지 혼란스러워함

    • 개인적으로 WebUSB는 훌륭했음. 대부분의 WebUSB 유틸리티는 자체 설치 앱으로도 제공되지만, 웹 버전을 사용하는 것이 더 쉬움
    • 모든 다른 것에 대한 앱을 가지는 것에 지친 사람들에게 인기가 있을 것이라고 예상했음
  • QMK/Via 펌웨어가 있는 키보드를 WebUSB로 커스터마이징하는 것은 악몽임

    • 브라우저가 펌웨어와 상호작용하기 전에 /dev/hidraw 장치를 완전히 읽을 수 있도록 해야 함
    • 사용 측면에서 매우 불쾌하며, 오프라인 커스터마이징 도구는 모두 Electron 기반임
    • 합리적인 해결책은 웹사이트에서 템플릿 json 파일로 원하는 키보드 레이아웃을 구성하고, 결과 json을 다운로드한 후 sudo 수준의 플래싱 도구를 통해 키보드에 펌웨어를 플래싱하는 것임
  • USB Serial은 훌륭한 도구이며, 이제 브라우저를 사용하여 장치를 설정하는 도구 목록이 있음

    • ESPHome, Betaflight, ELRS, Flipper 등이 있음
    • WebKit은 Apple이 개발했기 때문에 지원이 부족함. 그러나 Firefox는 하드웨어 "연결" 지원이 부족하고 개발자에게 친화적이지 않음
    • 사용자 동의가 장치에 접근하기에 충분하지 않다는 이유로 지원을 추가하지 않음. Blink는 안전하게 만들 수 있음을 증명했음
  • 장치를 자주 플래시하는 사람들에게는 이점이 명확함. 그러나 일반 사용자에게는 중요하지 않음

    • 별도의 도구나 브라우저가 필요할 수 있음. Flash Browser는 추가 도구와 함께 제공될 수 있음
  • USB 포트가 브라우저 기반 코드에 사용되지 않는 것이 좋을 수도 있음

  • Pixel 폰에 GrapehenOS를 플래시하는 것은 가장 쾌적하고 빠른 OS 설치 경험 중 하나였음

  • 개인 키를 "마스터" 키로 암호화하고, 암호화된 개인 키를 키 핸들로 반환함

    • 무한한 기회를 주는 것은 결국 역효과를 낼 것 같음
  • WebUSB와 관련된 정치적 논쟁이 있음

    • 정치적 논쟁이 무엇인지 궁금함