Office 2010 文件驗證

大家好,Office 安全團隊,負責測試 Office 文件驗證(代碼名稱:網關守衛)。人們對 Microsoft Office 2010 的新文件驗證功能存在一些誤解,在此我希望消除這些誤解,同時說明原因及具體操作。

爲什麼要驗證二進制文件?

一直以來,Office 二進制格式的標準不斷演化,複雜性不斷增加。對於這些格式複雜的原因,在其他地方已詳細討論過(請參閱此處的 Joel Spolsky 的文章),因此我們在此不作探討,但此處完好記錄了這些二進制格式。我們發現,惡意***者將二進制文件用作***手段來感染目標用戶,因此我們希望找到一種阻止此問題發生的方法。我們團隊採取的一項措施是:當 Microsoft 收到一個新的 Office 文件格式***的報告時,我們就會通過驗證進行檢查,以瞭解我們這項措施的效果。到目前爲止,效果相當不錯!

什麼是網關守衛?

Office 文件驗證是一種功能,該功能最初是在 Publisher 2007 中引入的,用來驗證 Publisher 的 PUB 文件。它可驗證特定二進制文件是否符合應用程序的要求。在 Office 2010 中,我們有效擴展了該功能,以包含 Word、Excel 和 PowerPoint 的二進制格式。請注意,該功能僅適用於二進制格式(即 PUB、DOC、XLS、PPT 等),而不能驗證基於 XML 的文檔(即 DOCX、XLSX、PPTX 等),也不能驗證宏或其他自定義項目。它可驗證的對象是文件結構。例如,如果有一個具有 FONTINDEX 結構的 XLS 文件,而 ifnt 值設置爲 4(對此特定項目無效的值),則無法進行驗證。

它的工作原理是什麼?

當通過 Word、PowerPoint 或 Excel 加載不可信的二進制文件(即不在受信任位置且不是受信任文檔)時,該功能將進行檢查,查看加載的文件是否是有效文件。主要是檢查應用程序即將解析的文件的具體位數,即相關 OLESS 流。如果確定是有效文件,則會按正常方式打開,無需移走。但如果發現文件無效,則會將其發送到(默認情況)受保護的視圖
圖像
如果單擊該文本,您將轉到 Backstage 視圖,您可在其中以完整的應用程序體驗形式打開此文件。請注意,此操作相當於作出信任決定,這會將此特定文件標記爲受信任文件,在下次打開此文件時也不會對其進行驗證。
在處理完文件並關閉應用程序後,您可能會看到如下提示:
圖像
該提示最多每兩週顯示一次(每個應用程序),以便您通過 Windows 錯誤報告選擇是否將無效文件發送給我們。當然,如果您不希望共享該信息,也可以刪除一兩個文件,但如果將文件發送給我們,我們便可以進一步分析它,從而改進 Office 文件驗證功能。

如何控制此操作?

通過策略

我們發現許多管理員(或有安全意識的用戶)可能不喜歡打開驗證失敗的文件,因此我們推出了一個組策略來控制文件驗證失敗時的默認操作。這些策略位於組策略模板中應用程序的“選項”\“安全性”\“信任中心”\“受保護的視圖”下,它視應用程序設置而定。
圖像

通過註冊表

