DLL劫持与代理攻击:Shellcode代理新技巧
概述
本次网络研讨会最初于2024年10月4日发布。视频中,专家深入探讨了DLL劫持的复杂性以及恶意代码代理的新技术,包括方法论的全面讨论和武器化应用。演讲重点介绍了这些技术在实际参与中的应用,并解答了近期研究发布中的常见问题。演讲者强调了理解DLL功能的重要性以及微软安全措施的影响,同时突出了持续渗透测试在发现漏洞方面的有效性。
主要内容
- DLL劫持:利用应用程序信任执行恶意代码,实现权限提升和持久性网络攻击。
- DLL代理攻击:通过操纵文件夹权限加载恶意代码,同时保持原始DLL功能,避免进程崩溃。
- Process Monitor的使用:学习如何使用微软的Process Monitor识别和操纵DLL,以在低权限用户场景中进行测试。
- Windows应用和对象组件框架:探索Windows应用的独特文件夹结构、针对DLL攻击的安全措施,以及微软用于资源通信的对象组件模块框架。
- Face Dancer工具:自动化DLL劫持,功能包括创建可劫持的DLL和针对性攻击,促进持续研究。
- 真实网络攻击模拟:持续渗透测试团队使用自定义工具和技术设计了一个真实的攻击活动,包括伪造的Outlook更新。
- 缓解Windows系统漏洞:意识和检测对于防御Windows漏洞至关重要,强调电子邮件过滤器、强控制和网络钓鱼教育。
详细内容
DLL劫持基础
DLL(动态链接库)是进程可以加载并调用的函数库。最著名的是NTDLL,它是Win32的核心,用于分配内存、创建文件、保存文件以及更改内存段权限。当Excel等应用程序加载时,它会将NTDLL加载到进程中,但DLL加载后不会立即运行,这与传统的可执行文件不同。
DLL劫持利用应用程序与DLL之间的信任,在中间插入恶意代码,以便在调用有效DLL时加载恶意代码。这种攻击不仅用于持久性,还可以用于提升权限(从低权限用户到高权限或NT系统),或部署在特定时间或触发后运行的代码。
传统DLL劫持方法及其挑战
微软已采取大量措施来缩小传统方法的漏洞,使DLL劫持易于检测且难以利用。常见方法包括:
- 侧加载(Sideloading):将DLL放入与进程相同的文件夹中,应用程序会盲目信任并加载该DLL。但需要确保提供原始功能,否则进程会崩溃。
- 缺失DLL:由于开发生命周期或CIDC管道,应用程序可能加载不再存在的DLL,攻击者可以放置同名DLL进行利用。
- 顺序劫持(Order Hijacking):通过发现应用程序查找DLL的顺序,并在可写入的位置放置DLL,从而优先加载恶意DLL。
这些方法逐渐被开发者通过安全编码方法论和操作系统改进所缓解。
DLL代理攻击
DLL代理攻击利用文件夹权限或COM对象框架。即使操作系统加强了安全措施,仍存在小部件、插件或附加组件放置在可写入位置的情况。代理攻击通过以下步骤实现:
- 将原始DLL重命名(如“legitimate”)。
- 创建恶意DLL,并通过定义文件(.def)将函数映射到原始DLL。
- 当进程调用函数时,恶意DLL将请求代理到原始DLL,确保进程不崩溃且用户无感知。
这种方法优雅且简单,允许恶意代码加载的同时保持系统正常运作。
使用Process Monitor发现漏洞
Process Monitor是微软提供的免费工具,监控操作系统中的每个事件。通过过滤Load Image事件,并排除受管理员权限保护的位置(如Windows或Program Files),可以发现从其他位置加载DLL的进程。例如,Outlook在AppData本地文件夹中加载Teams附加组件的DLL,用户具有读写权限,从而可以操纵这些DLL。
Face Dancer工具
Face Dancer自动化DLL劫持过程,具有两种功能:
- 创建可劫持DLL:针对已知漏洞生成DLL,用于代理特定COM对象。
- 针对性攻击:通过侦察模块扫描DLL并生成定义文件,然后使用攻击模式生成恶意DLL。
工具使用SRDI技术将DLL转换为Shellcode,并输出需要应用的注册表键值。示例中,使用未修改的Cobalt Strike DLL,通过Face Dancer部署后,Msedge加载时信标呼叫回家,成功代理所有函数请求。
实际应用案例
在持续渗透测试中,团队设计了一个真实的钓鱼活动:
- 诱饵:伪造来自组织内部自动化票务系统的消息,声称有关键的Microsoft Outlook更新需要安装。
- 技术细节:克隆Microsoft安全网站页面,修改以匹配诱饵,并使用JavaScript强制在Microsoft Edge中打开页面,绕过文件下载警告。
- MSIX投放器:使用签名的MSIX包,绕过Mark of the Web保护,并在用户点击安装时投放恶意DLL到正确位置。
- 执行逻辑:检测Outlook是否运行,如果运行则提示用户关闭,以确保DLL在Outlook下次运行时加载。
尽管电子邮件过滤阻止了部分攻击,但成功投放的载荷未被安全产品检测,即使手动提交为可疑文件仍被判定为安全。
防御建议
由于微软尚未完全修复这些漏洞,目前没有直接的补丁措施。防御重点应放在:
- 电子邮件过滤器:确保外部威胁无法带入攻击载荷。
- 防火墙规则:锁定未知位置的访问。
- 强电子邮件控制:监控异常域名和网络钓鱼诱饵。
- 网络钓鱼意识教育:用户是最薄弱的环节,通过教育活动提高防护能力。
对于安全研究人员,Face Dancer可用于测试和研究,但不包含规避组件,需要结合其他技术进行操作。
结论
DLL劫持和代理攻击展示了简单 yet 强大的技术,可用于持久性和权限提升。通过工具如Process Monitor和Face Dancer,安全团队可以发现和利用这些漏洞,同时防御团队应加强外层防护和用户教育。希望此次讨论能促进信息共享和微软未来的修复措施。
注意:本文内容基于网络研讨会 transcript 翻译,旨在提供技术洞察和防御建议。