CAT文件數字簽名使用技巧
0x00 前言
Windows系統中的重要文件常常會被添加數字簽名,用來防止被篡改,部分白名單規則的判定也會基於數字簽名。
本文作為數字簽名研究系列文章的基礎內容,介紹兩種數字簽名的添加方法,分析CAT文件數字簽名的特點,並且糾正一名讀者對我文章的回復,地址如下:
《利用xwizard.exe載入dll》
基於我的測試,個人認為:移動位置後,CAT文件數字簽名不會失效
0x01 簡介
本文將要介紹以下內容:
· 生成證書的方法
· 將數字簽名添加在文件末尾的方法
· 將數字簽名保存在CAT文件中的方法
· 使用CAT數字簽名的文件特點
0x02 將數字簽名添加在文件末尾的方法(Authenticode)
曾在隱寫技巧的系列文章中研究過在數字簽名中隱藏payload的方法,地址如下:
《隱寫技巧——在PE文件的數字證書中隱藏Payload》
文中介紹過證書格式,在此不再贅述
向文件尾部添加數字簽名後,可通過文件屬性查看
實例:
C:WindowsSystem32consent.exe
自帶微軟數字簽名,如下圖
可通過powershell驗證數字簽名:
Get-AuthenticodeSignature .mimikatz.exe
也可以使用工具通過命令行查看數字簽名
使用signtool.exe查看:
signtool.exe verify /v C:WindowsSystem32consent.exe
如下圖
使用sigcheck.exe查看:
sigcheck.exe -q C:WindowsSystem32consent.exe /accepteula
如下圖
註:
signtool.exe:
可用於查看文件的數字簽名
安裝Visual Studio後包含SDK,其中可找到signtool.exe,位於C:Program FilesMicrosoft SDKsWindows
進入開發人員工具的cmd可直接調用signtool.exe
Windows 7 SDK下載地址:
https://www.microsoft.com/en-us/download/details.aspx?id=8279
sigcheck.exe:
可用於查看文件的數字簽名
下載地址:
https://docs.microsoft.com/zh-cn/sysinternals/downloads/sigcheck
本文相關文件已上傳至github,地址如下:
https://github.com/3gstudent/signtools
生成測試證書的命令如下:
makecert -n "CN=Microsoft Windows Test" -r -sv Root.pvk Root.cercert2spc Root.cer Root.spcpvk2pfx -pvk Root.pvk -pi 123456 -spc Root.spc -pfx Root.pfx -f
證書註冊:
(管理員許可權)
certmgr.exe -add -c Root.cer -s -r localmachine root
註:
細節可參考之前的文章《A dirty way of tricking users to bypass UAC》
簽名mimikatz.exe:
signtool sign /f Root.pfx /p 123456 mimikatz.exe
顯示數字簽名正常,如下圖
0x03 將數字簽名保存在CAT文件中的方法(catalog)
Windows系統中,有些文件通過文件屬性無法獲得其數字簽名信息,但是這些文件也包含數字簽名,這裡的數字簽名指的就是CAT(安全編錄)文件數字簽名(catalog signing)
簽名流程的直觀理解:
· 將文件作sha1加密後得到的hash值保存在CAT文件中(一個CAT文件可保存多個文件hash)
· 對該CAT文件添加數字簽名
· 將CAT文件添加到系統的安全編錄資料庫
· 這些文件也就有了數字簽名
實例:
C:WindowsSystem32catrootntph.cat
屬性-安全目錄-項目詳細信息-File,可以找到Hash值對應的文件
如下圖
通過文件屬性無法查看CAT數字簽名
實例:
C:WindowsSystem32xwizard.exe
自帶CAT格式的數字簽名,通過文件屬性無法查看CAT數字簽名
使用powershell無法獲得CAT文件數字簽名:
Get-AuthenticodeSignature C:WindowsSystem32xwizard.exe
如下圖
但可以使用signtool.exe和sigcheck.exe查看數字簽名
使用signtool.exe查看:
signtool.exe verify /pa /a /v C:WindowsSystem32xwizard.exe
如下圖
使用sigcheck.exe查看:
sigcheck.exe -q C:WindowsSystem32xwizard.exe /accepteula
如下圖
下面介紹如何使用CAT文件數字簽名
1、生成CAT文件
新建文本文檔cat.txt,內容如下:
[CatalogHeader]Name=makecat1.cat[CatalogFiles]ExeFile1=mimikatz.exe
註:
txt文件尾部需要一個空行,否則,在接下來的操作會報錯,提示文件無法找到
如下圖
使用makecat.exe生成cat文件:
makecat -v cat.txt
2、使用證書為CAT文件添加簽名
signtool sign /f Root.pfx /p 123456 makecat1.cat
註:
3、將cat文件添加到系統的安全編錄資料庫
(管理員許可權)
signtool catdb -v makecat1.cat
註:
刪除使用 -r參數:signtool catdb -r makecat1.cat
如果未添加到系統的安全編錄資料庫,簽名狀態為unsigned,如下圖
添加到系統的安全編錄資料庫相當於在目錄C:WindowsSystem32catroot添加文件makecat1.cat
刪除等價於刪除目錄C:WindowsSystem32catroot下對應的CAT文件makecat1.cat
使用signtool.exe獲取數字簽名:
signtool.exe verify /pa /a mimikatz.exe
使用sigcheck.exe獲取數字簽名:
sigcheck.exe -q mimikatz.exe /accepteula
移動位置後,簽名仍然有效
如下圖
驗證結論:移動位置後,CAT文件數字簽名不會失效
當然,利用帶有CAT文件數字簽名的xwizard.exe載入dll,在某種程度上說,能夠繞過應用程序白名單的攔截。
0x04 小結
本文介紹了兩種數字簽名的添加方法,分析CAT文件數字簽名的特點,對於可執行文件,通過Process Explorer可驗證兩種不同的數字簽名
如下圖
※Linux應急響應姿勢淺談
※美國FLIR熱感攝像頭預裝後門,且無法刪除
※使用FTP的系統控制後門作為C
※知名評論系統Disqus 2012年被黑,官方現在才發現用戶數據泄漏了
※Google:微軟優先給Windows 10修漏洞,讓舊版本系統用戶陷入危險之中
TAG:嘶吼RoarTalk |