当前位置: 首页>编程笔记>正文

pdf翻譯網站,1 Trillion Dollar Refund – How To Spoof PDF Signatures——欺騙PDF簽名

pdf翻譯網站,1 Trillion Dollar Refund – How To Spoof PDF Signatures——欺騙PDF簽名

文章目錄

    • PDF結構
    • PDF簽名工作原理
    • 攻擊方式
      • 通用簽名偽造 USF
      • 增量存儲攻擊 ISA
      • 簽名包裝攻擊 SWA
    • pdf signature被攻擊的主要原因
    • 防止以上三種攻擊手段的算法例子

本文將從pdf基礎開始講起,介紹對pdf簽名的三種攻擊方式。攻擊實例請見 PDF攻擊實例-USF-ISA-SWA-Shadow Attack.7z

PDF結構

PDF本質上是一個ASCLL文件,我們用普通的文件瀏覽器打開一個pdf可以看到源代碼

在這里插入圖片描述

  • Header:是PDF的第一行,他解釋了PDF所需要的解釋器版本

  • pdf翻譯網站、Body:定義了PDF文件的內容,包括文本塊、字體、圖片和其他數據。Body的主體部分是對象object,
    如:2 0 obj Page。在所給的例子中,Body包含4個對象:Catalog,Pages,Page,Stream。其中

    1. 對象objects由三個部分組成在這里插入圖片描述

      1. 首先是一個objects編號
      2. 接下來是一個版本編號,版本編號將會遞增(當PDF被增量修改)
      3. 最后是固定字符串 obj
    2. Catalog是文件的根對象,定義了文件的結構,訪問權限

    3. Catalog應用了Pages對象,后者包含了頁數和Pages對象的引用信息

  • Xref table:包含了文件內所有PDF的位置信息(字節偏移量)

    1. Xref以兩個整數a b開頭 如:0 5,表示了obj是從0-4
    2. Xref中的每一個對象由3部分組成x,y,z
      1. x表示了相對于文件開頭的偏移量
      2. y表示了版本
      3. z屬于{n,f}中的一個,n表示in use,f表示free
  • Trailer:當一個PDF文件讀入內存,將從尾到頭進行處理。這就意味著,Trailer是PDF文檔中首先處理的內容,它包含對Catalog和Xref table的引用

PDF簽名工作原理

