Uso de Google Magika para crear un detector de tipos de archivos impulsado por IA

Hoy en día, la identificación correcta del tipo de archivo es un requisito frecuente en muchas áreas de trabajo. Los navegadores web deben decidir cómo mostrar los archivos según su formato, los escáneres de seguridad deben inspeccionar el contenido subido y los procesos de procesamiento de datos extraen valor de diversos conjuntos de datos. En todos estos casos, una detección fiable del tipo de archivo es esencial.

Sin embargo, los enfoques existentes, como examinar las extensiones de archivo o usar definiciones estáticas de firmas de bytes “mágicas”, son muy restrictivos. No consideran factores como la ofuscación de archivos, los archivos maliciosos, los formatos complejos de varias partes, los datos comprimidos o codificados, etc.

Aquí es donde entra en juego Magika , una nueva solución impulsada por IA y desarrollada por Google. Magika ofrece una identificación de tipo de archivo extremadamente precisa. Gracias a los recientes avances en aprendizaje profundo, Magika adopta un enfoque diferente y aborda las limitaciones de los métodos tradicionales de detección de tipo de archivo.

Table
  1. Los desafíos de la detección de tipos de archivos
  2. Una descripción general de Google Magika
  3. Cómo funciona Magika
    1. Arquitectura y entrenamiento del modelo
    2. Inferencia eficiente
  4. Usando Magika con React y Next.js
    1. Configurar el proyecto Next.js
    2. El frontend: cargador y editor de archivos
    3. El backend: integración con Magika
  5. Magika vs. otras bibliotecas JavaScript de detección de tipos de archivos
    1. La biblioteca de tipos de archivos
    2. La biblioteca de tipos MIME
  6. Las ventajas de las funciones impulsadas por IA de Magika
  7. Casos de uso de Magika
  8. Conclusión

Los desafíos de la detección de tipos de archivos

Determinar el tipo real de un archivo simplemente observando su extensión (por ejemplo, .pdf, .docx, etc.) es uno de los métodos menos fiables que existen. Modificar las extensiones es muy sencillo, pero, por desgracia, la mayoría de las aplicaciones (si no todas) confían ciegamente en ellas. Esto permite que los atacantes eludan fácilmente las validaciones basadas en extensiones.

Comparación de Rust y Zig: rendimiento, seguridad y más

Un método más fiable consiste en comprobar las firmas de bytes o los encabezados “mágicos”, pero este enfoque sigue presentando fallos. Está limitado por las reglas predefinidas sobre qué es una firma válida y no puede ir más allá de las definiciones generalizadas.

Además, es posible eludir la detección de firmas de bytes mediante métodos específicos de ofuscación, como la introducción de datos aleatorios antes de la carga útil real. Este truco, bastante común, puede permitir que el malware eluda las medidas de seguridad.

Identificar el tipo de archivo de forma segura y precisa es esencial para muchas aplicaciones, como navegadores web, antivirus y filtros de correo. Si existiera una falla en el método de detección del tipo de archivo, un hacker astuto podría aprovecharla, por lo que las reglas estrictas no son la solución general.

Entra Magika.

Técnicas para ejecutar análisis del comportamiento del cliente

Una descripción general de Google Magika

Magika es una herramienta de identificación de archivos desarrollada por Google mediante modelos de aprendizaje profundo entrenados con más de 25 millones de archivos de más de 100 tipos diferentes. Es diferente del sistema estándar de identificación de archivos, que funciona principalmente con base en la extensión. Magika lee todo el contenido y la estructura del archivo para determinar su tipo.

En el corazón de Magika se encuentra un modelo de red neuronal personalizado, creado, entrenado y optimizado con un único propósito: detectar tipos de archivos. Este modelo ultrapreciso se ha reducido a tan solo 1 MB de datos mediante cuantificación y poda.

El tamaño compacto de Magika le permite funcionar eficientemente, incluso en dispositivos de gama baja que usan la CPU. Aunque su tamaño compacto es pequeño, Magika ofrece una precisión impresionante: Google informa que, en diversos formatos de archivo, la herramienta alcanza una precisión y una recuperación superiores al 99 %.

