跳到主要內容
Lab Grimoire
TW EN
請喝咖啡
software

Magika

Google 開源的 AI 檔案類型偵測工具,同一套系統正在 Gmail、Drive、Safe Browsing、VirusTotal 上跑。用深度學習讀取整份檔案的統計特徵,而非比對 magic bytes,因此能辨識改掉檔頭的偽裝惡意檔案。~99% 準確率,支援 200+ 種格式,~5ms/檔(CPU),多語言 SDK。主要限制:加密/壓縮內容信心分數偏低,速度比傳統 `file` 指令慢 100-1000 倍。

最適合誰

需要處理不可信來源上傳、做安全掃描、或在 pipeline 裡正確識別「這個檔案實際上是什麼」的工程師。如果你曾經擔心有人把 ELF 二進位檔改名叫 .jpg 混進上傳接口,Magika 就是為了解決這個問題而設計的。

我實際怎麼用

CLI 日常用法:拿到來源不明的檔案,先跑 magika -i -s file,一次看到 MIME type 和信心分數。信心分數低於 0.5,我會把這個檔案當作加密/壓縮內容處理,或是 Magika 訓練覆蓋不足的罕見格式,接到人工審核佇列或用其他工具輔助判斷。

Python 掃描腳本裡,Magika() 只初始化一次,後續每個檔案約 5ms,批次處理幾百個上傳沒問題。信心分數讓我可以分路由:安全敏感路徑用高信心模式(低於閾值標為 unknown),一般掃描用中等閾值,下游流程需要一定有值時用 best-guess 模式。

--jsonl 輸出加 jq 後處理,可以快速撈出偵測類型和宣稱副檔名不符的檔案,這種差異通常值得多看一眼。

有一點要先說清楚:brew install magika 裝的是 Rust CLI,不含 Python 模組。要用 Python API(from magika import Magika),需要另外 pip install magikapipx install magika。這個差異第一次遇到很容易搞混。

真正強的地方

  • ~99% 準確率,1 億筆訓練樣本。能辨識需要手寫規則才能處理的格式,新格式只要收集訓練樣本重訓,不需要寫規則
  • 辨識偽裝檔案:改 magic bytes 可以騙過 file 指令,但騙不過全文統計特徵分析。這是安全場景選 Magika 而不是傳統工具的核心理由
  • 模型載入後每檔 ~5ms,批次處理效率夠。Rust CLI 啟動比 Python 版快,適合 shell script 大量呼叫
  • Google 生產驗證:Gmail、Drive、Safe Browsing、VirusTotal 全都在跑,不是學術論文工具
  • 多語言 SDK:Python 做應用整合,Rust CLI 用於 scripts 和 CI/CD(不需 Python 依賴),JavaScript/TypeScript 給 Node 環境,Go 還在開發中
  • 信心分數有三種操作模式:high confidence(嚴格,低假陽性)、medium confidence(覆蓋率高)、best-guess(一定給出答案)。Python API 回傳原始 score 浮點數,可以自己設閾值邏輯

失敗模式與不該用的情境

  • 加密/壓縮內容信心分數低。加密後統計特徵消失,Magika 只能給出低信心猜測,你需要另外建立這類邊界案例的處理路徑
  • 速度比 file 指令慢 100-1000 倍file 是微秒級,Magika 是 ~5ms。實時封包分析或微秒延遲敏感場景不適合
  • Python 版需要 onnxruntime,在邊緣裝置或受限環境部署有門檻。v1.0.2 已移除 numpy 直接依賴,情況有改善
  • 200+ 種格式覆蓋度不錯,但長尾格式的訓練樣本不足,準確率會低於 ~99% 的平均數。值得用你自己的檔案實測

價格、上手門檻與風險

開源,Apache 2.0,商業使用無授權問題。brew install magikapip install magika 直接裝,不需要設定。初學者門檻低。

風險低:模型本地執行,沒有網路呼叫,資料不離機。ONNX Runtime 是成熟依賴,安全紀錄良好。

結論

如果你要處理不可信來源的檔案,又在意偽裝惡意檔案的問題,Magika 是直接的選擇。Google 生產驗證加上 15k stars 不只是背書,工具本身確實能用。記住 brew install magika 裝的是 CLI 不是 Python 模組,也不要期待它在延遲敏感場景取代 file 指令。

工作量以加密/壓縮檔案為主、或部署在無法跑 ONNX Runtime 的邊緣硬體上,這個工具不適合。

來源

https://github.com/google/magika