簽名PDF文件真的可信嗎?

研究人員嘗試在保持有效簽名的情況下修改已簽名的PDF文件內容。

幾乎任何一家公司或政府機構都會用到PDF文件,同時他們還會使用數字簽名來確保文件的真實性。當你使用任何PDF閱讀器打開已簽名的文件,程式將會顯示一個標誌,表明檔案已經過那些人簽名,並允許您訪問簽名驗證菜單。

因此,來自德國幾所大學的一組研究人員希望測試PDF簽名的可靠性。來自波鴻魯爾大學的Vladislav Mladenov在36C3上分享了他們團隊的發現

研究人員要做的事情非常簡單,他們想在維持原本有效簽名的情況下修改已簽名PDF檔案的內容。從理論上講,網路犯罪分子也可以做同樣的事情,將惡意內容或虛假訊息添加到簽名文件中。畢竟,客戶傾向於無條件信任銀行發來的簽名PDF檔案,且有可能點開其中任何一個連結。

該團隊選擇了22個不同平台上的主流PDF閱讀器,並經過系統性的實驗得出結果。

PDF文件結構

首先讓我們簡單地介紹一下PDF格式。每個PDF文件都由四個主要部分構成的,分別是文件頭、文件體、Xref交叉引用表以及文件尾追踪器。其中文件頭標註了PDF的版本,文件體顯示用戶看到的主要內容,交叉引用表負責列出主體內的對象及其顯示內容位置的目錄,文件尾則是PDF查看器閱讀檔案的第一步,它包含了兩個重要參數,告訴程式應該從哪裡開始處理文件,以及交叉引用表的起始地址。

PDF格式中還有一個增量更新功能,允許用戶標記部分文本並留下評論。從技術角度看,這個功能給檔案增加了三個新的部分,正文的更新、新的交叉引用表和新的文件尾追踪器。這三個部分能夠有效地改變用戶查看到的對象,並給檔案添加新的內容。本質上,數字簽名也是一種增量更新,即向文件中添加另一個元素和相應的部分。

增量保存攻擊ISA

首先,這支技術團隊嘗試使用文本編輯器通過另一個增量更新向文件添加額外的部分。嚴格地說,這不能算是攻擊文件——該團隊只是使用了PDF格式創建者實現的一個函數。當用戶打開以這種方式修改過的文件時,PDF閱讀器通常會顯示一條消息,說明數字簽名是有效的,但檔案已被修改。但這樣的訊息並不足以引起注意,尤其是對沒什麼經驗的用戶來說。更糟糕的是,其中一個PDF閱讀器(LibreOffice)甚至連這樣的提示消息都沒有。

接下來的實驗中,他們刪除了PDF檔案的最後兩個部分,即向正文添加更新,但不添加新的交叉引用表和追踪器。部分應用程式拒絕打開這類文件,有兩個PDF閱讀器發現了這部分內容的缺失,並且在沒有通知用戶的情況下自動補足。另外三種PDF閱讀器沒有絲毫懷疑就讓用戶打開了文件。

緊接著,研究人員想知道如果他們只是簡單地將數字簽名複製到他們自己”手動”添加的更新之後會發生什麼。顯然,Foxit和MasterPDF都中計了。

總的來說,在22個PDF閱讀器中,有11個會受到這些初級操作的影響。更糟糕的是,有6個閱讀器完全不顯示文件被修改過的相關訊息,而在另外5個軟體中,想要找到文件經過修改的跡象,僅僅打開文件是不夠的,用戶必須手動進入菜單並檢查數字簽名的有效性。

簽名包裝攻擊SWA

對文件簽名就是將兩個重要的字段作為增量更新到文件體,即包含簽名內容的/Contents和準確描述簽名的/ByteRange。後者中有四個參數,分別定義了文件的起點、簽名代碼之前的字節數、界定簽名代碼結束的字節以及簽名之後的字節數。電子簽名是從pdf檔案代碼中加密生成的一串字符序列,一般來說簽名是不能夠再給自己授信的,所以存儲它的區域也被排除在簽名計算的過程以外。

研究人員試圖在簽名後直接添加另一個/ByteRange字段,字段中的前兩個數值保持不變,改動簽名末尾的位置。那麼在文件中就出現了一個額外的區域,能夠放入任何惡意對像以及描述他們的Xref交叉表。理論上來說,如果正確讀取文件,那麼PDF閱讀器是無法查看到這個區域的內容。然而在22款應用中,有17種閱讀器都有這個漏洞。

通用簽名偽造USF

此外,研究團隊決定對這些軟體進行壓力測試,使用滲透測試的方法,嘗試用錯誤的值替換字段或乾脆刪除他們。針對/Contents進行實驗後發現,就算將實際簽名替換為值0x00,依舊有兩個PDF閱讀器認可了文件簽名。

那麼如果不考慮改變簽名內容,直接刪除含有簽名具體訊息的/ByteRange呢?或者使用空值替代真實數值?這兩種情況下,依然還是有部分閱讀器驗證了簽名。

在接受測試的22個PDF閱讀器中,有4款軟體包含可被利用的執行錯誤。

下面的這張結果匯總表顯示,在22個軟體中有21個可能被一定的手段誤導欺騙。也就是說,除非用戶使用的是那唯一一個通過測試的PDF閱讀器,網路犯罪分子是能夠創建看起來可靠有效,實際上卻含有惡意內容或錯誤訊息的PDF檔案來誘導用戶的。

有趣的是,只有Adobe Reader 9 這一個軟體沒有落入研究人員的任何套路。但問題在於,它容易受到RCE漏洞的影響,且只有Linux用戶因為缺少更新的可用版本才不得已地使用它。

結論

從以上的實驗中,我們能夠得出的實際結論有以下兩點:首先,任何人都不應該盲目相信PDF數字簽名,即便你看見了那個綠色的標記也並不意味著簽名就是有效可靠的。

其次,即便是經過簽名的檔案也可能帶來威脅。在打開任何來自網路的文件或點擊其中的連結之前,請確認你的電腦上安裝有可靠的安全解決方案。

資料來源: https://www.kaspersky.com/blog/36c3-pdf-digital-signature/32073/

Comments are closed.

Up ↑

探索更多來自 卡巴斯基部落格 的內容

立即訂閱即可持續閱讀,還能取得所有封存文章。

Continue reading