Magika:文件类型检测小模型
每个接触Gmail的文件都会被嗅探。每次上传到Google Drive。每次被安全浏览标记的下载。
每周数千亿个文件,通过扫描器、策略引擎和恶意软件检测器进行路由。
这些管道中的每一个问的第一个问题是相同的:这个文件是什么?
搞错这一点,后续的一切都会崩溃。
一个PE二进制被误识别为文本文件?它会跳过恶意软件沙箱。一个用.png扩展名伪装的JavaScript文件?它会绕过图像扫描器。一个多语言文件,对一个工具看起来像PDF,对另一个工具看起来像ZIP?这不是假设;这是恶意软件分析中的常态。
几十年来,"这个文件是什么?"的答案是libmagic和Unix的file命令。手写模式匹配魔数。它能工作。大体上。
但当你是Google时,"大体上"就不再可接受了。当AI智能体自主打开文件、执行代码并对如何处理不受信任的内容做出决策时,这也是不可接受的。
所以Google构建了Magika。
在1亿个文件上训练了一个定制的神经网络。把它压缩到3.1兆字节。让它在单个CPU上5毫秒内运行。然后他们开源了它。
这不是"Google发布一篇研究论文然后走人"的情况。这是一个现有的生产解决方案正在被开源。
1、为什么file一直是一个定时炸弹
事实是:file命令不是一个检测系统。它是一个带启发式的查找表。它读取文件的前几个字节,与"魔数"数据库比较,然后返回第一个匹配。
问题有据可查。它经常错误识别现代格式。它与文本内容类型斗争(Python vs. JavaScript vs. Ruby;对模式匹配器来说都看起来像"ASCII文本")。它没有置信度的概念。要么匹配,要么不匹配。
Google自己的基准测试显示,Magika在100万文件基准测试上比file和其他工具表现好约20%。但在文本内容上差距更糟:区分50多种编程语言是手写规则完全失效的地方,也是用1亿样本训练的神经网络绝对占主导的地方。
说实话,file从未为我们今天生活的威胁格局设计。它是为一个你信任系统上的文件、只想知道用哪个程序打开它们的世界设计的。
我们不再生活在那个世界了。
2、Magika到底是什么(不是什么)
Magika是一个由定制深度学习模型驱动的文件内容类型识别系统。不是恶意软件检测器。不是威胁分类器。不是大语言模型。
它正好回答一个问题:给定这个文件,它包含什么类型的内容?
它通过只读取两个小的文件块来完成:去掉空白后的前1,024字节和后1,024字节。就这些。共2,048字节,输入一个紧凑的ONNX神经网络,输出214种内容类型的概率分数。
模型很小。3.1兆字节。
在CPU上每次推理大约需要5毫秒。它不需要GPU。它不需要网络连接。它在单个核心上运行,给你一个内容类型标签、一个置信度和一个MIME类型。
关键洞察是文件格式签名存在于书脊处。开头有头部(魔数、shebang行、XML声明、BOM标记)。结尾有结构标记(ZIP中央目录、PDF%%EOF标记、ELF节头)。文件中间大多是负载,负载告诉你文件里有什么,而不是文件是什么。
可能数千兆字节中的2,048字节,达到99%准确率?
当你想到这一点时并不奇怪。格式规范的设计正是为了让工具能够快速识别文件。Magika正在做格式设计者想做的事,但用的是神经网络而不是正则表达式数据库。
3、让它可用于生产的置信度系统
但是,原始神经网络输出对于生产安全系统来说是不够的。真正使Magika可部署的是顶部的置信度阈值层。
每种内容类型都有自己的置信度阈值,从真实世界数据调整。大多数类型的阈值是0.5,但容易与其他类型混淆的内容类型有更高的阈值:0.75、0.9,甚至0.95。如果模型说"这可能是Haskell",置信度为0.6,但Haskell的阈值是0.9,Magika会将结果降级为"通用文本文档",而不是冒假阳性的风险。
用人类的话来说:Magika宁愿说"我不确定",也不愿给你一个错误的答案。
对于安全工具来说,这正是正确的设计选择。假阴性(将某物标记为"未知")很烦人;假阳性(将恶意软件标记为"文本文件")很危险。
4、为什么这现在很重要:智能体AI问题
这就是事情变得真正有趣和紧迫的地方。
我们生活在第一年,AI智能体大规模自主与文件交互。Claude Code打开仓库,读取文件,执行代码。GitHub Copilot Workspace摄取项目结构。Devin处理代码库。企业智能体处理电子邮件附件,处理文档,通过审批工作流程路由文件。
这些智能体中的每一个都需要回答Gmail管道回答的相同问题:这个文件是什么?
而且现在大多数都做得不好。根本不做。他们信任文件扩展名。他们使用file。他们从上下文猜测。他们将文件直接传递给解释器而不验证。
看。智能体AI的攻击面是文件系统。它一直是。
当AI智能体有工具访问代码解释器、shell环境和文件系统时,它接触的每个文件都是潜在的攻击向量。通过文档的间接提示注入。看起来像一种东西但执行为另一种东西的多语言文件。伪装的恶意文件。利用解析器漏洞的精心制作的存档。
2026年2月,Check Point Research披露了Claude Code中的关键漏洞。CrewAI有四个CVE,将提示注入链接到通过代码解释器的远程代码执行。这些不是理论攻击;它们正在发生。
文件类型识别是第一个门。
如果在你的智能体处理文件之前不能准确识别它是什么,你就根本没有安全边界。你让智能体根据感觉和扩展名做出决定。
Magika为每个智能体AI系统提供了保护Gmail的同一个第一道门。5毫秒。无网络调用。无GPU。只是准确识别你在把它交给解释器之前实际处理的是什么。
如果这都不能打动你,那还有什么。
5、Google开源这个的真正目的
让我直接说这里发生了什么。
Google每周在Gmail、Drive和安全浏览上对数千亿个文件运行Magika。这不是副项目。这是为20亿以上用户提供服务的产品核心安全基础设施。
他们不必开源它。他们可以将其保持为竞争优势。他们可以将其作为付费Cloud API提供。他们选择了Apache 2.0并把所有东西放在GitHub上:训练好的模型、完整源代码、四种语言的绑定(Rust、Python、JavaScript、Go),以及一个浏览器演示。
为什么?
我认为有三个原因,而且它们并非纯粹利他主义。
5.1 提升基准对Google有利
Google的威胁面包括发送给Gmail用户的每个文件和上传到Drive的每个文件。许多这些文件来自Google控制系统之外的系统。
如果整个生态系统在恶意文件到达Google系统之前更好地识别和过滤它们,Google就会受益。开源Magika是一种让其他人的文件处理变得更好的方式,这减少了冲击Google大门的垃圾。
5.2 成为标准
VirusTotal(Google所有)已经集成了Magika。每个提交到VirusTotal的文件现在都用Magika处理,结果出现在详细信息标签中。abuse.ch使用它。如果Magika成为文件识别的实际标准,安全生态系统中的每个工具都说同一种语言。
这对于互操作性非常有价值。这与开源TensorFlow相同的策略:放弃工具,成为平台。
5.3 AI治理信号
Google将自己定位为负责任的AI公司,给防御者提供武器,而不仅仅是攻击者。他们的博客文章明确表示:AI允许安全专业人员在威胁检测、恶意软件分析和事件响应中扩大他们的工作范围。开源他们内部使用的工具是践行他们所说的公开演示。在AI监管和治理讨论的时代,这很重要。
但总是有但是。
模型是在Google数据上训练的。1亿个文件,来自Google内部语料库。没有其他人有那种用于文件识别的训练数据。所以虽然模型是开源的,但训练更好模型的能力仍然是Google的竞争优势。你可以使用他们的模型,分叉它,部署它。但你可能无法在没有类似规模的训练数据的情况下超越它。
明智的举动。
6、幕后:让它工作的工程
我不会逐行讲解代码(仓库就在那里;自己读)。但有几个工程决策值得关注,因为它们告诉你Google如何考虑生产ML系统。
6.1 模型嵌入在二进制中
在Rust实现中,3.1MB ONNX模型使用include_bytes!直接编译到二进制中:
let session = session.commit_from_memory(include_bytes!("model.onnx"))?;无需文件系统查找。无需配置模型目录。无版本不匹配。一个静态二进制,零依赖。对于需要部署到企业每台机器的安全工具,这是正确的选择。你cargo install magika-cli就完成了。
比较Python版本,它从磁盘加载,需要ONNX Runtime安装。相同的模型,相同的准确率,完全不同的部署故事。Rust实现是你送到生产的。Python那个是用于研究和脚本的。
6.2 特征提取技巧
Magika将文件转换为2,048元素整数向量的方式很优雅。读取前4,096字节。去掉前导空白。取前1,024字节。读取后4,096字节。去掉尾部空白。取后1,024字节。任何短于1,024的用token 256填充。
Rust代码中的对齐技巧特别巧妙:开头特征左对齐(填充在右边),结尾特征右对齐(填充在左边),一个整数参数(0或1)控制这个,无需分支:
fn copy_features(dst: &mut [i32], src: &[u8], align: usize) { let len = std::cmp::min(dst.len(), src.len()); let dst_len = dst.len(); let dst = &mut dst[(dst_len - len) * align..][..len]; let src = &src[(src.len() - len) * align..][..len]; for (dst, src) in dst.iter_mut().zip(src.iter()) { *dst = *src as i32; } }零分支。只是算术。这是当你每周处理数十亿文件、每一微秒都很重要时写的代码。
6.3 同步/异步桥接
Rust库支持从单一代码库同步和异步执行。他们不使用代码重复,而是使用基于trait的Env抽象,其中SyncEnv将std::fs调用包装在std::future::ready()中(立即解析),AsyncEnv包装tokio::fs。一个"panic waker"确保同步 futures 永远不会真正挂起:
pub(crate) fn exec<T>(mut future: impl Future<Output = T>) -> T { let future = unsafe { Pin::new_unchecked(&mut future) }; let waker = panic_waker(); let mut context = Context::from_waker(&waker); match future.poll(&mut context) { Poll::Ready(x) => x, Poll::Pending => unreachable!(), } }这不是通常的方法。大多数Rust库重复代码或使用block_on。Magika优先写异步,然后通过编译时多态使同步路径零成本。如果你正在构建需要同时服务同步和异步消费者的Rust库,这个模式值得借鉴。
7、四种语言,一个模型,一个测试套件
Rust、Python、JavaScript、Go。所有四个实现共享相同的ONNX模型文件和相同的JSON配置。每个都用该语言的惯用风格手写。它们根据相同的参考测试数据进行验证,确保相同输入产生相同输出。
JavaScript版本是有趣的异类:它使用TensorFlow.js而不是ONNX Runtime,允许它在浏览器中完全运行,无需服务器往返。对于隐私敏感的文件识别演示,这很重要。
8、没有人谈论的场景
让我给你画个图。
8.1 发票处理智能体工作流
你的公司部署了一个处理传入供应商发票的AI智能体。它读取电子邮件附件,提取数据,将它们路由到会计系统。标准的企业自动化。智能体有文件系统访问、代码解释器和你ERP的API凭证。
攻击者精心制作了一个文件。它有.pdf扩展名。前1,024字节包含有效的PDF头部。但在内部,在简单魔数检查会看到的地方过去,有一个有效载荷,利用了你的智能体使用的PDF库中的已知解析器漏洞。你的智能体信任扩展名,用PDF解析器打开它,有效载荷被执行。
现在考虑同样的场景,但Magika坐在前面。Magika读取文件的开始和结尾。结尾看起来不像PDF。PDF的置信度分数是0.4,低于阈值。Magika将其标记为"未知二进制"。你的智能体将其路由到隔离区而不是PDF解析器。
这就是区别。
8.2 另一面
你的智能体收到一个合法的.docx文件,但之前的基于规则的系统将其误识别为"application/octet-stream",因为魔数略微不标准(非Microsoft工具生成的文件常见)。智能体将其视为可疑,阻止它,而真实发票在隔离区待三天。使用Magika的神经网络,它见过数百万.docx变体,以0.97的置信度正确识别它。
假阳性代价高昂。假阴性危险。同时减少两者的工具对于智能体AI来说不是锦上添花;而是基础设施。
9、214种内容类型实际覆盖什么
覆盖范围令人印象深刻。不只是明显的格式如PDF、JPEG、ZIP和Python。
Magika识别50多种编程语言(包括Solidity、Zig、Prolog、VHDL和Cobol)。机器学习格式(ONNX、PyTorch、NumPy、Pickle)。每种主要文档格式。每种常见存档类型。音频、视频和图像容器。跨平台可执行格式(ELF、PE、Mach-O、DEX、WebAssembly)。配置格式(TOML、YAML、INI、HCL)。甚至小众格式如Apple二进制属性列表、Windows注册表文件和蛋白质数据库文件。
对于安全团队,可执行和存档格式的覆盖至关重要。对于在企业环境中处理多样文件类型的智能体AI系统,编程语言识别同样重要:在将其传递给解释器之前知道文件是否包含Python、JavaScript或Shell脚本是大多数当前系统完全跳过的基本安全检查。
10、谁应该关心以及该怎么办
如果你正在构建接触文件的智能体AI系统:集成Magika。今天。对于Python用pip install magika。对于Rust二进制用cargo install magika-cli。在文件处理之前添加为预处理步骤只需5分钟。
如果你正在运行安全运营:用Magika评估你当前的文件识别管道。
如果你仍在检测堆栈中的任何地方使用
file或基于扩展名的启发式,你正在桌上留下20%的准确率差距。攻击者生活在那个差距中。
如果你正在构建AI治理框架:关注文件识别作为原语。它不华丽。没有人写关于它的白皮书。但它是所有其他安全决策所依赖的基础。模型上下文协议(MCP)生态系统、现代智能体中的工具使用模式、代码解释器沙箱:它们都需要在处理之前知道它们在处理什么。
Google刚刚免费送出了最先进的技术。Apache 2.0。IT安全公司曾经为此收取高价的东西。应该是开放互联网核心的东西。
11、Google不能给你的东西
模型是冻结的。它知道214种内容类型截止到它的训练数据。新的文件格式出现。攻击者适应。ONNX模型将需要重新训练,而Google的1亿文件训练语料库不在开源版本中。
你可以微调。
你可以扩展内容类型注册表。模型配置格式支持它。但从头训练如此准确的模型需要大多数组织根本没有的数据集。
这使得Magika不太像开源软件,更像开源权重。你得到推理,而不是训练。你得到枪,而不是弹药工厂。它非常有用。它也被战略性地设计让Google保持在中心。
这是我的观点。你应该做你感觉舒服的事。但在"我们应该使用Google开源的文件识别工具还是构建我们自己的"的计算中,答案是显而易见的。使用他们的。在其上构建。把你的精力集中在安全堆栈中尚未解决的部分。
第一道门很重要。Google刚刚给了市场上最好的一个。
我帮你搞定了:pip install magika。
原文链接:Magika:文件类型检测小模型 - 汇智网
