Компания Google представи релиз на инструмента Magika 1.0, предназначен за определяне на типа съдържание на база анализа на наличните данни във файла. Magika може точно да определя езиците за програмиране, методите на компресия, инсталационните пакети, изпълняемия код, видовете размазване, форматите на звук, видео, документи и изображения в съдържанието. Свързаният с проекта инструментариум и готовата машина за обучение се разпространяват под лиценза Apache 2.0. Обвивките са подготвени за езиците Rust, Python, JavaScript/TypeScript и Go.
От подобни проекти, които определят MIME типа по съдържание, Magika отличава с използването на методи за машинно обучение, по-висока производителност. и точността на определянето. Моделът е обучен с помощта на фреймуърка Keras на 100 млн примера файлове (размерът на набора от данни е над 3 TB) и поддържа разпознаване на 200 типа данни с точност не по-малка от 99%. Моделът е комбиниран във формат ONNX и има размер само няколко мегабайта. Използването на методи за дълбоко машинно обучение е повишило точността на определянето с 50% в сравнение с предишната система в Google, която е базирана на ръчно зададени правила.
В Google системата се използва за класификация на файлове в услугите Gmail, Drive, Code Insight и Safe Browsing при извършване на проверки за сигурност и съответствие с правилата на услугите. Обезпечена е интеграцията на Magika в платформите VirusTotal и abuse.ch като звено за първична филтрация на файлове преди изпълнението на специфични анализатори. Развърната в инфраструктурата на Google конфигурация на Magika осигурява сканиране на милиони файлове в секунда и стотици милиарди файлове на седмица. След качване на модела, времето за генериране на изхода е 5 ms при тестване на едно ядро CPU. Времето за определяне почти не зависи от размера на файла.
За да активирате Magika в своите проекти, са подготвени команден ред, пакети за Python, Rust и Go, както и JavaScript библиотека, която може да работи в браузъра или в проекти, основаващи се на Node.js. Интерфейсът на командния ред и API-то поддържат извършване на операции в пакетен режим, т.е. позволяват проверка на няколко файла с една заявка. Има режим на рекурсивно сканиране на съдържанието на целия каталог и три режима на прогнозиране за настройка на устойчивостта при грешки (висока увереност, средна увереност и най-добро предположение).
Поначало проектът се развиваше на езика Python, но при подготовката на версия 1.0, двигателят за определяне на типовете съдържание беше пренаписан на Rust, което позволи постигането на по-висока производителност, запазвайки необходимото ниво на защитеност на кода. За изпълнението на модела за машинно обучение е използван фреймуърк ONNX Runtime, а за паралелна асинхронна обработка на заявки – библиотеката Tokio. На MacBook Pro (M4) производителността на двигателя позволява обработката на около 1000 файла в секунда.
Освен новия двигател, в промените на версия 1.0 се отбелязва разширяването на броя на поддържаните типове от около 100 до 200; добавянето на нов клиент на командния ред, написан на Rust; повишаване на точността на определяне на текстовите формати, като конфигурационни файлове и код; преработка на модулите за Python и TypeScript за улесняване на тяхната интеграция с други проекти. Сред поддържаните нови типове съдържание са: формати, използвани при машинно обучение и AI; програмни езици Swift, Kotlin, TypeScript, Dart, Solidity (solidity), Web Assembly и Zig; DevOps компоненти (Dockerfiles, TOML, HashiCorp, файлове за компилация Bazel и правила YARA); БД SQLite; файлове AutoCAD (dwg, dxf), Adobe Photoshop (psd) и шрифтове (woff, woff2). Подобрено е разделението на кода на C++ и C, JavaScript и TypeScript.
Източник: opennet.ru
