La empresa Google ha presentado el lanzamiento de la herramienta Magika 1.0, diseñada para determinar el tipo de contenido mediante el análisis de los datos presentes en un archivo. Magika puede identificar con precisión los lenguajes de programación utilizados en el contenido, métodos de compresión, paquetes de instalación, código ejecutable, tipos de marcado, formatos de audio, video, documentos e imágenes. La herramienta asociada con el proyecto y el modelo de aprendizaje automático están disponibles bajo la licencia Apache 2.0. Se han preparado wrappers para los lenguajes Rust, Python, JavaScript/TypeScript y Go.
A diferencia de proyectos similares que determinan el tipo MIME a partir del contenido, Magika se distingue por el uso de métodos de aprendizaje automático, alto rendimiento y su precisión en la identificación. El modelo ha sido entrenado utilizando el marco Keras con 100 millones de ejemplos de archivos (el tamaño del conjunto de datos es superior a 3 TB) y soporta el reconocimiento de 200 tipos de datos con una precisión de al menos el 99%. El modelo se ha ensamblado en formato ONNX y tiene un tamaño de solo unos pocos megabytes. La implementación de métodos de aprendizaje profundo ha permitido aumentar la precisión de detección en un 50% en comparación con el sistema previamente utilizado en Google, que se basaba en reglas definidas manualmente.
En Google, el sistema se utiliza para clasificar archivos en los servicios de Gmail, Drive, Code Insight y Safe Browsing durante verificaciones de seguridad y cumplimiento de normas. Se ha asegurado la integración de Magika en las plataformas VirusTotal y abuse.ch como un eslabón para la filtración primaria de archivos antes de que sean sometidos a analizadores específicos. La configuración de Magika desplegada en la infraestructura de Google permite escanear varios millones de archivos por segundo y cientos de miles de millones de archivos por semana. Tras la carga del modelo, el tiempo de generación de salida es de 5 ms cuando se prueba en un núcleo de CPU. El tiempo de detección casi no depende del tamaño del archivo.
Para utilizar Magika en sus proyectos, se han preparado una herramienta de línea de comandos, paquetes para Python, Rust y Go, así como una biblioteca de JavaScript que puede funcionar en el navegador o en proyectos basados en Node.js. La interfaz de línea de comandos y la API admiten la ejecución de operaciones en modo por lotes, es decir, permiten verificar varios archivos en una sola solicitud. Hay un modo de escaneo recursivo de todo el contenido del directorio y tres modos de predicción para ajustar la resistencia a errores (alta confianza, confianza media y mejor suposición).
Inicialmente, el proyecto se desarrolló en Python, pero al preparar la versión 1.0, el motor para determinar los tipos de contenido fue reescrito en Rust, lo que permitió alcanzar un mayor rendimiento, manteniendo un nivel adecuado de seguridad del código. Para ejecutar el modelo de aprendizaje automático se utilizó el marco ONNX Runtime, y para el procesamiento asíncrono paralelo de las solicitudes, la biblioteca Tokio. En el MacBook Pro (M4), el rendimiento del motor permite procesar alrededor de 1000 archivos por segundo.
Además del nuevo motor, los cambios en la versión 1.0 incluyen la expansión del número de tipos soportados de aproximadamente 100 a 200; la adición de un nuevo cliente de línea de comandos, escrito en Rust; una mayor precisión en la determinación de formatos de texto, como archivos de configuración y código; y la reestructuración de los módulos para Python y TypeScript para simplificar su integración con otros proyectos. Entre los nuevos tipos de contenido soportados se encuentran: formatos utilizados en aprendizaje automático y AI; lenguajes de programación Swift, Kotlin, TypeScript, Dart, Solidity, Web Assembly y Zig; componentes de DevOps (Dockerfiles, TOML, HashiCorp, archivos de construcción Bazel y reglas YARA); bases de datos SQLite; archivos de AutoCAD (dwg, dxf), Adobe Photoshop (psd) y fuentes (woff, woff2). Se mejoró la separación de código entre C++ y C, JavaScript y TypeScript.
Fuente: opennet.ru