有以下幾個用來控制 Office 文件驗證的各個方面的註冊表項。
常用註冊表項
HKCU\Software\Microsoft\Office\14.0\Common\Security\FileValidation \ReportingInterval - 這是一個 DWORD,它可控制顯示將文件發送到 Windows 錯誤報告的對話框的間隔天數。
HKCU\Software\Microsoft\Office\14.0\Common\Security\FileValidation\DisableReporting - 這是一個 DWORD,如果設置爲 1,則禁止顯示對話框(因此禁止向 Windows 錯誤報告發送文件)。
應用程序特定註冊表項
適用於我將使用“Excel”的這些示例,但對“PowerPoint”和“Word”同樣有效
HKCU\Software\Microsoft\Office\14.0\Excel\Security\FileValidation\EnableOnLoad – 這是一個 DWORD,如果設置爲 0,則 Office 不會驗證文件。
HKCU\Software\Microsoft\Office\14.0\Excel\Security\FileValidation\DisableEditFromPV – 這是一個 DWORD,如果設置爲 1,則禁止編輯驗證失敗的文件。
Excel 特定註冊表項
HKCU\Software\Microsoft\Office\14.0\Excel\Security\FileValidation\PivotOptions – 這是一個 DWORD,可控制驗證文件的透視表緩存(由於性能原因)的特定選項。
0 = 從不驗證任何透視表緩存
1 = 在以下情況下驗證透視表緩存:(1) 文件是從 Internet 打開的,並且該平臺在本地將文件標記爲來自 Internet。(2) 文件是 Microsoft Outlook 電子郵件附件。(3) 用戶專門在受保護的視圖中打開文件。(4) 從緩存 Internet 內容的本地已知“非安全位置”以及任何特殊用戶定義的不受信任位置打開文件,除非通過(其他)註冊表項禁用受保護的視圖的非安全位置。(5) 在加載時打開文件並解析透視表緩存。
2 = 始終驗證所有透視表緩存

通過腳本

對於基於 Office 構建的自定義解決方案,嚮應用程序對象添加了一些有趣的屬性,它們能夠對該會話禁用文件驗證。還有一個額外的 Excel 選項可控制透視表緩存(即數據透視表和數據透視圖的文件緩存數據)的驗證。下面是一個 Powershell 腳本示例,演示如何設置這兩個 Excel 選項(但 FileValidation 屬性也適用於 Word 和 PPT):
$excel = New-Object -comobject Excel.Application
# valid values are:
# msoFileValidationDefault = 0
# msoFileValidationSkip = 1
$excel.FileValidation = msoFileValidationSkip
# valid values are:
# xlFileValidationPivotDefault = 0 (do whatever you’d normally do, i.e. follow registry & default settings),
# xlFileValidationPivotRun = 1 (validate all pivot caches),
# xlFileValidationPivotSkip = 2 (don’t validate any pivot caches)
$excel.FileValidationPivot = xlFileValidationPivotSkip

太棒了,但效果如何?

我們做了大量工作來確保文件驗證的速度。是的,現在打開一個文件需要更長的時間,但我們通常只需多花幾毫秒便可完成驗證。實際上,您很難找到一個其驗證時間超過一秒的標準大小的文件,大多數文件的驗證時間都在 1 到 100 毫秒之間。當然,如果文件很大非常複雜且需要一小時才能打開,那麼確實需要超過一秒的時間才能完成驗證,但您可能根本注意不到。對於文件驗證時間超過 5 秒(因此我們將在此探討很複雜的文件)這一情況,我們爲您提供了選項,允許您取消驗證並直接轉到受保護的視圖。畢竟,我們通常不能讓您直接打開它,因爲那樣***可能會編寫很複雜的文件來接管您的計算機,這正是該功能嘗試阻止的情況。
圖像
另外,對於驗證時間很長的任何文件(如果文件通過驗證、未通過驗證或跳過驗證),系統會顯示與有問題的文件相同的 Windows 錯誤報告提示;向您提供選項,以便您將文件發送給我們進行進一步分析。

概要

一天,在與開發人員聊天時,我們記下了這樣一段對話:
“你們在開發什麼?”
“Office 文件驗證”
“那是什麼東西?”
“檢查 Office 文件,確保文件有效”
“那麼,你們這兩年來一直在編寫布爾函數?”
“噢…嗯…是的,這是一個重要的函數!”
到最後,Office 文件驗證實際上只是一個告知應用程序文件是否有效的 Yes/No 函數,但它確實是一個重要的函數!實際上,它還是一個複雜的函數,瞭解文件格式規範的人都能證明這一點。那麼,在此您可以一言以蔽之:Office 文件驗證功能可檢查二進制文件,以確保文件的重要位有效。如果您認爲我們錯了,您可以信任文件,也可以告訴我們!
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章