Una característica interesante y útil es que Magika también puede determinar tipos de archivos de texto, como códigos fuente, lenguajes de marcado o archivos de configuración. Estos archivos suelen proporcionar encabezados o firmas menos claros y son muy difíciles de detectar con herramientas tradicionales.

¿Qué hace que un producto genere hábito?


Cómo funciona Magika

Bajo el capó, Magika utiliza modelos de aprendizaje profundo que están específicamente diseñados, entrenados y ajustados para identificar tipos de archivos.

Arquitectura y entrenamiento del modelo

La arquitectura del modelo central de Magika se implementó utilizando Keras , un popular marco de aprendizaje profundo de código abierto que permite a los investigadores de Google experimentar rápidamente con nuevos modelos.

Para entrenar este tipo de modelo de aprendizaje profundo, se necesita un conjunto de datos lo suficientemente grande como para capturar la amplia variabilidad en los tipos de archivo. Google creó un conjunto de datos de entrenamiento especial que consta de 25 millones de archivos que abarcan más de 100 tipos y formatos, desde imágenes binarias y archivos ejecutables hasta archivos de texto.

La calidad y representatividad de los datos de entrenamiento fueron cruciales para que los modelos de Magika aprendieran correctamente de los complejos patrones y estructuras que presentaba cada tipo de archivo. Un conjunto de datos tan diverso normalmente sería imposible de obtener a gran escala y su compilación manual requeriría mucho tiempo.

Cómo medir y mejorar la retención de usuarios

Inferencia eficiente

Para realizar inferencias rápidas en tiempo de ejecución, Magika utiliza el entorno de ejecución multiplataforma Open Neural Network Exchange (ONNX) . ONNX proporciona un método para optimizar, acelerar e implementar modelos creados con cualquiera de los frameworks más populares de forma consistente, incluso en diferentes plataformas de hardware o arquitecturas de conjuntos de instrucciones.

Esto permite a Magika detectar diferentes tipos de archivos en cuestión de milisegundos, de forma similar a otras herramientas sin IA que utilizan técnicas de escaneo de firmas de bytes. Sin embargo, Magika logra este nivel de rendimiento aprovechando modelos de aprendizaje profundo más profundos e inteligentes con una precisión considerablemente mayor.

El pequeño tamaño del modelo optimizado de 1 MB de Magika es crucial para garantizar que pueda ejecutarse de manera eficiente en dispositivos de gama baja que contienen CPU básicas y no requiere GPU potentes ni aceleradores de IA especializados.

Usando Magika con React y Next.js

Como ya hemos comentado, detectar el tipo de archivo que sube un usuario es común en las aplicaciones web modernas. La detección de idioma es necesaria para que los editores de código configuren el modo de idioma correcto y utilicen el resaltado de sintaxis adecuado para un archivo según su contenido.

Construyamos un componente sencillo de carga de archivos con Next.js para demostrar cómo integrar Magika en una aplicación React para estos casos de uso. Puedes consultar el código completo del proyecto en GitHub y seguir el desarrollo del proyecto.

Configurar el proyecto Next.js

Primero, repasaremos los pasos de configuración usando e instalando las dependencias necesarias. Comience creando una nueva aplicación Next.js:create-next-app

npx create - next - app@latest magika - react - demo cd magika - react - demo

Esto creará una nueva aplicación Next.js llamada y accederá al directorio del proyecto. A continuación, instale las dependencias:magika-react-demo

npm install @monaco - editor / react magika

Aquí, estamos instalando , que es el editor Monaco para React , junto con la biblioteca para la detección de tipo de archivo.@monaco-editor/reactmagika

Una vez completados estos pasos, debería tener una nueva aplicación Next.js con las dependencias necesarias, incluida la biblioteca Magika. Ahora puede integrar Magika con sus componentes React y aprovechar sus capacidades de detección de tipos de archivo en su aplicación.

El frontend: cargador y editor de archivos

pageEl siguiente componente Next.js — — administra el proceso de carga de archivos y renderiza el editor de código:src/app/page.js

