您可能之前看到過我寫的類似文章,為什么還要重復撰寫呢?只是想更好地幫助初學者了解病毒逆向分析和系統安全,更加成體系且不破壞之前的系列,因此,我重新開設了這個專欄,準備系統整理和深入學習系統安全、逆向分析和惡意代碼檢測,“系統安全”系列文章會更加聚焦,更加系統,更加深入,也是作者的慢慢成長史,換專業確實挺難的,逆向分析也是塊硬骨頭,但我也試試,看看自己未來四年究竟能將它學到什么程度,漫漫長征路,偏向虎山行,享受程序,一起加油~
作者前文介紹了什么是數字簽名,并采用Signtool工具對EXE檔案進行簽名,后續深入分析數字簽名的格式及PE病毒內容,這篇文章將詳細決議數字簽名,采用Signtool工具對EXE檔案進行簽名,接著利用Asn1View、PEVie、010Editor等工具進行資料提取和分析,這是全網非常新的一篇文章,希望對您有所幫助, 這些基礎性知識不僅和系統安全相關,同樣與我們身邊常用的軟體、檔案、作業系統緊密聯系,希望這些知識對您有所幫助,更希望大家提高安全意識,安全保障任重道遠,本文參考了參考文獻中的文章,并結合自己的經驗和實踐進行撰寫,也推薦大家閱讀參考文獻,
文章目錄
- 一.PE檔案數字簽名程序
- 1.基礎概念
- 2.數字簽名操作
- 二.PE檔案簽名資料提取
- 1.PEView查看簽名資訊
- 2.010Editor提取簽名資料
- 三.PE檔案簽名資料分析
- 1.ASN1Dump分析簽名資料
- 2.ASN1View提取證書及分析資料
- 四.PE簽名檔案新增資料
- 五.總結
從2019年7月開始,我來到了一個陌生的專業——網路空間安全,初入安全領域,是非常痛苦和難受的,要學的東西太多、涉及面太廣,但好在自己通過分享100篇“網路安全自學”系列文章,艱難前行著,感恩這一年相識、相知、相趣的安全大佬和朋友們,如果寫得不好或不足之處,還請大家海涵!
接下來我將開啟新的安全系列,叫“系統安全”,也是免費的100篇文章,作者將更加深入的去研究惡意樣本分析、逆向分析、內網滲透、網路攻防實戰等,也將通過在線筆記和實踐操作的形式分享與博友們學習,希望能與您一起進步,加油~
- 推薦前文:網路安全自學篇系列-100篇
作者的github資源:
- 逆向分析:https://github.com/eastmountyxz/SystemSecurity-ReverseAnalysis
- 網路安全:https://github.com/eastmountyxz/NetworkSecuritySelf-study
前文分析:
- [系統安全] 一.什么是逆向分析、逆向分析基礎及經典掃雷游戲逆向
- [系統安全] 二.如何學好逆向分析及呂布傳游戲逆向案例
- [系統安全] 三.IDA Pro反匯編工具初識及逆向工程解密實戰
- [系統安全] 四.OllyDbg動態分析工具基礎用法及Crakeme逆向
- [系統安全] 五.OllyDbg和Cheat Engine工具逆向分析植物大戰僵尸游戲
- [系統安全] 六.逆向分析之條件陳述句和回圈陳述句原始碼還原及流程控制
- [系統安全] 七.逆向分析之PE病毒原理、C++實作檔案加解密及OllyDbg逆向
- [系統安全] 八.Windows漏洞利用之CVE-2019-0708復現及藍屏攻擊
- [系統安全] 九.Windows漏洞利用之MS08-067遠程代碼執行漏洞復現及深度提權
- [系統安全] 十.Windows漏洞利用之SMBv3服務遠程代碼執行漏洞(CVE-2020-0796)復現
- [系統安全] 十一.那些年的熊貓燒香及PE病毒行為機理分析
- [系統安全] 十二.熊貓燒香病毒IDA和OD逆向分析(上)病毒初始化
- [系統安全] 十三.熊貓燒香病毒IDA和OD逆向分析(中)病毒釋放機理
- [系統安全] 十四.熊貓燒香病毒IDA和OD逆向分析–病毒釋放程序(下)
- [系統安全] 十五.Chrome瀏覽器保留密碼功能滲透決議、藍屏漏洞及某音樂軟體漏洞復現
- [系統安全] 十六.PE檔案逆向基礎知識(PE決議、PE編輯工具和PE修改)
- [系統安全] 十七.Windows PE病毒概念、分類及感染方式詳解
- [系統安全] 十八.病毒攻防機理及WinRAR惡意劫持漏洞(腳本病毒、自啟動、定時關機、藍屏攻擊)
- [系統安全] 十九.宏病毒之入門基礎、防御措施、自發郵件及APT28宏樣本分析
- [系統安全] 二十.PE數字簽名之(上)什么是數字簽名及Signtool簽名工具詳解
- [系統安全] 二十一.PE數字簽名之(中)Signcode、PEView、010Editor、Asn1View工具用法
宣告:本人堅決反對利用教學方法進行犯罪的行為,一切犯罪行為必將受到嚴懲,綠色網路需要我們共同維護,更推薦大家了解它們背后的原理,更好地進行防護,該樣本不會分享給大家,分析工具會分享,(參考文獻見后)
一.PE檔案數字簽名程序
1.基礎概念
PE檔案數字簽名能夠有效保證檔案未被非法篡改,安全軟體通過驗證檔案是否有正規廠商的數字簽名來降低誤報,其基本流程如下圖所示:
簽名:
- 軟體發布者使用散列演算法(如MD5或SHA)計算PE檔案的散列值,
- 軟體發布者使用私鑰對散列值進行簽名得到簽名資料,
- 將簽名私鑰對應的公鑰和簽名資料等以證書的形式附加在PE檔案之中,形成經過數字簽名的PE檔案,
- 軟體發布者將經過數字簽名的PE檔案進行發布,
驗證:
- 從PE檔案證書中提取軟體發布者的公鑰、使用的散列演算法、簽名演算法、原始散列值的簽名資料,
- 使用提取的公鑰和對應簽名驗證演算法將簽名資料還原為原始PE檔案的原始散列值,
- 對現有PE檔案使用同樣的散列演算法計算出對應的散列值,
- 對比兩個散列值是否一致,從而判斷資料是否被破壞和篡改,

