cn_proc 进程事件连接器

cn_proc(process events connector)是linux上一个直接编译进内核的驱动模块,不需要额外加载,用于发送进程事件,依赖connector模块。这里主要看一下cn_proc的工作原理和使用方式。
connector是一个依赖netlink连接用户态和内核态的通用模块。比如可以编写内核驱动和用户态程序通过connector通信,看起来与geniric netlink差不多,可以参考内核源码中的例子,这里不关心这种使用方式。

阅读全文

可执行的动态链接库

一般来说一个动态链接库是不可以直接执行的,但是也有一些例外,比如linux下libpthread,以此为例看一下动态链接库是如何做到可执行的。
至于这有什么用处,可能也就是方便输出一些版本信息编译信息吧。

阅读全文

一次无源码Linux内核模块bug分析

本文记录一次无源码的Linux内核模块bug分析与复现,定位并确认dirpro模块使用了错误的方式查找task_struct,最后给出正确的查找方式。

阅读全文

为什么生产环境服务器不应该使用ELRepo内核

互联网上有大量推荐CentOS系统更新到ELRepo内核的文章和教程,也有不在少数的生产环境服务器被更新为ELRepo内核,但是这种行为明显背离了使用CentOS发行版稳定的初衷,也不符合ELRepo的目标,生产环境使用ELRepo内核也会有明显的隐患。

阅读全文

内存一致性模型、内存屏障与同步

本文记录个人对于内存一致性、内存屏障和一些同步操作以及它们之间关系的理解,并列举linux内核中对应的部分实现。

阅读全文

抢占式RCU与RCU使用

之前在Linux RCU 内核同步机制中对RCU基本流程做了记录,这里记录一下抢占式RCU和RCU使用方面更多的理解。

由于高版本整合了抢占和非抢占RCU更新端的API,不再有synchronize_rcu/synchronize_sched/synchronize_rcu_bh这种区分了,只在临界区API中保留了不同RCU的区别。因此本文在抢占式RCU段落以外的内容,均假定为未开启抢占配置。

阅读全文

tc tbf qdisc 令牌桶过滤器限速队列

本文记录tc tbf qdisc使用netlink与内核通信的参数格式、数据含义、tc命令中tbf相关实现与内核中相关实现。增加老版本内核中tbf队列bug分析

阅读全文

gdb查看寄存器及内存数据与函数调用栈分析

在分析kdump生成的vmcore文件时,有时会需要分析函数调用栈及函数参数与局部变量的情况,这里以使用gdb为例调试分析一下函数调用的栈帧创建与销毁。

阅读全文

libpcap在libvirt虚拟化环境下捕获数据包不完整的一种情况分析

在虚拟化环境下镜像流量交给suricata分析,遇到了文件还原不完整的问题,同环境下使用tcpdump抓包查看可以看到捕获的数据包存在大包被截断的情况。这里分析一下为什么tcpdump会出现数据包被截断的情况以及什么条件下会触发该情况,suricata的问题不完全一致,但是基本思路是一样的。

阅读全文

一种简单的bash审计方法

在高交互蜜罐环境中,ssh服务允许攻击者成功由ssh登录并获取到一个可进行各种操作的真实shell,同时需要记录shell中所有操作。严谨的方案是在bash源码及内核模块中做审计记录。这里给出另一种娱乐性质的方案,简单而tricky的方式达成该目标的基本功能,当然这种方案在了解的人面前很容易被绕过。

阅读全文