展开
湖北国联计算机科技有限公司
  • 首页HOME
  • 公司简介INTRODUCTION
  • 安全防御DEFENSE
  • 软件开发SOFTWARE
  • 物联网IOT
  • 运行维护SRE
  • 成功案例CASE
  • 联系我们CONTACT
  • IndustryEvents |业界动态

    如何禁用软件DLL劫持(Disable DLL Hijacking)
    来源:吾爱破解论坛 时间:2021-10-16

    前言

    越来越多的木马使用DLL劫持功能进行加载,大家也经常做补丁使用DLL劫持功能进行破解,有没有想过如何进行防护了?本文介绍通过修改文件manifest属性进行定向位置加载和动态加载签名校验来解决劫持问题,给开发者提供一些防护思路,加强软件保护,防止被劫持利用。

    介绍

    木马:如早期的犇牛木马,使用伪装LPK.DLL、USP10.DLL系统DLL进行劫持加载传播感染,到如今各种流氓软件和APT组织使用DLL劫持正常软件绕过安全软件拦截,如使用伪装chrome.dll劫持Chrome.exe来实现加载,其中比较知名APT组织海莲花(OceanLotus)最为擅长。

    破解补丁:Windows平台加密壳发展到如今阶段,脱壳成本提升和自校验的加强,已经很少有直接通过文件Patch进行补丁破解了,基本都开始使用内存修改的方式进行补丁,相对于传统的启动进程再修改内存的方式,DLL劫持修改内存更为方便,DLL劫持补丁已经成为主流的破解补丁存在方式了。为什么可以进行DLL劫持了,本文不再赘述,可以参看微软官方的介绍:https://docs.microsoft.com/en-us/windows/win32/dlls/dynamic-link-library-search-order。

    防护方法

    1、对于系统DLL,不通过修改本机KnownDLLs进行单机防护,而是通过修改文件manifest属性进行定向加载DLL来解决通用系统DLL劫持问题,开发者可以看微软的manifest介绍:

    >https://docs.microsoft.com/en-us/windows/win32/sbscs/application-manifests。

    比如我们给程序添加以下代码

    复制代码 隐藏代码

    <?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>

    编译成功后再进行winmm.dll、lpk.dll和version.dll劫持,就会无效了,这里只添加了部分DLL,可以根据自己程序所需,把对应所有的导入表中的系统DLL都加入即可。对于二次开发的程序没有源代码如何进行修改了?我们可以使用ResEdit等资源工具进行修改,如图所示:


    2、对于非系统第三方DLL,上面的方法就不太适用了,可以使用动态加载方式,不要使用静态导入方式加载,通过动态加载对文件进行校验,如数字签名校验通过后再进行加载,来保证程序的安全性。

    结语

    未知攻焉知防,充分了解攻击手段才才可以做出更好的防御。



    荆州地区政府网站建设 解决方案 专业团队 地址:湖北省荆州市沙市区荆沙大道楚天都市佳园一期C区29栋112       地址:湖北省松滋市才知文化广场1141-1142号     邮编:434200 联系电话:0716-6666211     网站编辑部邮箱:business@gl-ns.com 鄂公网安备 42100202000212号 备案号:鄂ICP备2021015094号-1     企业名称:湖北国菱计算机科技有限公司