熊喵君的博客

Thinking will not overcome fear but action will.

Linux HIDS 开发场景收集

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

Linux 内核之旅(二):VFS

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

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

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

0x00 前言 linux内核代码提供了runqslower的工具,该工具用于展示在CPU run队列中停留的时间大于某一值的任务(哪些进程的调度延迟超过了特定的阈值),有两个版本: bcc基于libbpf的版本 内核实现的版本:有若干新特性,比如v5.11版本的提供的helper方法:bpf_task_storage_get 主要涉及到如下hook点: tp_b...

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

理解 ps/ls 等运行原理

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

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

0x00 前言 前文讨论了进程,正在执行的程序,是可执行程序的动态实例,它是一个承担分配系统资源的实体,但操作系统创建进程时,会为进程创建相应的内存空间,这个内存空间称为进程的地址空间,每一个进程的地址空间都是独立的;当一个进程有了进程的地址空间,那么其管理结构被称为内存描述符mm_struct 0x01 内存描述符:mm_struct struct mm_struct { ...

netlink 应用

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

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

Linux 安全对抗收集

安全对抗case及检测策略

0x00 前言 本文主要收集下主机入侵事件及原理 0x01 反弹 Shell 反弹shell,通常是攻击机监听在某个TCP/UDP端口(AS 服务端),目标机(受害机 AS 客户端)主动发起请求到攻击机监听的端口,并将其命令行的输入输出转到攻击机,本质是把 bash OR sh 进程的输入输出重定向到 socket,在 socket 中获取 stdin[0],stdout[1]...

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 设备、操作网络与文件系统等,并为上层应用提供便捷、抽象的应用接口 操作系统内核实际上是抽象出来的概念,本质上与用户...

FILEBEAT :一款轻量级日志采集器agent的实现与分析

数据的搬运工

0x00 前言 下图形象的说明了filebeat的功能,主要包括两点: 支持从不同数据源收集数据并转换成事件 发送事件到指定的输出(支持多种输出) 支持从多种不同的input(上游)中接受需要收集的数据(如log input从日志文件中收集数据) 对收集来的数据进行加工(如多行合并,增加业务自定义字段,json encode等) 将加工好的数据发送到o...