LD_PRELOAD函数劫持
2.3. LD_PRELOAD使用限制
这种方式虽然很酷,但却有一些限制。比如对于静态编译的程序是无效的。因为静态编译的程序不需要连接动态库的面的函数。而且,假如文件的SUID或SGID位被置1,加载的时候会忽略LD_PRELOAD(这是ld的开发者出于安全考虑做的)。
三.相关的隐匿技术
3.1 Jynx-Kit
3.2 检查隐匿
参考文章:
Linux C/C++调试之一:利用LD_PRELOAD机制监控程序IO操作
参考文章:
动态连接的诀窍:使用 LD_PRELOAD 去欺骗、注入特性和研究程序
参考文章:https://www.linuxidc.com/Linux/2017-12/149841.htm
如何避免被Hook
(1).静态链接,把代码都静态链接入可执行程序.
(2).通过设置执行文件的setgid / setuid标志.在有SUID权限的执行文件,系统会忽略LD_PRELOAD环境变量.
也就是说,如果你有以root方式运行的程序,最好设置上SUID权限.
(3).在程序的开始检测LD_PRELOAD
Linux环境变量生效篇
效果:应用程序设置环境变量,使其全局生效,并且立即生效,应用程序卸载时,使其全局失效,并且立即失效。
情况:
1.多终端(多个xshell打开,如何使其全部同时生失效)
2.没有终端,在系统界面,如何使其立即生失效
export LD_PRELOAD=name指令在终端执行时,立即生效,但是放在脚本中,或者是多个脚本深度嵌套的环境中,不能够改变当前终端的环境变量,
https://zhidao.baidu.com/question/629814347405318804.html
https://zhidao.baidu.com/question/390458036073969725.html
http://www.169it.com/article/15909202685256535853.html
https://blog.51cto.com/carrie1314/1296298
尝试方法:
- 在生效时,根据系统启动时的环境变量加载流程,逐项进行设置,然后使其生效,查看效果
- 在失效时,根据系统启动时的环境变量加载流程,逐项进行设置,然后使其失效,查看效果
Bug修改:
- get_config_file_all和get_config_file函数中的perror一行去掉,不需要输出
- sent_study_process函数中增加判断,增加头文件unistd.h
- CentOS-3.10.0-862.el7.x86_64-V1.0-1.8-T-20190515153527.bin这个程序是bin包,不能使用source或者. 去执行,只能使用./
- 每一个进程只能改变当前进程内的环境变量,使其及时生效,无法改变其进程外的变量,需要重新加载
- 对于多个已经打开的终端,只能改变当前终端的环境变量,无法改变其他终端的变量,需要重新加载