横向移动之DLL劫持入门与防御 从原理解析如何防御DLL劫持
cac55 2024-10-07 06:43 48 浏览 0 评论
前言
DLL(Dynamic Link Library)文件为动态链接库文件,又称"应用程序拓展",是软件文件类型。在Windows中,许多应用程序并不是一个完整的可执行文件,它们被分割成一些相对独立的动态链接库,即DLL文件,放置于系统中。当我们执行某一个程序时,相应的DLL文件就会被调用。一个应用程序可使用多个DLL文件,一个DLL文件也可能被不同的应用程序使用,这样的DLL文件被称为共享DLL文件。
由于共享DLL的特性,只要攻击者能够将恶意的DLL放在优先于正常DLL所在的目录,就能够欺骗系统优先加载恶意DLL,来实现"劫持"。
DLL劫持应用比较广泛,比如木马后门的启动、破解程序的内存补丁、外挂插件的注入以及加密狗的模拟等。之所以DLL劫持技术深受攻击者的喜爱,主要是因为该技术可以有效的躲过大部分杀软,并且实现起来技术难度不大。本文将研究可以在大多数 Windows 版本中发生的两种 DLL 劫持,以及如何实现横向移动,包括防御和检测方法。
02
详细说明
“Service Control Manager”(SCM)是windows管理服务的管理器。攻击者可以通过将特殊的DLL文件复制到受信目录下并远程重启服务来利用SCM进行横向移动,不需要创建新服务。因为这些服务在指定路径中不存在的库上调用了 LoadLibrary。允许攻击者将恶意DLL放置在 Windows 原本需要加载的正常DLL库中,并利用其进行横向移动。
攻击者可以利用IKEEXT 和 SessionEnv 这两个默认调用 LoadLibrary的服务,并将恶意代码放在库的PROCESS_ATTACH 块中,重启这两个服务并在远程机器上执行代码。IKEEXT 在启动时将会加载C:\Windows\System32\wlbsctrl.dll, SessionEnv 服务将会从 System32 目录加载 TSMSISrv.dll 和 TSVIPSrv.dll文件。
03
POC
https://github.com/djhohnstein/wlbsctrl_poc
https://github.com/djhohnstein/TSMSISrv_poc
04
利用方法
为了查找包含 DLL 劫持的服务,首先部署了目前仍在支持的常见 Windows 版本:Windows 7、Windows 10、Server 2008、Server 2012 和 Server 2016。
接下来使用 Get-Service 命令收集默认情况下安装在这些机器上的所有服务列表。取这些数据集的交集,生成了一个包含大约 90 个公共服务的列表。
编译初始服务信息后,安装Procmon并使用过滤器搜索:
- Result=“NAME NOT FOUND”;
- 路径以“sys”或“dll”结尾;
- 用户或完整性级别为SYSTEM。
为了更细致的监控这些服务,需要在一定程度上控制它们的启停时间,以便将Procmon 中的信息与正在启动的服务进行关联。解决方案是使用一个简单的 PowerShell for 循环,这样就可以在每次服务重启之间清除事件日志,并通过击键触发每次重启。
用于停止和启动服务的简单 PowerShell 脚本:
https://gist.github.com/djhohnstein/89f82ff9eff298f41351ffbe05065b9e
在停止服务、清除进程监视器日志和重新启动服务的过程中,记录下每个尝试搜索磁盘上不存在的 DLL 的服务,其中有两个服务符合标准,分别是IKEEXT 和 SessionEnv。
4.1 IKEEXT分析与利用
IKEEXT 服务托管 Internet 密钥交换(IKE)和身份验证 Internet 协议(AuthIP)键控模块。这些键控模块用于Internet 协议安全(IPSec)中的身份验证和密钥交换。当服务启动时,它会搜索文件 wlbsctrl.dll,这是该服务可能被恶意利用的第一个地方。
可以看到,svchost.exe 启动 IKEEXT 服务,然后查询 wlbsctrl.dll 文件。
通过查看事件属性的堆栈选项卡,可以清晰地看到 svchost.exe 是如何被调用的,以及哪些文件试图调用wlbsctrl.dll 文件上的 LoadLibrary。这表明 IKEEXT.DLL 直接位于堆栈帧中的 svchost.exe 上方,是进一步分析的完美候选者。
接下来将此文件放入Ghidra并开始分析 IKEEXT.dll。搜索这些 LoadLibrary 调用时,首先查看 PE 导入表。该表定义了磁盘上其他可移植可执行文件 (PE) 中的函数依赖关系。不过在导入表中并没有发现引用 wlbsctrl.dll,经过反思,原因可能是若wlbsctrl.dll被引用, svchost.exe 将不仅搜索 C:\Windows\System32\目录,还会搜索PATH 环境变量中的每个目录(具体参考加载库官方文档)。
接下来在 PE 中搜索“wlbsctrl.dll”字符串。
单击上方的搜索结果时,定位到定义字符串的数据段。右键单击此地址并选择“引用”→“显示对地址的引用”,结果指向了 0x180005ea0 处的一个单一函数。跳转到这个函数,可以看到在变量声明之后,第一个函数调用是LoadLibraryExW,并带有对 wlbsctrl.dll 的路径相关引用。从上面的 Process Monitor 日志中得知,该函数在服务启动期间的某个时刻被调用。因此无需进行更多分析即可构建有效的poc。
该函数调用 LoadLibraryExW 作为其第一个函数调用。要利用此服务,只需将在 PROCESS_ATTACH 上执行操作的精心制作的 DLL 与 IKEEXT.dll 放在同一文件夹中(默认为 C:\Windows\System32\)。然后使用服务控制管理器二进制文件 (sc.exe) 重新启动服务即可。
4.2 SessionEnv 分析和利用
IKEEXT 服务中的利用方法同样适用于SessionEnv 服务,svchost.exe 查询的两个 DLL分别是:TSMSISrv.dll 和 TSVIPSrv.dll。
同样,这些文件不会使用 DLL 搜索顺序规则进行递归搜索,它们必须在调用库 SessEnv.dll 中的某处直接按名称调用。使用如上所述的字符串引用方法,将进入一个按名称引用 TSMSISrv.dll 和 TSVIPSrv.dll 的函数中。
上面突出显示的是 uVar6 变量,很可能是标记为“FunctionRequiringDLL1”的函数的返回代码。另外需要注意,在每个可疑的、易受攻击的 DLL 劫持位置上都会调用此函数。
通过分析反编译的函数调用,可知该函数执行以下操作:
- 创建一个大小为 264 的缓冲区来保存文件路径;
- 扩展在函数的第二个参数中传递的缓冲区以填充环境变量,在我们的例子中是 %SYSTEMROOT%;
- 只要函数调用成功填充缓冲区,就对结果调用 LoadLibraryExW。
因此,要利用此服务来执行代码,我们需要在 %SYSTEMROOT%\System32\ 目录中放置一个名为TSMSISrv.dll 或 TSVIPSrv.dll 的 DLL,用于在 PROCESS_ATTACH 上执行我们的操作。然后使用服务控制管理器停止和启动服务,让服务加载我们制作的 DLL。
05
注意事项
有时除了服务启动的进程之外,其他进程偶尔也会加载被植入的 DLL。此时文件就不能被删除了。这种情况下可以尝试在库上调用远程 free,但这样可能导致远程进程崩溃。也可以尝试在内存中交换内容并通过调用FreeLibrary 替换所有函数。(虽然这样也会导致进程崩溃...)
删除文件的唯一方法是将其移动到另一个位置,例如 APPDATA 文件夹并重新启动。
06
基于主机的防御和检测手段
6.1 配置安全访问控制列表
在 Windows 主机上,每次停止和启动服务时都会触发事件 ID 7036;但是,从版本 8.0 开始,Windows 工作站不再支持这些事件。要启用对这些服务的审计,我们需要配置安全访问控制列表来启用审计所有服务事件日志的功能。步骤如下:
- 使用 sdshow 检查服务的当前安全描述符;
- 复制从 sdshow 返回的值并附加“(AU;SAFA;RPWPDTCCLC;;;WD)” ACE;
- 使用 sdset 从上面创建的值设置服务的描述符。
6.2 配置Exploit Guard
从 Windows 10 开始,Microsoft 引入了 Exploit Guard,允许“管理和缩小应用程序的攻击面”。Exploit Guard 引入了几个新的事件流,其中一个用于非 Microsoft 签名的二进制加载。如果要将此事件(事件 ID 11)应用到svchost.exe,就能够提取 PID 以及将要加载的非 Microsoft 签名 PE 的路径。调整此数据源是一种有效的检测方法。
可以在(https://docs.microsoft.com/en-us/windows/security/threat-protection/windows-defender-exploit-guard/event-views-exploit-guard)找到 Exploit Guard 事件的完整列表。
6.3 审核文件共享服务
Windows 10 及以上版本的另一个检测方法是审核文件共享服务,可以启用该服务来跟踪网络共享上的文件创建事件(共享访问的事件 ID 5140,访问的对象的事件 ID 5145)。审核文件共享服务非常重要,因为许多DLL劫持方法都需要在受信任的 System32 目录中放置一个 DLL。
07
基于网络的检测和防御手段
监控 RPC UUID {367ABB81–9844–35F1-AD32–98F038001003} 在端口 135 上的通信,UUID 表示服务控制管理器。该操作打开一个新的命名管道 SVCCTL,供客户端通过端口445进行通信,以控制所需的服务。
启动和停止服务调用的 SCM RPC 方法如下所示。
启动服务时调用的 SCM RPC 方法。
停止服务时调用的 SCM RPC 方法。
防范DLL劫持
1.修改文件manifest属性,进行定向加载DLL,解决通用系统DLL劫持问题
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1">
<file name="winmm.dll" loadFrom="%SystemRoot%\system32\winmm.dll" />
<file name="lpk.dll" loadFrom="%SystemRoot%\system32\lpk.dll" />
<file name="version.dll" loadFrom="%SystemRoot%\system32\version.dll" />
</assembly>
2.在程序运行后,遍历当前路径下的dll,确认MD5和数字签名安全后,再进行后续的加载。
相关推荐
- 14款健身APP蹿红 看看下载最多的是哪款?
-
Zombies,Run!($3.99,安卓,iOS)如果你的运动理念是:除非有人追,否则绝不跑起来,那么这款APP应该适合你。Zombies,Run!这款程序把单调的跑步过程变身为躲避僵尸的游戏...
- 微软官方彩蛋庆祝《回到未来》纪念日
-
2015年10月21日,是MartyMcFly和Brown博士回到未来的时间。现在,这一天真的到了,那么当时影片中展示的一些科技产品究竟有多少实现了呢?作为一家走在技术前沿的公司,日前,微软就在M...
- 时尚圈最潮同志情侣 帅到没朋友(同志情侣微信头像)
-
来源:MSN时尚综合|2015-03-0419:45:15男演员ZacharyQuinto(中)与男模MilesMcMillan(右)于纽约街头公开热吻。情人节这个拥有不同起源传说,最早可以...
- IE浏览器阻止过期ActiveX控件或将影响网银的使用
-
IE浏览器网银IE浏览器网银如果经常使用IE浏览器浏览网页的用户,可能都有遇到过浏览器窗口提示安装ActiveX控件的情况,一般情况下用户也是会选择直接安装。ActiveX控件广义上是指微软公司的整...
- 如何使Microsoft Band连接到WP设备
-
如果你幸运地购买到了MicrosoftBand,那么恭喜你。现在我们(winbeta)推出了“帮助系列”,那些尚未买到MicrosoftBand的朋友可以了解设备的一些新功能,以及设备的其他关键特...
- 毕业生不得不看的五大骗局全揭秘(毕业生防骗)
-
目前,距离高校大学生毕业已不足100天,大部分毕业生都十分忙碌。论文定稿、答辩,参加招聘、面试等成了应届毕业生的头等大事。但随着毕业季的临近,不法分子专门针对毕业生的诈骗高发期也随之来临。360手机安...
- 菠萝觅生活是O2O应用流量入口最大的供应商
-
现在主流的传统O2O生活服务,他们其实都有一个共通点,那就是各行其道。打车有快的,滴滴,外卖有饿了么,买机票有去哪儿网…每个APP都有着自己的核心竞争力。而用户呢?既想拥有海量有趣应用,又担心占用过多...
- WP8.1版MSN健康应用,现已支持锁屏计步
-
IT之家(www.ithome.com):WP8.1版MSN健康应用,现已支持锁屏计步@WP之家报道,微软今天已将必应系列应用品牌归为MSN,除此之外,WP8.1版MSN健康和天气应用也获得一些新的...
- 短信就能传播手机病毒?看完推理惊呆了!
-
很多人都收到过一种带网址的陌生短信,有的人会点击网址看看,有的还会在好奇心驱使下回复短信。近日《北京新发现》栏目报道了一起离奇的电信诈骗案,事主耿先生的银行卡从未离身,但是在收到一条带网址的陌生短信,...
- 微软OneClip:我承包了你的剪贴板(微软onedrive云空间)
-
不久前,Twitter用户WalkingCat曝光了微软一款名为OneClip的应用。这是一款剪贴板应用,根据描述这款应用将覆盖Windows10(包括桌面和移动)、iOS和Android平台,可以...
- Windows 10手机应该是什么样?微博用户给出了概念图
-
随着Windows10发布的不断临近,WindowsPhone的用户对Windows10的旗舰手机的期望也越来越高,我们WP中文网也在微博上发出了同样的问题,搜集用户对Windows10的硬...
- 云管家出席武汉2015年支付宝O2O生态峰会
-
2月4日,蚂蚁金服O2O生态峰会在武汉启幕。此次峰会展现了2015年蚂蚁金服在O2O领域的开放思路和策略,以及合作伙伴对O2O的创新观念及思路分享,吸引了武汉近3000名企业大佬、众多创业者、第三方服...
- 微软将于下周开启Windows开发中心帐号迁移工作
-
自下周开始微软将启动Windows开发中心的帐号迁移工作。根据WindowsBuildingApps博客透露Windows开发中心帐号迁移工作将会分为几个阶段。首个阶段从下周开始持续到今年7月份...
- 如何解绑已经合并的MSN账户和Skype账户?
-
如果您绑定的账户已经充值,建议您把产品消耗完毕后,再进行解绑。当您需要解绑合并的账户时,可登入Skype点卡账户自助操作。输入Skype或MSN账号、密码登录账户:登录后,可在页面左下角选择语言"中文...
- 微博账号已显示所属MCN机构,成为目前第二个上线该功能的平台
-
7月25日,多位网友发现,部分微博大V的个人主页已经显示其所属的MCN机构名称,微博也成为目前第二个上线该功能的平台。【来源:中新经纬】声明:此文版权归原作者所有,若有来源错误或者侵犯您的合法权益,您...
你 发表评论:
欢迎- 一周热门
- 最近发表
- 标签列表
-
- 如何绘制折线图 (52)
- javaabstract (48)
- 新浪微博头像 (53)
- grub4dos (66)
- s扫描器 (51)
- httpfile dll (48)
- ps实例教程 (55)
- taskmgr (51)
- s spline (61)
- vnc远程控制 (47)
- 数据丢失 (47)
- wbem (57)
- flac文件 (72)
- 网页制作基础教程 (53)
- 镜像文件刻录 (61)
- ug5 0软件免费下载 (78)
- debian下载 (53)
- ubuntu10 04 (60)
- web qq登录 (59)
- 笔记本变成无线路由 (52)
- flash player 11 4 (50)
- 右键菜单清理 (78)
- cuteftp 注册码 (57)
- ospf协议 (53)
- ms17 010 下载 (60)