# WebUSB 미지원 문제 해결을 위한 Firefox 해킹 방법

> Clean Markdown view of GeekNews topic #19763. Use the original source for factual precision when an external source URL is present.

## Metadata

- GeekNews HTML: [https://news.hada.io/topic?id=19763](https://news.hada.io/topic?id=19763)
- GeekNews Markdown: [https://news.hada.io/topic/19763.md](https://news.hada.io/topic/19763.md)
- Type: GN+
- Author: [neo](https://news.hada.io/@neo)
- Published: 2025-03-15T09:51:04+09:00
- Updated: 2025-03-15T09:51:04+09:00
- Original source: [github.com/ArcaneNibble](https://github.com/ArcaneNibble/i-cant-believe-its-not-webusb)
- Points: 1
- Comments: 1

## Topic Body

> "우리는 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 장치의 보안 모델은 대부분의 플랫폼에서 의문스러움.  
- 임의의 알 수 없는 장치를 컴퓨터에 연결하지 말아야 함.

## Comments



### Comment 35927

- Author: neo
- Created: 2025-03-15T09:51:05+09:00
- Points: 1

###### [Hacker News 의견](https://news.ycombinator.com/item?id=43360642) 
- 이 스레드는 주로 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와 관련된 정치적 논쟁이 있음
  - 정치적 논쟁이 무엇인지 궁금함
