您可能之前看到過我寫的類似文章,為什么還要重復撰寫呢?只是想更好地幫助初學者了解病毒逆向分析和系統安全,更加成體系且不破壞之前的系列,因此,我重新開設了這個專欄,準備系統整理和深入學習系統安全、逆向分析和惡意代碼檢測,“系統安全”系列文章會更加聚焦,更加系統,更加深入,也是作者的慢慢成長史,換專業確實挺難的,逆向分析也是塊硬骨頭,但我也試試,看看自己未來四年究竟能將它學到什么程度,漫漫長征路,偏向虎山行,享受程序,一起加油~
作者前文介紹了宏病毒相關知識,它仍然活躍于各個APT攻擊樣本中,具體內容包括宏病毒基礎原理、防御措施、自發郵件及APT28樣本分析,本文將詳細介紹什么是數字簽名,并采用Signtool工具對EXE檔案進行簽名,后續深入分析數字簽名的格式及PE病毒內容, 這些基礎性知識不僅和系統安全相關,同樣與我們身邊常用的軟體、檔案、作業系統緊密聯系,希望這些知識對您有所幫助,更希望大家提高安全意識,安全保障任重道遠,本文參考了參考文獻中的文章,并結合自己的經驗和實踐進行撰寫,也推薦大家閱讀參考文獻,
文章目錄
- 一.PE檔案的數字簽名
- 1.概念普及
- 2.Github網站證書驗證程序
- 二.阮一峰老師告訴大家什么是數字簽名
- 三.Signtool簽名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檔案的數字簽名
1.概念普及
(1) PE檔案
PE檔案的全稱是Portable Executable,意為可移植的可執行的檔案,常見的EXE、DLL、OCX、SYS、COM都是PE檔案,PE檔案是微軟Windows作業系統上的程式檔案(可能是間接被執行,如DLL),后續文章會詳細分析PE檔案格式,
(2) 為什么要對PE檔案進行數字簽名呢?
- 防篡改:通過對數字簽名的驗證,保證檔案未被非法篡改,
- 降低誤報:安全軟體通過驗證檔案是否有正規廠商的數字簽名來降低誤報,
(3) PE檔案數字簽名及驗證程序
簽名:
- 軟體發布者使用散列演算法(如MD5或SHA)計算PE檔案的散列值,
- 軟體發布者使用私鑰對散列值進行簽名得到簽名資料,
- 將簽名私鑰對應的公鑰和簽名資料等以證書的形式附加在PE檔案之中,形成經過數字簽名的PE檔案,
- 軟體發布者將經過數字簽名的PE檔案進行發布,
驗證:
- 從PE檔案證書中提取軟體發布者的公鑰、使用的散列演算法、簽名演算法、原始散列值的簽名資料,
- 使用提取的公鑰和對應簽名驗證演算法將簽名資料還原為原始PE檔案的原始散列值,
- 對現有PE檔案使用同樣的散列演算法計算出對應的散列值,
- 對比兩個散列值是否一致,從而判斷資料是否被破壞和篡改,

(4) PE檔案數字簽名的總體結構
PE檔案數字簽名資訊存放在Certificate Table位置,同時PE檔案可選檔案頭DataDirecotry第5項記錄檔案偏移及大小,
下一篇文章作者嘗試詳細講解PE檔案結構及簽名決議,

使用PEView查看簽名前后對比圖,可以看到Certificate Table存盤相關簽名資訊,

(5) PE檔案數字簽名查看
這里以Zoomit.exe程式為例,我們可以看到經過數字簽名后的PE檔案還會多出一個“數字簽名”的屬性,點擊詳細資訊可以查看對應的證書,

對應的證書資訊及證書路徑如下圖所示,包括簽名演算法、哈希演算法、有效期、頒發者資訊等,

(6) 微軟數字簽名證書查看
接著,我帶領大家看看Windows證書,運行中輸入“certmgr.msc”,可以看到這里面有5個系統默認的ECC簽名的根證書,如下圖所示,

我們隨意匯出其中一個根證書,匯出直接選擇Base64編碼那個就行,

可以看到匯出的ECC密鑰證書如下圖所示,包括證書的有效期等資訊,這就是微軟在實作橢圓曲線加密(ECC)演算法的數字證書,位于CryptoAPI.dll檔案,也是被我們利用來偽造可信任來源的簽名漏洞,

(7) 數字簽名常用演算法及應用領域
數字簽名常用演算法包括:
- RSA數字簽名演算法
基于大整數分解問題,MD5、SHA - DSA數字簽名演算法
基于離散對數問題 - ECDSA橢圓曲線數字簽名演算法
ECC+DSA,橢圓加密演算法,屬于DSA的一個變種,基于橢圓曲線上的離散對數問題
其應用領域包括:
- PE檔案數字簽名
- HTTPS數字簽名
- 電子郵件數字簽名
- Office檔案數字簽名
- 代碼數字簽名
2.Github網站證書驗證程序
接著看看Github網站進行微軟證書驗證的程序,
- 在Windows系統訪問一個網站(例Github.com)時,該網站會向Windows系統發送由第三方權威機構(CA)簽署的網站證書,

- Windows系統則會驗證該證書是否由CA頒發,若驗證通過,則Windows系統與網站成功建立TLS鏈接,

- 為了方便下一次更快的訪問,Windows將驗證成功的證書放入記憶體中一塊Certificate Cache(證書快取)中,在下一次校驗時,如果該證書存在于快取中,則直接取快取中的值進行校驗,這里利用CVE-2020-0601,

- 在成功快取證書資料后,根據下面描述的Windows證書快取機制,惡意網站可以偽造虛假的網站(例github.com)證書且通過Windows驗證,將自身偽裝成合法網站,

- 當 Windows 接收到新的證書時,Windows 將新接收的證書與已快取證書的證書的公鑰進行遍歷對比,尋找匹配的值,

- 偽造的惡意證書與Windows系統中的快取證書有同樣的公鑰,但Curve項沒有在校驗范圍內,所以可以通過構造自定義Curve來偽造證書,使得證書驗證流程依然成立,但通過驗證的證書已經不是之前成功驗證的安全證書,

在第23篇文章中,我們將詳細復現微軟證書CVE-2020-0601漏洞,
二.阮一峰老師告訴大家什么是數字簽名
參考文章:
數字簽名是什么? - 阮一峰
What is a Digital Signature? - 原始網站
寫到這里,您可能還是很疑惑“什么是數字簽名”?下面我通過阮一峰老師的博客進行講解,個人認為這是一篇講得比較清晰的原理文章,同時也包含了網路安全中加密解密、資訊傳輸等知識,
(1) 假設鮑勃有兩把鑰匙,一把是公鑰,另一把是私鑰,

(2) 鮑勃把公鑰送給他的朋友們----帕蒂、道格、蘇珊----每人一把,

(3) 蘇珊要給鮑勃寫一封保密的信,她寫完后用鮑勃的公鑰加密,就可以達到保密的效果,

(4) 鮑勃收信后,用私鑰解密,就看到了信件內容,這里要強調的是,只要鮑勃的私鑰不泄露,這封信就是安全的,即使落在別人手里,也無法解密,

(5) 鮑勃給蘇珊回信,決定采用"數字簽名",他寫完后先用Hash函式,生成信件的摘要(digest),

(6) 然后,鮑勃使用私鑰,對這個摘要加密,生成"數字簽名"(signature),

(7) 鮑勃將這個簽名,附在信件下面,一起發給蘇珊,

(8) 蘇珊收信后,取下數字簽名,用鮑勃的公鑰解密,得到信件的摘要,由此證明,這封信確實是鮑勃發出的,

(9) 蘇珊再對信件本身使用Hash函式,將得到的結果,與上一步得到的摘要進行對比,如果兩者一致,就證明這封信未被修改過,

(10) 復雜的情況出現了,道格想欺騙蘇珊,他偷偷使用了蘇珊的電腦,用自己的公鑰換走了鮑勃的公鑰,此時,蘇珊實際擁有的是道格的公鑰,但是還以為這是鮑勃的公鑰,因此,道格就可以冒充鮑勃,用自己的私鑰做成"數字簽名",寫信給蘇珊,讓蘇珊用假的鮑勃公鑰進行解密,

(11) 后來,蘇珊感覺不對勁,發現自己無法確定公鑰是否真的屬于鮑勃,她想到了一個辦法,要求鮑勃去找"證書中心"(certificate authority,簡稱CA),為公鑰做認證,證書中心用自己的私鑰,對鮑勃的公鑰和一些相關資訊一起加密,生成"數字證書"(Digital Certificate),

(12) 鮑勃拿到數字證書以后,就可以放心了,以后再給蘇珊寫信,只要在簽名的同時,再附上數字證書就行了,

(13) 蘇珊收信后,用CA的公鑰解開數字證書,就可以拿到鮑勃真實的公鑰了,然后就能證明"數字簽名"是否真的是鮑勃簽的,

(14) 下面,我們看一個應用"數字證書"的實體:https協議,這個協議主要用于網頁加密,首先,客戶端向服務器發出加密請求,

(15) 服務器用自己的私鑰加密網頁以后,連同本身的數字證書,一起發送給客戶端,

(16) 客戶端(瀏覽器)的"證書管理器",有"受信任的根證書頒發機構"串列,客戶端會根據這張串列,查看解開數字證書的公鑰是否在串列之內,

(17) 如果數字證書記載的網址,與你正在瀏覽的網址不一致,就說明這張證書可能被冒用,瀏覽器會發出警告,

(18) 如果這張數字證書不是由受信任的機構頒發的,瀏覽器會發出另一種警告,如果數字證書是可靠的,客戶端就可以使用證書中的服務器公鑰,對資訊進行加密,然后與服務器交換加密資訊,


數字簽名是為了保證資料完整性,通過它可以判斷資料是否被篡改,私鑰加密完的資料所有知道公鑰的都可以解密,這樣不安全,私鑰加密的作用是為了確認身份,用對應的公鑰解密摘要,則證明摘要來自誰,起到簽名的作用,
三.Signtool簽名PE檔案
- 逆向分析:https://github.com/eastmountyxz/SystemSecurity-ReverseAnalysis
- 軟體安全:https://github.com/eastmountyxz/Software-Security-Course

該test.exe程式后續文章也會分享,均上傳至Github,

第一步,通過makecert.exe生成需要的證書,生成兩個檔案分別是test.cer和test.PVK,
cd SignTool
makecert -$ "individual" -r /sv "test.PVK" /n "CN=Windows,E=microsoft,O=微軟" test.cer

創建程序中需要輸入私鑰密碼,這里設定為“123456789”,

第二步,查看證書資訊,如果未信任需要點擊“安裝證書”,

安裝并信任該證書,

第三步,利用signcode.exe工具進行資料簽名,選擇需要簽名的“test.exe”程式,

第四步,自動選擇自定義選項,然后點擊從檔案中選擇test.cer檔案,test.cer檔案在第一個步驟你生成的目錄中,然后下一步,

第五步,點擊瀏覽按鈕,添加檔案test.PVK,test.PVK檔案也是在第一步生成的目錄中,點擊下一步,哈希演算法可以選md5,也可以選sha1,點擊下一步,

第六步,默認點擊下一步,出現資料描述框,自己可以填寫,也可以不填,點擊下一步,

第七步,填寫時間戳服務器URL:http://timestamp.wosign.com/timestamp,也可以不選添加時間戳,點擊下一步,完成,彈出簽名成功框,

第八步,此時test.exe檔案完成數字簽名,打開該exe檔案屬性,如下圖所示,可以看到簽名相關資訊,注意,該數字簽名正常且頒發者為Windows,

最后我們使用PEView軟體打開PE檔案,可以看到簽名前和簽名后的結構存在“CERTIFICATE Table”區別,

下一篇文章我們將詳細分析數字簽名的結構,

四.總結
文章寫到這里,就介紹完畢,希望文章對您有所幫助,這篇文章主要講解:
- PE檔案數字簽名
- 分享阮一峰老師的博客,告訴大家什么是數字簽名
- 結合SignTool工具對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 2021-02-07 星期天 凌晨夜于貴陽 http://blog.csdn.net/eastmount/ )
參考文獻:
[1] 武大《軟體安全》課程
[2] (強推) [網路安全自學篇] 四十六.微軟證書漏洞CVE-2020-0601 (上)Windows驗證機制及可執行檔案簽名復現
[3] (強推) 數字簽名是什么? - 阮一峰
[4] (強推) What is a Digital 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/257755.html
標籤:其他
