用cursor+Go语言编写的轻量级EDR(终端检测与响应)系统,用于监控和保护计算机系统免受恶意软件和高级威胁的侵害。
功能特点
核心功能
-
进程监控
-
实时监控系统进程的创建和终止 -
收集进程信息(PID、名称、路径、命令行、用户等) -
检测可疑进程行为 -
CPU 使用率限制:限制 Agent 的 CPU 使用率,避免影响系统性能 -
网络监控
-
监控网络连接的建立和关闭 -
收集连接信息(本地/远程地址和端口、协议等) -
检测可疑网络活动 -
文件系统监控
-
监控文件的创建、修改和删除 -
计算文件哈希值用于完整性验证 -
检测可疑文件操作 -
Windows注册表监控
-
监控关键注册表位置的更改(仅Windows系统) -
检测自启动项的修改 -
检测系统配置的更改 -
ATT&CK 攻击监控
-
基于 MITRE ATT&CK 框架的攻击检测 -
监控可疑命令和进程路径 -
检测常见的攻击技术和战术 -
监控计划任务的创建和修改 -
Windows 事件日志监控
-
监控 Windows 安全事件日志 -
检测重要的系统和应用程序事件 -
关注登录失败、账户创建、权限更改等关键事件 -
增强的规则引擎
-
支持多种规则类型(进程、网络、文件、注册表) -
支持复杂条件表达式 -
支持多种操作符(=, !=, >, <, >=, <=, contains, startswith, endswith, matches, in, not in) -
支持正则表达式匹配 -
加密通信
-
使用RSA/AES混合加密 -
支持HTTPS通信 -
支持证书验证 -
密钥管理功能 -
自动响应功能
-
终止可疑进程 -
隔离可疑文件 -
阻止可疑网络连接 -
记录安全事件 -
Web控制台
-
仪表板显示系统状态 -
主机管理 -
事件管理 -
规则管理 -
设置管理
系统架构
系统由三个主要组件组成:
-
Agent:安装在终端设备上的轻量级客户端,负责收集数据和执行响应操作 -
Server:中央服务器,接收和处理来自Agent的数据,执行高级分析 -
Web Console:基于Web的用户界面,用于查看和管理安全事件
安装与使用
前提条件
-
Go 1.20或更高版本 -
SQLite3 -
对于Windows注册表监控:Windows操作系统
编译
ounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(line
# 克隆仓库
git clone https://github.com/aiedr/edr.git
cd edr
# 编译Agent
go build -o edr-agent ./cmd/agent
# 编译Server
go build -o edr-server ./cmd/server
运行Agent
ounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(line
# 基本用法
./edr-agent
# 指定服务器地址
./edr-agent -server=https://server-address:8443
# 指定扫描间隔
./edr-agent -interval=30s
# 指定监控目录
./edr-agent -dirs=/etc,/bin,/usr/bin
# 指定监控注册表键(仅Windows)
./edr-agent -regs="HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run"
# 指定服务器证书
./edr-agent -cert=/path/to/server-cert.pem
# 不验证服务器证书(不推荐用于生产环境)
./edr-agent -insecure
# 指定服务器公钥
./edr-agent -pubkey=/path/to/server-public.pem
# 指定隔离目录
./edr-agent -quarantine=/path/to/quarantine
# 限制 CPU 使用率(百分比)
./edr-agent -cpulimit=5.0
# 调试模式
./edr-agent -debug
运行Server
ounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(line
# 基本用法
./edr-server
# 指定监听地址
./edr-server -addr=:8443
# 指定数据库文件
./edr-server -db=/path/to/server.db
# 指定TLS证书和密钥
./edr-server -cert=/path/to/cert.pem -key=/path/to/key.pem
# 指定RSA私钥
./edr-server -privkey=/path/to/private.pem
# 调试模式
./edr-server -debug
配置
Agent配置
Agent可以通过命令行参数或配置文件(JSON格式)进行配置:
ounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(line
{
"server_addr": "https://server-address:8443",
"scan_interval": "30s",
"monitor_dirs": ["/etc", "/bin", "/usr/bin"],
"monitor_regs": ["HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run"],
"debug": false,
"cert_file": "/path/to/server-cert.pem",
"insecure": false,
"public_key_file": "/path/to/server-public.pem",
"quarantine_dir": "/path/to/quarantine",
"cpu_limit": 5.0
}
Server配置
Server可以通过命令行参数或配置文件(JSON格式)进行配置:
ounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(line
{
"addr": ":8443",
"db_file": "/path/to/server.db",
"cert_file": "/path/to/cert.pem",
"key_file": "/path/to/key.pem",
"private_key_file": "/path/to/private.pem",
"debug": false
}
规则系统
规则用于检测可疑活动并触发响应。规则示例:
ounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(line
{
"id": 1,
"name": "可疑进程名称",
"description": "检测常见的恶意软件进程名称",
"type": "process",
"severity": "high",
"enabled": true,
"conditions": [
"name contains 'backdoor'",
"name contains 'trojan'",
"name contains 'keylogger'"
],
"actions": ["alert", "log", "terminate_process"]
}
规则类型
-
process:进程规则 -
network:网络规则 -
file:文件规则 -
registry:注册表规则(仅Windows) -
attack:ATT&CK 攻击规则 -
event_log:Windows 事件日志规则
条件操作符
-
=:等于 -
!=:不等于 -
>:大于 -
<:小于 -
>=:大于等于 -
<=:小于等于 -
contains:包含 -
startswith:以...开始 -
endswith:以...结束 -
matches:匹配正则表达式 -
in:在列表中 -
not in:不在列表中
响应动作
-
alert:创建警报 -
log:记录事件 -
terminate_process:终止进程 -
quarantine_file:隔离文件 -
block_connection:阻止网络连接
ATT&CK 攻击监控
ATT&CK 攻击监控基于 MITRE ATT&CK 框架,用于检测常见的攻击技术和战术。主要功能包括:
-
可疑命令检测:检测常见的恶意命令,如 PowerShell 编码命令、远程下载执行等 -
可疑路径检测:检测可疑的文件路径,如临时目录中的可执行文件 -
计划任务监控:监控计划任务的创建和修改,检测可疑的计划任务
示例检测规则:
ounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(line
{
"id": 101,
"name": "PowerShell 编码命令",
"description": "检测使用编码命令的 PowerShell 执行",
"type": "attack",
"severity": "high",
"enabled": true,
"conditions": [
"command matches 'powershell.*-[eE].*[Ee]ncoded[Cc]ommand'"
],
"actions": ["alert", "log", "terminate_process"]
}
Windows 事件日志监控
Windows 事件日志监控用于检测重要的系统和应用程序事件。主要功能包括:
-
安全事件监控:监控登录失败、账户创建、权限更改等安全事件 -
系统事件监控:监控服务安装、事件日志清除等系统事件 -
应用程序事件监控:监控应用程序错误、崩溃等事件
监控的重要事件 ID 包括:
-
4624:成功登录 -
4625:登录失败 -
4720:创建用户账户 -
4728:将成员添加到安全组 -
7045:服务安装 -
104:事件日志已清除 -
1102:审核日志已清除
CPU 使用率限制
为了避免 Agent 占用过多系统资源,影响系统性能,EDR 系统实现了 CPU 使用率限制功能:
-
动态调整:根据当前 CPU 使用率动态调整 Agent 的工作负载 -
可配置限制:通过命令行参数或配置文件设置 CPU 使用率限制 -
智能休眠:当 CPU 使用率超过限制时,自动计算并应用休眠时间
默认 CPU 使用率限制为 5%,可以通过 -cpulimit
参数进行调整。
Web控制台
Web控制台提供了一个用户友好的界面,用于管理和监控EDR系统。主要功能包括:
-
仪表板:显示系统概览,包括主机状态、事件统计和图表。 -
主机管理:查看和管理受监控的主机。 -
事件管理:查看、筛选和处理安全事件。 -
规则管理:创建、编辑、启用/禁用和删除规则。 -
设置:配置系统设置。
开发
项目结构
ounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(line
edr/
├── cmd/ # 命令行应用
│ ├── agent/ # Agent应用
│ └── server/ # Server应用
├── pkg/ # 共享包
│ ├── agent/ # Agent核心功能
│ │ ├── attack_monitor.go # ATT&CK 攻击监控
│ │ ├── event_log_monitor.go # Windows 事件日志监控
│ │ ├── file_monitor.go # 文件系统监控
│ │ ├── network_monitor.go # 网络监控
│ │ ├── process_monitor.go # 进程监控
│ │ └── registry_monitor.go # 注册表监控
│ ├── crypto/ # 加密功能
│ ├── database/ # 数据库操作
│ ├── models/ # 数据模型
│ ├── rules/ # 规则引擎
│ └── server/ # Server核心功能
│ └── web/ # Web控制台
├── go.mod # Go模块文件
└── README.md # 项目说明
安全注意事项
-
在生产环境中,始终使用TLS证书和密钥保护通信。 -
定期更新规则以检测最新的威胁。 -
保护服务器和数据库免受未授权访问。 -
定期备份数据库。 -
根据系统性能调整 CPU 使用率限制。
许可证
MIT
原文始发于微信公众号(网安守护):六个小时完成编写 EDR (Endpoint Detection and Response)
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论