熊喵君的博客

Thinking will not overcome fear but action will.

golang eBPF 开发入门(三)

通信:eBPF 中的 Maps 数据结构分析与应用

0x00 前言 上文 介绍了 ebpf 的内核态 / 用户态的通信示例,本文关注这几个问题: 为什么要使用 maps maps 使用的一般场景 maps 的基本结构及实现原理 maps 的常用操作及场景(用户态 –> 内核态) 项目中的应用 BPF Map 是内核空间和用户空间之间用于数据交换、信息传递的桥梁,是 eBPF 程序中使用的主要数据结构。B...

golang eBPF 开发入门(二)

kprobe/uprobe/tracepoint/CO-RE 开发实践

0x00 前言 本文专注于最右侧的技术 强烈推荐: bcc Reference Guide Linux 系统动态追踪技术介绍 Linux 动态追踪: 0x01 kprobe/uprobe/tracepoint 技术 kprobe vs kretprobe kprobes 主要用来对内核进行轻量级的调试追踪,本质上是在指定的探测点(如函数的某行、函...

数据结构与算法回顾(九):bitmap

bitmap在XDP ACL项目中的应用

0x00 前言 0x01 原理 && 应用 bitmap 比较简单,用一个 bit 来标记某个元素对应的 value,而 Key 即是该元素。由于采用 bit 来存储一个数据,相对节省空间(不考虑稀疏存储的场景下)。假设要对 0-31 内的 3 个元素 (10,17,28) 排序,那么就可以采用 Bitmap 方法(假设这些元素没有重复)。bitmap 算法常用...

Linux procfs 知识点汇总

0x00 前言 proc文件系统(procfs)是一种基于内核的VFS,以文件系统目录和文件形式,提供一个指向内核数据结构的接口,通过它能够查看和改变各种系统属性。从开发者角度说,Procfs 是一种特殊的虚拟文件系统,可以挂载到用户的目录树中,允许用户空间中的进程使用系统调用(如write/read等)方便地读取内核信息 本文内核代码基于 v4.11.6 版本 proc...

gopsutil 使用与分析

一个跨平台的采集库 && windows API 实现

0x00 前言 gopsutil 屏蔽了各个系统之间的差异,具有非常好的可移植性 本文基于 v4.24.7 分析 0x01 应用实战 先引入一个问题,已知 srcip、srcport,如何查找到该信息对应(占用)的进程名字(pid)?思路大致如下: 通过 srcip、srcport 获取进程 pid 通过 pid 获取进程名(进程路径) Linux 实现 Windows...

Linux 系统调用追踪

收集常用的 ebpf 的系统调用:review && hook

0x00 前言 本文汇总下开发过程中收集的一些 Linux 系统调用及用法 0x01 常用系统调用分类 进程控制 fork:创建一个新进程 clone:按指定条件创建子进程 execve:运行可执行文件 exit:中止进程 _exit:立即中止当前进程 getdtablesize:进程所能打开的最大文件数 getpgid:获取指定进程组标识号 ...

Tracee 学习(一):总览

分析一款 Linux 运行时安全及取证工具的实现

0x00 前言 Tracee 是一个用于 Linux 的运行时安全和取证工具,基于 Linux eBPF 技术在运行时跟踪系统和应用程序,并分析收集的事件以检测可疑的行为模式,整体架构如下: 基于eBPF的事件采集器(Capture):在内核中捕获事件 事件处理管道(Pipeline机制):处理和丰富化事件 签名引擎:检测安全威胁 策略管理:控制事件过滤和选择 ...

WinTun && WinDivert 使用与分析

基于Clash等开源项目的一些技术实现总结

0x00 前言 本文汇总下笔者在研究Clash(ClashMeta)等一些windows上的透明代理项目的一些技术思路总结,基于wintun OR windivert 0x01 配置&&功能 进程过滤 Rules 规则可支持按照PROCESS-NAME 源进程名、PROCESS-PATH 源进程路径等走对应的规则,比如 # clash 开 tun 模式代理,根据进...

ego/gocache:一个缓存管理通用工具库的实现

0x00 前言 gocache 是一个可扩展的缓存库(非缓存实现) 作为上层封装了众多开源 cache 库 / redis 的实现 缓存语义的包装,比如 chain cache,loadable cache 等 支持 cache 类通用指标的采集 版本分析基于 lib/v4.1.6 0x01 公共接口 Store adapters:存储适配器 该 interfa...

CS144:一个轻量级 TCP 重组器的实现与分析

0x00 前言 CS144 课程提供了一个用户态 TCP 协议的简单实践,先回顾下 TCP 的若干特点,为了最大限度的保证传输可靠: 1、可靠性保证 校验和,TCP 每个报文都有校验和字段,防止数据丢失或出错 序列化和确认号,保证每个序号的字节都交付,解决丢失、重复等问题 超时重传,对于超时未能确认的报文,TCP 会重传这些包,确保数据达到对端 拥塞控制等等 ...