自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Netfilter,iptables/OpenVPN/TCP guard:-(

我不会编程,但也不是一点都不会,我稍微会一些 :-)

原创 闲谈IPv6系列文章集锦

本文总结一个目录提纲,只要是给自己看的,记录一下哪些东西已经总结过了。 闲谈IPv6-6to4隧道和ISATAP隧道: https://blog.csdn.net/dog250/article/details/88644797 闲谈IPv6-说说IPv6地址分配和BGP: https://b...

2019-03-18 22:38:43 32667 10

原创 Linux系统调试之return probe原理和示例
原力计划

前面谈了kprobe的原理,其实uprobe也差不多: https://blog.csdn.net/dog250/article/details/106520658 那么return probe如何实现呢? 我们知道,hook一个函数的起始位置非常容易,拿函数名当指针,直接修改成0xcc或者别的什...

2020-06-04 19:54:25 98 0

原创 int3和SingleStep联合实现Linux系统键盘监控(kprobe原理)

就着Linux系统键盘监控这个话题,再写点什么。 前面已经写了三篇,可以一起汇总着看,算是一个简单的一题多解吧: 标准inline hook的方法: https://blog.csdn.net/dog250/article/details/106425811 手工push/ret jmp inl...

2020-06-03 20:41:24 316 0

原创 x86_64平台SingleStep单步调试原理和示例

先看一个程序: // simple.c int value = 0; int main(int argc, char **argv) { value ++; value ++; value ++; value ++; value ++; value ++; } 现在想单步调试它,跟踪...

2020-06-03 19:28:44 329 0

原创 面向效果处理int3实时监控Linux系统键盘输入

前文手工处理了int3中断,实现了监控Linux系统键盘输入的效果: https://blog.csdn.net/dog250/article/details/106481123 但是还是太复杂了。在这篇文章中,我深深地知道, int3替换了原来的单字节指令push %rbp,所以int3的处理中...

2020-06-02 20:06:01 481 0

原创 手工处理int3实时监控Linux系统键盘输入

上周写了一篇Linux系统监控键盘输入的文字: https://blog.csdn.net/dog250/article/details/106425811 事后想了下,能不能不用标准的5字节32位相对地址跳转实现inline hook,换一种方法实现呢? 嗯,换int3实现! stap就是int...

2020-06-01 20:55:51 749 0

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

我不喜欢被当今互联网产业吹嘘到比冥王哈迪斯还该死的所谓业务逻辑,我只喜欢机器本身,所以我不会编程,是的,这是报应。 我只会C语言和汇编,但是并不很。 但我觉得C语言编译器自动生成的那些push RBP之类的指令简直糟糕透了,所以我更喜欢更加纯粹的汇编。 我曾经是一个用Java写过界面的人,我也是一...

2020-05-30 12:06:09 1241 2

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

刚毕业那会儿,VC6学习MFC,总得来点儿好玩的东西才能继续下去,毕竟不是科班出身,得完全靠意义去驱动…那个时候认识了键盘钩子,鼠标钩子之类: https://blog.csdn.net/dog250/article/details/5303610 这种方法貌似还可以盗号…只是QQ早就解决了这个问...

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

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

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

2020-05-21 21:00:32 1773 1

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

窃取内核的page?是的,偷page意味着我们绕过page分配的一切规则和接口,直接从freelist中摘取一个空闲的page来用。 直接看个POC吧,我来模拟一个task_struct的分配过程: #include <linux/module.h> #include <linu...

2020-05-20 20:52:00 1393 0

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

前面的文章介绍了很多种隐藏进程,隐藏TCP连接,隐藏内核模块的方法,总结起来和大多数网上介绍Rootkit的文章种介绍的方法不同点在于: 网上大多数文章均是hook procfs来达到隐藏对象的目的。 我的方法则是直接将对象从链表等数据结构中摘除。 无疑,我的方法更简单,因为很显然,hook ...

2020-05-20 20:23:50 1800 0

原创 Linux Rootkit躲避内核检测

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

2020-05-16 17:23:26 2319 0

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

Linux系统不是可以有lsmod枚举所有内核模块吗?procfs不香吗?干嘛还要费事从/dev/kmem里去枚举? 其实,Linux是后来的事了,在最初的UNIX时代,像ps之类的枚举进程的,都是从/dev/kmem里扫描出来的,这就是 一切皆文件 ,后来的Linux内核很不恰当地拓展了proc...

