免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: g84ch

[原创]关于劫持系统调用隐藏进程的一些心得 [复制链接]

论坛徽章:
36
IT运维版块每日发帖之星
日期:2016-04-10 06:20:00IT运维版块每日发帖之星
日期:2016-04-16 06:20:0015-16赛季CBA联赛之广东
日期:2016-04-16 19:59:32IT运维版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-19 06:20:00每日论坛发贴之星
日期:2016-04-19 06:20:00IT运维版块每日发帖之星
日期:2016-04-25 06:20:00IT运维版块每日发帖之星
日期:2016-05-06 06:20:00IT运维版块每日发帖之星
日期:2016-05-08 06:20:00IT运维版块每日发帖之星
日期:2016-05-13 06:20:00IT运维版块每日发帖之星
日期:2016-05-28 06:20:00每日论坛发贴之星
日期:2016-05-28 06:20:00
发表于 2009-10-20 10:24 |显示全部楼层
这是我执行/dev/kmem的结果
[root@localhost misc-progs]# ./a.out
idtr base at 0xFFC18000, limit at 0x7FF
idt80: flags=0 sel=0 off=0
readkmem: mmap: Input/output error
Segmentation fault
[root@localhost misc-progs]#

以下是LKM的结果,代码是22楼的
Oct 20 10:18:41 localhost kernel: syscall intercept: Hi, poor linux!
Oct 20 10:18:41 localhost kernel: intercept: function:get_sys_call_table-L196: idtr base at 0xC12B2000, limit at 0x7FF
Oct 20 10:18:41 localhost kernel: intercept: function:get_sys_call_table-L204: idt80: flags=EF sel=60 off=C1003CC4
Oct 20 10:18:41 localhost kernel: intercept: function:get_sys_call_table-L220: sys_call_table at 0xc11f14e0, call dispatch at 0xc3eadeaa
Oct 20 10:18:41 localhost kernel: intercept: function:intercept_init-L276: sys call table address c11f14e0
Oct 20 10:18:41 localhost kernel: intercept: function:new_open-L234: call open()
Oct 20 10:18:45 localhost last message repeated 19 times
Oct 20 10:18:45 localhost kernel: syscall intercept: bye, poor linux!

论坛徽章:
0
发表于 2009-10-20 10:29 |显示全部楼层
看结果/dev/kmem输出是不对的。

论坛徽章:
36
IT运维版块每日发帖之星
日期:2016-04-10 06:20:00IT运维版块每日发帖之星
日期:2016-04-16 06:20:0015-16赛季CBA联赛之广东
日期:2016-04-16 19:59:32IT运维版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-19 06:20:00每日论坛发贴之星
日期:2016-04-19 06:20:00IT运维版块每日发帖之星
日期:2016-04-25 06:20:00IT运维版块每日发帖之星
日期:2016-05-06 06:20:00IT运维版块每日发帖之星
日期:2016-05-08 06:20:00IT运维版块每日发帖之星
日期:2016-05-13 06:20:00IT运维版块每日发帖之星
日期:2016-05-28 06:20:00每日论坛发贴之星
日期:2016-05-28 06:20:00
发表于 2009-10-20 10:31 |显示全部楼层

回复 #32 CUDev 的帖子

现在获得的idtr.base正确了吗