// src/app/page.js "usar cliente" ; importar { useState } de "react" ; importar Editor desde "@monaco-editor/react" ; exportar función predeterminada Inicio () { const [ currentLanguage , setCurrentLanguage ] = useState ( "" ); const [ contenidoArchivo , establecerContenidoArchivo ] = useState ( "" ); const handleFileUpload = async ( evento ) = { // ... }; return (className principal = "App" div p Idioma actual: { currentLanguage || "texto sin formato" } / pp tipo de entrada = "archivo" onChange = { handleFileUpload } / / p / div Editor altura = "500px" idioma = { currentLanguage } valor = "Contenido / }; }                                                                                                                      

Comenzamos importando las dependencias necesarias:

  • El useStategancho de React para gestionar el estado de los componentes
  • El Editorcomponente de la biblioteca, que proporciona una interfaz del Editor Monaco con React@monaco-editor/react

Dentro del Homecomponente, inicializamos dos variables de estado usando el useStateHook:

  • currentLanguage:Esto almacenará el idioma detectado del archivo cargado, que se utilizará para configurar el modo de idioma en el Editor de Mónaco
  • fileContent:Esto almacenará el contenido del archivo cargado, que se mostrará en el Editor de Mónaco.

En el componente, mostramos el idioma actual (o “texto simple” si aún no se detecta ningún idioma) y representamos un campo de entrada de archivo que llama a la handleFileUploadfunción cuando se selecciona un archivo:

const  handleFileUpload = async  ( evento ) = { const  archivo = evento . destino . archivos [ 0  ]; si (! archivo ) devolver ;                  const  formData = nuevo  FormData ();     formularioDatos . append ( "archivo"  , archivo );     setFileContent ( "Cargando..."  );      const  respuesta = await  fetch ( "/api/upload"  , { método       : " POST "  , cuerpo : formData , }) ; const datos = espera respuesta.json ( ) ; setFileContent     ( datos.contenido ) ; if ( datos.idioma ) setCurrentLanguage ( datos.idioma ) ; } ;                           

Al seleccionar un archivo en la entrada, handleFileUploadprimero se obtiene del array. A continuación, se crea un nuevo objeto y se le añade el archivo seleccionado. Esto es necesario porque enviaremos el archivo al servidor mediante una solicitud.event.target.filesFormDatafetch

Luego enviamos una solicitud CORREO a la ruta en nuestro servidor, pasando el objeto que contiene el archivo como cuerpo de la solicitud./api/uploadFormData

Una vez que tenemos los datos de respuesta, actualizamos el fileContentestado con el contenido real del archivo recibido del servidor. Además, si la respuesta del servidor incluye un idioma detectado, actualizamos el currentLanguageestado con ese valor.

En este punto, su interfaz de usuario debería verse como se muestra a continuación:

El backend: integración con Magika

La ruta API — — maneja la carga del archivo, utiliza Magika para detectar el tipo de archivo y devuelve el contenido junto con el idioma previsto:/api/upload

// src/app/api/upload/route.js importar { NextResponse } desde "next/server" ; importar { Magika } desde "magika" ;          exportar función como íncrona POST ( solicitud ) { const  formData = await  solicitud.formData (); const  archivo = formData.get ( " archivo"  ); si (! archivo ) { devolver NextResponse.json ({ error  : "No se ha cargado ningún archivo "  }, { estado  : 400  } ) ; }                          const  fileContent = await  archivo . text (); const  fileBytes = new  Uint8Array  ( await  archivo . arrayBuffer ());       const  magika = nueva  Magika () ; espere  magika.load ( ) ; const  predicción = await  magika.identifyBytes ( fileBytes ) ;         devolver NextResponse . json ({ contenido : fileContent , idioma : predicción ?. etiqueta , }); }             

Primero, extraemos el archivo subido de la solicitud FormData. Luego, lo convertimos a un archivo Uint8Arrayde bytes, según lo requiere el método de Magika identifyBytes.

A continuación, instanciamos la Magikaclase, cargamos el modelo de detección y pasamos la matriz de bytes del archivo al identifyBytesmétodo. Este devuelve un objeto que contiene la etiqueta del tipo de archivo detectado (p. ej., python, javascript, etc.).

