自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(18)
  • 资源 (4)
  • 收藏
  • 关注

原创 用汇编语言编写Linux内核模块

我不喜欢被当今互联网产业吹嘘到比冥王哈迪斯还该死的所谓业务逻辑,我只喜欢机器本身,所以我不会编程,是的,这是报应。我只会C语言和汇编,但是并不很。但我觉得C语言编译器自动生成的那些push RBP之类的指令简直糟糕透了,所以我更喜欢更加纯粹的汇编。我曾经是一个用Java写过界面的人,我也是一个直接用机器码打开别人开不了机的人,我是一个不懂UML但曾经动用过改锥编程的人,至少我崇拜那样的人。本文,我来展示一个用汇编写的Linux内核模块,没有gcc生成的prologue & epilogue,

2020-05-30 12:06:09 7769 4

原创 Linux内核实时监控键盘输入

刚毕业那会儿,VC6学习MFC,总得来点儿好玩的东西才能继续下去,毕竟不是科班出身,得完全靠意义去驱动…那个时候认识了键盘钩子,鼠标钩子之类:https://blog.csdn.net/dog250/article/details/5303610这种方法貌似还可以盗号…只是QQ早就解决了这个问题。不说Windows钩子了,说说Linux系统中如何监控键盘输入,这简直太简单了。关于Linux终端,详见:https://blog.csdn.net/dog250/article/details/7876

2020-05-29 15:57:39 8039 1

原创 int3断点指令的原理和示例

今天有人让我解释一下断点调试的原理,我就想先解释一下int3指令,就写了一篇短文。单字节指令int3的二进制码是0xcc,它的效果是:处理器执行到0xcc时,会陷入内核,执行int3的异常处理代码,比如给当前进程发送一个SIGTRAP信号。就这么简单。剩下的就看信号处理程序如何发挥了。我给出一个简单的代码,演示一下一个程序的 自我单步跟踪 如何实现:#include <stdio.h>#include <sys/mman.h>#include <signal.

2020-05-21 21:00:32 6893 2

原创 窃取Linux内核page以构建窝藏自己的Rootkit

窃取内核的page?是的,偷page意味着我们绕过page分配的一切规则和接口,直接从freelist中摘取一个空闲的page来用。直接看个POC吧,我来模拟一个task_struct的分配过程:#include <linux/module.h>#include <linux/mm.h>#include <linux/sched.h>static void * page_steal(unsigned int j){ void *addr = NULL;

2020-05-20 20:52:00 15757

原创 dump出Linux内核所有的slab对象缉拿内核Rootkit

前面的文章介绍了很多种隐藏进程,隐藏TCP连接,隐藏内核模块的方法,总结起来和大多数网上介绍Rootkit的文章种介绍的方法不同点在于:网上大多数文章均是hook procfs来达到隐藏对象的目的。我的方法则是直接将对象从链表等数据结构中摘除。无疑,我的方法更简单,因为很显然,hook procfs需要修改大量关于VFS API调用相关的代码。但是,跑了和尚跑不了庙,虽然进程,TCP连接,内核模块等摘了链表,它还是在slab中啊!我们只需要dump特定的slab对象,就能找到它们:dump出

2020-05-20 20:23:50 4342

原创 Linux Rootkit躲避内核检测

Rootkit在登堂入室并得手后,还要记得把门锁上。如果我们想注入一个Rootkit到内核,同时不想被侦测到,那么我们需要做的是精妙的隐藏,并保持低调静悄悄,这个话题我已经谈过了,诸如进程摘链,TCP链接摘链潜伏等等,详情参见:https://blog.csdn.net/dog250/article/details/105371830https://blog.csdn.net/dog250/...

2020-05-16 17:23:26 4976

原创 构建/dev/kmem枚举所有Linux内核模块(包括隐藏的)

Linux系统不是可以有lsmod枚举所有内核模块吗?procfs不香吗?干嘛还要费事从/dev/kmem里去枚举?其实,Linux是后来的事了,在最初的UNIX时代,像ps之类的枚举进程的,都是从/dev/kmem里扫描出来的,这就是 一切皆文件 ,后来的Linux内核很不恰当地拓展了procfs,将乱八七糟的东西都往里面塞,像modules,filesystems,vmallocinfo之类,这些明明不是进程,全部扔进去了,这并不合适,但就是因为这是Linux内核,所以什么都是对的!当然,Linux

