最近一段时间搞了些Rootkit攻略,每个方法都比较彻底,无论是隐藏进程,还是隐藏CPU利用率,隐藏TCP连接,隐藏文件,甚至隐藏CPU风扇的狂转,均采用了相对底层的方案,一般的Rootkit检测很难检测到。

所谓的一般的Rootkit就是那些通常的hook,比方说hook系统调用,hook proc/sys接口,hook library等等,但是这些均是掩耳盗铃的鸵鸟策略,均不彻底。针对这些Rootkit,业内已经有很多的方法来检测:

  • 定期检测重要文件的校验码。
  • 检测text段内存。

然而我一一试了,检测不到我这些Rootkit。

最近很多朋友同事提醒我,为了不让这些方法诉诸恶意,我必须提供破解方案。

以下的代码可以检测我自己的Rootkit:

#include <linux/module.h>
#include <linux/kallsyms.h>#define TEXT_SIZE  0xff0000static int __init checker_init(void)
{s32 offset;int i = 0;unsigned char *pos;unsigned int *code;unsigned long *lcode, target;char *__text;// = 0xffffffff81000000;__text = (void *)kallsyms_lookup_name("_text");for (i = 0; i < TEXT_SIZE; i++) {pos = &__text[i];code = (unsigned int *)pos;// 0xe5894855 的含义就是 "push %rbp; mov %rsp,%rbp" 的字节码if (*code == 0xe5894855) {pos -= 5;lcode = (unsigned long *)pos;// 0x8948550000441f0f 的含义是 "nopl 0x0(%rax,%rax,1) [FTRACE NOP]" 的字节码if (*lcode != 0x8948550000441f0f && *pos == 0xe8) {offset = *(s32 *)&pos[1];target = (unsigned long)__text + i + offset;// 如果call指令的target越过了内核的text区域,则有被hook的可能if (target > (unsigned long)__text + TEXT_SIZE) {// 这里需要根据输出检测是不是“正规的kaptch”,若不是,则报告给经理!printk("## %llx  %llx   %x  %llx\n", *lcode, __text + i - 5, offset, target);}}}}return -1;
}module_init(checker_init);
MODULE_LICENSE("GPL");

我加载了之前的那个隐藏进程和TCP连接(仅仅hook tcp的seq show函数的版本)的rootkit,然后加载我这个新模块,看看效果:

[ 2234.422336] ## 8948551f0650ebe8  ffffffff810b4f10   1f0650eb  ffffffffa011a000
[ 2234.422340] ## 8948551f06504be8  ffffffff810b4fb0   1f06504b  ffffffffa011a000
[ 2234.430383] ## 8948551eb9d16be8  ffffffff81585e90   1eb9d16b  ffffffffa0123000

我们看看这些地址意味着什么。

crash> dis ffffffff810b4f10 1
0xffffffff810b4f10 <account_user_time>: callq  0xffffffffa011a000
crash> dis ffffffff810b4fb0 1
0xffffffff810b4fb0 <account_system_time>:       callq  0xffffffffa011a000
crash> dis ffffffff81585e90 1
0xffffffff81585e90 <tcp4_seq_show>:     callq  0xffffffffa0123000

是不是一下子就查出来了呢!

总结下来就是:

  • 检测内核text段的所有call/jmp指令,只要target越过了text段范围,即有可能被hook了!

至于说如何扫描call/jmp指令,那就是另一个话题了。

背后的意思是, 一般而言,内核函数不会调用模块里的函数的。

再次提示,不要拿这些手艺去做不好的事情,不然经理会不高兴。


浙江温州皮鞋湿,下雨进水不会胖!

