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), 文件系统监控, 日志审计, 服务器架构, 端点安全, 系统安全, 网络安全, 补丁管理, 请求拦截, 配置文件, 防病毒, 隐私保护, 隔离