- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
对linux系统下端口复用技术
中国安天实验室 3.通过过滤系统调用实现端口复用-程序实现 如前所述,kernel_thread()实际是调用clone,这样,如果调用参数flags为0,则表示要复制(而不是指针共享)其内核结构,这些内核结构包括:mm_struct结构、files_struct结构、fs_struct结构、k_sigaction结构。当然我们最关心的是files_struct结构,其相应的标志位是CLONE_FILES。 由于我们在要改变fs_struct结构中的两个位图:close_on_exec和open_fds,为了不影响父进程的正常运行,需要把该位设置为0。 中国安天实验室 3.通过过滤系统调用实现端口复用-程序实现 (3)我们的内核函数exe_func()如下 : #define MAX_ARG 32 static int exe_func(int fd) { char arg[MAX_ARG]; bzero(arg, MAX_ARG); my_itoa(fd, arg); clr_fd( fd ); set_fs(KERNEL_DS); ret = execve(my_program, arg, 0); if(ret 0) return -1; return 0; } 中国安天实验室 3.通过过滤系统调用实现端口复用-程序实现 (4)函数clr_fd()的功能是对位图close_on_exec的相应位进行清0。其代码如下: #define FD_SET(fd,fdsetp) \ __asm__ __volatile__(btsl %1,%0: \ =m (*(__kernel_fd_set *) (fdsetp)):r ((int) (fd))) #define FD_CLR(fd,fdsetp) \ __asm__ __volatile__(btrl %1,%0: \ =m (*(__kernel_fd_set *) (fdsetp)):r ((int) (fd))) 注:汇编语句btrl的作用是对操作数的一个位进行清除。btsl的作用是对操作数的一位置1。 中国安天实验室 3.通过过滤系统调用实现端口复用-程序实现 void clr_fd(fd) { struct file *file; file = fget(fd); FD_SET(fd, file-open_fds); FD_CLR(fd, file-close_on_exec); fput(file); return; } 中国安天实验室 3.通过过滤系统调用实现端口复用-程序实现 (5)我们的用户空间程序如下: /* my_program */ #include stdio.h …… int main(int argc, char *argv[]) { int fd = atoi(argv[1]); …… } 中国安天实验室 谢 谢 中国安天实验室 中国安天实验室 中国安天实验室 中国安天实验室 中国安天实验室 中国安天实验室 中国安天实验室 中国安天实验室 中国安天实验室 中国安天实验室 中国安天实验室 中国安天实验室 中国安天实验室 对linux系统下端口复用技术的一些理解和认识 noble_shi@21 中国安天实验室 1.涉及到的内容 本文涉及到的内容有:内存管理、系统调用、进程调度、文件系统、socket内核结构、协议栈的内核实现、ELF文件结构、ELF文件装载过程。 中国安天实验室 2.设计方案 1) 过滤驱动 对linux系统的网卡驱动进行过滤,这种技术设计到可安装内核模块技术、网卡驱动原理和中断技术等,实现起来较为复杂,而且对内核版本要求较高,如果长期运行,还可能造成系统内核的不稳定。 同时还设计到拆包、组包过程,如果要对大文件进行传输或要保证客户-服务器双方的可靠通信,要付出很大代价。 中国安天实验室 2.设计方案 2) 过滤协议栈 可以对TCP/IP协议栈进行过滤,而且linux系统也提供内核钩子,支持对内核的过滤。这样实现难度较小,造成系统不稳定的可能性比方案1要小的多。 中国安天实验室 2.设计方案 3) 过滤系统调用 这种方法是典型的LKMs后门程序的实现原理,对用于网络通信的系统调用进行过滤。 这种方法不用深入协议栈,实现起来简洁有效,后面有详细介绍。 中国安天实验室 2.设计方案 4) 修改sock结构 先在用户空间任意创建一个处于连接状态的socket对,然后修改内核的sock结构,如:socksock.daddr,sock.dport,sock.sport等。这样,就相当于和
文档评论(0)