DEFCON议题解读|Dll劫持新思路——修改环境变量

本文介绍了安全研究员Wietze Beukema在DEFCON会议上提出的DLL劫持新思路,通过修改进程级环境变量,尤其是"%SystemRoot%",来影响Windows程序加载系统DLL,实现Dll劫持。讨论了劫持原因、持久化方法、预防措施及影响范围,提醒开发者关注环境变量安全。
摘要由CSDN通过智能技术生成

简介

在2022年的Defcon大会上,安全研究人员Wietze
Beukema通过对进程级环境变量的研究,提出了一种Dll劫持新思路,下面就其中涉及的技术点展开介绍。

**01 **环境变量

每一个进程都有一个环境块,其中包含一组环境变量及其值。有两种类型的环境变量,用户环境变量和系统环境变量。

用户环境变量 :仅对当前用户有效,位于:HKEY_CURRENT_USER\Environment

1662625790_6319a7fec0bf7a2ef0d51.png!small?1662625791600

系统环境变量
:对所有用户均有效,位于:HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Session
Manager\Environment

1662625797_6319a80587c059c04f8c9.png!small?1662625798165

默认情况下,子进程继承其父进程的环境变量。命令处理器启动的程序继承命令处理器的环境变量。

**02 **劫持原因

程序可能会依赖Windows定义好的环境变量来确定某些文件的位置,尤其对于Windows内置程序来说大量依赖环境变量来寻找系统盘文件。如下展示的是Windows系统盘ws2_32.dll中的代码片段:

1662625834_6319a82a574b57e0b0741.png!small?1662625834920

正常来说"%SystemRoot%/System32/mswsock.dll"会被解析为"C:/Windows/System32/mswsock.dll",但是这里面有一个不确定的因素就是"%SystemRoot%“,假设我们修改了环境变量”%SystemRoot%"的值为其他文件夹路径且在该路径下存放恶意Dll,那么程序就会加载我们设定的Dll,继而完成Dll劫持。

如果直接更改"%SystemRoot%“的值,会对整个操作系统上运行的程序产生影响,但是我们可以只修改指定进程的环境变量,如创建以下vbs脚本,利用子进程默认继承其父进程环境变量的特性,修改Windows内置进程hostname.exe的环境变量"SystemRoot"为"C:\Evil”。

Set shell = WScript.CreateObject("WScript.Shell")  
shell.Environment("Process")("SystemRoot") = "C:\Evil"  
shell.Exec(&
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值