Finalmente, devolvemos al cliente el contenido del archivo y la etiqueta de idioma predicha. El idioma detectado se utiliza para configurar dinámicamente el modo de idioma del Editor Monaco, proporcionando un resaltado de sintaxis y servicios de idioma adecuados según el contenido del archivo cargado.

Puede comprobar en la siguiente captura de pantalla cómo el editor representa el archivo Java con el resaltado de sintaxis adecuado:

Magika vs. otras bibliotecas JavaScript de detección de tipos de archivos

Si bien Magika irrumpió en el campo de la detección de tipos de archivo con su nuevo enfoque basado en IA, ya existen bibliotecas que resuelven este mismo problema mediante técnicas más convencionales. Un par de ejemplos conocidos son los tipos de archivo y los tipos MIME.

La biblioteca de tipos de archivos

file-type es una biblioteca ligera para verificar los tipos de archivo según el encabezado. Está diseñada para ejecutarse en Node.js y entornos de navegador, y proporciona una forma sencilla de detectar tipos de archivo desde Buffersarchivos en disco, secuencias y Blobsarchivos .

La biblioteca de tipos de archivo puede determinar el tipo de archivo buscando firmas de bytes conocidas de “número mágico” en su encabezado. Puede detectar varios formatos de archivos binarios, como imágenes, audio, vídeo, archivos comprimidos y más. Sin embargo, está orientada principalmente a formatos binarios y no se generaliza bien a formatos de texto, como archivos de código fuente.

El método de número mágico utilizado por la biblioteca de tipos de archivo es flexible, pero presenta algunas desventajas. Sus reglas fijas lo limitan y puede evadirse mediante archivos malformados u ofuscados. Su precisión siempre será inherentemente limitada en comparación con el modelo de IA de Magika, que está entrenado para comprender la estructura y el contenido correctos de los archivos.

La biblioteca de tipos MIME

La biblioteca de tipos MIME asigna extensiones de archivo a los tipos MIME asociados y se utiliza a menudo en servidores web y herramientas HTTP. Mantiene una lista de extensiones (como o ) y los tipos de contenido MIME a los que corresponden..html.png

Sin embargo, los tipos MIME solo utilizan asignaciones de extensiones. Solo pueden detectar con precisión el tipo real de un archivo si la extensión es correcta, está ofuscada o no está presente. Esto facilita su evasión por parte de actores maliciosos.

Las ventajas de las funciones impulsadas por IA de Magika

Tanto las bibliotecas de tipos de archivo como las de tipos MIME adoptan enfoques tradicionales basados ​​en reglas mediante firmas de bytes y asignaciones de extensiones. Son sencillas y eficaces para el uso común, pero carecen de las funciones inteligentes que ofrece la API de Magika.

Por otro lado, Magika se basa en modelos de aprendizaje profundo de vanguardia entrenados con un amplio conjunto de datos para comprender a fondo la estructura y la semántica de los archivos. Es capaz de identificar con precisión los tipos de archivos al instante, incluso archivos ofuscados, malformados o compuestos que suelen evadir los métodos basados ​​en reglas.

Además, no se pueden permitir errores en ciertos casos de uso cruciales, como el análisis de seguridad o el procesamiento de datos. Las bibliotecas de tipos de archivo basadas en reglas simples no podrán competir con la arquitectura basada en IA que ofrece Magika.

Claro, Magika tiene sus limitaciones y desventajas. Por ejemplo, la calidad de los datos de entrenamiento determina su efectividad. Aunque todavía está bastante optimizado para la inferencia de IA, implica mayor sobrecarga en comparación con las comprobaciones de firmas básicas.

Sin embargo, en casos que requieren capacidades de detección de tipos de archivos fuertes y sofisticadas, el uso de tecnología de IA/ML más avanzada en esta área, como la de Magika, es muy eficaz.

Casos de uso de Magika

Google ya utiliza Magika a gran escala. Esta tecnología ha dificultado la vulneración de la seguridad y facilita el enrutamiento preciso de archivos para funciones como Gmail, Google Drive y Navegación Segura.

La detección precisa de los tipos de archivos permite a Magika garantizar que se utilicen los escáneres de seguridad y las verificaciones de políticas de contenido correctos para cada archivo, lo que aumenta drásticamente la seguridad general y las capacidades de detección de amenazas.

Google informa que Magika ha mejorado la identificación de tipos de archivo en un promedio del 50 % con respecto a su sistema anterior basado en reglas. Esta mayor precisión permite a Google escanear un 11 % más de archivos mediante escáneres de documentos con IA especializados, diseñados para identificar contenido malicioso, y reduce la cantidad de archivos no identificados a tan solo un 3 %.

La detección inteligente de tipos de archivos de Magika también se puede aprovechar en otros ámbitos, más allá de la seguridad. A continuación, se muestran algunos ejemplos:

  • Almacenamiento en la nube : Tras subir archivos a la nube, Magika ayuda a categorizarlos y gestionarlos según su tipo. Esto permite a los proveedores de servicios de almacenamiento en la nube archivar, buscar, filtrar categorías de archivos y mucho más de forma organizada, según el tipo de archivo correcto. Además, pueden gestionar las optimizaciones de almacenamiento, la compresión o los controles de acceso adecuados para los formatos de archivo requeridos.
  • Filtros de correo electrónico : Puede ser necesario inspeccionar los archivos adjuntos para determinar si contienen correo basura o contenido malicioso. Al mismo tiempo, gracias a un profundo conocimiento de los formatos de archivo, los servicios de correo electrónico pueden detectar y prevenir mejor los archivos adjuntos maliciosos. Estas medidas de defensa proactivas garantizan una comunicación por correo electrónico más segura y fiable.
  • Análisis y procesamiento de datos : Procesamiento y almacenamiento de datos en diferentes formatos de archivo directamente en las canalizaciones de datos. Magika facilita la ingesta y dirige automáticamente cualquier formato de archivo a los analizadores, conversores o motores de análisis correspondientes, según el tipo de archivo detectado. Esta automatización optimiza la eficacia y reduce la necesidad de intervención manual.
  • Herramientas para desarrolladores e IDE : Magika se integra con IDE y editores de código para que los desarrolladores escriban su código de forma más eficiente y aumenten su productividad. La detección precisa del tipo de archivo permite que los IDE proporcionen el modo de lenguaje correcto, el resaltado de sintaxis, el completado de código y otras funciones, todo ello listo para usar para ese lenguaje específico.
  • Subida de archivos en aplicaciones web : Es fundamental gestionar y procesar diferentes formatos de archivo en las aplicaciones web para reducir los errores inesperados o problemas de seguridad si el usuario sube algo incorrecto. Al detectar correctamente los tipos de archivo, las aplicaciones web también pueden aplicar los pasos de validación, desinfección o conversión correspondientes para su posterior procesamiento.

Como puedes ver, hay muchas formas de integrar Google Magika en tus aplicaciones para mejorar funciones existentes o habilitar otras nuevas.

Conclusión

Para demostrar las funcionalidades de Magika en una aplicación web, creamos una pequeña demo con Next.js y React que combina la biblioteca con un editor. Puedes encontrar el código completo de la demo en GitHub .

Esta demostración muestra cómo podemos comenzar detectando el tipo de archivo en el tiempo de ejecución de las cargas del usuario y cambiar el modo de idioma de resaltado de sintaxis en el editor de código Monaco en consecuencia, con una gama completa de soporte de resaltado de sintaxis.

La arquitectura optimizada y de alta precisión de Magika le permite funcionar eficientemente en CPU de bajo consumo, lo que facilita su integración en una amplia gama de casos de uso. Algunos ejemplos incluyen análisis de seguridad, aplicaciones web, servicios en la nube, canales de procesamiento de datos y herramientas para desarrolladores.

La solución Magika de código abierto y basada en inteligencia artificial de Google ofrece a los desarrolladores más oportunidades para crear sistemas innovadores que aprovechan la identificación inteligente del tipo de archivo.

Empieza ahora

Si quieres conocer otros artículos parecidos a Uso de Google Magika para crear un detector de tipos de archivos impulsado por IA puedes visitar la categoría Guias.

Entradas Relacionadas