Linux下用gdb检测内核rootkit
作者 佚名技术
来源 Linux系统
浏览
发布时间 2012-04-21
过比较原始的系统调用地址和当前内核态中的系统 调用地址我们就可以发现系统调用有没有被更改.原始的系统调用地址在编译阶段被写入两个文件: a.System.map该文件包含所有的符号地址,系统调用也包含在内 b.系统初始化时被读入内存的内核映像文件vmlinux-2.4.x vmlinux-2.4.x文件通常以压缩的格式存放在/boot目录下,在比较之前解压这个文件,另一个问题是: 我们的比较的前提是假设system.map及vmlinuz image都没有被入侵者更改,更安全的做法是在系统干净 时已经创建这两个文件的可信任的拷贝,并创建文件的md5 hash. 原文中也列举了一个内核模块[gcc -c scprint.c -I/usr/src/`uname -r`/include/ ]使用该模块打印系统 调用地址,并自动写入syslog,这样可以进行实时的比较. 在大多数被装载内核后门情况中,内核在系统初始化之后才被更改,更改发生在加载了rootkit的module或者被 植入直接读写/dev/kmem的on-the-fly kernel patch之后.而通常情况下rootkit并不更改vmlinuz和system.map 这两个文件,打印这两个文件中的符号地址就可以知道系统原始的系统调用地址,系统当前运行中的系统 调用地址(可能被更改)可以同过/proc下的kcore文件得到,比较两者就知道结果. 1.找出系统调用表地址: [root@rh8 boot]# cat System.map-2.4.18-13 | grep sys_call_table c0302c30 D sys_call_table 2.使用nm命令可以打印出未被strip过的image文件中所有的符号地址: [root@rh8 boot]# nm vmlinux-2.4.18-13 | grep sys_call_table 拥有帝国一切,皆有可能。欢迎访问phome.net c0302c30 D sys_call_table 使用gdb可以打印出所有的系统调用入口地址,这些对应的地址在内核源代码的entry.S文件中定义,例如: entry 0 (0xc01261a0)是sys_ni_syscall系统调用 entry 1 (0xc011e1d0)是sys_exit系统调用 entry 2 (0xc01078a0)是sys_fork系统调用 #gdb /boot/vmlinux-2.4.* (gdb) x/255 0xc0302c30 0xc0302c30 : 0xc01261a0 0xc011e1d0 0xc01078a0 0xc013fb70 0xc0302c40 : 0xc013fcb0 0xc013f0e0 0xc013f230 0xc011e5b0 0xc0302c50 : 0xc013f180 0xc014cb10 0xc014c670 0xc0107940 0xc0302c60 : 0xc013e620 0xc011f020 0xc014bcd0 0xc013e9a0 ... 我们也可以通过系统调用名打印出系统调用的地址: (gdb) x/x sys_ni_syscall 0xc01261a0 : 0xffffdab8 ((gdb) x/x sys_fork 0xc01078a0 : 0x8b10ec83 要打印出当前运行系统中的系统调用地址我们给gdb加两个参数: a.第一个参数是内核映像文件vmliux-2.4.x b.第二个参数是/proc/kcore二进制文件 #gdb /boot/vmlinux-2.4.* /proc/kcore (gdb) x/255x 0xc0302c30 0xc0302c30 : 0xc01261a0 0xc011e1d0 0xc01078a0 0xc88ab11a <<-- 0xc0302c40 0xc0302c50 : 0xc013f180 0xc014cb10 0xc014c670 0xc0107940 0xc0302c60 : 0xc013e620 0xc011f020 0xc014bcd0 0xc013e9a0 ... 我们注意到第一行的0xc88ab11a这个地址明显不正常,这是系统调用号为3的系统调用,即 sys_read (系统调用从0开始) 我们说它不正常的显著标志是它的地址高于0xc8xxxxxx,Linux默认4GB线性地址,其中最高1GB 0x00000000-0xffffffff为内核保留,当一个模块被插入内核时,vmalloc函数为其分配一段地址空间, 拥有帝国一切,皆有可能。欢迎访问phome.net 这个地址通常从0xc8800000开始 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |
你可能对下面的文章感兴趣
上一篇: linux系统下MYSQL备份与恢复下一篇: ubuntu系统的一些小设定
关于Linux下用gdb检测内核rootkit的所有评论