Rootkit

一、rootkit介绍
Rootkit的作用在于“能维持root权限的一套工具”。它的目的是隐藏自己以及恶意程序,达到长期在目的主机存在并收集信息的目的。Rootkit一般和后门等程序结合使用,帮忙隐藏后门的踪迹。
通常,攻击者通过远程攻击获得root访问权限(譬如密码猜测、破解、缓冲区溢出、0-day漏洞),然后安装后门,便于之后回访,安装rootkit,隐藏踪迹,收集信息,便于长期回访以及获得对其他系统的访问权限。

二、linux中的权限问题
首先,在Linux系统的DAC中,所有的操作实质都是在进行进程访问文件的操作。而在验证操作时,主要关注两方面:

  • 进程的ID
  • 文件的ID

根据情况的不同会有以下的情况:

  • 进程有效ID为0,则为root权限,允许访问
  • 若进程的有效ID与文件所有者ID相同,则检查文件所有者访问位;
  • 若进程组有效ID与文件组ID相同,则检查文件组访问位;
  • 若都不相同,则检查文件其他用户访问位;

以上时一步一步来的,于是我们知道了进程有进程ID与组ID;文件则有owner ID、组ID、other ID每个ID有三个访问位:读写与执行。拥有onwer权限可用chmod修改其访问位。

上面提到了“有效ID”这个概念,因为有的进程在运行时需要改变自身的权限,而改变权限的方式就是通过修改用户ID或组ID,所以为了达到这种机制,又将ID分为了实际(Real ID)、有效和保存的三种。实际ID表明了我们实际是谁,有效的是运行时的身份,通常这两者是相同的。保存的ID包含了有效ID的副本。

我们可用setuid命令使让执行该命令的用户以该命令拥有者的权限去执行。

三、篡改系统调用
3.1系统调用流程
rootkit是让我们用来隐藏后门程序的,如我们修改ls命令使其不输出我们的程序。为了修改对面的库函数,我们得理解系统调用的过程。
在这里插入图片描述

  • 应用程序 代码调用系统调用( xyz ),该函数是一个包装系统调用的 库函数
  • 库函数 ( xyz )负责准备向内核传递的参数,并触发 软中断 以切换到内核;软中断指令int 0x80执行时,系统调用号会被放入eax寄存器
  • CPU 被 软中断 打断后,执行 中断处理函数 ,即 系统调用处理函数 ( system_call);
  • 系统调用处理函数 查询eax中的调用号,根据SCT的基址找到并调用系统调用服务例程 ( sys_xyz )

因此根据以上流程,想要修改sys_xyz便需要先找到SCT再计算调用地址,那么如何找到SCT的地址呢?

3.2 查找SCT
先看32位系统:

  • 查询idtr寄存获得IDT地址(IDT = Interrupt Descriptor Table 中断描述表)
//idt结构
struct idt
  {
  unsigned short limit;
  unsigned int base;
  }__attribute__((packed));
__asm__ __volatile__("sidt %0":"=m"(idt_table));
  • IDT存放的是中断门,中断门中的前两字节和后两字节存放的是中断向量地址
//中断门结构体
struct idt_gate { 
unsigned short off1; 
unsigned short sel; 
unsigned char nome,flags; 
unsigned short off2; }__attribute__((packed));
  • 找到0x80地址的系统调用处理例程地址,然后从其中找寻SCT地址
unsigned int get_sys_call_table_entry(unsigned int sys_call_entry,char * exp,char exp_len,unsigned int cope)
{
char * begin=sys_call_entry;
char * end=sys_call_entry+cope;
for(;begin<end;begin++)
{
 if(begin[0]==exp[0]&&begin[1]==exp[1]&&begin[2]==exp[2])
  return *((unsigned int *)(begin+3));
}
return 0;
}

64位:
64位有两个表,分别是64位的系统调用表SCT和32位的,其中32位的与上面相同,64位的使用特殊的sysenter/syscall指令。

3.3 篡改系统调用
获得SCT后,我们就能修改对应的系统调用地址了。
需要注意的是,SCT本身是有写保护的,所以,直接去修改会报错。首先要对它取消写保护。

//可以通过设置cr0寄存器的WP位为0,禁止CPU上的写保护。当然,写完之后,还是要将恢复写保护,防止SCT被其他进程意外篡改。
void disable_write_protection(void)
{
        unsigned long cr0 = read_cr0();
        clear_bit(16, &cr0);
        write_cr0(cr0);
}

void enable_write_protection(void)
{
        unsigned long cr0 = read_cr0();
        set_bit(16, &cr0);
        write_cr0(cr0);
}

参考连接:https://www.zhihu.com/people/ustcsse308/activities

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
D:. │ Read me.txt │ 目录里面的文件.txt │ └─Rootkit ├─1。 内核hook │ ├─1)object hook │ │ 1)object hook.doc │ │ │ ├─2)ssdt hook │ │ 2)ssdt hook.doc │ │ SSDT Hook的妙用-对抗ring0 inline hook .doc │ │ swk0207.rar │ │ │ ├─3)inline-hook │ │ 360SuperKill学习之--恢复FSD的IRP处理函数.doc │ │ 3)inline-hook.doc │ │ cnnic.rar │ │ ExpLookupHandleTableEntry.rar │ │ ExpLookupHandleTableEntry2.rar │ │ kill_SecuritySoftware.rar │ │ PsLookupProcessByProcessId执行流程学习笔记.doc │ │ 句柄啊,3层表啊,ExpLookupHandleTableEntry啊.doc │ │ 干掉KV 2008, Rising等大部分杀软.doc │ │ 搜索未导出的函数地址.doc │ │ │ ├─4)idt hook │ │ bhwin_keysniff.rar │ │ IDT Hook .doc │ │ │ ├─5)IRP hook │ │ 5)IRP hook.doc │ │ irphook1.rar │ │ irphook2.rar │ │ irphook3.rar │ │ │ ├─6)SYSENTER hook │ │ 6)SYSENTER hook.doc │ │ SysEnterHook.rar │ │ │ ├─7)IAT HOOK │ │ 7)IAT HOOK.doc │ │ HybridHook.rar │ │ testtest.rar │ │ │ └─8)EAT HOOK │ 8)EAT HOOK.doc │ 利用导出表来禁止一些驱动程序的加载.doc │ 导出表钩子.rar │ ├─2。保护模式篇章第一部分: ring3进ring0之门 │ ├─1)通过调用门访问内核 │ │ 1)通过调用门访问内核.doc │ │ myCallGate.rar │ │ test.rar │ │ │ ├─2)通过中断门访问内核 │ │ 2)通过中断门访问内核.doc │ │ myIntGate.rar │ │ │ ├─3)通过任务门访问内核 │ │ 3)通过任务门访问内核.doc │ │ MyTaskGate.rar │ │ │ └─4)通过陷阱门访问内核 │ 4)通过陷阱门访问内核.doc │ exe.rar │ src.rar │ ├─3。保护模式篇章第二部分:windows分页机制 │ 1)windows分页机制.doc │ ├─4。保护模式篇章第三部分:直接访问硬件 │ ├─1)修改iopl,ring3直接访问硬件 │ │ 1)修改iopl,ring3直接访问硬件.doc │ │ drv.rar │ │ exe.rar │ │ │ ├─2)追加tss默认IO许可位图区域 │ │ 2)追加tss默认IO许可位图区域.doc │ │ drv.rar │

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值