Linux下C程序的动态库注入方法 (linux下c 注入动态库)

动态库注入(Dynamic Linker Injection)是一种注入技术,是将动态库注入到程序中,前者成为程序的一个组成部分。通常,注入的动态库是由“黑客”编写的用于某些特殊目的的恶意代码。注入完成后,程序将会执行恶意代码,在未经授权的情况下执行窃取机密数据、篡改文件等操作。

本文将介绍,并介绍如何防范动态库注入攻击。

一、注入原理

动态链接(Dynamic Linking)是指程序在运行时动态的加载所依赖的库文件,而不是运行前完成链接,将库文件打包成可执行文件。在程序运行过程中,动态链接器会依照一定的规则查找依赖库文件的路径,找到所需库文件,然后在运行时将其链接起来。

动态库注入就是将自定义的动态链接库注入到原进程的地址空间中,利用动态链接交叉链接的特性,使得程序在执行时从自定义库中读取需要的代码,以达到控制原进程的目的。这种技术被广泛应用于恶意代码的实现中。

二、注入方法分析

(一)注入库文件

要实现动态库注入攻击,习惯上我们会抓住运行中的一个程序,并将自定义动态库注入到进程的地址空间中。这种实现方式有以下几种:

1、将动态库文件覆盖掉被注入进程的同名动态库文件。

2、修改程序进程的Linker信息,使其在运行时链接我们的恶意动态库。

(二)动态链接攻击

动态链接攻击是指利用程序的动态链接特性来攻击程序。主要方式有以下几种:

1、运行时hook。

在程序的前面照下一段代码,以实现修改函数实现变量的方法:

“`

#define _GNU_SOURCE

#include

#include

int (*old_puts)(const char *s) = NULL;

int puts(const char *s)

{

if (!old_puts)

{

old_puts = (int (*)(const char *))dlsym(RTLD_NEXT, “puts”);

}

old_puts(“sizehammer”);

return old_puts(s);

}

“`

2、注入so文件执行hook,此方式是通过与钩子机制进行对抗。

3、修改程序PIC表(Procedure Linkage Table)中的函数指针地址。

需要注意的是,上述Hook方式实现的方法是在修改原有函数的功能实现,而很多注入方法是通过检测第二个参数的函数地址,发现当前函数不是通过dlsym实现的,然后使用LD_PRELOAD指定的so库getdlsym来实现独有的hook覆盖。

三、注入攻击防范

为了避免动态库注入攻击,我们可以采取以下防范措施:

1、强制要求所有用户的账号必须至少有一个非数字字符。

2、使用ASLR技术,kernel 2.6.34以上的版本支持”personality”设置,设置为”ADDR_NO_RANDOMIZE”或使用命令行工具”execq”来实现。

3、使用SecureExec来缓解动态库注入技术。

4、应用程序过程内部结构代码(如imports和exports)强制进行静态绑定。

相关问题拓展阅读:

linux下c++能使用c的头文件和动态库吗

可以的,c++是兼容c语言的,建议看一下c和c++的混编

确定可以,C/C++的借口能互相调用,但需要用extern “C”{ 你的接口声明 }。

这个肯定是可以的了

linux下c 注入动态库的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于linux下c 注入动态库,Linux下C程序的动态库注入方法,linux下c++能使用c的头文件和动态库吗的信息别忘了在本站进行查找喔。


数据运维技术 » Linux下C程序的动态库注入方法 (linux下c 注入动态库)