pdf簽名軟件,PDF簽名依賴于PDF的一項特殊的機制,叫做增量存儲(增量更新),允許修改PDF文件而不必改變之前的內容
在這里插入圖片描述
原始的文檔和這里的文檔是一樣的。通過對文檔進行簽名,利用增量存儲來添加以下內容:一個新的Catalog,一個簽名對象,一個新的Xref table引用了新對象,和一個新的Trailer包含了對舊的catalog或者新的catalog的引用,新的和舊的Xref的偏移量。

  • 新的Catalog:是對舊的Catalog的一個補充,增加了一個新的元素Perms,它定義了文檔中更改的限制。并引用了5 0的簽名對象
  • Signature對象:包含有哈希和簽名文檔的密碼算法信息。它還有一個Contents參數,其包含一個16進制編碼的PKCS7 blob,該blob存有證書信息,以及利用證書中公鑰對應私鑰創建簽名值。ByteRange 參數指定了PDF文件的哪些字節用作簽名計算的哈希輸入,并定義了2個整數元組:
    1. a,b: 從字節偏移量a開始,后續的b個字節作為哈希運算的第一個輸入。通常,a取值為0表示起始位置為文件頭部,偏移量b則取值為PKCS#7 blob的起始位置。(即從下圖中紅框部分就沒有算入加密)
    ![在這里插入圖片描述](https://img-blog.csdnimg.cn/20210413152246607.png
    2. c,d:通常,偏移量c為PKCS#7 blob的結束位置,而c d則指向PDF文件的最后一個字節的范圍,用作哈希運算的第二個輸入。即從下圖紅框部分之后開始加密
    在這里插入圖片描述
    4. 位于b和c之間建議不納入計算

攻擊方式

通用簽名偽造 USF

思想是控制簽名中的原始數據信息,使閱讀器程序在打開PDF文件時無法找到其驗證所需要的所有數據信息。而且這種操作不會被認為是信息錯誤,而會被判定為有效。

例如:攻擊者控制Signature中的Contents或ByteRange,可以直接刪除簽名,或者刪除簽名內容的起始位置信息

在這里插入圖片描述
在這里插入圖片描述

如果成功,視圖應用程序(或聯機驗證邏輯)將顯示一個面板,其中包含的PDF中的簽名有效,并且屬于特定的個人或實體


增量存儲攻擊 ISA

濫用了PDF中的合法功能,即允許PDF增加內容來更新(這項功能很有用處,例如存儲PDF注釋或者在編輯文件時添加新的頁面。)

receipt of your enquiry、主要思想:利用上述功能來將PDF的內容更改為攻擊想要的文本或是整個頁面。即可以用更新文檔的方式來修改整個文檔的結構或內容。因為PDF文件中的數字簽名可以精確的保護ByteRange中的文件內容,而由于增量存儲ISA會將Body Update追加到文章尾部,不在ByteRange的保護范圍內,以達到在簽名有效的情況下修改PDF內容

PDF規范并沒有禁止此操作,但簽名驗證應指明已簽名的文檔已經被篡改。
在這里插入圖片描述

若攻擊成功:將顯示新內容(正文更新)并應用程序不會注意到文檔已被修改或更新。


簽名包裝攻擊 SWA

主要思想:迫使驗證邏輯處理與應用邏輯不同的數據。

將原始簽名使用的范圍修改到文檔其他位置,并在已分配的位置插入新的內容,以此來定位簽名驗證的邏輯。攻擊的起點是控制ByteRange的值,允許簽名使用的范圍轉移到文檔不同的位置

在這里插入圖片描述

How to do it、具體攻擊步驟:

  1. (可選)刪除Contents中的零字節填充,以獲取更多的修改空間
  2. 通過操控c的值來重新定義ByteRange [a b c* d],使其指向文件中處于不同位置的第二個簽名部分
  3. 創建指向新對象的Xref Table,但是必須保證新的Xref Table的位置與之前的Xref Table的位置一致,該位置不可更改,因為它已被已經簽名的Trailer所引用
  4. 攻擊者注入惡意代碼,可以放在Xref Table之前或者之后都可,如若不進行第一步,則只能放在之后
  5. 一些PDF閱讀器要求在Xref Table值后插入Trailer才能正常讀取
  6. 攻擊者刪除在字節偏移c*處、由c和d定義的已簽名內容。值得注意的是,被操控的PDF文件并沒有以%%EOF結尾。一些驗證程序之所以會提示已簽名文件被修改,是由于簽名后面的%%EOF。為了繞過此需求,PDF文件無法正常關閉。但是,它仍然可以由其他閱讀器處理。

在這里插入圖片描述
SWA攻擊的變種:
在這里插入圖片描述

  1. 第一種變體:在第二步的時候將a=0,b=0,c=c*,d=b+d,即將原來簽名的第一部分全部移到第二部分里了
  2. 第二種變體:同第一種變體的思想,但是把b改為5,因為每個pdf文件的0-5的偏移量存儲的是pdf的版本信息,不會改變

綜上的三種攻擊中,SWA是最有效的,其次是ISA

pdf signature被攻擊的主要原因

  1. 標準沒有規定怎么去驗證一個簽名,也沒有具體示例,所以每個開發者都是用的自己的驗證邏輯,而不是最佳示范
  2. pdf瀏覽器的高容錯性,讓很多本是錯誤的文件,一樣可以被正常顯示

防止以上三種攻擊手段的算法例子

INPUT: PDFBytes, SigObj
// ByteRange is mandatory and must be well?formated
byteRange = SigObj.getByteRange
// Preventing USF:
if(byteRange == null OR byteRange.isEmpty)return false
// Parse byteRange
if(byteRange.length!=4)return false
foreach x in byteRange {if x!=instanceof(int)return false
}
a, b, c, d = byteRange
// BytRange must cover start of file
if(a!=0)return false;
// Ensure that more than zero bytes are protected in hashpart1
if(b≤0)return false
// Ensure that sencond hashpart starts after first hashpart
if(c≤b)
return false
// Ensure that more than zero bytes are protected in hashpart2
if(d≤0)
return false
// Preventing ISA. ByteRange must cover the entire file.
if((c+d)!=PDFBytes.length)
return false;
// The pkcs7 blob starts at byte offset (a+b) and goes to offset c
pkcs7Blob = PDFBytes[(a+b):c]
// Preventing USF. Pkcs7Blob value is not allowed to be null or empty.
if(pkcs7Blob == null OR pkcs7Blob.isEmpty)return false
// pkcs7Blob must be a hexadecimal string [0?9,a?f,A?F]
if(pkcs7Blob contains other chars than [0?9,a?f,A?F])
return false
// Parse the PKCS#7 Blob
sig, cert = pkcs7.parse(pkcs7Blob)
// Select (a+b) bytes from input PDF begining at byte a=0, i.e. 0 ... a+b?1
hashpart1=PDFBytes[a:(a+b)]
// Select (c+d) bytes from input PDF begining at byte c, i.e. c ... c+d?1
hashpart2=PDFBytes[c:(c+d)]
// Verify signature34returnpkcs7.verify(sig, cert, hashpart1||hashpart2)

參考:

  • 1 Trillion Dollar Refund– How To Spoof PDF Signatures ——CCS ’19, November 11–15, 2019, London, United Kingdom
  • https://www.pdf-insecurity.org/index.html

https://www.nshth.com/bcbj/338907.html
>

相关文章:

  • pdf翻譯網站
  • pdf簽名軟件
  • receipt of your enquiry
  • How to do it
  • 全球學術快報轉PDF
  • me too
  • paperblanks現貨絕版
  • documentary letter of credit
  • pdf翻譯網站,1 Trillion Dollar Refund – How To Spoof PDF Signatures——欺騙PDF簽名
  • 如何創建一個抽象類,創建具體的產品,并繼承產品抽象類
  • 主從庫理論知識-主從同步如何實現?
  • Tomcat環境變量配置,Mybatis的配置文件參數詳解
  • I Am You,POJ 3130 How I Mathematician Wonder What You Are! 半平面交
  • 要學vue需要學什么基礎知識,第一章 Vue基礎入門
  • win7下安裝win10,win10下安裝Ubuntu18.10雙系統
  • vmplayer怎么使用烏邦圖,烏邦圖環境安裝
  • 計算機專業要不要考研——寫的很棒
  • redisson看門狗原理,記錄一次redis漏洞攻擊
  • 任意波形發生器,基于單片機信號波形發生器系統設計-畢設課設
  • 嵌入式驅動,嵌入式Linux驅動大全問世,十年磨一劍,視頻!服務!新老客戶都有大折扣!
  • socket連接器v2下載,Netty(一)基礎socketchannel,Buffer,selector黏包 半包解決 實戰
  • 大一c語言程序設計筆記,吉林大學2013級大一下學期程序設計作業:同學通訊錄系統
  • 暑期小學生計算機培訓班,青島小學生學習編程暑假
  • 熊貓毛小喵喵去哪里了,小西貝、何小喵看熊貓之觀察者設計模式
  • 如何用c語言比較兩個數的大小,如何用C語言求兩個數的較大值
  • 輾轉相除法求最小公倍數的方法,更相減損術--最大公約數
  • 輾轉相除法求最小公倍數的方法,如何求出兩個整數的最大公約數
  • 李新義的書畫藝術,中國現代書畫家——譚奇中、李義象、高俊鵬等
  • 海底撈張勇名言,致張勇先生一封信:海底撈的“七宗罪”!
  • WPF學習(12)動畫
  • ui自動化測試工具,移動端UI自動化之appium的使用(二)
  • 爬蟲網站,Search For Free —— 新聞爬蟲及爬取結果的查詢網站
  • tenda騰達無線設置,騰達F6路由器無線中繼功能設置
  • 斐波那契數列、小青蛙跳臺階
  • OJ每日一練——小青蛙上臺階
  • 小青蛙貝葉斯
  • 小青蛙走臺階問題
  • MySQL數據庫下載,NAVICAT FOR MYSQL存儲過程