- 이 proof-of-concept는 WebUSB 없이도 웹페이지가 특정 USB 장치와 통신할 수 있음을 보이며, Raspberry Pi Pico가 U2F 보안 키처럼 동작하도록 만들어 브라우저의 기존 보안 키 지원을 이용함
- Pico는 실제 보안 기능을 수행하지 않고
U2F_AUTHENTICATE메시지의 key handle과 ECDSA 서명 영역에 임의 데이터를 숨겨 LED 제어와GP22핀 상태 읽기를 구현함 - U2F key handle은 보안 동글이 소유한 불투명 데이터 블롭으로 설계되어 있으며, 저가형 동글이 제한된 메모리로 여러 사이트 등록을 처리할 수 있게 하는 기능이 데이터 은닉에 악용됨
- 이 방식은 임의의 USB 장치에 접근하는 취약점은 아니며, 규칙을 의도적으로 깨는 장치에서만 동작하지만 악성 USB 장치가 키보드나 마우스처럼 행동할 수 있는 USB 보안 모델 문제는 여전히 존재함
- 논점은 Firefox의 WebUSB 지원 여부를 넘어, 개발자와 사용자가 모두 이해하고 통제할 수 있는 건강한 컴퓨팅 플랫폼과 생태계를 어떻게 만들 것인가로 확장됨
WebUSB 없이 USB 장치에 접근하는 데모
- 웹페이지가 WebUSB와 관련된 정치적 논쟁이나 사용자 동의 요구 없이 USB 장치와 통신할 수 있는 방법을 보이는 proof-of-concept임
- 빠른 데모는 Raspberry Pi Pico의 RP2040 버전에
u2f-hax.uf2를 올리고,index.html을 localhost 또는 다른 secure context에서 여는 방식으로 실행함 - 페이지의
On!과Off!버튼은 Pico의 LED를 토글함 GP22핀 상태는 페이지에 주기적으로 갱신되며, 인접한 GND 패드와 와이어나 금속으로 쇼트해 테스트할 수 있음
동작 방식: U2F 보안 키처럼 가장하기
- Pico는 U2F 동글, 즉 물리적 2단계 인증 보안 키처럼 에뮬레이션됨
- 실제 보안 기능을 수행하는 대신
U2F_AUTHENTICATE메시지 안에 임의 데이터를 숨김- 데이터는 key handle과 서명 영역에 들어감
- key handle이
0xfeedface로 시작하면 Pico는 즉시 사용자 존재를 확인한 것으로 처리하고 데이터를 반환함
- 브라우저 입장에서는 보안 키와 상호작용하는 기존 기능을 사용하는 형태가 됨
U2F key handle이 악용될 수 있는 이유
- U2F의 key handle은 개념적으로 보안 동글이 소유하는 불투명한 데이터 블롭임
- 일반적인 흐름은 다음과 같음
- 등록 결과로 동글이 key handle을 반환함
- relying party가 이를 그대로 저장함
- 인증 시 같은 값을 다시 보안 동글에 전달함
- 이 기능은 메모리가 제한된 저가형 동글이 많은 웹사이트 등록을 처리할 수 있게 하는 설계와 연결됨
- 동글은 내부에 고유한 master 암호화 키를 저장함
- 새 등록 시 공개키/개인키 쌍을 만들고 공개키를 반환함
- 개인키를 master 키로 암호화한 값을 key handle로 반환함
- 인증 시 전달받은 key handle을 master 키로 풀어 개인키를 사용함
- 내부 알고리듬을 특정하지 않기 위해 key handle이 불투명하게 취급되며, 이 속성이 임의 데이터 은닉에 사용됨
반환 데이터는 ECDSA 서명처럼 포장됨
- 데이터를 되돌려 보내기 위해 임의 데이터를 ECDSA 서명처럼 숨김
- ECDSA 서명은 두 숫자
(r, s)의 튜플이며, 각 숫자는 타원곡선 base point의 order인n을 기준으로 계산됨 - secp256r1 base point의 order 범위 안에 있는 숫자들이 ASN.1로 포장됨
- 실제로 제대로 계산된 ECDSA 서명인지 구별할 수 있는 경우도 있지만, relying party가 아닌 구성요소가 기본 유효성 검사 이상을 수행할 강한 이유는 없음
- 브라우저별 동작 차이가 있음
- Chrome은 서명 숫자가
0부터n범위 안에 있는지 확인하는 것으로 보임 - Firefox는 그 범위 확인조차 하지 않음
- Chrome은 서명 숫자가
- Chrome의 기본 검사를 안정적으로 통과하기 위해 각 숫자의 첫 바이트를
0x7f로 낭비함- 이렇게 하면 숫자가 항상 양수이고
n보다 작게 됨 - 브라우저 JavaScript까지의 소프트웨어 스택은 이 “충분히 유효한” 숫자를 그대로 전달함
- 이렇게 하면 숫자가 항상 양수이고
보안 취약점 여부와 USB 보안 모델
- 이 기법은 임의의 USB 장치에 접근하는 취약점이 아님
- 의도적으로 규칙을 깨는 장치에서만 동작하며, 본질적으로 의도적으로 취약하게 만든 장치임
- 다만 대부분의 플랫폼에서 USB 장치 주변의 보안 모델은 일반적으로 의문스러운 상태임
- 악성 USB 장치를 연결하면 키보드나 마우스 같은 장치를 통해 사용자가 할 수 있는 일을 수행할 수 있음
- 임의의 알 수 없는 장치를 컴퓨터나 휴대폰 등에 연결하지 않아야 함
플랫폼과 생태계에 대한 문제 제기
- proof-of-concept의 목적은 개인적인 “할 수 있어서”를 넘어, 컴퓨팅 플랫폼의 현 상태를 드러내는 데 있음
- 위젯 제조자 입장에서는 최종 사용자가 새 장치를 가능한 한 고통 없이 사용할 수 있기를 원함
- 현재 컴퓨터와 위젯 생태계에는 사용자가 직관적으로 가능하다고 기대하는 것과 실제로 가능한 것 사이의 불일치가 존재함
- “보안 키”는 잘 포장된 단일 목적 제품처럼 보일 것으로 기대되지만, 실제로는 임의 코드를 실행하고 어떤 형태로든 보일 수 있으며 임의 동작도 가능함
- USB Rubber Ducky와 O.MG Cable도 이 문제를 건드리는 사례임
- USB의 “Universal”한 성격에는 장점과 단점이 함께 있음
- 사람과 컴퓨터 모두 USB 장치가 사용자 이익에 반하는지, 사용자를 돕는지, 더 큰 힘과 창발적 행동의 결과인지 쉽고 안정적으로 구분할 좋은 방법이 없음
- Web은 다른 사람의 컴퓨터에서 실행될 소프트웨어를 전달하는 가장 쉬운 방식임
- 개발자는 모든 대상 플랫폼의 세부사항을 배울 필요가 줄었지만, 동시에 각 플랫폼의 관습과 기대도 덜 배우게 됨
- 논의는 “왜 Firefox가 WebUSB를 구현하지 않는가”나 “Chrome에 더 밀릴 것인가”를 넘어, 데스크톱, 노트북, 태블릿, 휴대폰, IoT, 스마트홈을 포함한 컴퓨팅 전반의 건강한 플랫폼을 의도적으로 가꾸는 방향으로 이동해야 함