TECH4GEEKS-LOGO-HEADER
Oxary Magazine
$10 – $15 / Week

WebAssembly para principiantes Parte 3: Cómo funciona la portabilidad y la seguridad de WASM

Aprenda 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). Recomendamos leer los dos temas anteriores en nuestra serie WebAssembly para principiantes.

Empecemos.

Portabilidad de WebAssembly

La portabilidad de WebAssembly lo hace apto 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, cubriremos los siguientes puntos:

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

Local, limitado y no determinista

WASM necesita una ejecución eficiente y entornos apropiados que sean locales, delimitados y no deterministas. El no determinismo es un cálculo que especifica que un algoritmo/compilador/entorno produce 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 funcione la ejecución no determinista, necesita casos de uso bien definidos que sean «límite.”

Además, estas ejecuciones sonlocal” sin efecto fuera del medio ambiente. Leer su oficial no determinismo en WebAssembly doc para obtener más información.

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

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

  • Capacidad de direccionamiento de granularidad de memoria en bytes y bytes de 8 bits.
  • Enteros con signo en complemento a dos de 32 bits. Opcionalmente de 64 bits.
  • La emulación de software es posible a través de accesos a memoria no alineados o captura confiable.
  • Compatibilidad con coma flotante de 32 y 64 bits, tal como se define en IEEE 754-2008.
  • Garantiza la ejecución de 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.
  • Orden de bytes Little Endian.
  Edge AI explicado en 5 minutos o menos

Todos los principales navegadores, incluidos Chrome, Edge, Firefox y WebKit, son compatibles 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 W3C WebAssembly están trabajando en su estandarización. Esto significa que cada uno de estos requisitos puede cambiar en el futuro.

Portabilidad web y no web 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 logra esto.

#1. Integració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 un mayor desarrollo creativo (lea WebAssembly para principiantes – Parte 2 para comprender sus propósitos)

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

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

#2. Integració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 requieran ajustes de rendimiento. Por ejemplo, puede usarlo en dispositivos IoT, servidores de centros de datos y aplicaciones de escritorio/móviles.

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

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

Seguridad de ensamblaje web

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

  8 aplicaciones para descubrir la música que suena a tu alrededor

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
  • controles de salud

#1. Zona de pruebas de WebAssembly

WASM se ejecuta en el navegador web, al igual que JavaScript. Utiliza la misma máquina virtual (VM) que JavaScript. El sandbox proporciona efectivamente un entorno de ejecución seguro y dificulta lo que sucede bajo el capó.

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

infección-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. Es por eso que, como desarrollador, debe seguir las precauciones de JavaScript y las medidas de seguridad al codificar WASM.

#2. Gestión de la memoria

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

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

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

memoria wasm-lineal

#3. Ofuscación de código

Ejecutar el sandbox de WASM hace que su código se ofusque. Además, el formato binario WASM tampoco es legible por humanos, lo que dificulta la ingeniería inversa, que es necesaria para identificar códigos maliciosos.

Estos hacen que el código WebAssembly sea difícil de depurar debido a la falta de un formato legible por humanos. Esto abre numerosos agujeros de seguridad, incluida la capacidad de los piratas informáticos de ocultar código que roba información confidencial o inyecta código para tomar el control de la máquina host.

#4. controles de salud

Todos los datos transferidos a través de la web son vulnerables a la absorción de datos. Por ejemplo, los piratas informáticos pueden realizar un ataque de intermediario para modificar los valores de los datos. Este es un problema para WASM, ya que no tiene una forma adecuada de realizar comprobaciones de integridad.

  8 herramientas de creación de línea de asunto de correo electrónico para una mejor conversión

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

hombre en el ataque medio

Comprender el modelo de seguridad WASM

WebAssembly se toma la seguridad muy en serio. Por eso, en la documentación oficial de WASM, mencionaron que su modelo de seguridad respalda dos objetivos importantes:

  • Asegúrese de que ningún módulo defectuoso o malicioso afecte a los usuarios
  • Asegúrese de que los desarrolladores puedan mitigar los riesgos de seguridad y crear aplicaciones seguras mientras se asegura de que se mantenga el punto 1.
  • El modelo de seguridad WASM sabe que las aplicaciones de WebAssembly se ejecutan de forma independiente sin poder escapar de su entorno de espacio aislado. Sin embargo, las API pueden abrir una vía para atacar el entorno del host.

    Otra técnica tolerante a fallas es ejecutar aplicaciones de forma determinista con esperas 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 aplicaciones no web, debe usar el modelo de seguridad POSIX. Si desea obtener más información sobre su modelo de seguridad, consulte: Seguridad – WebAssembly.

    La interfaz del sistema WebAssembly (WASI)

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

    De hecho, ahora es parte del Estatuto del subgrupo de la interfaz del sistema WebAssembly y por lo tanto estandarizados. Gracias a WASI, WASM se adopta ampliamente en diferentes campos de TI de borde/servidor. Además, WASI simplifica la seguridad al pasar a una integración no web desde un entorno de integración web.

    Ultimas palabras

    La portabilidad y la seguridad de WebAssembly son dos grandes temas. En la Parte 3 de WebAssembly para principiantes, tratamos de simplificarlo y desglosarlo, especialmente para los principiantes.

    Luego, puede consultar las hojas de trucos de JavaScript para desarrolladores y estudiantes.

    Fuente

    Etiquetas

    Comparte en:

    Ultimos Post

    Categorias

    Lorem ipsum dolor sit amet, consectetur adipiscing elit eiusmod tempor ncididunt ut labore et dolore magna
    Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore