如何禁用軟件DLL劫持(Disable DLL Hijacking)
來(lái)源:吾愛(ài)破解論壇
時(shí)間:2021-10-16
前言
越來(lái)越多的木馬使用DLL劫持功能進(jìn)行加載,大家也經(jīng)常做補(bǔ)丁使用DLL劫持功能進(jìn)行破解,有沒(méi)有想過(guò)如何進(jìn)行防護(hù)了?本文介紹通過(guò)修改文件manifest屬性進(jìn)行定向位置加載和動(dòng)態(tài)加載簽名校驗(yàn)來(lái)解決劫持問(wèn)題,給開(kāi)發(fā)者提供一些防護(hù)思路,加強(qiáng)軟件保護(hù),防止被劫持利用。
介紹
木馬:如早期的犇牛木馬,使用偽裝LPK.DLL、USP10.DLL系統(tǒng)DLL進(jìn)行劫持加載傳播感染,到如今各種流氓軟件和APT組織使用DLL劫持正常軟件繞過(guò)安全軟件攔截,如使用偽裝chrome.dll劫持Chrome.exe來(lái)實(shí)現(xiàn)加載,其中比較知名APT組織海蓮花(OceanLotus)最為擅長(zhǎng)。
破解補(bǔ)?。?/span>Windows平臺(tái)加密殼發(fā)展到如今階段,脫殼成本提升和自校驗(yàn)的加強(qiáng),已經(jīng)很少有直接通過(guò)文件Patch進(jìn)行補(bǔ)丁破解了,基本都開(kāi)始使用內(nèi)存修改的方式進(jìn)行補(bǔ)丁,相對(duì)于傳統(tǒng)的啟動(dòng)進(jìn)程再修改內(nèi)存的方式,DLL劫持修改內(nèi)存更為方便,DLL劫持補(bǔ)丁已經(jīng)成為主流的破解補(bǔ)丁存在方式了。為什么可以進(jìn)行DLL劫持了,本文不再贅述,可以參看微軟官方的介紹:https://docs.microsoft.com/en-us/windows/win32/dlls/dynamic-link-library-search-order。
防護(hù)方法
1、對(duì)于系統(tǒng)DLL,不通過(guò)修改本機(jī)KnownDLLs進(jìn)行單機(jī)防護(hù),而是通過(guò)修改文件manifest屬性進(jìn)行定向加載DLL來(lái)解決通用系統(tǒng)DLL劫持問(wèn)題,開(kāi)發(fā)者可以看微軟的manifest介紹:
>https://docs.microsoft.com/en-us/windows/win32/sbscs/application-manifests。
比如我們給程序添加以下代碼
復(fù)制代碼 隱藏代碼
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assemblymanifestVersion="1.0"xmlns="urn:schemas-microsoft-com:asm.v1">
<filename="winmm.dll"loadFrom="%SystemRoot%\system32\winmm.dll" />
<filename="lpk.dll"loadFrom="%SystemRoot%\system32\lpk.dll" />
<filename="version.dll"loadFrom="%SystemRoot%\system32\version.dll" />
</assembly>
編譯成功后再進(jìn)行winmm.dll、lpk.dll和version.dll劫持,就會(huì)無(wú)效了,這里只添加了部分DLL,可以根據(jù)自己程序所需,把對(duì)應(yīng)所有的導(dǎo)入表中的系統(tǒng)DLL都加入即可。對(duì)于二次開(kāi)發(fā)的程序沒(méi)有源代碼如何進(jìn)行修改了?我們可以使用ResEdit等資源工具進(jìn)行修改,如圖所示:
2、對(duì)于非系統(tǒng)第三方DLL,上面的方法就不太適用了,可以使用動(dòng)態(tài)加載方式,不要使用靜態(tài)導(dǎo)入方式加載,通過(guò)動(dòng)態(tài)加載對(duì)文件進(jìn)行校驗(yàn),如數(shù)字簽名校驗(yàn)通過(guò)后再進(jìn)行加載,來(lái)保證程序的安全性。
結(jié)語(yǔ)
未知攻焉知防,充分了解攻擊手段才才可以做出更好的防御。