dimaskiddo/lmd-ng
GitHub: dimaskiddo/lmd-ng
用 Go 从零重写的跨平台恶意软件检测引擎,通过客户端-服务端架构实现集中式特征匹配、实时文件监控与按需扫描。
Stars: 0 | Forks: 0
# 🛡️ Linux Malware Detect Next Generation (LMD-NG)
欢迎来到多平台安全的未来!**LMD-NG** 是对传奇的 **Linux Malware Detect (LMD/MalDet)** 进行的一次完全、从零开始的重写。LMD-NG 使用 **Golang 和 CGO** 构建,凭借现代、高性能的架构,将久经沙场的安全逻辑引入 **Linux**、**macOS** 和 **Windows** 平台。🐹✨
LMD-NG 采用 **Client-Server 架构** 以最大化效率。集中式的 **Database Signature Service (DBS)** 负责处理所有繁重的工作——将庞大的特征库一次性加载到内存中——而轻量级的 **Real-Time Protector (RTP)** 客户端和 CLI 工具则流式传输数据,实现闪电般的快速匹配。
## ✨ 为什么选择 LMD-NG?
* **⚡ Client-Server 架构:** 通过 **DBS**(服务器)进行集中式特征匹配,而 **RTP** 和 **On-Demand Scan** 充当轻量级客户端,减少了跨多个节点的内存开销。
* **🕵️ 实时保护:** 原生文件系统监控——在 macOS 上使用 **FSEvents**(通过 CGO/Zig),在 Linux/Windows 上使用 **fsnotify**——在威胁降落的瞬间将其捕获。
* **🔍 按需扫描:** 对任何目录执行手动的高性能扫描。与 RTP 一样,扫描 CLI 充当 DBS 客户端,以利用集中式的内存特征。
* **🔄 智能更新:** 自动更新特征库并支持热重载——DBS 服务器在无需重启活动扫描的情况下保持最新状态。
* **📦 原生 ClamAV 加载器:** 内置纯 Go 支持,用于处理 ClamAV 数据库(`.cvd`、`.cld`、`.ndb`、`.hdb`),对 `libclamav` 或 `os/exec` 的依赖为 **零**。
* **📥 安全隔离:** 通过可选的 **AES-256 加密** 隔离威胁,并完整保留 POSIX 属性,以便安全恢复。
* **🔒 安全流式传输:** 客户端使用自定义的高性能二进制协议,通过加密的 TLS 或 Unix 域套接字与 DBS 服务器进行通信。
* **📧 多通道警报:** 检测到恶意软件时,通过 **Email (SMTP)** 或 **Telegram** 即时发送通知。
* **📊 结构化日志:** 使用 Go 原生 `slog` 实现整洁、现代的可观测性。
* **🚀 自动调整系统限制:** 自动优化文件描述符限制,确保在繁重扫描期间的流畅性能。
* **🌍 真正的跨平台:** 原生支持 **Linux**、**macOS** 和 **Windows**。没有遗留的 bash 依赖。
* **🛠️ Zig CGO 工具链:** 使用 **Zig 编译器** 作为跨平台 C/C++ 前端,在 `CGO_ENABLED=1` 下编译。Zig 提供了一个独立的工具链,与标准的 GCC 或 Clang 相比,使交叉编译变得毫不费力且可重现。
## 🏗️ 架构概览
```
graph TD
subgraph "DBS Server (Database Signature Service)"
DB_S["Signature Databases"] --> Engine_S["Memory Loader"]
Engine_S --> Matcher_S["Pattern Matcher"]
end
subgraph "Clients (RTP / Scan CLI)"
Source["File System Events / Path"]
subgraph "Local Engine (On-Demand Fallback)"
DB_L["Local DB"] --> Engine_L["Memory Loader"]
Engine_L --> Matcher_L["Pattern Matcher"]
end
Streamer["Data Streamer"]
Source --> Streamer
Streamer -- "Remote Matching" --> Matcher_S
Source -- "Local Matching" --> Matcher_L
Matcher_S -- "Detection Result" --> ActionHandler["Action Handler"]
Matcher_L -- "Detection Result" --> ActionHandler
ActionHandler --> Notifier["Email / Telegram"]
ActionHandler --> Quarantine["Quarantine Manager"]
end
```
## 🚀 入门指南
### 📋 前置条件
* **Go** (1.21+)
* **Make** (用于构建)
* **Zig** (交叉编译 CGO 所需)
## 🛠️ 部署
### 🐳 **使用容器**
1. 按照[官方指南](https://docs.docker.com/get-docker/) **安装 Docker**。
2. **运行组合守护进程:**
docker run -d \
-v /data/to/protect:/data:rw \
-v /path/to/config.yaml:/usr/local/lmd-ng/config.yaml \
--name lmd-ng \
dimaskiddo/lmd-ng:latest
### 📦 **使用预编译二进制文件**
1. 从 [Releases 页面](https://github.com/dimaskiddo/lmd-ng/releases) 下载最新版本。
2. **安装与启动:**
#### 🐧 **Linux / 🍎 macOS**
```
# 赋予其执行权限
chmod +x lmd-ng
# 更新特征库
./lmd-ng update
# 安装服务(需要 sudo)
sudo ./lmd-ng service install dbs
sudo ./lmd-ng service install rtp
# 逐一启动服务
sudo ./lmd-ng service start dbs
sudo ./lmd-ng service start rtp
```
#### 🪟 **Windows**
*(在管理员命令提示符下运行)*
```
# 更新特征库
.\lmd-ng.exe update
# 安装服务
.\lmd-ng.exe service install dbs
.\lmd-ng.exe service install rtp
# 逐一启动服务
.\lmd-ng.exe service start dbs
.\lmd-ng.exe service start rtp
```
### 🏗️ **从源代码构建**
```
git clone https://github.com/dimaskiddo/lmd-ng.git
cd lmd-ng
make vendor
make build
# 二进制文件位于 dist/lmd-ng
```
## 🕹️ 用法与命令
LMD-NG 通过功能强大的 CLI 进行管理:
### 💂♂️ 守护进程服务
* **`lmd-ng daemon`**:在一个进程中同时启动 **DBS**(服务器)和 **RTP**(客户端)。
* **`lmd-ng daemon dbs`**:仅启动 Database Signature Service。
* **`lmd-ng daemon rtp`**:仅启动 Real-Time Protector(监控文件系统)。
### 🔍 扫描与更新
* **`lmd-ng scan `**:执行按需扫描。将数据流式传输到本地 DBS。
* **`lmd-ng update`**:更新特征库并在正在运行的 DBS 中触发热重载。
### 📥 隔离管理
* **`lmd-ng quarantine list`**:列出所有隔离文件。
* **`lmd-ng quarantine add `**:手动将可疑文件移至隔离区。
* **`lmd-ng quarantine restore `**:将文件安全地恢复到其原始位置,并完整保留属性。
* **`lmd-ng quarantine remove `**:永久删除威胁(需要使用 `--force`)。
### ⚙️ 服务管理
将 LMD-NG 组件作为后台服务进行管理(Systemd、Launchd 或 Windows Services)。相关操作需要提升的权限。
* **安装服务**:
* `lmd-ng service install`:注册 **DBS** 和 **RTP** 服务。
* `lmd-ng service install dbs`:仅注册 Database Signature Service(服务器)。
* `lmd-ng service install rtp`:仅注册 Real-Time Protector(客户端)。
* **控制服务**:
* `lmd-ng service start [dbs|rtp]`:启动服务。如果未指定组件,则**先启动 DBS**,然后启动 **RTP**。
* `lmd-ng service stop [dbs|rtp]`:停止服务。如果未指定组件,则**先停止 RTP**,然后停止 **DBS**。
* `lmd-ng service restart [dbs|rtp]`:重启服务。如果未指定组件,则**先重启 DBS**,然后重启 **RTP**。
* **卸载服务**:
* `lmd-ng service uninstall`:停止并移除 **DBS** 和 **RTP** 服务。如果未指定组件,则**先卸载 RTP**,然后卸载 **DBS**。
* `lmd-ng service uninstall dbs`:停止并仅移除 Database Signature Service(服务器)。
* `lmd-ng service uninstall rtp`:停止并仅移除 Real-Time Protector(客户端)。
## 🧪 测试
```
go test ./...
```
*注:集成测试会验证 `dist/` 中已编译的二进制文件。*
## ✍️ 作者
* **Dimas Restu Hidayanto** - *初始工作与架构* - [DimasKiddo](https://github.com/dimaskiddo)
## 🏗️ 用爱与力量构建
* **[Go](https://golang.org/)** - 驱动 LMD-NG 的核心引擎。
* **[Zig](https://ziglang.org/)** - CGO 交叉编译的强大后盾。
* **[Cobra](https://github.com/spf13/cobra)** - 现代 CLI 框架。
* **[fsnotify/fsnotify](https://github.com/fsnotify/fsnotify)** - 适用于 Linux 和 Windows 的跨平台文件系统监控器。
* **[fsnotify/fsevents](https://github.com/fsnotify/fsevents)** - 适用于 macOS 的原生 FSEvents 监控器。
* **[kardianos/service](https://github.com/kardianos/service)** - 多平台服务管理器。
## ⚠️ 免责声明
**风险自负 (DO WITH YOUR OWN RISK / DWYOR)**。本软件按“原样”提供,不提供任何形式的明示或暗示保证。使用本软件可能涉及风险,包括但不限于系统不稳定或数据丢失。作者对因使用本应用程序造成的任何损害不承担责任。
## ⚖️ 许可证
在 **MIT License** 下分发。有关更多信息,请参见 `LICENSE`。
**LMD-NG** — *面向现代世界的下一代安全防护。* 🛡️🌐
标签:ClamAV, DNS 解析, EVTX分析, FSEvents, fsnotify, Golang, LMD, MalDet, TLS加密, Web 安全测试, 多平台兼容, 子域名变形, 子域名枚举, 安全更新, 安全编程, 实时防护, 客户端-服务器架构, 底层编程, 恶意代码分析, 搜索语句(dork), 文件系统监控, 日志审计, 服务器架构, 端点安全, 系统安全, 网络安全, 补丁管理, 请求拦截, 配置文件, 防病毒, 隐私保护, 隔离