L'azienda Google ha presentato il rilascio dello strumento Magika 1.0, progettato per determinare il tipo di contenuto analizzando i dati disponibili nel file. Magika è in grado di identificare con precisione i linguaggi di programmazione utilizzati, i metodi di compressione, i pacchetti di installazione, il codice eseguibile, i tipi di markup, i formati audio, video, documenti e immagini. Lo strumento associato al progetto e il modello di machine learning sono distribuiti con licenza Apache 2.0. Sono state preparate interfacce per i linguaggi Rust, Python, JavaScript/TypeScript e Go.
A differenza di progetti simili che determinano il tipo MIME in base al contenuto, Magika si distingue per l'applicazione di metodi di machine learning, maggiore prestazione e per la precisione della determinazione. Il modello è stato addestrato utilizzando il framework Keras su 100 milioni di esempi di file (dimensione del dataset superiore a 3 TB) e supporta il riconoscimento di 200 tipi di dati con un'accuratezza non inferiore al 99%. Il modello è composto in formato ONNX e occupa solo pochi megabyte. L'uso di metodi di deep learning ha permesso di aumentare del 50% la precisione della determinazione rispetto al sistema precedentemente utilizzato da Google, basato su regole definite manualmente.
In Google, il sistema è utilizzato per la classificazione dei file nei servizi Gmail, Drive, Code Insight e Safe Browsing durante le verifiche di sicurezza e conformità alle normative dei servizi. È stata garantita l'integrazione di Magika nelle piattaforme VirusTotal e abuse.ch come fase di filtraggio iniziale dei file prima dell'esecuzione di analizzatori specifici. La configurazione di Magika implementata nell'infrastruttura di Google consente la scansione di diversi milioni di file al secondo e di centinaia di miliardi di file alla settimana. Dopo il caricamento del modello, il tempo di generazione dell'output è di 5 ms quando testato su un singolo core CPU. Il tempo di determinazione dipende quasi esclusivamente dalla dimensione del file.
Per integrare Magika nei tuoi progetti, sono stati sviluppati un'utilità da riga di comando, pacchetti per Python, Rust e Go, oltre a una libreria JavaScript in grado di funzionare nel browser o in progetti basati su Node.js. L'interfaccia della riga di comando e l'API supportano l'esecuzione di operazioni in modalità batch, permettendo così di controllare più file con una sola richiesta. È disponibile una modalità di scansione ricorsiva dell'intero contenuto della directory e tre modalità di previsione per impostare la tolleranza agli errori (alta confidenza, media confidenza e migliore supposizione).
Inizialmente, il progetto si è evoluto in Python, ma nella preparazione del rilascio 1.0, il motore per la determinazione dei tipi di contenuto è stato riscritto in Rust, il che ha consentito di ottenere prestazioni più elevate mantenendo un adeguato livello di sicurezza del codice. Per eseguire il modello di machine learning è stato utilizzato il framework ONNX Runtime, mentre per l'elaborazione parallela e asincrona delle richieste è stata impiegata la libreria Tokio. Su un MacBook Pro (M4), le prestazioni del motore consentono di elaborare circa 1000 file al secondo.
Oltre al nuovo motore, nella versione 1.0 si segnalano l'aumento del numero di tipi supportati da circa 100 a 200; l'aggiunta di un nuovo client da riga di comando, scritto in Rust; l'aumento della precisione nella rilevazione di formati di testo, come file di configurazione e codice; la revisione dei moduli per Python e TypeScript per facilitare la loro integrazione con altri progetti. Tra i nuovi tipi di contenuto supportati: formati utilizzati nel machine learning e nell'AI; linguaggi di programmazione Swift, Kotlin, TypeScript, Dart, Solidity (solidity), Web Assembly e Zig; componenti DevOps (Dockerfiles, TOML, HashiCorp, file di build Bazel e regole YARA); database SQLite; file AutoCAD (dwg, dxf), Adobe Photoshop (psd) e font (woff, woff2). È stato migliorato il divisione del codice tra C++ e C, JavaScript e TypeScript.
Fonte: opennet.ru