如何检测Linux内核的Rootkit相关推荐

  1. 使用Intel XED检测Linux内核是否被rootkit控制

    接着上文继续说: https://blog.csdn.net/dog250/article/details/105474909 我一心一意想写一个指令解析器,我的目的是扫描出Linux内核text段中 ...

  2. 一个基于 LKM 的 Linux 内核级 rootkit 的实现

    博客已迁移至:https://gls.show/ GitHub链接 演示Slides overview rootkit是一种恶意软件,攻击者可以在获得 root 或管理员权限后安装它,从而隐藏入侵并保 ...

  3. 论文中文翻译——Double-Fetch情况如何演变为Double-Fetch漏洞:Linux内核中的双重获取研究

    本论文相关内容 论文下载地址--Web Of Science 论文中文翻译--How Double-Fetch Situations turn into Double-Fetch Vulnerabil ...

  4. 使用rkhunter检测Linux的rootkit

    转载来源 :使用rkhunter检测Linux的rootkit : https://www.jianshu.com/p/9a5fcd4b236b 介绍 rootkit是Linux平台下最常见的一种木马 ...

  5. 为Linux内核text段计算SHA1摘要以检测篡改

    在上文中,左右手互搏,最终成功将二进制stub函数注入到了Linux内核的text段本身,逃过了jmp/call的越界检测: https://blog.csdn.net/dog250/article/ ...

  6. linux 内核 死锁 检查,一种linux内核自旋锁死锁检测报告系统和方法与流程

    本发明涉及内核死锁检测领域,具体的说是一种linux内核自旋锁死锁检测报告系统和方法. 背景技术: linux内核死锁是长期困扰内核开发人员的问题之一,但自内核引入lockdep调试模块之后,内核死锁 ...

  7. Openwrt按键检测分析-窥探Linux内核与用户空间通讯机制netlink使用

    首先看一下Openwrt系统中关于按键功能的使用和修改,以18.06版本为例 按键功能实现在脚本中, 比如18.06/package/base-files/files/etc/rc.button/re ...

  8. Linux内核漏洞精准检测如何做?SCA工具不能只在软件层面

    摘要:二进制SCA工具要想更好的辅助安全人员实现安全审计.降低漏洞检测的误报率,必须向更细颗粒度的检测维度发展,而不仅仅停留在开源软件的层面,同时对漏洞库的要求也需要向细颗粒度的精准信息提出的挑战. ...

  9. 攻击者可提前检测到 Linux 内核的补丁并开发 exploit

     聚焦源代码安全,网罗国内外最新资讯! 编译:奇安信代码卫士团队 宝马.西门子和两所德国大学的研究人员发现,他们可以在Linux 内核修复方案发布之前检测到这些方案,而这些信息可导致攻击者开发并部署e ...

  10. linux内核内存溢出检测,linux下有什么检测内存溢出的工具

    Linux c++上常用内存泄露检测工具有valgrind, Rational purify.Valgrind免费.Valgrind 可以在 32 位或 64 位 PowerPC/Linux 内核上工 ...

最新文章

  1. 2022-2028年中国数字化制造产业研究及前瞻分析报告
  2. docker logs 查看实时日志
  3. 现成Android 5.0系统源代码
  4. Qt中的枚举变量,Q_ENUM,Q_FLAG,Q_NAMESPACE,Q_ENUM_NS,Q_FLAG_NS以及其他
  5. sql 插入多行数据的问题
  6. 2018.09.17 atcoder Digit Sum(数论)
  7. android从本地服务器新浪云,GitHub - SinaCloudStorage/SinaStorage-SDK-Android: Android SDK For 新浪云存储...
  8. LabView学习笔记——简易入门AND初级实战项目(计算器)
  9. 百度音乐 android,百度音乐旧版本
  10. anaconda安装opencv
  11. COMSOL 计算流体动力学模型仿真案例(更新中)
  12. C语言初学: 厘米换算英尺英寸
  13. css 实现局部模糊 backdrop-filter
  14. 五、动态软件体系结构
  15. debian无法使用ifconfig
  16. ubuntu/linux安装Atom
  17. 更深层次理解Python的 列表、元组、字典、集合(工作面试学习必需掌握的知识点)
  18. SQL Server 2005的100范例程序及数据库下载
  19. 飞行出租车、超级高铁和无人驾驶车:现在开始规划是否为时过早?
  20. Google I / O 2016后果

热门文章

  1. 解决无法使用miracast,导致手机无法投屏到电脑的问题
  2. 蛋白质分子动力学模拟
  3. centos7安装python3
  4. 《简明微积分》(第四版)学习笔记
  5. seay代码审计mysql插件报错_Seay源代码审计系统的配置和安装
  6. android开发rn插件,RN native module 插件开发
  7. Android嵌入式组态软件
  8. DevExpress WinForms v21.1 - 富文本编辑器、PDF Viewer全新升级
  9. python requests 上传文件
  10. 通过高德地图api获取地点坐标(以查询物资点为例)