Neo23x0/Loki-RS
GitHub: Neo23x0/Loki-RS
Rust 重写的 Loki 主机扫描器,通过 YARA 规则和 IOC 指标进行高性能、多线程的恶意软件检测与入侵痕迹排查。
Stars: 274 | Forks: 21

# Loki-RS
使用 Rust 重写的 [Loki](https://github.com/Neo23x0/Loki)。高性能、多线程的 YARA & IOC 扫描器,打包为单个二进制文件。
**状态**:Beta。可用,但仍处于活跃开发中。
## 功能特性
- 文件和进程内存的 YARA 扫描 (yara-x)
- IOC 匹配 (MD5/SHA1/SHA256 哈希,文件名模式,C2 指标)
- 可配置线程数的多线程扫描
- 归档文件扫描 (ZIP 文件)
- 交互式 TUI,包含实时统计和控制
- 通过 syslog (UDP/TCP) 进行远程日志记录 (SYSLOG/JSON)
- 生成包含详细发现的 HTML 报告
- 可配置的评分阈值
- 智能过滤 (默认跳过 /proc, /sys, 挂载的驱动器)
- Magic header 检测
- 用于日志采集的 JSONL 输出
## macOS 进程扫描
macOS 上的进程内存扫描是尽力而为的,通常需要调试权限或提升的特权。如果没有这些,Loki-RS 仍然会扫描文件,但将无法读取大多数进程内存。如果需要,请使用 `--no-procs` 跳过进程扫描。
## 安装
从 [Releases 页面](https://github.com/Neo23x0/Loki-RS/releases) 下载适用于您平台的预编译二进制文件。
```
# 提取
tar -xzvf loki-linux-*.tar.gz
cd loki-linux-*
# 更新 signatures (推荐)
./loki-util update
# 运行
sudo ./loki --help
```
签名随版本一起发布,但很快会过时。运行 `loki-util update` 以获取最新的 IOC 和 YARA 规则。
## 签名
Loki-RS 使用来自两个来源的检测内容:
**IOC** 拉取自 [signature-base](https://github.com/Neo23x0/signature-base),这是一个与 Loki 一起维护的哈希、文件名和 C2 指标集合。
**YARA 规则** 来自 [YARA Forge](https://yaraforge.com/),它聚合并质量检查来自公共仓库的规则。Loki-RS 使用 **Core** 规则集 - 高准确性,低误报,针对性能进行了优化。如果您需要更广泛的覆盖范围,可以从 YARA Forge 替换为 Extended 或 Full 集。
## 用法
```
# Basic scan (默认启用 TUI)
sudo ./loki
# 扫描指定文件夹
sudo ./loki --folder /tmp
# 禁用 TUI,使用标准命令行输出
sudo ./loki --no-tui
```
## 常见场景
```
# 扫描挂载镜像 (跳过 process scanning,使用所有核心)
sudo ./loki --no-procs --folder ~/image1 --threads 0
# 缓慢且谨慎的扫描 (降低 CPU 限制,单线程)
sudo ./loki --cpu-limit 60 --threads 1
# 扫描并将日志发送到远程 syslog
sudo ./loki --remote syslog-host.internal:514 --remote-proto udp
```
## 截图


## 命令行选项
### 扫描目标
| 选项 | 默认值 | 描述 |
|--------|---------|-------------|
| `-f, --folder ` | `/` | 要扫描的文件夹 |
### 扫描控制
| 选项 | 默认值 | 描述 |
|--------|---------|-------------|
| `--no-procs` | `false` | 跳过进程内存扫描 |
| `--no-fs` | `false` | 跳过文件系统扫描 |
| `--no-archive` | `false` | 跳过归档文件内部扫描 (ZIP) |
| `--scan-all-drives` | `false` | 扫描所有驱动器,包括挂载的网络/云驱动器 |
| `--scan-all-files` | `false` | 扫描所有文件, regardless of extension/type |
### 输出选项
| 选项 | 默认值 | 描述 |
|--------|---------|-------------|
| `-l, --log ` | auto | 纯文本日志文件 |
| `--no-log` | `false` | 禁用纯文本日志输出 |
| `-j, --jsonl ` | auto | JSONL 输出文件 |
| `--no-jsonl` | `false` | 禁用 JSONL 输出 |
| `--no-html` | `false` | 禁用 HTML 报告生成 |
| `--no-tui` | `false` | 禁用 TUI,使用标准命令行输出 |
| `-r, --remote ` | none | 远程 syslog 目标 |
| `-p, --remote-proto ` | `udp` | 远程协议 (udp/tcp) |
| `--remote-format ` | `syslog` | 远程格式 (syslog/json) |
### 调优
| 选项 | 默认值 | 描述 |
|--------|---------|-------------|
| `--alert-level ` | `80` | ALERT 的分数阈值 |
| `--warning-level ` | `60` | WARNING 的分数阈值 |
| `--notice-level ` | `40` | NOTICE 的分数阈值 |
| `--max-reasons ` | `2` | 每个发现显示的最大匹配原因数 |
| `-m, --max-file-size ` | `64000000` | 要扫描的最大文件大小 (64MB) |
| `-c, --cpu-limit ` | `100` | CPU 利用率限制 (1-100) |
| `--threads ` | `-2` | 线程数 (0=全部, -1=全部-1, -2=全部-2) |
### 信息与调试
| 选项 | 默认值 | 描述 |
|--------|---------|-------------|
| `--version` | - | 显示版本并退出 |
| `-d, --debug` | `false` | 显示调试输出 |
| `--trace` | `false` | 显示详细跟踪输出 |
| `--show-access-errors` | `false` | 显示文件/进程访问错误 |
## 排除文件和文件夹
Loki-RS 提供了多种机制来从扫描中排除文件和文件夹。
### 内置自动排除
默认情况下,Loki-RS 自动排除:
**系统目录**:
- `/proc`, `/dev`, `/sys/kernel/debug`, `/sys/kernel/slab`, `/sys/kernel/tracing`, `/sys/devices`
- `/run`, `/var/run`
**云存储目录** (除非使用 `--scan-all-drives`):
- OneDrive, Dropbox, Google Drive, iCloud, Box, Nextcloud, pCloud, MEGA, Seafile, ownCloud 等
**网络和挂载驱动器** (除非使用 `--scan-all-drives`):
- NFS, CIFS/SMB, SSHFS, WebDAV 挂载
- `/media`, `/volumes` 下的外部媒体
**程序目录:**
- Loki-RS 自动排除其自身目录以防止扫描自身
### 命令行排除选项
| 选项 | 描述 |
|--------|-------------|
| `--scan-all-drives` | 包括挂载的驱动器、网络驱动器和云存储 |
| `--scan-all-files` | 扫描所有文件,无论文件类型/扩展名如何 (默认情况下,仅扫描相关文件类型) |
| `-m, --max-file-size ` | 跳过大于此大小的文件 (默认: 64MB) |
| `--no-procs` | 完全跳过进程内存扫描 |
| `--no-fs` | 完全跳过文件系统扫描 |
| `--no-archive` | 跳过归档文件内部扫描 (ZIP) |
### 基于哈希的误报排除
您可以通过哈希排除已知的良好文件。这对于将触发误报的合法文件列入白名单非常有用。
**设置:**
1. 在 `signatures/iocs/` 中创建一个文件名同时包含 `hash` 和 `falsepositive` 的文件
示例:`hash-falsepositive-custom.txt`
2. 添加哈希 (MD5, SHA1, 或 SHA256) 及可选描述:
```
# 格式: HASH;description
d41d8cd98f00b204e9800998ecf8427e;Empty file - known good
a7f5f35426b927411fc9231b56382173;Legitimate system utility
```
匹配这些哈希的文件将在扫描期间被静默跳过。
### 文件名模式误报排除
当向 `signatures/iocs/filename-iocs.txt` 添加文件名 IOC 时,您可以在第三列中指定误报排除正则表达式:
```
# 格式: REGEX;SCORE;FALSE_POSITIVE_REGEX
# # 这匹配所有 .ps1 文件,但排除 SysInternals 目录中的文件
(?i)\\procdump(64)?\.(exe|zip);50;(?i)(SysInternals\\)
```
如果文件同时匹配主模式**和**误报正则表达式,则不会被报告。
### 配置文件排除
`config/excludes.cfg` 文件支持基于正则表达式的路径排除:
```
# 排除系统目录
^/proc/.*
^/dev/.*
^/sys/.*
# 排除临时文件
.*\.tmp$
.*\.temp$
.*\.swp$
# 排除特定目录
.*node_modules.*
.*/\.git/.*
```
**注意:** 路径排除模式使用正则表达式匹配完整文件路径。以 `#` 开头的行是注释。
### 示例
```
# 扫描但包含所有驱动器 (network, cloud, mounted)
sudo ./loki --scan-all-drives
# 扫描所有文件类型,而不仅仅是 executables 和 scripts
sudo ./loki --scan-all-files
# 仅扫描小文件 (10MB 以下)
sudo ./loki --max-file-size 10000000
# 跳过 process scanning (适用于挂载镜像)
sudo ./loki --no-procs --folder /mnt/image
```
## TUI 模式
终端界面默认启用,并在扫描期间提供实时监控。
```
sudo ./loki --folder /path/to/scan
```

| 按键 | 操作 |
|-----|--------|
| `q` | 退出 |
| `p` | 暂停/恢复 |
| `s` | 跳过当前项 |
| `t` | 切换线程覆盖层 |
| `+` / `-` | 调整 CPU 限制 |
| 方向键 | 滚动日志 |

## HTML 报告
Loki-RS 在每次扫描后自动生成一个带样式的 HTML 报告。该报告与 JSONL 日志文件一同创建,并提供所有发现的可视化摘要。
报告包括:
- 扫描配置和运行时统计信息
- 按严重性分组的颜色编码发现
- 文件元数据 (哈希、时间戳、大小)
- YARA 规则匹配及其描述和匹配字符串
- IOC 匹配详情及参考

HTML 报告与 JSONL 输出共享相同的基本文件名 (例如,`loki_hostname_2025-01-08.html`)。要禁用报告生成,请使用 `--no-html`。
### 从 JSONL 文件生成 HTML 报告
您可以使用 `loki-util` 从现有的 JSONL 文件生成 HTML 报告:
```
# 从单个 JSONL 文件生成 HTML 报告
./loki-util html --input scan_results.jsonl --output report.html
# 从多个 JSONL 文件生成合并的 HTML 报告
./loki-util html --input "*.jsonl" --combine --output combined_report.html
# 使用 glob patterns 匹配多个文件
./loki-util html --input "/path/to/scans/*.jsonl" --combine --output combined.html
```
**选项:**
- `--input ` - 输入 JSONL 文件或 glob 模式 (必需)
- `--output ` - 输出 HTML 文件 (可选,默认为带有 .html 扩展名的输入文件名)
- `--combine` - 将多个 JSONL 文件合并为一个报告 (按主机名分组发现)
- `--title ` - 覆盖报告标题
- `--host ` - 覆盖报告中的主机名
合并报告模式对于将来自多个主机或时间段的扫描结果聚合到单个视图中非常有用,发现按源主机名分组。
## 从源码构建
```
git clone https://github.com/Neo23x0/Loki-RS.git
cd Loki-RS
cargo build --release
./target/release/loki-util update
sudo ./target/release/loki
```
需要 Rust 工具链。有关交叉编译,请参阅 [docs/BUILD.md](docs/BUILD.md)。
## 文档
- [构建指南](docs/BUILD.md)
- [分数计算](docs/score_calculation.md)
- [对等矩阵](docs/parity_matrix.md)
- [排除文件和文件夹](#excluding-files-and-folders)
## 关于
Loki RS 是一个副业项目。它是一个快速、单二进制扫描器,专为实际分类和实验而构建,随着想法的尝试和移除,它可能会快速变化。
支持是基于社区和尽力而为的 - 没有 SLA,没有保证的响应时间,也不承诺完美处理每一个边缘情况。如果您在生产环境中运行它,请考虑到这一点。
对于需要可预测支持和更广泛、经过充分测试的功能集的企业环境和事件响应工作,Nextron Systems 维护 [THOR](https://www.nextron-systems.com/) (以及 THOR Lite)。THOR 是专业的扫描器,具有广泛的工件覆盖范围、更多的模块和格式以及供应商支持。THOR Lite 是范围缩小的免费入门版本。
## 许可证
GNU General Public License v3.0。请参阅 [LICENSE](LICENSE)。
版权所有 (c) 2025 Florian Roth
标签:AMSI绕过, DAST, GraphQL安全矩阵, HTML 报告, HTTP工具, IOC 扫描, IP 地址批量处理, LOKI, PB级数据处理, Rust, Syslog, TUI, YARA, 主机取证, 二进制分析, 云安全运维, 云资产可视化, 勒索软件检测, 可视化界面, 后门检测, 哈希校验, 多模态安全, 威胁检测, 安全工具, 安全扫描器, 安全运维, 库, 应急响应, 恶意软件分析, 情报检测, 文件完整性, 时序数据库, 生成式UI, 端点安全, 网络信息收集, 网络流量审计, 补丁管理, 进程内存扫描, 通知系统