熊喵君的博客

Thinking will not overcome fear but action will.

QNSM 实现:原理&&分析

0x00 前言 QNSM是一个旁路部署的全流量,实时,高性能网络安全监控引擎,基于DPDK开发,集成了DDOS检测和IDPS模块。 DDOS检测 DDOS检测功能包括: 全流量检测,可以部署在IDC环境,支持SYN,ACK,RST,FIN,SYNACK,ICMP,UDP FLOOD以及反射攻击(DNS/NTP/SSDP反射…) 实时多维度聚合数据 流采样数据,提供攻击...

基于golang的systemd守护进程应用分析

0x00 前言 场景如下: 服务开机启动 需要时刻监测某个重要服务是否在线,如果程序报错退出则自动重启服务,以此来保持服务常在线 systemd简介 1、基本操作,假设服务程序路径部署在/usr/local/bin/systemd-test,配置存储在/etc/systemd/system/systemd-test.service [Unit] Description...

golang eBPF 开发入门(六)

ebpf的一些细节补充

0x00 前言 0x01 Tail Call 尾调用 VS 普通函数调用 bpf_tail_call 机制在使用时有若干限制: 尾调用的程序必须已经加载到了 eBPF 程序的同一个 eBPF MAP 类型的数据结构中 bpf_tail_call 的调用深度是有限的(通常是32),以防止无限循环 尾调用不会传递任何参数,被调用的程序需要通过共享的 eBPF map ...

golang eBPF 开发入门(五)

网络开发之 XDP/TC 基础

0x00 前言 在 linux 内核网络协议栈中有多个网络钩子,数据包在进入到网卡再到流出网卡的过程会触发这些钩子上注册的回调函数执行相关过滤动作。如 netfilter 框架中的 5 个钩子,针对 ip 数据包进行过滤。除此之外在更低一层还有 xdp 和 tc 系统对数据包进行处理 XDP 与 TC 的位置 XDP:Ingress TC:Egress XDP...

主机入侵检测系统 Elkeid:设计与分析(一)

后台服务模块

0x00 前言 Elkeid 后台主要模块如下: AgentCenter 模块:负责与 Agent 进行通信,采集 Agent 数据并简单处理后汇总到消息队列集群,同时也负责对 Agent 进行管理包括 Agent 的升级,配置修改,任务下发等。同时 AgentCenter 也对外提供 HTTP 接口,Manager 模块通过这些 HTTP 接口实现对 AgentCenter ...

golang eBPF 开发入门(四)

BPF Map 内核实现:数据结构相关的使用与原理分析

0x00 前言 本文主要介绍eBPF应用开发涉及到的数据结构,基于内核版本6.6.47 BPF Map 是 eBPF 程序与用户态程序、以及 eBPF 程序之间共享数据的核心机制。Map 本质上是驻留在内核空间的key-value存储,通过 bpf_xxxx 系统调用进行创建和操作。不同类型的 Map 适用于不同场景,选择合适的 Map 类型对程序性能至关重要 0x01 BP...

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...