AndreeaStati/Linux_Process_Context_Agent

GitHub: AndreeaStati/Linux_Process_Context_Agent

基于 eBPF 的 Linux 端点监控原型,在内核态捕获进程与网络事件并在用户空间完成上下文丰富、Sigma 检测和可靠事件传递。

Stars: 0 | Forks: 0

# Linux 进程上下文代理 一个 Linux 端点监控原型,它使用 eBPF 捕获进程和网络活动,使用运行时上下文丰富事件,应用 Sigma 风格的检测规则,并导出受 ECS 启发的结构化 JSON 事件。 ## 概述 传统的基于周期性轮询的进程监控可能会遗漏短暂的进程,并且通常只提供有限的执行上下文。本项目在 Linux 内核中事件发生的瞬间附近收集选定的事件,同时将规范化、丰富、检测和传递逻辑保留在用户空间中。

Linux Process Context Agent architecture

## 主要功能 - 通过 `execve` 和 `execveat` 捕获进程执行。 - 通过 `connect`、`accept` 和 `accept4` 捕获 IPv4 连接活动。 - 收集进程、用户、命令行、可执行文件、IP 和端口信息。 - 使用来自 `/proc` 的数据丰富事件,包括可执行文件路径和 SHA-256 哈希(如果可用)。 - 将事件标准化为受 ECS 启发的 JSON 文档。 - 使用 Sigma 操作符的实用子集评估本地 YAML 规则。 - 过滤代理生成的事件和重复的操作噪音。 - 在可配置的时间窗口内对告警进行去重并关联相关事件。 - 在 HTTP 传递之前将事件本地存储在 SQLite 中。 - 使用退避机制重试失败的传递。 示例检测包括: - 从可写的临时目录执行; - 访问敏感账户文件; - 本地侦察命令; - 使用带有外部 URL 的 `curl` 或 `wget`; - 到非同寻常端口的出站连接。 ## 告警示例 从 `/tmp` 运行可执行文件可能会生成类似以下的告警: ``` { "event": { "kind": "alert", "action": "process_started" }, "process": { "name": "edr_tmp_exec", "executable": "/tmp/edr_tmp_exec" }, "rule": { "id": "lab-process-execution-from-writable-tmp", "level": "high" }, "edr": { "detection": { "matched": true, "engine": "sigma" } } } ``` ## 技术栈 | 领域 | 技术 | | --- | --- | | 内核遥测 | eBPF, BCC, C | | 代理和处理 | Python 3 | | 事件表示 | 受 ECS 启发的 JSON | | 检测规则 | Sigma 风格的 YAML | | 进程信息丰富 | Linux `/proc`, SHA-256 | | 本地持久化 | SQLite | | 事件传递 | HTTP, 批处理, 重试, 退避 | | 部署和测试 | systemd, pytest, shell 脚本 | ## 快速开始 ### 前置条件 - 支持 eBPF 和 BCC 的 Linux - Python 3 - 适用于当前运行内核的 Kernel headers - 用于加载 eBPF 程序的 Root 权限 Ubuntu/Debian 的示例依赖项: ``` sudo apt update sudo apt install -y \ bpfcc-tools python3-bpfcc linux-headers-$(uname -r) \ python3-yaml python3-requests python3-pytest jq sqlite3 ``` 克隆代码仓库: ``` git clone https://github.com/AndreeaStati/Linux_Process_Context_Agent.git cd Linux_Process_Context_Agent ``` ### 使用 systemd 运行 代码仓库包含代理和本地收集器的服务定义: ``` deploy/systemd/edr-agent.service deploy/systemd/edr-receiver.service ``` 检查服务文件并更新与环境相关的值,例如 `WorkingDirectory`、`ExecStart`、配置路径和服务用户。 安装并启动服务: ``` sudo cp deploy/systemd/edr-agent.service /etc/systemd/system/ sudo cp deploy/systemd/edr-receiver.service /etc/systemd/system/ sudo systemctl daemon-reload sudo systemctl enable --now edr-receiver sudo systemctl enable --now edr-agent ``` 检查它们的状态: ``` sudo systemctl status edr-receiver --no-pager sudo systemctl status edr-agent --no-pager ``` 查看最近的日志: ``` sudo journalctl -u edr-receiver -n 20 --no-pager sudo journalctl -u edr-agent -n 20 --no-pager ``` 本地收集器界面可在以下地址访问: ``` http://127.0.0.1:8080/ui?limit=5 ``` ## 演示 运行所有包含的场景: ``` bash tools/scenarios/run_all.sh ``` 一个从临时目录执行的代表测试: ``` START_LINE=$(wc -l < data/received_events.jsonl) cp /bin/true /tmp/edr_tmp_exec chmod +x /tmp/edr_tmp_exec /tmp/edr_tmp_exec sleep 2 tail -n +$((START_LINE+1)) data/received_events.jsonl | jq ' select(tostring | contains("edr_tmp_exec")) ' ``` `tools/scenarios/` 下的其他场景涵盖了侦察活动、敏感文件访问、网络连接和外部 URL 访问。 该项目还包含一个存储转发测试,展示了本地 SQLite 缓冲和 HTTP 收集器再次可用后的自动重传。 ## 测试 运行单元测试: ``` pytest tests/unit_tests -q ``` ## 仓库结构 ``` ├── ebpf/ # eBPF sensors and shared event structures ├── user_space/ # event processing, detection and delivery pipeline ├── rules/ # process and network detection rules ├── config/ # runtime configuration ├── tools/ # collector, UI and demonstration scenarios ├── tests/ # unit, integration and manual tests ├── deploy/systemd/ # systemd service definitions └── data/ # local runtime output and SQLite buffer ``` ## 配置 主要的配置文件是: ``` config/dev.yaml ``` 它控制过滤、信息丰富、规则加载、去重、关联、HTTP 传递和 SQLite 缓冲。 选定的设置也可以通过环境变量覆盖: ``` EDR_OUTPUT_MODE EDR_OUTPUT_DEBUG EDR_HTTP_ENDPOINT EDR_HTTP_BATCH_SIZE EDR_HTTP_FLUSH_INTERVAL EDR_HTTP_TIMEOUT AGENT_EVENTS_DB ``` ## 项目范围 本仓库是一个学术原型,展示了端到端的 Linux 端点监控 pipeline,从内核事件收集到上下文处理、基于规则的检测、告警管理、持久化缓冲和 HTTP 传递。 它并不旨在取代生产级的 EDR 平台。目前的局限性包括:受监控的系统调用集合是选定的一小部分、网络事件侧重于 IPv4、本地实现了 Sigma 的一个子集,以及对于非常短命的进程,`/proc` 信息丰富可能不完整。
标签:AMSI绕过, Docker镜像, EDR, IP 地址批量处理, 威胁检测, 安全规则引擎, 插件系统, 终端检测与响应, 网络信息收集, 脆弱性评估