信安总结
将 ls 变成 root-kit(假设此时已经取得系统的root权限)
1.一种笨的方法:将系统中的ls命令重命名,假设为list并隐藏它,自己重新写 一个程序命名为ls,这个程序会调用系统之前的ls,也就是如今的list。 这里需要注意的时,我们调用之前,可以在这个程序中加入一些过滤文件名 或路径名(我们的攻击程序)。我们先取得ls的结果,每当ls结果中有这些 信息时,会将这条记录滤掉,再输出到终端。最后我们要把这个我们自己写的可执行 程序ls放在原先真正ls所在的目录,一般是‘/bin/ls’。这样就可以实现隐藏我们的攻击程序了。
2.高大上的做法:重写ls程序,通过DIR结构体以及readdir、 fstat等函数调用,当遇到我们想要隐藏的文件时,自动跳过。ls选项过多,不过常用的选项很少,可以只实现一些常用的选项。这样改的更彻底,想显示什么都可以。
如何保护栈
1.基于编译的保护:随机Canary,Canary的值从一块只读内存读取,每当程序返回时就判断Canary是否被修改。
2.基于内存的保护:在调用函数后,将返回地址、ebp等所在的栈空间设置为不可写,当成功返回后,再设置回来。
3.基于操作系统保护:专门为返回地址保留一个寄存器,只有操作系统使用修改它的值。原理就是:将返回地址放在别处,不放在栈中。
简述静态链接与动态链接
a.静态链接:在程序运行之前,就完成了整个程序各个模块的组