天天看點

Open XML應用安全(2)OLE機制Open XML應用安全(2)OLE機制

OLE(Object Linking and Embedding,對象連接配接與嵌入)不僅是桌面應用程式內建,而且還定義和實作了一種允許應用程式作為軟體“對象”(資料集合和操作資料的函數)彼此進行“連接配接”的機制,這種連接配接機制和協定稱為部件對象模型(Component Object Model,COM)。

OLE可以用來建立複合文檔,複合文檔包含了建立于不同源應用程式,有着不同類型的資料,是以它可以把文字、聲音、圖像、表格、應用程式等組合在一起。

但對OLE的支援也帶來了一些安全性問題,如在Outlook 2002及以上版本中,黑客如果在郵件中嵌入危險OLE對象,就可以對其肆意僞裝,有可能騙過使用者導緻安全問題。

OLE2是OLE對象的更新版本。

Office中的宏也是作為OLE2對象嵌入到文檔中的,下面看在Word中建立一個Excel文檔的例子。

首先在Word文檔中選擇插入→表格→Excel電子表格,如圖14-23所示。

圖14-23  插入電子表格

執行圖14-23的操作後得到圖14-24所示的結果。

圖14-24  在Word中插入Excel表格

實際上,插入的Excel會作為一個OLE2對象存儲在對應的ZIP包的邏輯目錄下,然後通過關系加載到主文檔中。對于.docx文檔,OLE對象通常存儲在word\embeddings目錄下,如圖14-25所示。

圖14-25  OLE對象在Word中的存儲

OLE對象以它的原生格式存儲在ZIP包中。還有另一類OLE對象稱為OLE Package對象,這類對象可以包含任意檔案,并且可以設定指令。OLE Package對象以OLE2二進制格式存儲。

如果嵌入一個惡意的OLE對象,或者惡意程式替換或者向文檔中添加惡意OLE對象,都會造成很嚴重的後果。

如果應用場景有需要,無法完全避免OLE對象的執行,但是可以借助防毒軟體來減弱Office文檔的危害。如果你還不是很放心,可以通過程式處理OLE對象,删除或者重命名。隻要有個解壓縮工具就可以完成這樣的工作,下面提供一小段代碼,見代碼清單14-21。

代碼清單14-21  删除OLE對象

        public static void RemovePart(string document)

        {

            using (WordprocessingDocument wordDoc = WordprocessingDocument.Open(document, true))

            {

                MainDocumentPart mainPart = wordDoc.MainDocumentPart;

                if (mainPart.DocumentSettingsPart != null)

                {

                    mainPart.DeleteParts(mainPart.EmbeddedObjectParts);

                    mainPart.DeleteParts(mainPart.EmbeddedPackageParts);

                }

            }

        }

提示使用以上代碼之前,需要在項目中添加對DocumentFormat.OpenXml.dll的引用,才能夠使用Open XML SDK提供的API。

在代碼中,首先擷取主文檔對象MainDocumentPart,使用mainPart.EmbeddedObjectParts和mainPart.EmbeddedPackageParts分别擷取文檔中的OLE對象和OLE Package對象,最後調用MainDocumentPart類的DeleteParts方法删除它們。

如果防止惡意添加或者修改OLE對象,可以對Open XML文檔進行數字簽名,在後面的博文會進行講解。

 --------------------------注:本文部分内容改編自《.NET 安全揭秘》

本文轉自玄魂部落格園部落格,原文連結:http://www.cnblogs.com/xuanhun/archive/2012/06/24/2560122.html,如需轉載請自行聯系原作者