Compania Google a lansat versiunea 1.0 a instrumentului Magika, destinat identificării tipului de conținut pe baza analizei datelor disponibile în fișier. Magika poate identifica cu precizie limbajele de programare utilizate în conținut, metodele de compresie, pachetele de instalare, codul executabil, tipurile de markup, formatele audio, video, documente și imagini. Instrumentul asociat proiectului și modelul de învățare automată sunt distribuite sub licența Apache 2.0. Interfețele sunt pregătite pentru limbajele Rust, Python, JavaScript/TypeScript și Go.
Spre deosebire de proiectele similare care determină tipul MIME în funcție de conținut, Magika se distinge prin aplicarea metodelor de învățare automată, ridicate și prin precizia determinării. Modelul a fost antrenat utilizând cadrul Keras pe 100 de milioane de exemple de fișiere (dimensiunea setului de date depășește 3 TB) și suportă recunoașterea a 200 de tipuri de date cu o precizie de cel puțin 99%. Modelul este compus în format ONNX și are o dimensiune de doar câțiva megabaiți. Utilizarea metodologiilor de învățare profundă a permis o creștere cu 50% a preciziei determinării comparativ cu sistemul anterior utilizat de Google bazat pe reguli definite manual.
În Google, sistemul este utilizat pentru clasificarea fișierelor în serviciile Gmail, Drive, Code Insight și Safe Browsing în timpul efectuării verificărilor de securitate și conformitate cu regulile serviciilor. Integrarea Magika în platformele VirusTotal și abuse.ch asigură un link pentru filtrarea inițială a fișierelor înainte de a fi efectuate analize specifice. Configurația Magika desfășurată în infrastructura Google asigură scanarea a sute de milioane de fișiere pe secundă și a zeci de miliarde de fișiere pe săptămână. După încărcarea modelului, timpul de generare a rezultatului este de 5 ms în testarea pe un singur nucleu CPU. Timpul de determinare este aproape independent de dimensiunea fișierului.
Pentru a integra Magika în proiectele tale, a fost pregătită o utilitate în linia de comandă, pachete pentru Python, Rust și Go, precum și o bibliotecă JavaScript capabilă să funcționeze în browser sau în proiecte bazate pe Node.js. Interfața în linia de comandă și API-ul suportă execuția operațiunilor în modul batch, adică permit verificarea mai multor fișiere dintr-o singură solicitare. Există un mod de scanare recursivă a întregului conținut al directorului și trei moduri de previzionare pentru a adapta rezistența la erori (înaltă încredere, medie încredere și cea mai bună ghicire).
Inițial, proiectul a fost dezvoltat în limbajul Python, dar la pregătirea versiunii 1.0, motorul pentru determinarea tipurilor de conținut a fost rescris în limbajul Rust, ceea ce a permis obținerea unei performanțe mai ridicate, menținând în același timp un nivel adecvat de securitate a codului. Pentru executarea modelului de învățare automată a fost folosit framework-ul ONNX Runtime, iar pentru procesarea asincronă și paralelă a cererilor - biblioteca Tokio. Pe MacBook Pro (M4), performanța motorului permite procesarea a aproximativ 1000 de fișiere pe secundă.
Pe lângă noul motor, schimbările din versiunea 1.0 includ extinderea numărului de tipuri suportate de la aproximativ 100 la 200; adăugarea unui nou client în linia de comandă, scris în Rust; creșterea preciziei în determinarea formatelor de text, cum ar fi fișierele de configurare și codul; refacerea modulelor pentru Python și TypeScript pentru a le facilita integrarea cu alte proiecte. Printre noile tipuri de conținut suportate se numără: formate utilizate în învățarea automată și AI; limbaje de programare Swift, Kotlin, TypeScript, Dart, Solidity (solidity), Web Assembly și Zig; componente DevOps (Dockerfiles, TOML, HashiCorp, fișiere de compilare Bazel și reguli YARA); baze de date SQLite; fișiere AutoCAD (dwg, dxf), Adobe Photoshop (psd) și fonturi (woff, woff2). A fost îmbunătățită separarea codului în C++ și C, JavaScript și TypeScript.
Sursa: opennet.ro
