Geekflare cuenta con el apoyo de nuestra audiencia. Podemos ganar comisiones de afiliados comprando enlaces en este sitio.
Comparte en:

WebAssembly para principiantes, parte 3: cómo funciona la portabilidad y la seguridad de WASM

Portabilidad y seguridad WASM
Escáner de seguridad de aplicaciones web Invicti – la única solución que ofrece verificación automática de vulnerabilidades con Proof-Based Scanning™.

Vea cómo funcionan los modelos de seguridad y portabilidad de WebAssembly (WASM) en esta guía para principiantes.

Ambos son temas avanzados de WebAssembly (WASM). Le recomendamos que lea los dos temas anteriores de nuestra serie WebAssembly para principiantes.

Empecemos.

WebAssembly Portability

La portabilidad de WebAssembly lo prepara para la Web. De hecho, puede definir WASM como una plataforma de espacio aislado portátil.

Además, su formato binario le permite ejecutarse en varias arquitecturas de conjuntos de instrucciones y sistemas operativos. Esto significa que puede usar WASM no solo en la Web sino también fuera de la Web.

Para comprender la portabilidad de WASM, analizaremos lo siguiente:

  • Entorno local, limitado y no determinista.
  • Características específicas del entorno de ejecución
  • Portabilidad web y no web de WASM

Local, limitado y no determinista

WASM necesita una ejecución eficiente y entornos adecuados que sean locales, limitados y no deterministas. El no determinismo es computación que especifica que un algoritmo/compilador/entorno genera diferentes comportamientos o resultados incluso para la misma entrada. Es lo opuesto a un algoritmo determinista.

Los otros dos aspectos, limitado y local, están asociados con la ejecución no determinista. Para que la ejecución no determinista funcione, necesita casos de uso bien definidos que sean “limitado."

Además, estas ejecuciones son “locales” sin ningún efecto fuera del medio ambiente. Leer su oficial no determinismo en WebAssembly doc para obtener más información al respecto.

Características específicas del entorno de ejecución

Para que WebAssembly sea portátil, se supone que el entorno de ejecución ofrece las siguientes características:

  • Capacidad de direccionamiento de granularidad de memoria de bytes y bytes de 8 bits.
  • Enteros con signo en complemento a dos de 32 bits. Opcionalmente 64 bits.
  • La emulación de software es posible a través de accesos a memoria no alineados o captura confiable.
  • Compatibilidad con puntos flotantes de 32 y 64 bits según se define en IEEE 754-2008.
  • Garantía para ejecutar todos los subprocesos con progreso hacia adelante.
  • Para el acceso de 64 bits, wasm64 debe proporcionar operadores de memoria atómica sin bloqueo.
  • Los operadores de memoria atómica sin bloqueo incluyen accesos de 8, 16 y 32 bits.
  • wasm64 admite memoria lineal superior a 4 GiB con índices o punteros de 64 bits.
  • Ordenación de bytes Little Endian.

Todos los principales navegadores, incluidos Chrome, Edge, Firefox y WebKit, cumplen con todos estos requisitos ambientales.

Además, WebAssembly está evolucionando a un ritmo rápido. El Grupo de la comunidad WASM y el Grupo de trabajo WebAssembly del W3C están trabajando para lograr su estandarización. Eso significa que cualquiera de estos requisitos puede cambiar en el futuro.

Portabilidad web y no web de WASM

El objetivo principal de WebAssembly es proporcionar portabilidad y rendimiento nativo en la Web y fuera de la Web. En esta sección, veremos cómo WASM lo logra.

#1. Incrustación web

WASM se integra bien con el ecosistema web, incluido el modelo de seguridad web, la portabilidad web y las API web. Además, debe tener suficiente espacio para el desarrollo creativo en el futuro (léase WebAssembly para principiantes - Parte 2 para entender sus objetivos)