2020-05-16 16:27:54 2227 0

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

近日,我在写内核模块的时候犯了一个低级错误: 直接access用户态的内存而没有使用copy_to_user/copy_from_user! 在内核看来,用户态提供的虚拟地址是不可信的,所以在一旦在内核态访问用户态内存发生缺页中断,处理起来是非常棘手的。 Linux内核的做法是提供了一张 异常...

2020-05-13 20:46:59 2294 0

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

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

2020-05-11 23:33:43 2382 0

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

如果一个进程被隐藏了,如何把它检测出来? 这里给出一种100%可以检测成功的方法: https://blog.csdn.net/bin_linux96/article/details/105889045 代码在那篇文章中已经给出了,我这里就不赘述了。 我在本文中所写的,是对上述文章的补充。 其实我...

2020-05-10 18:51:07 2409 0

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

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

2020-05-10 18:26:21 2370 0

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

前面我提倡使用oneshot模式加载模块,即让模块在init函数中把事情做完后就return -1,这样系统中便不存在这么一个模块,也就不需要隐藏了。 但是,由于THIS_MODULE宏的存在,我们发现实际上隐藏一个模块是多么地简单。事实上,模块可以在init函数中通过THIS_MODULE宏实现...

2020-05-09 17:42:59 2375 0

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

前面的文章在介绍如何将代码注入Linux内核模块的时候,我提到 “修改ELF文件或者PE文件的入口,让它跳到自己的逻辑”这件事很容易。 真的很容易吗?是的,真的很容易。本文就是要演示这个的。 还记得熊猫烧香病毒吧,包括它在内的早期计算机病毒都是靠这种方式来注入自己的代码并实现自我复制的,当然,它不...

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

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

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

2020-05-07 23:54:49 2502 0

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

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

2020-05-07 21:03:22 2583 0

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

先来个满满的回忆: https://blog.csdn.net/dog250/article/details/6446192 2011年写这篇文章的时候,我的女儿小小还没有出生。 评价一下这篇文章,总体写得还不错,时间如白驹过隙,快十年过去了,今天我来旧事重提。 添加新的系统调用 ,这是一个老掉...

2020-05-06 22:25:04 2540 0

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

前面谈过如何隐藏一个进程,我说过,隐藏procfs接口那无异于掩耳盗铃,正确的做法应该是将task_struct从任何链表中摘除,仅仅保留于run queue。 但CPU利用率会暴露你隐藏的进程… 于是hook掉CPU记账接口… 但是… 于是… 害怕被debug,封堵/dev/mem,/proc/...

2020-05-04 09:14:00 2755 0

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

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

2020-05-02 22:42:15 3030 0

原创 通过trace stack检测内核函数是否被hook
原力计划

Rootkit需要及时发现是否有程序抓它,而侦测程序本身也需要时刻警惕Rootkit的注入,左右互搏。 侦测程序发现Rootkit的手段是非常多的,前面我介绍过通过内核text段互相调用的地址范围来静态扫描的方式: https://blog.csdn.net/dog250/article/deta...

2020-04-30 17:20:42 2758 0

原创 Linux Rootkit的反侦测手段漫谈
原力计划

任何恶意程序和反恶意程序都是左右手互搏,无关褒贬善恶,它们使用的均是同一种技术或者说手段。 之前说了很多如何做一个藏得很深的Rootkit,无论是藏进程,藏TCP连接,还是藏文件,当然,也顺便说了很多如何发现这些Rootkit的技巧,本文主要聊一下 Rootkit需要主动做哪些具体措施以反制侦测程...

2020-04-30 12:04:32 1295 1

原创 Linux fork之后,到底是子进程先运行还是父进程先运行
原力计划

大约10年前,我写过两篇关于Linux内核CFS调度器的文章: https://blog.csdn.net/dog250/article/details/5302865 https://blog.csdn.net/dog250/article/details/5302864 我觉得这两篇文章是垃圾...

2020-04-25 21:52:01 2983 0

原创 从一个CFS调度案例谈Linux系统卡顿的根源
原力计划

Linux系统是一个让人感觉卡顿的系统,先别怼,让我说完: 卡顿的原因在于Linux内核的调度器从来不关注业务场景! Linux内核只能看到机器而不愿意看到应用。它倾向于自下而上从CPU角度提高吞吐,而不是自上而下从业务角度提高用户体验。 拟人来看,Linux是一个好程序员,但不是一个好经...

2020-04-23 22:51:05 1607 3

