WebUSB es una especificación de interfaz de programación de aplicaciones (API) de JavaScript [ 1 ] para proporcionar acceso seguro a dispositivos USB desde aplicaciones web . [ 2 ]
Fue publicado por el Grupo Comunitario de la Incubadora de Plataformas Web. A partir de julio de 2021, se encuentra en estado de Borrador Comunitario y es compatible [ 3 ] con navegadores basados en Chromium .
Introducción
Un bus serie universal, o USB, es un protocolo de comunicación estándar de la industria que se utiliza para transmitir datos a través de conectores y cables desde ordenadores a dispositivos periféricos y/o a otros ordenadores. [ 4 ] WebUSB es un conjunto de llamadas a la API que permiten el acceso a estos dispositivos de hardware desde páginas web. WebUSB es desarrollado por el Consorcio World Wide Web (W3C). [ 1 ] La API de WebUSB proporciona un medio de comunicación seguro y familiar para los desarrolladores con los dispositivos periféricos desde páginas web. La API de WebUSB se integra en las bibliotecas USB existentes y acorta el ciclo de desarrollo para la integración de nuevos dispositivos en el entorno web, ya que no es necesario esperar a que el navegador los admita.
Las primeras versiones de WebUSB surgieron como una alternativa a Flash , Chrome Serial y otros métodos personalizados para conectar navegadores a hardware. WebUSB busca cumplir con los cuatro objetivos de cualquier interfaz: rapidez de creación, compatibilidad multiplataforma, buena apariencia y accesibilidad. [ 5 ]
Aplicación a la arquitectura del Internet de las Cosas (IoT)
Las API de WebUSB pueden conectar protocolos de hardware con protocolos de Internet, lo que permite la creación de pasarelas uniformes que enlazan dispositivos periféricos con redes centralizadas. [ 6 ]
La explosión en la capacidad de computación en las últimas décadas ha dado lugar a un aumento de los dispositivos periféricos. Dispositivos como luces, termómetros , sistemas HVAC y motores se integran cada vez más en servidores de control centralizados de Internet. [ 7 ] Estos dispositivos han evolucionado desde entornos de desarrollo aislados y previamente no integrados. En consecuencia, carecen del protocolo de comunicación uniforme y consistente necesario para desarrollar una conectividad inmediata a un servicio web. El marco de API de WebUSB estandariza protocolos dispares y permite exponer dispositivos compatibles con USB (Universal Serial Bus) no estándar a la web. [ 8 ]
WebUSB busca ubicarse entre la capa de percepción y la capa de red. [ 6 ] Los principales objetivos del software en esta puerta de enlace son: escalabilidad, costo y confiabilidad. El despliegue en la nube de las bibliotecas de WebUSB permite cubrir la escalabilidad, su despliegue de bajo costo reduce significativamente el costo, y su desarrollo continuo a lo largo de su vida útil ha permitido que el marco alcance un alto grado de confiabilidad. [ 9 ]
WebUSB se ha convertido en una piedra angular del marco de arquitectura BIPES (Plataforma Integrada Basada en Bloques para Sistemas Embebidos). Este modelo de arquitectura de sistemas tiene como objetivo reducir la complejidad del desarrollo de sistemas IoT mediante la agregación de software relevante en "Bloques", que son unidades completas de código y pueden implementarse en un dispositivo periférico desde una infraestructura de nube centralizada. [ 10 ] Como ya se mencionó, el rol de WebUSB está fundamentalmente ligado a su capacidad de comunicarse con el software embebido a través del protocolo de comunicación USB. Una vez que la información se encuentra dentro del entorno JavaScript de WebUSB, puede transponerse y comunicarse a través de una variedad de protocolos de software. [ 1 ] En este modelo de arquitectura en particular, WebUSB cierra la brecha entre el software embebido y el navegador web . El navegador web se comunica entonces con el entorno de la nube utilizando datos uniformes construidos por WebUSB. [ 10 ]
Consideraciones de seguridad
WebUSB proporciona acceso a una página web a un conector de un dispositivo periférico. La exposición de cualquier dispositivo a Internet conlleva riesgos inherentes y problemas de seguridad. [ 7 ] Por diseño, los puertos USB están diseñados para confiar en el dispositivo al que están conectados. Conectar dicho puerto a una aplicación con acceso a Internet introdujo un nuevo conjunto de riesgos de seguridad y amplió enormemente la superficie de ataque para posibles actores maliciosos. [ 8 ] [ 1 ]
Por ejemplo, una página web maliciosa podría solicitar datos de un dispositivo periférico, que este proporcionaría sin problemas al creer que se comunica a través de un conector USB estándar. Para mitigar este tipo de ataque, WebUSB desarrolló una requestDevice()llamada a una función. Esta notificaría al usuario que el sitio está solicitando acceso al dispositivo periférico. Esto es similar al control de solicitudes de acceso del navegador cuando una página web desea acceder a la cámara o el micrófono integrados. Dependiendo de la cautela del usuario, este protocolo puede ser suficiente para prevenir ciertos ataques. Un segundo protocolo desarrollado es la especificación de una solicitud originada desde un contexto seguro. [ 11 ] [ 1 ] Esto garantiza que tanto el código a ejecutar como los datos devueltos no sean interceptados ni modificados durante la transmisión. Esta seguridad se implementa a través de la función claimInterface(). Esta es una función compatible con el sistema operativo y garantiza que solo una única instancia de ejecución puede tener acceso al controlador del espacio de usuario o del espacio del kernel al dispositivo, lo que impide que el código malicioso de una página web abra un segundo canal de comunicación con el dispositivo. [ 1 ] Otras consideraciones de seguridad incluían la creación de un registro público de conexiones aprobadas, pero esta idea finalmente se descartó ya que requería que los proveedores desarrollaran dispositivos teniendo en cuenta WebUSB. [ 1 ]
La superficie de ataque de un USB es bidireccional y un dispositivo periférico malicioso podría atacar al host. Un dispositivo de borde infectado no se puede mitigar fácilmente con las API de WebUSB. En muchas configuraciones de dispositivos, los puertos USB de confianza se utilizan para distribuir actualizaciones de firmware y un dispositivo de borde malicioso podría otorgar a los atacantes persistencia en un sistema. [ 11 ] [ 4 ]
En vista de los problemas de seguridad que plantea WebUSB, solo es compatible con aproximadamente el 76 % de los navegadores. La compatibilidad con WebUSB a nivel de navegador ha sido inestable con el tiempo, y algunos navegadores han desactivado el acceso durante ciertos períodos tras el descubrimiento de amenazas de seguridad específicas. [ 12 ] Esta fluctuación en la compatibilidad es similar a la de Adobe Flash y Google Serial, que no lograron popularizarse porque no se podían utilizar con soluciones adecuadas a los riesgos de seguridad fundamentales. [ 5 ]
Uso en autenticación multifactor
La capacidad de poseer y verificar una identidad digital en internet es fundamental para la interacción con la infraestructura orientada a internet. WebUSB, en combinación con dispositivos de propósito especial y registros de identificación pública, puede utilizarse como pieza clave en una solución a escala de infraestructura para la identidad digital en internet. [ 13 ] La biblioteca API de WebUSB permite estandarizar la conexión de dispositivos periféricos a páginas web. La inversión en seguridad de WebUSB la convierte en un componente de software adecuado para conectar dispositivos identificables a internet. [ 1 ] Investigaciones recientes han demostrado la falibilidad de la autenticación basada en SMS, lo que pone de manifiesto cómo se pueden subvertir piezas clave de la infraestructura. [ 14 ] Las propuestas alternativas para asegurar una identidad digital implican el uso de sensores biométricos y/o identificadores personales. Sin embargo, si bien estos son eficaces para identificar a un individuo, solo a través de WebUSB pueden integrarse adecuadamente en la pila tecnológica de internet existente. [ 13 ] Existen soluciones criptográficamente seguras para la identificación personal con el apoyo del gobierno y hardware especializado. Sin embargo, estas soluciones carecen de una especificación generalizada para la infraestructura basada en la web y, por lo general, son difíciles de mantener. El soporte de puerta de enlace para dicho protocolo de comunicación puede ser soportado por intermediarios de software, como WebUSB. [ 10 ] [ 13 ]
Un sistema modelo para la autenticación multifactor utiliza WebUSB junto con un hardware de identificación, como una tarjeta de identificación fabricada según los estándares ISO/IEC 7810 :2003 ID-1 [ 15 ] . Esta tarjeta constituiría una representación física de la identidad de un individuo. WebUSB actuaría entonces como intermediario, facilitando la transferencia de datos almacenados en el hardware a un servidor web determinado. La tarjeta numérica sería firmada digitalmente por una parte autorizada y se conectaría digitalmente a un servidor. Esta conexión requeriría un dispositivo capaz de leer conexiones ISO/IEC 14443 tipo B [ 16 ] . Para que esta conexión digital sea válida, WebUSB funcionaría como conector de software [ 13 ] .
Uso
WebUSB solo funcionará en navegadores compatibles, como Chrome . Debido a preocupaciones de privacidad y seguridad, solo funcionará en un contexto seguro, es decir, a través de HTTPS , y solo se podrá invocar mediante acciones del usuario. Por ejemplo, para establecer una conexión, navigator.usb.requestDevice()solo se podrá invocar mediante gestos del usuario, como tocar la pantalla o hacer clic con el ratón. Asimismo, se puede proporcionar protección contra WebUSB mediante una política de características. Por ejemplo, Feature-Policy: fullscreen "*"; usb "none"; payment "self" https://payment.example.comimpediría que WebUSB se ejecutara. [ 17 ]
Para acceder a los dispositivos visibles en el navegador, existen dos opciones: navigator.usb.requestDevice()una le pedirá al usuario que seleccione a qué dispositivo USB desea otorgar acceso, y la otra navigator.usb.getDevices()devolverá una lista de los dispositivos USB a los que el origen tiene acceso.
Para buscar mejor los dispositivos, WebUSB tiene varias opciones de filtrado. Estos filtros se pasan navigator.usb.requestDevice()como un objeto de filtrado de JavaScript. Estos filtros son: vendorId, productId, classCode, protocolCode, serialNumber, y subclassCode.
Por ejemplo, imagina conectarte a un dispositivo Arduino , esto podría hacerse de la siguiente manera. Donde 0x2341 es Arduino en la lista de ID de USB [ 18 ]
navegador . usb . requestDevice ({ filters : [{ vendorId : 0x2341 }] }) . then ( device => { console . log ( device . productName ); console . log ( device . manufacturerName ); }) . catch ( error => { console . error ( error ); });El devicedescriptor USB devuelto por el fragmento anterior contendrá toda la información importante sobre el dispositivo, como la versión, el tamaño del paquete, las opciones de configuración, etc.
La llamada alternativa navigator.usb.getDevices()se verá así:
navegador . usb . getDevices (). then ( dispositivos => { dispositivos . forEach ( dispositivo => { console . log ( dispositivo . productName ); console . log ( dispositivo . manufacturerName ); }); })Para comunicarse con el dispositivo, es necesario ejecutar algunas llamadas a funciones importantes. device.open()Se ejecutarán todos los pasos necesarios para configurar el dispositivo, device.selectConfiguration()se configurará la configuración, es importante cómo se alimenta y el número de interfaces. Luego es importante reclamar la interfaz. Esto se puede hacer mediante la device.claimInterfacellamada a la función. Esto simulará una conexión cableada real y garantizará que esta página web sea la única que pueda leer y escribir en el dispositivo hasta que se libere la conexión. Finalmente, la llamada device.controlTransferOut()configurará el dispositivo para comunicarse a través de la API WebUSB Serial. Una vez completada la configuración, se pueden transferir datos al dispositivo utilizando device.transferIn()para transferir grandes cantidades de datos al dispositivo, de manera similar a su función hermana device.transferOut()para leer datos del dispositivo. [ 17 ] [ 1 ]
Interfaces
Para generalizar la interacción con dispositivos de hardware, WebUSB admite varias interfaces que abstraen la funcionalidad específica del hardware. [ 8 ]
Referencias
- ^ a b c d e f g h i Grant, R (2021-10-06). "WebUSB API" . WICG . Recuperado el 2022-01-07 .
- ^ "Acceder a dispositivos USB en la web" . Google Developers . 30 de marzo de 2016.
- ^ "WebUSB | ¿Puedo usar...? Tablas de soporte para HTML5, CSS3, etc." . caniuse.com . Consultado el 2 de julio de 2021 .
- ^ a b Anderson, Don (2001). Arquitectura de sistemas de bus serie universal (2.ª ed.). Addison-Wesley. ISBN 978-0-201-30975-1.
- ^ a b Hinton, Suz (18-06-2018). Suz Hinton - Me temo que su navegador ha estado hablando con los robots otra vez: una introducción amable a WebUSB . CSSSConf Australia.
- ^ a b Beniwal, Gunjan; Singhrova, Anita (2022). "Una revisión sistemática de la literatura sobre pasarelas IoT" . Revista de la Universidad Rey Saud - Ciencias de la Computación e Información . 34 (10): 9541– 9563. doi : 10.1016/j.jksuci.2021.11.007 . S2CID 244758915 .
- ^ a b Rondon, L; Babun, L; Aris, A; Akkaya, A; Uluagac, A (2021). "Encuesta sobre sistemas de Internet de las cosas empresariales (E-IoT): una perspectiva de seguridad" . ISO . arXiv : 2102.10695 . Recuperado el 19 de diciembre de 2021 .
- ^ a b c "WebUSB API" . Blogs para desarrolladores de Mozilla . Mozilla. 2021. Consultado el 19 de diciembre de 2021 .
- ^ Talukder, AK (2020). "La web de próxima generación: tecnologías y servicios" . Análisis de macrodatos . Notas de clase en informática. Vol. 12581. pp. 209–229 . doi : 10.1007/978-3-030-66665-1_14 . ISBN 978-3-030-66664-4. S2CID 230795240 . Consultado el 19-12-2021 .
- ^ a b c Junior, AGDS; Gonçalves, LMG; De Paula Caurín, GA; Tamanaka, GTB; Hernández, AC; Aroca, RV (2020). "BIPES: Plataforma integrada basada en bloques para sistemas integrados" . Acceso IEEE . 8 : 197955– 197968. Código bibliográfico : 2020IEEEA...8s7955J . doi : 10.1109/ACCESS.2020.3035083 . S2CID 226854474 .
- ^ a b Lindström, R (2021). "Permitiendo que los teléfonos inteligentes actúen como dispositivos IoT Edge a través de la API 'WebUSB' basada en navegador: El futuro del navegador y el teléfono inteligente en los sistemas IoT de electrónica doméstica" .
- " Google desactiva WebUSB en Chrome ante la preocupación por el phishing" . XDA Developers . 7 de marzo de 2018.
- ^ a b c d Fujita, Y; Inomata, A; Kashiwazaki, H (2019). "Implementación y evaluación de un sistema de autenticación web multifactor con tarjeta de número individual y WebUSB". Simposio de operaciones y gestión de redes de Asia-Pacífico .
- ^ Brian Krebs (1 de junio de 2018). "La filtración de Reddit pone de manifiesto los límites de la autenticación basada en SMS" . krebs on Security . Consultado el 19 de diciembre de 2021 .
- ^ "ISO/IEC 7810:2003 - Tarjetas de identificación – Características físicas" . Consultado el 7 de enero de 2022 .
- ^ "ISO/IEC 14443-1:2018 - Tarjetas y dispositivos de seguridad para identificación personal – Objetos de proximidad sin contacto" . Consultado el 7 de enero de 2022 .
- ^ a b Beaufort, Francis (23-02-2021). "Acceso a WebUSB" . web.dev . Recuperado el 06-01-2022 .
- ^ "Acceder a WebUSB" . web.dev . Consultado el 6 de enero de 2022 .
Enlaces externos
- API WebUSB - Borrador del informe del grupo comunitario, 7 de julio de 2020
- Interfaces de programación de aplicaciones
- USB
- Programación web
- Desarrollo web
- Estándares web