Entonces, ¿cómo logra WASM la compatibilidad con la Web? Utiliza API de JavaScript, lo que permite a los desarrolladores usar JavaScript para la compilación de módulos de WebAssembly fácilmente. También se encarga de almacenar y recuperar módulos del compilador, administrar importaciones desde módulos del compilador, administrar la memoria, etc.

Para obtener más información sobre cómo WASM logra la compatibilidad web de alto nivel, lea esto: Incrustación web – WebAssembly.

#2. Incrustación no web

Como se mencionó anteriormente, WASM también funciona con entornos no web. Como desarrollador o empresa, puede crear aplicaciones de alto rendimiento o escribir secciones de su aplicación que necesiten ajustes de rendimiento. Por ejemplo, puedes usarlo en Dispositivos de IoT, servidores de centros de datos y aplicaciones de escritorio/móviles.

Como las aplicaciones que no son web no pueden usar API web, dependen de Enlace dinámico de WASM. También debe usar la prueba de funciones, un proceso de desarrollo de software que prueba las múltiples variaciones de las funciones para ver qué es lo mejor para la experiencia del usuario. Además, los desarrolladores pueden usar máquinas virtuales de JavaScript para simplificar la incrustación no web o desarrollar sus aplicaciones sin ella.

Para obtener más información, lea Incrustaciones no web: WebAssembly.

WebAssembly Security

WebAssembly es una solución de formato binario que ofrece un rendimiento nativo. Funciona muy bien en la Web, pero también se puede ajustar para que funcione en incrustaciones que no sean web. Esto hace que WASM esté ampliamente disponible en todos los servicios, soluciones y procesos. Sin embargo, esto significa más desafíos de seguridad.

Desafíos y riesgos de seguridad de WASM

Aunque WebAssembly se considera seguro y eficiente, conlleva múltiples riesgos de seguridad, que incluyen:

  • Zona de pruebas de WebAssembly
  • Gestión de la memoria
  • Ofuscación de código
  • Comprobaciones de integridad

#1. Zona de pruebas de WebAssembly

WASM se ejecuta dentro del navegador web, al igual que JavaScript. Utiliza la misma máquina virtual (VM) que JavaScript. El sandbox proporciona de manera efectiva un entorno de ejecución seguro y obstaculiza lo que se ejecuta debajo del capó.

Entonces, si el código JavaScript/WebAssembly contiene código malicioso, es difícil de detectar ya que es una caja negra. Además, el código WASM está en formato binario listo para ejecutar; corre más rápido, por lo que es difícil para soluciones antivirus para buscar cualquier código malicioso. Por ejemplo, el código puede contener anuncios no deseados o la capacidad de redirigir a los usuarios a sitios no deseados. el malware sitios.

infectando-navegador-crypto-mining-WASM

Además, la dependencia excesiva de WebAssembly en JavaScript para ejecutarse en la Web también significa que hereda vulnerabilidades de JavaScript. Por eso, como desarrollador, debe seguir las precauciones y medidas de seguridad de JavaScript al codificar WASM.

#2. Gestión de la memoria

La gestión de memoria en WASM es complicada. En primer lugar, no accede directamente a la memoria física ya que se ejecuta dentro de la VM. Es por eso que usa la memoria de la máquina host. 

En segundo lugar, la limpieza de la memoria en WASM requiere un proceso explícito, mientras que, en comparación, JavaScript se limpia solo. 

Además, cuando una función WASM devuelve la salida a JavaScript, devuelve un puntero a la posición dentro del espacio de memoria WASM asignado. Por lo tanto, si la memoria declarada se llena, el programa WASM puede bloquearse y arruinar la experiencia del usuario. Para evitarlo, los programadores deben usar desinfectantes para depurar su código o usar cadenas de herramientas como emscripten.

wasm-memoria-lineal

#3. Ofuscación de código

La ejecución de sandbox de WASM hace que su código sea ofuscado. Además, el formato binario WASM tampoco es legible por humanos, lo que dificulta ingeniería inversa, que es necesario para identificar el código malicioso.

Estos hacen que el código WebAssembly sea difícil de depurar debido a su falta de formato legible por humanos. Esto abre muchas lagunas de seguridad, incluyendo los piratas informáticos' capacidad para ocultar código que roba información confidencial o inyecta código para hacerse cargo de la máquina host.

#4. Controles de Integridad

Cualquier dato transferido a través de la Web es vulnerable a la manipulación de datos. Por ejemplo, los piratas informáticos pueden realizar un ataque de intermediario para cambiar los valores de los datos. Es un problema para WASM, ya que no tiene una forma adecuada de realizar comprobaciones de integridad.

Sin embargo, puede funcionar con JavaScript para realizar comprobaciones de integridad. Otra forma de identificar posibles vulnerabilidades del código WASM es utilizar herramientas de integración como Jit. Garantiza que el código esté libre de malos actores y no pueda afectar las aplicaciones o la infraestructura de la nube circundante.

hombre-en-el-medio-ataque

Descripción del modelo de seguridad WASM

WebAssembly se toma la seguridad muy en serio. Es por eso que, en los documentos oficiales de WASM, mencionaron que su modelo de seguridad se ocupa de dos objetivos importantes:

  1. Asegúrese de que ningún módulo con errores o malicioso afecte a los usuarios
  2. Asegúrese de que los desarrolladores puedan mitigar cualquier riesgo de seguridad y crear aplicaciones seguras mientras se asegura que el punto 1 siempre se mantenga.

El modelo de seguridad WASM sabe que las aplicaciones de WebAssembly se ejecutan de forma independiente y no pueden escapar de su entorno de espacio aislado. Sin embargo, las API pueden abrir una forma de atacar el entorno del host.

Otra técnica tolerante a fallas incluye la ejecución de aplicaciones de forma determinista con expectativas limitadas. Al garantizar ambas condiciones, la mayoría de las ejecuciones de aplicaciones se consideran seguras.

Para mejorar la seguridad, los desarrolladores deben aplicar la política del mismo origen para el flujo de información. Si está desarrollando para no web, debe usar el modelo de seguridad POSIX. Si quieres leer más sobre su modelo de seguridad, echa un vistazo a: Seguridad – WebAssembly.

La interfaz del sistema WebAssembly (WASI)

WASI (la interfaz del sistema WebAssembly) también juega un papel crucial en la incorporación no web de WASM, ya que mejora la seguridad. Es una interfaz de sistema modular que ofrece interesantes características de seguridad y portabilidad.

De hecho, ahora es parte del Estatuto del subgrupo de la interfaz del sistema WebAssembly y por lo tanto estandarizado. Gracias a WASI, WASM se adopta ampliamente en diferentes áreas informáticas de servidor/perímetro. Además, WASI simplifica la seguridad cuando se pasa a una integración no web desde un entorno de integración web.

Palabras finales

La portabilidad y la seguridad de WebAssembly son dos grandes temas. En la parte 3 del WebAssembly para principiantes, tratamos de simplificarlo y dividirlo, especialmente para principiantes.

A continuación, puede consultar Hojas de trucos de JavaScript para desarrolladores y estudiantes.

Gracias a nuestros patrocinadores
Más lecturas interesantes sobre el desarrollo
Impulse su negocio
Algunas de las herramientas y servicios para ayudar a que su negocio crezca.
  • Invicti utiliza Proof-Based Scanning™ para verificar automáticamente las vulnerabilidades identificadas y generar resultados procesables en cuestión de horas.
    Prueba Invicti
  • Web scraping, proxy residencial, administrador de proxy, desbloqueador web, rastreador de motores de búsqueda y todo lo que necesita para recopilar datos web.
    Prueba Brightdata
  • Semrush es una solución de marketing digital todo en uno con más de 50 herramientas en SEO, redes sociales y marketing de contenido.
    Prueba Semrush
  • Intruder es un escáner de vulnerabilidades en línea que encuentra debilidades de ciberseguridad en su infraestructura, para evitar costosas filtraciones de datos.
    Intente Intruder