原创 密钥分存技术(现代虎符)-如何把密钥存在不同的地方

虎符 上周的一天午后散步,和同事聊起了古代的虎符,就下面这玩意儿: 这玩意儿作为调动军队的凭证在古代发挥了巨大的作用,现代美国依然是采用了类似的方式调动军队,可见,这种将权力分开存储的思想在古今中外是殊途同归的。   那么,作为互联网安全的根基,现代密码学中是如何应用这种思想的呢?这里就...

2020-04-21 10:41:11 13536 1

原创 Linux防止stack缓冲区溢出的有效方法
原力计划

检测和防治stack缓冲区溢出的方法可谓是汗牛充栋,如果讲起来,那便是一个系列,我也不知道该从何说起。比如说stack-protector选项,我之前就介绍过: https://blog.csdn.net/dog250/article/details/90735908 然而,总觉得有点纸上谈兵的意...

2020-04-19 11:19:32 1462 0

原创 关于cache miss和prefetch miss的实验

内存连续就一定会获得高性能吗?是的! 连续内存访问优于矩阵按列内存访问,矩阵按列访问优于随机访问。 但其背后仅仅是prefetch的功劳吗?不一定! #include <stdio.h> #include <stdlib.h> #include <unistd.h&g...

2020-04-18 17:14:35 1552 0

原创 保持hlist_node内存的紧凑性连续性以提高遍历性能
原力计划

遍历? 是的,遍历!遍历本来就是饱受诟病的事情,它就是为低效而生的,若要提高性能,采用别的数据结构多好,干嘛要提高遍历的性能?! 我不会没事瞎写文章充数的,一定是发生了什么,当然,这个我放到最后说。 是的,遍历也需要高性能。特别是在某些万不得已的折中环境下,比如hlist本来就是哈希链表了,为了解...

2020-04-17 00:03:04 1665 0

原创 Linux内核快速处理路径尽量多用slab而慎用kmalloc
原力计划

题目是一个典型 《Effective C++》 的风格。 事情是这样的,我大致说一下。 我在开发一个Netfilter模块,在PREROUTING匹配一些数据包,显而易见,都能想到使用哈希表hlist作为数据结构的容器,其中装有下面的结构体: struct item { struct hlist...

2020-04-15 22:36:35 1808 1

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

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

2020-04-14 22:40:07 1326 5

原创 使用Intel XED检测Linux内核是否被rootkit控制
原力计划

接着上文继续说: https://blog.csdn.net/dog250/article/details/105474909 我一心一意想写一个指令解析器,我的目的是扫描出Linux内核text段中的所有的jmp和call指令,从而检测内核是否已经被篡改。基于以下事实: 一般内核函数互相调用都...

2020-04-13 22:12:59 1318 2

原创 根据call/jmp操作数偏移检测内核是否被rootkit控制

今天上午,我写了一个检测我自己的rootkit的代码,但是那个代码只能检测hook住函数开头ftrace stub的情况: https://blog.csdn.net/dog250/article/details/105465553 手艺人不能就此罢休。我下午准备写一个x86_64指令解析器的,这...

2020-04-12 20:04:32 2619 0

原创 如何检测Linux内核的Rootkit

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

2020-04-12 10:58:31 1345 2

原创 Linux链表list_head/hlist_head/hlist_nulls_head的并发性

我们被灌输过各种高效复杂的数据结构,比如rb tree,skip list等等,但现实中,我们经常用各种List管理我们的数据,因为它的操作非常简单。 如果数据量小或者不太在乎时间,选择list_head。 如果数据量大且对查找性能要求很高,读多写少的情况下,选择hlist。 如果数据量大且对查...

2020-04-11 11:09:12 1293 1

原创 当CPU过热时让你的风扇不再狂转(Rootkit之最后)

进程隐藏了,CPU利用率隐藏了,TCP连接隐藏了,临时文件也隐藏了… https://blog.csdn.net/dog250/article/details/105292504 https://blog.csdn.net/dog250/article/details/105394840 http...

2020-04-10 17:39:42 1249 0

原创 Linux系统如何隐藏一个文件?

自隐藏进程,隐藏CPU利用率,隐藏TCP连接后,现在要隐藏文件了! 关于进程隐藏,CPU利用率隐藏,TCP连接隐藏的手艺,请看: https://blog.csdn.net/dog250/article/details/105371830 https://blog.csdn.net/dog250/...

2020-04-09 23:28:28 1262 1

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