动态链接器劫持
对手可能通过劫持动态链接器用于加载共享库的环境变量来执行他们自己的恶意负载。在程序的执行准备阶段,动态链接器从环境变量和文件(如 Linux 上的 LD_PRELOAD
或 macOS 上的 DYLD_INSERT_LIBRARIES
)加载指定的共享库的绝对路径。环境变量中指定的库首先加载,优先于具有相同函数名称的系统库。(引用:Man LD.SO)(引用:TLDP 共享库)(引用:Apple Doco Archive 动态库)这些变量通常由开发人员用于调试二进制文件而无需重新编译、解决映射符号冲突以及在不更改原始库的情况下实现自定义函数。(引用:Baeldung LD_PRELOAD) 在 Linux 和 macOS 上,劫持动态链接器变量可能会授予对受害者进程内存、系统/网络资源的访问权限,并可能提升权限。此方法还可能规避安全产品的检测,因为执行被掩盖在合法进程下。对手可以使用 export
命令、setenv
函数或 putenv
函数通过命令行设置环境变量。对手还可以利用 动态链接器劫持 在 shell 中导出变量或使用更高级别的语法(如 Python 的 os.environ
)以编程方式设置变量。 在 Linux 上,对手可能会设置 LD_PRELOAD
以指向与受害者程序请求的合法库名称匹配的恶意库,从而导致操作系统在执行受害者程序时加载对手的恶意代码。LD_PRELOAD
可以通过环境变量或 /etc/ld.so.preload
文件设置。(引用:Man LD.SO)(引用:TLDP 共享库)由 LD_PRELOAD
指定的库由 dlopen()
和 mmap()
分别加载和映射到内存中。(引用:Linux 和 macOS 上的代码注入)(引用:Uninformed Needle)(引用:Phrack halfdead 1997)(引用:Brown Exploiting Linkers) 在 macOS 上,此行为在概念上与 Linux 上相同,只是在较低级别上实现 macOS 动态库(dyld)有所不同。对手可以设置 DYLD_INSERT_LIBRARIES
环境变量以指向包含受害者程序请求的合法库或函数名称的恶意库。(引用:TheEvilBit DYLD_INSERT_LIBRARIES)(引用:Timac DYLD_INSERT_LIBRARIES)(引用:Gabilondo DYLD_INSERT_LIBRARIES Catalina Bypass)