2020-05-16 16:27:54 16841

原创 修改掉Linux内核缺页中断处理的exception fixup表

近日,我在写内核模块的时候犯了一个低级错误:直接access用户态的内存而没有使用copy_to_user/copy_from_user!在内核看来,用户态提供的虚拟地址是不可信的,所以在一旦在内核态访问用户态内存发生缺页中断,处理起来是非常棘手的。Linux内核的做法是提供了一张 异常处理表 ,使用专有的函数来访问用户态内存。类似 try-catch块一般。具体详情可参见copy_to_user/copy_from_user的实现以及内核文档Documentation/x86/exception

2020-05-13 20:46:59 16658

原创 抓住被恶意隐藏的Linux内核模块

前面的文章介绍了一种相对彻底的隐藏Linux内核模块的方法:https://blog.csdn.net/dog250/article/details/106023941总结下来就是:摘除list,使得/proc/modules中不可见。摘除kobject,使得/sys/modules/中不可见。摘除depend on,使得依赖模块的/sys/modules/$(depended)/holder/中不可见。摘除vmap area list/rbtree,使得/proc/vmallocinfo中不

2020-05-11 23:33:43 5522 1

原创 扫描slab找出被隐藏的task_struct或者随便别的什么

如果一个进程被隐藏了,如何把它检测出来?这里给出一种100%可以检测成功的方法:https://blog.csdn.net/bin_linux96/article/details/105889045代码在那篇文章中已经给出了,我这里就不赘述了。我在本文中所写的,是对上述文章的补充。其实我们大可不必去扫描内存,我来解释一下这是为什么。黑客的攻击对象,或者说所有的被攻击对象,95%以上甚至99%的都是小白用户,我说过不止一次,如果你拿任何黑客技术去挑战安全专家,那基本都是惨败,充其量势均力敌,然而大

2020-05-10 18:51:07 10253

原创 Linux系统创建系统侦测不到的隐形进程(Rootkit技术必备)

在前面的文章中,我不止一次谈到隐藏一个进程的方法,该方法在我看来引以为豪地彻底又直接:将task从tasks链表摘除。将task从pid链表摘除。如此一来除非你扫描run queue或者扫描内存进行特征匹配,否则很难找到这个被隐藏的进程:task即使被隐藏也要进入run queue运行。task的字段值或者其地址本身具有特征。当然,前面提到的perf probe/trace,d...

2020-05-10 18:26:21 16537

原创 隐藏自己的Linux内核模块

前面我提倡使用oneshot模式加载模块,即让模块在init函数中把事情做完后就return -1,这样系统中便不存在这么一个模块,也就不需要隐藏了。但是,由于THIS_MODULE宏的存在,我们发现实际上隐藏一个模块是多么地简单。事实上,模块可以在init函数中通过THIS_MODULE宏实现自隐藏的。既然如此简单,还费事搞oneshot干嘛,精神洁癖总是不想看到return -1。和进程隐藏完全不同,进程无法自己隐藏自己,只能依靠其它模块找到相应的task_struct,然后再摘链。THIS_M

2020-05-09 17:42:59 5723 4

原创 修改ELF可执行文件entry入口感染一个程序

前面的文章在介绍如何将代码注入Linux内核模块的时候,我提到 “修改ELF文件或者PE文件的入口,让它跳到自己的逻辑”这件事很容易。真的很容易吗?是的,真的很容易。本文就是要演示这个的。还记得熊猫烧香病毒吧,包括它在内的早期计算机病毒都是靠这种方式来注入自己的代码并实现自我复制的,当然,它不一定修改的是入口地址,但肯定是修改了ELF/PE文件。若想修改ELF文件,我们先要了解ELF文件的结构,这个只需要花10分钟大致浏览即可,本文不会花篇幅介绍ELF的相关概念。<elf.h>头文件里已

2020-05-08 21:09:04 5470 2

原创 再谈Linux内核模块注入(没有kernel header也能hack kernel)

在前面的一篇文章中,我简单描述了一种Linux内核模块注入的方法:https://blog.csdn.net/dog250/article/details/105978803本文,我们抛开Rootkit这个刺眼的字样,看看这种注入机制还有什么新的玩法。我们知道,编写Linux内核模块必须要有对应版本的kernel header,并且版本号必须100%匹配,一个字都不能差,这对Linux内核模...

2020-05-07 23:54:49 5790

原创 将你的Rootkit代码注入到一个Linux内核模块

前段时间从完成“实时获取系统中TCP半连接数量”这个永远无法上线的半吊子需求开始,一发不可收拾地栽进了Rootkit深坑,有点走火入魔,写了好多篇这方面的随笔并结识了很多朋友,感觉不错。前面的系列文章中,大多数都是描述某个技术点的,而你想利用这个技术点做点实际的好事或者坏事,其实还有一段很长距离的路要走,比如:谁给你的root权限?你会编程并且编写Linux内核模块吗?系统中有gcc和m...

2020-05-07 21:03:22 17131 1

原创 Linux如何动态添加新的系统调用

先来个满满的回忆:https://blog.csdn.net/dog250/article/details/64461922011年写这篇文章的时候,我的女儿小小还没有出生。评价一下这篇文章,总体写得还不错,时间如白驹过隙,快十年过去了,今天我来旧事重提。添加新的系统调用 ,这是一个老掉牙的话题。前段时间折腾Rootkit的时候,我有意避开类似HOOK劫持系统调用的话题,我主要是想来点新...

2020-05-06 22:25:04 16965 2

原创 劫持Linux idle进程做点自己的计算任务

前面谈过如何隐藏一个进程,我说过,隐藏procfs接口那无异于掩耳盗铃,正确的做法应该是将task_struct从任何链表中摘除,仅仅保留于run queue。但CPU利用率会暴露你隐藏的进程…于是hook掉CPU记账接口…但是…于是…害怕被debug,封堵/dev/mem,/proc/kcore,封堵lkm,…左右手互搏…目前防御手稍微占优势。其实,还有一个好办法,即劫持idle,...

2020-05-04 09:14:00 7049

原创 彻底解释Linux select的1024限制(select真的受1024限制吗?不!)

很多很多年前,我被面试 为什么select调用最多只支持1024个文件描述符?我没有答出来,我甚至不知道select到底是干什么的。又过了很多年,我用这个问题面试了别人…在当时,我心里已经有了会令自己满意的预期答案,我预期的大概就是:Linux内核的宏限制了fd_set最多只支持1024…为了避免talk is cheap,我还能show you the code:// inclu...

2020-05-02 22:42:15 15519 12

一个iptables的stateless NAT模块实现

如果你在寻找Linux上配置诸如Cisco设备上的static双向NAT的方法,这个或许就是你想要的; what?你觉得它完不成PAT?是的,它不行。但是想做PAT为何不使用现有的iptables实现呢?它可以自动为你解决元组唯一性问题。不要从概念上分析,事实上,static双向NAT是完全对称的,一对一的 ,也只有在BOX两边的网络在拓扑级别是完全对等的情形下,这种NAT或许才是有用的,Cisco设备经常处在这样的位置,比如一个很大的stub节点的出口位置,比如两个domain的中间位置... 我将名字取为STATIC-2-WAY-NAT,比较长也比较怪,完全不符合UNIX的小写短名传统,我的想法是:这样可以少写很多的帮助信息,因为名字就是自解释的。

2014-12-27

模块化的nf-HiPAC

原版的nf-hipac需要为内核打patch,且只支持较低版本的内核,构建起来相对比较麻烦。 模块化后的nf-hipac可以直接作为内核可加载模块编译,且适配了高版本的Linux内核。为了移植工作简化,去掉了和iptables模块的联动支持!

2014-11-21

配置文件还有一些other

代码和配置iptables配置文件,还有一些别的东西

2010-04-16

关于linux内核以及其他个人体会的文集

本文集是我用将近两年的时间写成的,大多数文章是关于linux内核的,另外还有一些我自己对计算机的理解,还有一些历史,音乐方面的东西。适合于对linux内核思想感兴趣的阅读,文章偏重于对于思想的理解。

2009-09-07

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除