PE檔案數字簽名所使用的工具包括:
- makecert.exe:生成數字簽名證書
- signcode.exe:數字簽名工具
- test.exe:被數字簽名的目標PE檔案
- test.cer:數字證書檔案
- test.PVK:數字簽名的私鑰檔案

我們首先需要通過makecert.exe工具生成證書test.cer和私鑰檔案test.PVK,接著呼叫signcode.exe工具對目標PE檔案(test.exe)進行數字簽名,其中,通過makecert.exe生成需要的證書常見引數如下:
- -r: 自簽名
- -n: 證書名稱,格式為-n “CN=名稱, E=Email,O=組織名稱,C=國家, S=省份(州), P=縣城”
- -a: 指定散列演算法,其值必須是md5(默認值)或SHA1
- -$: 指定證書的簽名權限,其值必須是commercial(商業軟體)或individual(個人軟體)
- -b: 證書有效期的開始時間,格式為mm/dd/yyyy
- -e: 證書有效期的結束時間,格式為mm/dd/yyyy
Error: Invalid algorithm
Usage: MakeCert [ basic|extended options] [outputCertificateFile]
Extended Options
-sc <file> Subject's certificate file
-sv <pvkFile> Subject's PVK file; To be created if not present
-ic <file> Issuer's certificate file
-ik <keyName> Issuer's key container name
-iv <pvkFile> Issuer's PVK file
-is <store> Issuer's certificate store name.
-ir <location> Issuer's certificate store location
<CurrentUser|LocalMachine>. Default to 'CurrentUser'
-in <name> Issuer's certificate common name.(eg: Fred Dews)
-a <algorithm> The signature algorithm
<md5|sha1>. Default to 'md5'
-ip <provider> Issuer's CryptoAPI provider's name
-iy <type> Issuer's CryptoAPI provider's type
-sp <provider> Subject's CryptoAPI provider's name
-sy <type> Subject's CryptoAPI provider's type
-iky <keytype> Issuer key type
<signature|exchange|<integer>>.
-sky <keytype> Subject key type
<signature|exchange|<integer>>.
-d <name> Display name for the subject
-l <link> Link to the policy information (such as a URL)
-cy <certType> Certificate types
<end|authority|both>
-b <mm/dd/yyyy> Start of the validity period; default to now.
-m <number> The number of months for the cert validity period
-e <mm/dd/yyyy> End of validity period; defaults to 2039
-h <number> Max height of the tree below this cert
-r Create a self signed certificate
-nscp Include netscape client auth extension
-eku <oid[<,oid>]> Comma separated enhanced key usage OIDs
-? Return a list of basic options
-! Return a list of extended options
2.數字簽名操作
第一步,打開CMD呼叫makecert.exe并輸入命令生成證書檔案,
引數表示自簽名、個人軟體、授權者為YXZ、組織單位是WHU、國家及省份,散列演算法采用md5,有效期是2020-03-16到2030-01-01,
makecert -r -$ "individual" /sv "test.PVK" -n "CN=YXZ,O=WHU,C=China,S=Hubei"
-a md5 -b 03/16/2020 -e 01/01/2030 test.cer

需要注意設定密碼如“123456”,成功之后,可以看到新增加的兩個證書和私鑰檔案,

第二步,雙擊test.cer點擊“安裝證書”,并設定信任根證書機構,

信任之后,此時的證書是受信任且合法的,查看證書詳細資訊,能夠看到簽名演算法md5RSA、散列演算法md5、頒發者資訊及有效期等,如下圖所示,

第三步,利用signcode.exe工具進行資料簽名,
選擇需要加密的“test02.exe”檔案,

選擇我們生成的數字證書“test.cer”和私鑰檔案“test.PVK”,

注意,這里的散列演算法選擇“SHA1”,這里的散列演算法是PE檔案的簽名資訊, 而之前makecert.exe設定的md5是證書的散列演算法,

暫時不設定時間戳,最終成功為“test02.exe”進行數字簽名,

第四步,打開test02.exe檔案屬性,可以看到它增加了一個“數字簽名”的區域,并且能夠看到此數字簽名是正常的及詳細資訊,

第五步,我們采用PEView打開已簽名和未簽名的PE檔案對比,發現CERTIFICATE Table區域為前面資訊,

注意:圖中PPT均為作者制作,相關視頻在網易云中查看,
二.PE檔案簽名資料提取
PE檔案數字簽名資訊存放在Certificate Table位置,同時PE檔案可選檔案頭DataDirecotry第5項記錄檔案偏移及大小,下圖為PE檔案數字前面的PKCS#7格式,
參考文獻:https://docs.microsoft.com/zh-cn/windows/win32/debug/pe-format

1.PEView查看簽名資訊
第一步,使用PEView查看簽名的test02.exe檔案,可以看到Certificate Table存盤相關簽名資訊,
檔案開始位置:00000A00(長度:488H)
- 表項長度:4位元組,頭部和簽名資料的總長度
- 證書版本:2位元組,常見0x0200表示WIN_CERT_REVISION_2
- 證書型別:2位元組,常見0x0002表示包含PKCS#7的SignData結構
- SignedData:包含PE檔案Hash值的簽名資料、軟體發布者公鑰,選用的簽名及散列演算法等,(在檔案中為ASN.1編碼)

對應的結構:

第二步,在PE檔案可選檔案頭DataDirecotry第5項查看檔案簽名資訊的偏移及大小,
此時的偏移地址是“00000A00”、大小為488H,而未前面的PE檔案其值均為0,

第三步,wRevision表示證書的版本號,wCertificateType表示證書型別,其值為0x0002,表示包含PKCS#7的SignedData結構,接下來我們對所提取的簽名資料,就需要用該格式進行決議,


2.010Editor提取簽名資料
第一步,通過010Editor打開簽名后的test02.exe檔案,

第二步,這里推薦讀者在010Editor中匯入PE檔案決議模板,更方便讀者對PE檔案的決議,

模板運行結果如下圖所示,我們可以查看各個區域的資訊,后一篇文章將講解PE檔案的存盤格式,

第三步,通過運行模板找到數字簽名的偏移地址0A00h和大小488h,

第四步,定位到簽名偏移地址00000A00,Certificate Table從第9個位元組開始后為簽名資訊,將其復制另存為另一個檔案,如“test02.dat”,

此時我們的簽名資訊成功匯出,后續需要進行資料分析,
三.PE檔案簽名資料分析
PKCS#7 微軟官方檔案
一個 PKCS#7 SignedData結構包括PE檔案的哈希值,一個被軟體出版廠商的私鑰創建的簽名,和將軟體出版廠商的簽名密鑰和法人代表進行系結的(系列)X.509 v3 證書,PKCS#7 1.5 版本規范定義了如下關于 SignedData 的 ASN.1(抽象語法符號)結構:

注意,匯出的“test02.dat”簽名資料為 ASN.1抽象結構,需要采用ASN1View或ASN1Dump進行決議,其效果如下圖所示:

1.ASN1Dump分析簽名資料
第一步,呼叫ASN1Dump打開“test02.dat”決議基礎資料,
每個欄位有對應的flag,比如:
- 指定SignedData結構
值為“1.2.840.113549.1.7.2”,表示采用PKCS#7結構 - 生成簽名的哈希演算法
MD5:1.2.840.113549.2.5
SHA1:1.3.14.3.2.26
SHA256 2.16.840.1.101.3.4.2.1 - 簽名屬性
SPC:1.3.6.1.4.1.311.2.1.4

第二步,獲取證書頒發者資訊,包括md5withRSA簽名、證書頒發者YXZ、組織WHU、國家及省份,
每塊資料通常有一個標記變數,標記變數對應有相關值,比如頒發者標記2.5.4.3和頒發者YXZ、散列演算法和散列值等,

第三步,其他相關資訊,

核心資料包括:
- 散列演算法
- 摘要資料
- 公鑰資料
- 簽名后資料

注意,RSA簽名后的資料和公鑰值會還原出來第一個hash值,摘要資料和散列演算法將計算第二個hash值,如果兩個值一致,則表示該PE檔案在傳輸程序中未被篡改或破壞,且受信任;否則已經被破壞,

2.ASN1View提取證書及分析資料
第一步,回顧我們前面的簽名資訊和證書資訊,如下圖所示,PE文章簽名資訊的散列演算法是SHA1、簽名演算法是RSA,簽名證書的散列演算法是MD5,

第二步,采用ASN1View打開“test02.dat”,
主要由三部分組成,左邊是樹形ASN1層次結構,右上部分是地址、資料和值,右下部分是對應的決議結構,接著回到最早的簽名結構圖,我們分別對每部分資料進行分析,

第三步,分析Contentinfo部分資料,
該部分主要存盤PE檔案的hash值、以及標記變數、散列演算法等,

比如sha1散列演算法,

第四步,分析Certificates部分資料,
該部分主要存盤證書相關資訊,包括證書發布者、證書時間戳等資訊,注意,該部分內容可以直接匯出,再和“test02.exe”的數字證書進行對比,

比如省份“Hubei”,

接下來,我們需要匯出該部分的證書資訊,下圖的前4個位元組為地址和大小,我們從“30 82”開始復制,這里采用010Editor工具復制,

第五步,采用010Editor匯出證書部分資料,并進行對比實驗,

對比從010Editor匯出的“output.cer”證書和“test02.exe”數字簽名資訊,發現是一致的(包括公鑰),該實驗也證明了簽名資料的第二部分為證書資訊,

第六部分,分析Signerinfos部分資料,
該部分主要存盤簽名使用者的資訊、簽名的hash、時間戳、UTC時間、摘要資訊、簽名演算法等,

如下圖所示,第三部分的長度為360,從“30 82”開始為第三部分的具體值,

重要的值包括:
- 散列演算法sha1

- 摘要資料:標記為messageDigest,對應的值存盤在該節點的SET部分

- RSA簽名后的資料

四.PE簽名檔案新增資料
這里我提出一個問題:惡意軟體是否能隱藏合法證書并進行簽名呢?PE簽名檔案是否能新增資料而不影響簽名的效果呢?
Chrome瀏覽器中簽名目錄曾附加資料(配置資料或許可證資訊),如GotoMyPc、PowerGrep、RegexBuddy等,那么我們是否也能完成相關的實驗呢?
參考文獻:https://blog.didierstevens.com/2013/08/13/a-bit-more-than-a-signature/

當我們修改PE檔案的簽名資料或新增錯誤資料時,該PE檔案的簽名資訊會顯示被破壞,如何有效的新增資料呢?下面開始我們的實驗,

第一步,用010Editor打開已簽名的“test02.exe”檔案,并匯入PE模板,

第二步,修改PE檔案數字簽名的Certificate Table大小,我們將488h修改為498h,相當于增加16h,

第三步,并且在數字簽名的末尾增加16h內容
需要注意,增加的位元組為8的倍數,

第四步,查看“test02.exe”屬性,發現數字簽名仍然存在且正常,

最終我們成功的在數字簽名后增加資訊,并且沒有破壞數字簽名,如果我們將惡意代碼隱藏在該數字簽名中,是不是其危害更大,如果能繞過殺毒軟體并進行相關的hook或植入,是不是非常可怕呢?
五.總結
文章寫到這里,就介紹完畢,本文主要講解PE檔案數字簽名,并對其進行詳細決議,屬于系統安全和PE逆向相關知識,希望對您有所幫助,內容包括:
- PE檔案數字簽名程序
- PE檔案簽名資料提取
- PE檔案簽名資料分析
- PE簽名檔案新增資料
文章同時也加深了讀者對相關PE決議工具的使用理解,包括:
- PEView
- 010Editor及模板
- makecert
- signcode
- ASN1Dump
- ASN1View
后續將學習PE檔案結構知識、圖示修改、對話框分析、EXE決議、加殼解密等,希望這系列文章對您有所幫助,同時真的感覺自己技術好菜,要學的知識好多,從網路安全到系統安全,從木馬病毒到后門劫持,從惡意代碼到溯源分析,從滲透工具到二進制工具,還有Python安全、安全論文、黑客比賽和漏洞分享,未知攻焉知防,人生漫漫其路遠兮,作為初學者,自己真是爬著前行,感謝很多人的幫助,繼續爬著,繼續加油!
歡迎大家討論,是否覺得這系列文章幫助到您!如果存在不足之處,還請海涵,任何建議都可以評論告知讀者,共勉~
- 逆向分析:https://github.com/eastmountyxz/SystemSecurity-ReverseAnalysis
- 網路安全:https://github.com/eastmountyxz/NetworkSecuritySelf-study
2020年8月18新開的“娜璋AI安全之家”,主要圍繞Python大資料分析、網路空間安全、人工智能、Web滲透及攻防技術進行講解,同時分享CCF、SCI、南核北核論文的演算法實作,娜璋之家會更加系統,并重構作者的所有文章,從零講解Python和安全,寫了近十年文章,真心想把自己所學所感所做分享出來,還請各位多多指教,真誠邀請您的關注!謝謝,
(By:Eastmount 2020-02-09 晚上7點寫于貴陽 http://blog.csdn.net/eastmount )
參考文獻:
[1] 武大《軟體安全》課程
[2] [網路安全自學篇] 五十七.PE檔案逆向之什么是數字簽名及Signtool簽名工具詳解(一)
[3] http://www.microsoft.com/whdc/winlogo/drvsign/Authenticode_PE.mspx
[4] https://blog.didierstevens.com/2013/08/13/a-bit-more-than-a-signature/
[5] 對Windows 平臺下PE檔案數字簽名的一些研究 - DoveFeng
[6] https://docs.microsoft.com/zh-cn/windows/win32/debug/pe-format
[7] 哈希 HASH·數字簽名 - Phant
[8] 惡意檔案分析系統中的數字簽名驗證 - 綠盟科技
[8] [翻譯]Windows PE檔案中的數字簽名格式 - 看雪銀雁冰大神
[9] PE檔案數字簽名工具 - ahuo
[10] PE檔案決議-例外處理表與數字簽名 - zhyulo
[11] Authenticode簽名偽造——PE檔案的簽名偽造與簽名驗證劫持 - 嘶吼RoarTalk
[12] 數字簽名 - CTF Wiki
[13] 數字簽名演算法介紹和區別 - infiniSign
[14] [求助]關于PE檔案的數字簽名 - 看雪論壇
[15] 區塊鏈:數字簽名是什么?- ChinaKingKong
[16] 校驗檔案數字簽名的合法性(VerifyPE) - ahuo
[17] 數字簽名 - shinymood
[18] 惡意檔案分析系統中的數字簽名驗證 - 百度文庫
[19] 如何判斷一個檔案是否已經有數字簽名 - CSDN論壇
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/258370.html
標籤:其他
上一篇:aliyun-oss-01
