熊喵君的博客

Thinking will not overcome fear but action will.

EBPF 内核态代码学习(三):基于 XDP 技术的ACL/Firewall系统实现

基于ebpf技术实现的XDP应用分析

0x00 前言 本文分析下基于XDP技术的防火墙相关实现细节,主要涉及如下项目: oxdpus xdp-firewall TyrShield 0x01 oxdpus项目 oxdpus是一个基于XDP技术实现的包过滤项目,支持下面指令: add Appends a new IP address to the blacklist attac...

Linux HIDS 开发场景收集

0x00 场景收集 如何根据task_struct结构,获取到事件对应运行二进制的绝对路径? 如何获取进程打开的文件fd列表? 如何根据进程打开的文件fd列表,并且判断其是否为socket网络句柄? 如何根据task_struct结构,获取该进程对应的进程链信息(类似pstree)? 如何获取某个进程(task_struct)对应的socket五元组信息(如果打...

Linux 内核之旅(二):VFS(基础篇)

VFS的基本数据结构及关系

0x00 前言 Linux 支持多种文件系统格式(如 ext2、ext3、reiserfs、FAT、NTFS、iso9660 等),不同的磁盘分区或其它存储设备都有不同的文件系统格式,然而这些文件系统都可以 mount 到某个目录下,使开发者看到一个统一的目录树,各种文件系统上的目录和文件,读写操作用起来也都是一样的。Linux 内核在各种不同的文件系统格式之上做了一个抽象层,使得文件...

EBPF 内核态代码学习(一):进程调度延时计算

runqslower/runqlat 等CPU性能工具实现分析

0x00 前言 调度延迟是指一个任务task_struct具备运行的条件(进入 CPU 的 runqueue),到真正执行(获得 CPU 的执行权)的这段等待调度的时间。延迟是因为 CPU 还被其他任务占据,而且可能还有其他在 runqueue 中排队的任务(见前文),排队的任务越多,调度延迟就可能越长,所以这也是间接衡量 CPU 负载的一个指标(CPU 负载通过计算各个时刻 runq...

EBPF 内核态代码学习(二):使用 eBPF 隐藏进程 / 文件信息

理解 ps/ls 等运行原理

0x00 前言 在主机安全对抗中,有一项技术叫进程隐藏,即能让特定的进程对 os 的常规检测机制变得不可见,其基本原理是 Linux 系统的 VFS,每个进程都在 /proc/ 目录下有一个以其进程 ID 命名的子目录,其中包含了该进程的各种信息(ps 命令就是通过查找这些文件夹来显示进程信息的,ls 命令也是同样原理) 进程隐藏:如果能隐藏某个进程的 /proc/${id} ...

Linux 内核之旅(三):虚拟内存管理(上)

进程视角的虚拟内存管理

0x00 前言 前文讨论了进程,正在执行的程序,是可执行程序的动态实例,它是一个承担分配系统资源的实体,但操作系统创建进程时,会为进程创建相应的内存空间,这个内存空间称为进程的地址空间,每一个进程的地址空间(虚拟内存空间)都是独立的;当一个进程有了进程的地址空间,那么其管理结构被称为内存描述符mm_struct。有趣的说,虚拟内存其实是 CPU 和操作系统使用的一个障眼法,联手给进程编...

netlink 应用

如何基于 netlink 机制实现进程监控

0x00 前言 本文介绍下基于 netlink 机制构建进程创建审计监控,Netlink 是一个套接字家族(socket family),被用于内核与用户态进程以及用户态进程之间的 IPC 通信 Netlink Connector 是一种特殊的基于 Netlink 协议的通信机制(协议号是 NETLINK_CONNECTOR),它构建在 Linux 内核中,用于内核与用户空间应用之间...

Linux 安全对抗收集

安全对抗case及检测策略

0x00 前言 本文主要收集下主机入侵事件及原理 相关参考: Linux 应急响应手册 入侵过程小结 1、外部侦查 外部侦查即未获得目标任何权限的情况下,通过网络对目标进行信息/情报收集 常见手法为主机扫描,以及应用层扫描 2、外部攻击 外部攻击即在收集到对应信息后,通过特定应用,特定漏洞或者主机漏洞来对目标进行攻击,并获取上传/执行等能力的...

Linux 内核之旅:基础知识

0x00 前言 双向链表 hash 链表 队列:Priority sorted lists used for mutexes, drivers, etc rbtree:Red-Black trees are used for scheduling, virtual memory management, to track file descriptors and dir...

Linux 内核之旅(一):进程

0x00 前言 本文代码基于 v4.11.6 版本 Operating System Kernel 操作系统内核(Operation System Kernel)本质上也是一种软件,可以看作是普通应用程序与硬件之间的一层中间层,其主要作用便是调度系统资源、控制 IO 设备、操作网络与文件系统等,并为上层应用提供便捷、抽象的应用接口 操作系统内核实际上是抽象出来的概念,本质上与用户...