熊喵君的博客

Thinking will not overcome fear but action will.

Linux 内核之旅(十三):epoll

epoll机制在内核的运行原理

0x00 前言 Linux的IO 多路复用机制(I/O Multiplexing)是一种通过单个线程或进程同时管理多个 I/O 通道(如网络套接字、文件描述符)的机制,用来解决大量并发文件描述符fd场景下,如何快速发现哪些fd触发了事件(读/写)。为了解决遍历fds导致的性能浪费,内核提供了select、poll、epoll这几类机制,本文就以内核的角度来拆解下epoll机制的实现 ...

EBPF 内核态代码学习(三):network stack tracing

tcpstate、tcprtt、tcpconnlat等工具实现分析

0x00 前言 本文学习下基于ebpf技术的网络(协议栈)追踪 tcpstates:用于记录 TCP 连接的状态变化 tcprtt:用于记录 TCP 的往返时间(RTT, Round-Trip Time),同样也可以基于cgroup 统计一段时间内 tcp rtt 的分布,显示连接的状态信息 tcpconnect:基于 cgroup 监控 tcp 网络连接,显示源IP、目的I...

Linux 安全对抗收集(rootkit篇)

rootkit 介绍及攻防原理(持续更新)

0x00 前言 本文对rootkit进行一些原理上的整理 0x01 rootkit基础概念 rootkit是一种恶意程序,能够隐藏自身及相关活动(如模块、进程、文件、网络连接等),用以规避安全检测工具。一般分为用户态、内核态rootkit两种: 用户态rootkit:运行在用户空间,通过劫持库函数或注入进程实现隐藏 内核态rootkit:运行在内核空间,修改内核数据...

Kubernetes JOB && CRONJOB 实现分析

0x00 前言 CronJob 管理基于时间的 Job,即: 在给定时间点只运行一次 周期性地在给定时间点运行。创建周期性运行的 Job,例如:数据库备份、发送邮件 参考使用文档 举个例子,如下的CRONJOB模版: apiVersion: batch/v1 kind: CronJob metadata: name: my-hello-job spec: sche...

Linux 内核之旅(十二):内核视角下的三次握手

0x00 前言 本文从内核视角来跟踪下客户端与服务端的三次握手的流程,代码基于 v4.11.6 版本 上图是经典的TCP切换状态机,不过内核v4.11.6 TCP三次握手的状态有些许改变,服务端新增了一个TCP_NEW_SYN_RECV状态 TCP状态切换:三次握手 client:TCP_SYN_SENT server:TCP_NEW_SYN_RECV clien...

Linux 内核之旅(十四):Linux内核的页表体系

0x00 前言 前文介绍过内核的虚拟内存管理的基础知识,本文继续学习下Linux内核下的页表机制 Linux 内核之旅(三):虚拟内存管理(上) 虚拟内存是 CPU 和内核使用的一个障眼法,让进程误以为自己独占了全部的内存空间(对进程而言,它们各自看到的虚拟内存空间地址范围都是一样的)。如此内核为每个进程营造出一片独立的虚拟地址空间,使得进程与进程之间相互隔离,解决了多进程...

Linux 内核之旅(十一):追踪 open 系统调用

VFS

0x00 前言 本文代码基于 v4.11.6 版本 Linux一切皆文件,如常规文件、目录、目录中的.和..、以及软/硬连接、socket、管道等,这些都属于文件 用户进程在能够读 / 写一个文件之前必须要先 open 这个文件。对文件的读 / 写从概念上说是一种进程与文件系统之间的一种有连接通信,所谓打开文件实质上就是在进程与文件之间建立起链接。在文件系统的处理中,每当一个进程重...

Linux 内核之旅(十):内核数据包发送

基础知识汇总与可观测

0x00 前言 本文代码基于 v4.11.6 版本 0x01 报文发送过程 本小节使用以太网的物理网卡,以一个UDP包的发送过程作为示例,了解下具体的发包过程 socket层 1、socket():创建一个UDP socket结构体,并初始化相应的UDP操作函数 2、sendto(sock, ...):应用层的程序(Application)调用该函数开始发送数据包,该函数会进...

Linux 内核之旅(九):OverlayFS[2]

理解docker存储驱动overlay2

0x00 前言 0x01 overlayFS 基础 OverlayFS是一种堆叠文件系统,它依赖并建立在其它文件系统(如ext4fs/xfs等)之上,并不直接参与磁盘空间结构的划分,仅仅将原来底层文件系统中不同的目录进行(策略式)合并,然后向用户呈现。对于用户来说,它所见到的overlay文件系统根目录下的内容就来自挂载时所指定的不同目录按策略合并之后的结果,挂载文件的基本命令...

Linux 内核之旅(八):内核数据包接收

基础知识汇总

0x00 前言 笔者最近在研究基于ebpf的网络协议栈可观测及tracing,本文对协议栈的数据处理基础做了若干总结 本文代码基于 v4.11.6 版本 推荐阅读: Linux 网络栈接收数据(RX):原理及内核实现(2022) 图解Linux网络包接收过程 0x01 网卡的报文接收过程 一些背景知识: 网卡驱动是加载到内核中的模块,负责衔接网卡和内核的网...