DLL劫持新视角:通过代理Shellcode实现隐蔽执行
概述
本次网络研讨会最初发布于2024年10月4日,专家深入探讨了DLL劫持的复杂性及恶意代码代理的新技术,全面讨论了方法论和武器化过程。演讲重点介绍了这些技术在实际攻防演练中的应用,并解答了近期研究发布中的常见问题。发言人强调了理解DLL功能及微软安全措施影响的重要性,同时突出了持续渗透测试在发现漏洞方面的有效性。
核心要点
- DLL劫持与代理技术:研讨会聚焦于DLL劫持及通过DLL代理实现隐蔽代码执行的新技术。
- 持续渗透测试(CPT):CPT允许针对加固环境进行广泛研究和高级技术开发。
- 简单有效的持久化方法:研讨会强调了简单但有效的持久化和规避检测方法的重要性。
技术细节
什么是DLL劫持?
DLL(动态链接库)是进程可以加载并调用的函数库。例如,NTDLL是Win32的核心库,用于分配内存、创建文件、保存文件及更改内存段权限等。当进程(如Excel)加载时,它会将NTDLL加载到进程中,但DLL加载后不会立即运行,这与传统可执行文件(EXE)不同。
DLL劫持利用应用程序与DLL之间的信任关系,通过中间人攻击插入恶意代码。这种攻击不仅用于持久化,还可用于提升权限(从低权限用户到高权限或NT系统)或部署延迟执行的代码。
传统DLL劫持方法的挑战
微软已采取措施关闭许多传统方法的漏洞,使DLL劫持更易检测且更难利用。常见方法包括:
- 侧加载(Sideloading):将DLL放入进程同一文件夹,使进程盲目信任并加载恶意DLL。但需确保提供原有功能,否则进程会崩溃。
- 缺失DLL利用:利用开发过程中遗留的未包含或不再需要的DLL,通过放置同名DLL实现劫持。
- 顺序劫持(Order Hijacking):通过控制DLL加载顺序,使恶意DLL优先加载。
这些方法在第三方或免费软件中更常见,但微软通过安全编码方法逐步减少了这些漏洞。
DLL代理攻击
DLL代理攻击利用文件夹权限或COM对象漏洞,通过重命名原始DLL并创建恶意代理DLL,将函数请求转发至原始DLL。这种方法确保进程功能不受影响,同时加载恶意代码。
实现方式:
- 使用定义文件(.def)导出函数,将请求代理到原始DLL。
- 通过进程监视器(Process Monitor)发现可劫持的DLL,重点关注非受保护目录(如AppData)中的加载事件。
案例研究:Outlook和Teams插件DLL劫持
- 在AppData目录中,低权限用户可读写DLL文件。
- 通过扫描DLL函数、映射到导出文件、重命名原始DLL并编译恶意DLL,实现劫持。
- 使用Rust语言编写恶意代码,确保隐蔽性和稳定性。
代码执行与规避
- DllMain函数:作为通用函数,用于DLL初始化和清理。但直接在此执行恶意代码可能导致进程死锁。
- 线程延迟执行:创建线程并添加睡眠函数,延迟执行Shellcode,避免死锁并规避安全产品检测。
Windows应用与新平台
微软正在逐步淘汰旧版Outlook和Teams,转向新平台(如Windows Apps)。新平台DLL位于受保护目录(C:\Program Files\WindowsApps),仅NT SYSTEM和Trusted Installer可访问。但通过COM对象漏洞,仍可实现代理攻击。
COM对象漏洞:
- 进程通过对象ID查找DLL,优先检查用户注册表项(HKCU),失败后回退到正确路径。
- 低权限用户可写入HKCU注册表项,重定向DLL路径,实现系统DLL劫持。
自动化工具:FaceDancer
FaceDancer自动化DLL劫持过程,包括:
- 创建可劫持DLL:支持已知漏洞DLL和自定义DLL。
- 侦察模式:扫描DLL并生成定义文件。
- 攻击模式:生成恶意DLL和注册表项。
使用示例:
- 目标进程:MsEdge。
- 输入:已编译DLL(非原始Shellcode)。
- 输出:注册表项和恶意DLL,实现代理劫持。
实战应用:钓鱼战役
战役设计
- 诱饵:伪装为内部自动票务系统邮件,声称有关键Outlook更新。
- 克隆微软安全页面:修改为虚假更新详情,添加JavaScript强制在Edge中打开,绕过下载警告。
- MSIX投递载荷:签署EV证书,绕过Mark of the Web保护,投递恶意DLL到正确位置。
执行过程
- 检测Outlook是否运行,提示用户关闭以确保快速执行。
- 通过电子邮件发送钓鱼邮件,尽管部分被拦截,但成功投递的邮件实现了多次执行。
- 安全产品未检测到恶意文件,即使手动提交仍被标记为安全。
微软响应与防御建议
微软将问题视为未来环境更改的一部分,但未立即修复。所有Windows系统(Win10、Win11)均受影响,被视为“永久日”漏洞。
防御建议:
- 外层防御:强化电子邮件过滤、防火墙规则和异常域名监控。
- 用户意识:开展钓鱼意识培训,减少人为风险。
- 检测与响应:开发定制规则检测异常DLL加载行为。
研究与社区贡献
FaceDancer工具旨在促进研究和漏洞发现,不含规避功能。鼓励社区分享缓解措施和研究发现,推动微软修复漏洞。
总结
- 简单性:通过监控进程行为(如Process Monitor)可发现大量未开发漏洞。
- 协作:红队协作(如初始访问、恶意开发、载荷包装)实现复杂战役。
- 持续渗透测试:在加固环境中,CPT提供时间深入研究并开发定制攻击技术。
资源
- 文章链接:BHIS博客
- 工具链接:FaceDancer GitHub
通过持续对话和信息共享,希望推动微软修复漏洞并提升整体安全防护。