论坛徽章:
36
IT运维版块每日发帖之星
日期:2016-04-10 06:20:00IT运维版块每日发帖之星
日期:2016-04-16 06:20:0015-16赛季CBA联赛之广东
日期:2016-04-16 19:59:32IT运维版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-19 06:20:00每日论坛发贴之星
日期:2016-04-19 06:20:00IT运维版块每日发帖之星
日期:2016-04-25 06:20:00IT运维版块每日发帖之星
日期:2016-05-06 06:20:00IT运维版块每日发帖之星
日期:2016-05-08 06:20:00IT运维版块每日发帖之星
日期:2016-05-13 06:20:00IT运维版块每日发帖之星
日期:2016-05-28 06:20:00每日论坛发贴之星
日期:2016-05-28 06:20:00
发表于 2009-10-20 10:36 |显示全部楼层
其实这个地方你的测试例程和我22的LKM得到的idtr.base不一致,是在代码比较靠前的部分,也就是执行指令sidt的结果不一致
int main (int argc, char **argv)
{
unsigned sys_call_off;
int kmem_fd;  // /dev/kmem文件描述符
unsigned sct;
char sc_asm[CALLOFF],*p;

/* 获得IDTR寄存器的值 */
asm ("sidt %0" : "=m" (idtr));
printf("idtr base at 0x%X\n",(int)idtr.base);

论坛徽章:
0
发表于 2009-10-20 10:37 |显示全部楼层

回复 #33 Godbach 的帖子

也不太对,你试一下
http://blog.chinaunix.net/u/12592/showart_1421096.html
中的/dev/kmem的代码。

BTW:你的测试环境是什么?

论坛徽章:
36
IT运维版块每日发帖之星
日期:2016-04-10 06:20:00IT运维版块每日发帖之星
日期:2016-04-16 06:20:0015-16赛季CBA联赛之广东
日期:2016-04-16 19:59:32IT运维版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-19 06:20:00每日论坛发贴之星
日期:2016-04-19 06:20:00IT运维版块每日发帖之星
日期:2016-04-25 06:20:00IT运维版块每日发帖之星
日期:2016-05-06 06:20:00IT运维版块每日发帖之星
日期:2016-05-08 06:20:00IT运维版块每日发帖之星
日期:2016-05-13 06:20:00IT运维版块每日发帖之星
日期:2016-05-28 06:20:00每日论坛发贴之星
日期:2016-05-28 06:20:00
发表于 2009-10-20 10:39 |显示全部楼层
原帖由 CUDev 于 2009-10-20 10:37 发表
也不太对,你试一下
http://blog.chinaunix.net/u/12592/showart_1421096.html
中的/dev/kmem的代码。

BTW:你的测试环境是什么?

我测试的/dev/kmem提示的错误就和上面我贴出的一样,估计是/dev/kmem不让操作。

但是我觉得应该不会影响前面sidt的结果吧。

我的测试环境是用的RHEL 5.2.然后自己编译的内核2.6.18.3

论坛徽章:
0
发表于 2009-10-20 10:43 |显示全部楼层
恩,RH系列的发行版,应该都是禁掉/dev/kmem的,我这边的RHEL5,就没有没有/dev/kmem这个设备。

论坛徽章:
36
IT运维版块每日发帖之星
日期:2016-04-10 06:20:00IT运维版块每日发帖之星
日期:2016-04-16 06:20:0015-16赛季CBA联赛之广东
日期:2016-04-16 19:59:32IT运维版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-19 06:20:00每日论坛发贴之星
日期:2016-04-19 06:20:00IT运维版块每日发帖之星
日期:2016-04-25 06:20:00IT运维版块每日发帖之星
日期:2016-05-06 06:20:00IT运维版块每日发帖之星
日期:2016-05-08 06:20:00IT运维版块每日发帖之星
日期:2016-05-13 06:20:00IT运维版块每日发帖之星
日期:2016-05-28 06:20:00每日论坛发贴之星
日期:2016-05-28 06:20:00
发表于 2009-10-20 10:48 |显示全部楼层
原帖由 CUDev 于 2009-10-20 10:43 发表
恩,RH系列的发行版,应该都是禁掉/dev/kmem的,我这边的RHEL5,就没有没有/dev/kmem这个设备。

我这里有/dev/kmem,但是不让读取
[root@localhost ~]# cat /dev/kmem
cat: /dev/kmem: Bad address

论坛徽章:
36
IT运维版块每日发帖之星
日期:2016-04-10 06:20:00IT运维版块每日发帖之星
日期:2016-04-16 06:20:0015-16赛季CBA联赛之广东
日期:2016-04-16 19:59:32IT运维版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-19 06:20:00每日论坛发贴之星
日期:2016-04-19 06:20:00IT运维版块每日发帖之星
日期:2016-04-25 06:20:00IT运维版块每日发帖之星
日期:2016-05-06 06:20:00IT运维版块每日发帖之星
日期:2016-05-08 06:20:00IT运维版块每日发帖之星
日期:2016-05-13 06:20:00IT运维版块每日发帖之星
日期:2016-05-28 06:20:00每日论坛发贴之星
日期:2016-05-28 06:20:00
发表于 2009-10-20 10:49 |显示全部楼层
原帖由 CUDev 于 2009-10-20 10:43 发表
恩,RH系列的发行版,应该都是禁掉/dev/kmem的,我这边的RHEL5,就没有没有/dev/kmem这个设备。


会不会是因为/dev/kmem不让读取,导致用户空间sidt执行的结果也不对。

你测试的情况,LKM的方式和应用程序的方式得到的idtr.base是不是也不一样?

论坛徽章:
0
发表于 2009-10-20 10:51 |显示全部楼层

回复 #38 Godbach 的帖子

可以看一下kernel log的输出,在后面的版本中已经增加了对/dev/kmem和/dev/mem的访问控制。具体代码,可以查看drivers/char/mem.c
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP