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.9Magika会将结果降级为通用文本文档而不是冒假阳性的风险。用人类的话来说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 成为标准VirusTotalGoogle所有已经集成了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 execT(mut future: impl FutureOutput 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文件类型检测小模型 - 汇智网