BushidoCyb3r/Remora

GitHub: BushidoCyb3r/Remora

一个基于 Volatility3 的图形界面工具,使内存取证工作流可发现且可审计,无需命令行经验。

Stars: 0 | Forks: 0

Remora logo

# Remora ## 目录 - [概述](#overview) - [系统要求](#requirements) - [安装说明](#installation) - [界面布局](#interface-layout) - [加载内存映像](#loading-a-memory-image) - [插件浏览器](#plugin-browser) - [MITRE ATT&CK / 威胁行为者筛选器](#mitre-attck--threat-actor-filter) - [插件配置面板](#plugin-configuration-panel) - [运行插件](#running-plugins) - [结果标签页](#results-tabs) - [导出结果](#exporting-results) - [MITRE 覆盖矩阵](#mitre-coverage-matrix) - [自定义符号表](#custom-symbol-tables-linux--macos) - [内置 Volshell](#embedded-volshell) - [自动日志文件](#automatic-log-files) - [主题](#theme) - [键盘快捷键](#keyboard-shortcuts) - [菜单参考](#menu-reference) - [目录结构](#directory-structure) - [故障排除](#troubleshooting) - [许可协议](#license) ## 概述 `remora.py` 是一个位于你克隆的 Volatility3 仓库内的单文件图形化前端,它封装了 `vol.py` 和 `volshell.py` 入口点。它通过分类、可搜索的浏览器暴露所有已发现的插件,根据每个插件声明的需求自动生成参数表单,将输出流式传输到标签页式的结果视图中,并为针对内存映像的每一个操作写入持久化带时间戳的审计日志。 每个插件都映射到了 MITRE ATT&CK 框架和已知威胁行为者组织,使得插件选择和结果导出从一开始就具备情报感知能力。 **适用人群:** - **数字取证检查员**:需要可辩护的分析步骤保管链记录 - **事件响应人员**:需要根据已知的对手战术、技术和程序快速、可重复地执行插件,以进行实时或已获取内存的分诊 - **威胁猎人**:将内存工件与特定威胁行为者的工具包关联 - **恶意软件分析师**:在结构化的插件输出和交互式 Volshell 访问之间切换 - **培训师和学生**:在可视化、可发现的界面中学习内存取证 ## 系统要求 | 依赖项 | 版本 | 备注 | |---|---|---| | Python | ≥ 3.8 | 推荐 3.10+ | | PyQt6 | ≥ 6.4 | 必需 | | Volatility3 | 最新 | 从 GitHub 克隆 | | openpyxl | 任意 | 可选 — 仅用于 XLSX 导出 | | PyQt6.QtPrintSupport | 大多数 PyQt6 安装自带 | 可选 — 仅用于 PDF 导出 | ## 安装说明 ### 1. 克隆 Volatility3 ``` git clone https://github.com/volatilityfoundation/volatility3.git cd volatility3 ``` ### 2. 安装 GUI 依赖项 ``` pip install PyQt6 # 可选:Excel 导出 pip install openpyxl ``` ### 3. 放置 remora.py `remora.py` 必须位于**克隆的 Volatility3 仓库的根目录**下——与 `vol.py` 和 `volshell.py` 在同一目录中。Remora 在启动时会将自己的父目录插入 `sys.path`,因此无需额外配置即可导入 Volatility3。 ``` volatility3/ ├── vol.py ├── volshell.py ├── remora.py ← place here ├── volatility3/ │ ├── framework/ │ ├── plugins/ │ │ ├── windows/ │ │ ├── linux/ │ │ └── mac/ │ └── symbols/ ├── requirements.txt └── setup.py ``` ### 4. 启动 ``` python3 remora.py ``` ## 界面布局 ``` ┌─────────────────────────────────────────────────────────────────────────┐ │ ▌ REMORA / memory forensics [image · size] ▶ plugin [ LIGHT ] │ ← header bar (40px) ├────────────────────────────────────────────────────────────────────────-│ │ IMG Drop a memory image here — or click to browse │ ← drop zone (52px) ├───────────────┬──────────────────┬─────────────────────────────────────-│ │ PLUGINS [N] │ CONFIGURE │ (results tabs) │ │ ───────── │ ─────────────── │ │ │ [Filter…] │ Plugin name │ plugin · N rows · image.raw │ │ MITRE FILTER │ Description │ [Filter rows…] [Columns▾] [Export▾] │ │ [Combo ▾] │ │ ┌─────────────────────────────────┐ │ │ │ * Required arg │ │ col1 col2 col3 col4 ... │ │ │ ▶ WINDOWS │ Optional arg │ │ ... │ │ │ malfind │ │ └─────────────────────────────────┘ │ │ pslist │ OUTPUT DIR │ N rows timestamp │ │ netscan │ [path…] [Browse]│ │ │ ▶ LINUX │ │ ─────────────────────────────────── │ │ ▶ MACOS │ [▶ Run Plugin] │ LOG → image_2026-01-01.log [Clear]│ │ ▶ OTHER │ │ [HH:MM:SS] log output... │ ├───────────────┴──────────────────┴─────────────────────────────────────-│ │ ░░░░░░░░░░░░░░ (2px indeterminate progress bar — visible when running) │ │ Ready Running Malfind… [■ Stop] │ ← status bar └─────────────────────────────────────────────────────────────────────────┘ ``` 窗口默认为 **1480 × 920** 像素。三个主要窗格由可拖动的分隔条分隔: - **左侧** — 插件浏览器 (190–300px):分类树、文本搜索、MITRE/行为者筛选器 - **中间** — 插件配置区 (260–400px):自动生成的参数表单、输出目录、运行按钮 - **右侧** — 垂直分隔:结果标签页(上)位于日志面板上方(72–180px,下) ## 加载内存映像 **方法一 — 拖放:** 将任何支持的内存映像文件直接拖放到拖放区栏上。栏在拖入时会高亮显示强调边框。 **方法二 — 文件菜单:** `文件 > 打开映像…` (`Ctrl+O`)。 **方法三 — 点击拖放区:** 点击栏上的任意位置打开文件浏览器。上次使用的目录会在会话间记住。 **支持的扩展名:** `.dmp` `.mem` `.vmem` `.raw` `.img` `.bin` `.lime` `.dd` `.E01` `.e01` 加载后: - 文件名和大小以绿色显示在标题栏 - 日志文件在证据文件旁边创建(或追加)—— 会话分隔符会立即写入 - **▶ 运行插件** 按钮激活 - 拖放区标签更改为 `映像已加载 — 拖放另一个以替换` - 状态栏更新以显示文件名和大小 要加载不同的映像,可拖入另一个文件或再次使用 `文件 > 打开映像…`。 ## 插件浏览器 插件浏览器占据左侧面板。所有 Volatility3 插件在启动时通过后台线程(`PluginDiscoveryThread`)发现,并组织成四个类别: | 类别 | 内容 | |---|---| | **WINDOWS** | 所有 `windows.*` 插件 | | **LINUX** | 所有 `linux.*` 插件 | | **MACOS** | 所有 `mac.*` 插件 | | **OTHER** | 跨平台插件:`timeliner`, `yarascan`, `banners`, `regexscan` 等 | 面板标题中的计数徽章显示插件总数,或当任何筛选器激活时显示 `可见数/总数`。 ### 导航 - **单击** 插件可在中间面板加载其配置表单 - **双击** 插件可立即使用默认设置运行(必须先加载映像) - **右键点击** 插件会显示一个上下文菜单,有两个选项:**配置** 和 **使用默认值运行** ### 文本搜索 **筛选插件…** 栏通过子字符串匹配在插件名称中实时缩小树视图范围。匹配的类别会自动展开;空类别将隐藏。 ### 插件工具提示 将鼠标悬停在任何插件上会显示一个工具提示,包含: - 插件自身文档字符串的第一行(在 140 个字符处截断) - 插件映射到的所有 MITRE ATT&CK 技术 ID 和名称 ## MITRE ATT&CK / 威胁行为者筛选器 文本搜索下方的下拉菜单可筛选插件树,仅显示**映射到所选 ATT&CK 技术或威胁行为者组织的插件**。 ### 使用方法 1. 点击下拉菜单 — 它会打开三个部分: - `— 所有插件 —`(清除筛选器) - **── MITRE ATT&CK 技术 ──** — 65 个技术 ID 列为 `T1055 – 进程注入` - **── 已知威胁行为者/组织 ──** — 26 个配置文件 2. 选择一个技术 ID 或行为者名称 3. 插件树立即筛选;计数徽章更新为 `可见数/总数` 4. 文本搜索和 MITRE 筛选器以 **AND 逻辑** 结合使用 — 你可以同时在 APT29 插件中搜索 "scan" ### 技术筛选逻辑 选择一个技术也会显示映射到相关子技术的插件,反之亦然 — 匹配在两个方向上使用 `startswith` 检查。例如,选择 `T1003` 会显示映射到 `T1003.001`、`T1003.002`、`T1003.004` 和 `T1003.005` 的插件。选择 `T1003.002` 则仅显示具有该特定映射的插件。 ### 威胁行为者配置文件 每个威胁行为者配置文件是一组技术 ID。选择一个行为者会显示与该行为者工具包中**任何**技术相关的所有插件(行为者集合内技术之间的 OR 逻辑)。 **包含的威胁行为者配置文件(共 26 个):** | 行为者 | 又称 | |---|---| | APT1 | Comment Crew, Unit 61398 | | APT28 | Fancy Bear, Sofacy, Pawn Storm | | APT29 | Cozy Bear, The Dukes | | APT32 | OceanLotus, Cobalt Kitty | | APT38 / Lazarus Group | Hidden Cobra | | APT41 | Winnti, BARIUM, Double Dragon | | BlackCat / ALPHV | — | | Carbanak / FIN7 | Navigator Group | | Cl0p Ransomware | — | | Conti Ransomware | — | | DarkHotel | Tapaoux | | Equation Group | NSA/GCHQ-linked | | Gamaredon | Primitive Bear | | Hive Ransomware | — | | Kimsuky | Thallium, Black Banshee | | LockBit Ransomware | — | | MuddyWater | Static Kitten | | NotPetya / Sandworm | GRU Unit 74455 | | REvil / Sodinokibi | — | | Ryuk Ransomware | — | | ShadowPad | APT41-linked | | TA505 | Evil Corp-linked | | Turla | Venomous Bear, Waterbug | | WannaCry | Lazarus Group | | Winnti Group | APT41 overlap | | Wizard Spider | Ryuk / TrickBot | ### MITRE 数据一览 | 数据集 | 计数 | |---|---| | 已映射的 ATT&CK 技术 ID | 65 | | 插件到技术映射键 | 137 | | 威胁行为者/组织配置文件 | 26 | ### 未映射的内容 仅用于**取证基础架构**的插件 — `windows.info`、`windows.crashinfo`、`windows.statistics`、`windows.virtmap`、`windows.poolscanner` 及类似插件 — **没有 ATT&CK 映射**。这些插件建立系统的基本事实;它们不检测对手行为。映射它们会用噪音污染威胁行为者筛选器。 ### 技术细节 — 映射架构 该映射在 `remora.py` 文件顶部附近的四个数据结构中实现: ``` MITRE_TECHNIQUES Dict[str, str] 65 technique IDs → names PLUGIN_MITRE_MAP Dict[str, List[str]] 137 plugin keys → technique ID lists PLUGIN_MITRE_CONFIDENCE Dict[str, Dict[str, str]] per-plugin per-technique H/M/L ratings THREAT_ACTORS Dict[str, List[str]] 26 actor names → technique ID sets MITRE_TACTICS Dict[str, List[str]] 10 tactic groupings → technique prefixes ``` 插件名称键通过在完整的点分隔插件名称上滑动匹配段窗口来匹配。例如,键 `"hashdump"` 可以匹配 `windows.hashdump` 和 `windows.registry.hashdump`,而无需单独条目。 ## 插件配置面板 中间面板通过 `cls.get_requirements()` 根据每个插件声明的需求自动生成参数表单。基础设需求类型(`TranslationLayerRequirement`、`SymbolTableRequirement`、`ModuleRequirement`、`VersionRequirement`、`LayerListRequirement`、`MultiRequirement`、`PluginRequirement`)和自动填充的参数(`single_location`,根据加载的映像路径填充)在表单中隐藏。 ### 字段类型 | 需求类型 | 控件 | |---|---| | `BooleanRequirement` | 复选框 | | `IntRequirement` | 微调器(范围 −2³⁰ 到 2³⁰) | | `ChoiceRequirement` | 填充了有效值的下拉菜单;可选字段包括 `(any)` | | `URIRequirement` | 带有 `file:///path` 占位符的文本字段 + `…` 浏览按钮 | | `ListRequirement` | 空格分隔的文本字段 | | String / 其他 | 自由文本字段,描述作为占位符 | 必填字段在标签前标有 `*`。可选字段可以留空。每个标签显示一个包含需求描述字符串的工具提示。 面板顶部的插件信息块显示插件的短名称(以强调色显示)及其在 220 个字符处截断的文档字符串。 ### 输出目录 在参数表单下方,一个**输出目录**字段接受路径,用于会写入转储文件的插件(`windows.dumpfiles`、`windows.pedump` 等)。文件将写入该位置,而非证据映像旁边。留空表示不传递 `-o` 标志。 ## 运行插件 ### 标准运行 在配置面板中点击 **▶ 运行插件**。插件在后台线程(`PluginRunnerThread`)中执行并运行命令: ``` python3 vol.py -q --renderer json -f [--symbols ...] [-o ] [args...] ``` 执行是非阻塞的 — 插件运行时 GUI 保持完全响应。 ### 快速运行 双击浏览器中的任何插件可立即使用默认设置运行,绕过配置表单。 ### 运行期间 - 标题栏以琥珀色显示 `▶ 插件名` - 窗口底部出现 2 像素的不确定进度条 - 状态栏中出现 **■ 停止** 按钮 — 随时点击可干净地终止插件进程 - 来自 Volatility3 的所有 stderr 输出实时流入日志面板,包含单词 "error" 的行会相应高亮显示 ### 运行多个插件 同一时间只运行一个插件。如果在一个插件活动时尝试运行第二个插件,会弹出对话框提议先停止当前插件。如果确认,正在运行的线程将中止,新插件开始运行。 ### 输出解析 Remora 处理来自 `vol.py --renderer json` 的多种输出格式: - 行字典的 JSON 数组(标准 Volatility3 输出) - JSON 行(每行一个字典) - 具有 `"columns"` 和 `"rows"` 键的单个 JSON 字典 - 具有 `"__children"` 的嵌套记录(在第一列中显示缩进) - 如果 JSON 解析完全失败,则回退到原始文本 ## 结果标签页 每个完成的插件运行都会在右侧面板中打开一个新的可关闭、可移动的标签页。标签页显示插件的短名称作为标签。 ### 标签页工具栏 ``` plugin · N rows · image.raw [Filter rows…] [Columns ▾] [Export ▾] ``` - **筛选行** — 在所有可见列中进行全文搜索;行计数实时更新 - **列** — 切换单个列的可见性;隐藏的列在所有导出中均被排除 - **导出** — 打开导出格式菜单 ### 表格特性 - 交替行颜色(主题感知) - 等宽字体:`JetBrains Mono` → `Fira Code` → `Cascadia Code` → `Consolas` - 行高:26px;列宽上限为 360px;所有列在加载时按内容调整大小 - 点击任何列标题可进行升序/降序排序 - 语义单元格着色:`true`/`yes` → 绿色,`false`/`no` → 红色,`N/A`/`None`/`-` → 灰色 - 页脚栏显示行计数(左侧)和运行时间戳(右侧) ### 右键上下文菜单 右键单击任何单元格提供: - **复制单元格** — 将单元格文本复制到剪贴板 - **复制行(TSV)** — 将整行作为制表符分隔值复制 - 导出子菜单(与工具栏导出按钮选项相同) ### 管理标签页 - 使用每个标签页上的 `✕` 关闭单个标签页 - **结果 > 关闭所有标签页** 清除所有内容并返回欢迎屏幕 - 当所有标签页关闭时,会自动显示欢迎屏幕 - 关闭 Volshell 标签页会终止 volshell 进程 ## 导出结果 每个结果标签页都可以用七种格式导出。所有导出均遵守**活动列可见性**和**活动行筛选器** — 仅导出可见的列和可见的行。 每种格式都嵌入了 MITRE ATT&CK 元数据:与插件映射重叠的技术 ID/名称和威胁行为者名称。 ### CSV ``` # 插件:windows.malfind.Malfind # 镜像:memdump.raw # 时间戳:2026-04-10 14:32:19 # MITRE 技术:T1055 – 进程注入;T1055.001 – DLL 注入;... # 威胁行为者:APT28 (Fancy Bear);APT29 (Cozy Bear);... PID,Process,Start VPN,End VPN,... ``` `#` 注释行出现在空分隔符和数据标题之前。可以毫无问题地导入 Excel 和 LibreOffice。 ### TSV 与 CSV 结构相同:MITRE 注释头块、空行,然后是制表符分隔的数据。适用于 `cut`、`awk` 和数据库导入。 ### JSON ``` { "plugin": "windows.malfind.Malfind", "image": "/cases/exhibit_001/memdump.raw", "timestamp": "2026-04-10 14:32:19", "mitre": { "techniques": [ { "id": "T1055", "name": "Process Injection" }, { "id": "T1055.001", "name": "Process Injection: DLL Injection" } ], "threat_actors": [ "APT28 (Fancy Bear / Sofacy / Pawn Storm)", "APT29 (Cozy Bear / The Dukes)" ] }, "rows": [ { "PID": "1234", "Process": "svchost.exe", ... } ] } ``` `"mitre"` 块是机器可解析的,可用于摄入 SIEM 或案例管理工具。 ### TXT(纯文本) ``` Plugin : windows.malfind.Malfind Image : /cases/exhibit_001/memdump.raw Timestamp : 2026-04-10 14:32:19 Rows : 14 MITRE : T1055 – Process Injection; T1055.001 – DLL Injection; ... Actors : APT28 (Fancy Bear); APT29 (Cozy Bear); APT38 / Lazarus Group; ... Carbanak / FIN7; Conti Ransomware; ... PID Process Start VPN End VPN ... --------- ------------- ------------------ ------------------ ... ``` 行为者名称在每行四个的情况下换行到续行(缩进)。适用于复制粘贴到报告中或作为证据附件。 ### HTML 一个自包含、深色主题的 HTML 报告,没有外部 CSS 或 JavaScript 依赖。当插件具有 ATT&CK 映射时,数据表上方会出现一个 **MITRE 徽章部分**: ``` ┌──────────────────────────────────────────────────────────────────┐ │ MITRE ATT&CK [T1055] [T1055.001] [T1055.002] [T1620] [...] │ │ Threat Actors [APT28] [APT29] [APT38] [Carbanak] [...] │ └──────────────────────────────────────────────────────────────────┘ ``` - 技术 ID 渲染为深蓝色单色芯片;悬停时以浏览器工具提示形式显示完整技术名称 - 威胁行为者名称渲染为深红色芯片 - 如果插件没有 ATT&CK 映射,则完全省略徽章部分 ### PDF ``` windows.malfind.Malfind /cases/exhibit_001/memdump.raw · 2026-04-10 14:32:19 · 14 rows MITRE Techniques T1055 – Process Injection; T1055.001 – DLL Injection; ... Threat Actors APT28 (Fancy Bear); APT29 (Cozy Bear); ... PID Process Start VPN ... ``` 输出为 A4 横向。如果 `PyQt5.QtPrintSupport` 不可用,PDF 导出菜单项将被禁用(灰色显示)。 ### XLSX(Excel) 需要 `pip install openpyxl`。 **主数据工作表** — 以插件的短名称命名 — 在数据上方包含样式化的元数据行: | 行 | 标签 | 值 | |---|---|---| | 1 | 插件 | `windows.malfind.Malfind` | | 2 | 映像 | `/cases/exhibit_001/memdump.raw` | | 3 | 时间戳 | `2026-04-10 14:32:19` | | 4 | 行数 | `14` | | 5 | MITRE 技术 | `T1055 – 进程注入; ...` | | 6 | 威胁行为者 | `APT28 (Fancy Bear); ...` | | 7 | *(空)* | | | 8+ | *(列标题 + 数据)* | | 列宽自动调整(上限为 50 个字符)。单元格使用深色主题调色板。 **“MITRE 覆盖范围”工作表** — 当插件具有 ATT&CK 映射时自动添加: | A 列 | B 列 | |---|---| | 插件 | `windows.malfind.Malfind` | | 时间戳 | `2026-04-10 14:32:19` | | | | | 技术 ID | 技术名称 | | T1055 | 进程注入 | | T1055.001 | 进程注入:DLL 注入 | | ... | | | | | | 威胁行为者 | | | APT28 (Fancy Bear / Sofacy / Pawn Storm) | | | ... | | ## MITRE 覆盖矩阵 **工具 > MITRE 覆盖矩阵…** (`Ctrl+Shift+M`) 打开一个独立窗口 (1280 × 820),显示每个具有 ATT&CK 映射的 Volatility3 插件,以 10 个 ATT&CK 战术列的网格形式展示。 ### 显示内容 ``` ┌──────────────────────────────────────────────────────────────────────────────────────┐ │ MITRE ATT&CK COVERAGE MATRIX ● H = primary ◉ M = secondary ○ L = circumstantial │ │ [Filter plugins…] [All Tactics ▾] [All Confidence ▾] [Export CSV ▾] │ ├──────────────────────────────┬─────────┬──────┬───────┬───────┬──────┬───────┬──────┤ │ Plugin │ OS │ Exec │ Perst │ PrivE │ DefE │ Cred │ Disc │ ├──────────────────────────────┼─────────┼──────┼───────┼───────┼──────┼───────┼──────┤ │ windows.malfind.Malfind │ Win │ │ │ ● H │ ◉ M │ │ │ │ windows.hashdump.Hashdump │ Win │ │ │ │ │ ● H │ │ │ windows.netscan.NetScan │ Win │ │ │ │ │ │ ● H │ │ linux.check_syscall.Check_.. │ Linux │ │ │ │ ● H │ │ │ └──────────────────────────────┴─────────┴──────┴───────┴───────┴──────┴───────┴──────┘ │ 181 plugins mapped │ └──────────────────────────────────────────────────────────────────────────────────────┘ ``` ### 置信度等级 每个战术单元格显示该插件在该战术列中映射到的技术的**最高置信度等级**: | 符号 | 等级 | 含义 | 颜色 | |---|---|---|---| | `● H` | 高 | 插件是专门为此检测设计的 | 红色/强调色 | | `◉ M` | 中 | 强次级信号(未明确评级时的默认值) | 琥珀色 | | `○ L` | 低 | 仅旁证或间接证据 | 灰色 | | *(空)* | 无 | 该战术无映射 | — | ### 战术列 | 列 | ATT&CK 战术 | 示例高置信度插件 | |---|---|---| | 执行 | TA0002 | `cmdline`, `cmdscan`, `bash`, `direct_system_calls` | | 持久化 | TA0003 | `scheduled_tasks`, `svcscan`, `shimcachemem`, `callbacks` | | 权限提升 | TA0004 | `malfind`, `hollowprocesses`, `processghosting`, `privileges` | | 防御规避 | TA0005 | `ssdt`, `etwpatch`, `check_idt`, `unhooked_system_calls` | | 凭据访问 | TA0006 | `hashdump`, `cachedump`, `lsadump`, `skeleton_key_check` | | 发现 | TA0007 | `netscan`, `pslist`, `filescan`, `hivelist` | | 横向移动 | TA0008 | `netscan`, `netstat`, `sessions` | | 收集 | TA0009 | `dumpfiles`, `mftscan`, `pedump` | | 命令与控制 | TA0011 | `netscan`, `netstat`, `mutantscan` | | 影响 | TA0040 | `truecrypt` | ### 筛选矩阵 所有三个筛选器以 AND 逻辑组合: - **文本搜索** — 按插件名称子字符串筛选 - **战术下拉菜单** — 仅显示在所选战术中具有任何覆盖的插件;置信度筛选器仅应用于该战术列 - **置信度下拉菜单** — `所有置信度` / `仅高` / `高 + 中` ### 导出矩阵 点击 **导出 CSV ▾** 保存当前可见的矩阵。单元格包含原始的 `H`、`M`、`L` 或空值 — 而非显示符号 — 以便后续处理。 ## 自定义符号表(Linux 和 macOS) Volatility3 需要 ISF(中间符号格式)JSON 文件来分析 Linux 和 macOS 内存映像。这些文件必须与正在检查的映像的精确内核版本匹配。 ### 通过 GUI 加载 1. 打开 **符号 > Linux 符号表** 或 **符号 > macOS 符号表** 2. 选择 **添加符号表文件…** 以选择一个或多个 `.json` / `.json.gz` / `.isf` / `.isf.gz` 文件,或 **添加符号表目录…** 指向一个文件夹 3. 菜单项更新显示为 `已加载:N 个路径 — 查看…` — 点击可在对话框中查看所有已加载的路径 4. 后续所有插件运行会自动为每个加载的路径包含 `--symbols <路径>` 5. 使用 **清除 Linux 符号**、**清除 macOS 符号** 或 **清除所有自定义符号** 来移除路径 上次使用的符号目录会在会话间记住。 ### 生成符号表 ``` # 安装 dwarf2json git clone https://github.com/volatilityfoundation/dwarf2json.git cd dwarf2json && go build # 从带有调试符号的 Linux 内核生成 ./dwarf2json linux --elf /usr/lib/debug/boot/vmlinux-$(uname -r) \ > linux-$(uname -r).json ``` 预构建的表也可从 [Volatility3 符号仓库](https://github.com/volatilityfoundation/volatility3-symbols) 获取。 ## 内置 Volshell **工具 > 打开 Volshell…** (`Ctrl+Shift+S`) 打开一个由 `volshell.py` 支持的交互式 Python REPL 标签页,允许直接访问 Volatility3 针对已加载映像的层、上下文和符号 API。与进程的通信使用 Qt 的 `QProcess`,合并 stdout/stderr。 ### 要求 - 在打开 Volshell 之前必须加载内存映像 - 同一时间只能打开一个 Volshell 标签页;当一个已存在时调用菜单项会切换到该标签页,而不是打开第二个 ### 使用 Volshell 在 `>>>` 输入栏中输入 Python 表达式并按 **Enter** 或点击 **发送**。输出流式传输到上方的显示区。 ``` # 列出所有正在运行的进程 for proc in context.modules["primary"].object_table: print(f"PID {proc.UniqueProcessId} {proc.ImageFileName}") # 检查特定 PID ps = next(p for p in context.modules["primary"].object_table if p.UniqueProcessId == 1234) print(ps.ImageFileName, hex(ps.obj_offset)) # 直接访问内核模块 krnl = context.modules["kernel"] ``` **命令历史:** 输入栏中的 ↑ / ↓ 箭头键可在当前会话中循环显示之前输入的命令。 ### 标签页工具栏控件 | 按钮 | 操作 | |---|---| | **重启** | 终止当前进程并针对相同映像启动一个新的 Volshell | | **杀死** | 终止进程而不重启 | 关闭 Volshell 标签页会自动终止该进程。 ## 自动日志文件 在加载内存映像的那一刻就会创建日志文件。无需配置。 ### 文件命名和位置 ``` _.log ``` 保存在**证据映像旁边**,使工件与证据保持同位: | 映像路径 | 日志路径 | |---|---| | `/cases/exhibit_001/memdump.raw` | `/cases/exhibit_001/memdump_2026-04-10.log` | | `/mnt/evidence/WIN10.vmem` | `/mnt/evidence/WIN10_2026-04-10.log` | 映像主干名中非文件系统安全的字符将被替换为 `_`。 ### 会话分隔符 如果在同一天重新检查同一个映像,条目将被追加。每个会话由以下分隔: ``` ======================================================================== Session started : 2026-04-10 09:14:22 Image : /cases/exhibit_001/memdump.raw ======================================================================== ``` ### 条目格式 每个日志条目使用完整的 ISO 8601 时间戳和固定宽度的级别标签: ``` [2026-04-10 14:32:01] [SUCCESS] Loaded: /cases/exhibit_001/memdump.raw [2026-04-10 14:32:07] [INFO ] → windows.malfind.Malfind [2026-04-10 14:32:08] [CMD ] $ python3 vol.py -q --renderer json -f /cases/exhibit_001/memdump.raw windows.malfind.Malfind [2026-04-10 14:32:19] [SUCCESS] ← Malfind 14 rows [2026-04-10 14:35:01] [WARNING] Plugin stopped by user. ``` ### 日志级别 | 级别 | 出现时机 | |---|---| | `SUCCESS` | 插件完成、映像加载 | | `INFO` | 插件已分派、状态消息 | | `CMD` | 执行的精确 `vol.py` 命令 | | `WARNING` | 插件被用户停止、非致命问题 | | `ERROR` | Volatility3 错误输出、进程失败 | | `DEBUG` | 详细的 Volatility3 stderr | ### GUI 内日志面板 日志面板实时镜像条目,并按严重程度进行颜色编码。当前日志文件名显示在面板标题中。**结果 > 清除日志**(或 **清除** 按钮)仅清除 GUI 内显示 — 磁盘上的文件不受影响。 如果证据目录是只读的,日志写入会静默失败(使用 `pass`),以避免 GUI 崩溃。 ## 主题 标题栏中的 **[ 浅色 ] / [ 深色 ]** 切换按钮在两个调色板之间切换。所选主题通过 `QSettings` 在会话间持久化。 **深色(默认):** 专为长时间分析会话设计的近黑色炭灰背景。背景 `#0d0f14`,面板 `#11141a`,强调色 `#1f9cd8`。锐边、密集布局、大写部分标签 — 模仿专业安全工具。 **浅色:** 冷色调石板灰。背景 `#f0f3f7`,提升色 `#ffffff`,强调色 `#1470a8`。 切换主题时,所有打开的结果标签页、浏览器类别项和覆盖矩阵(如果打开)会立即重新设置样式,无需重启。 应用程序字体为 `Inter` / `SF Pro Text` / `Segoe UI` / `Ubuntu`,11pt。等宽区域使用 `JetBrains Mono` / `Fira Code` / `Cascadia Code` / `Consolas`。 ## 键盘快捷键 | 快捷键 | 操作 | |---|---| | `Ctrl+O` | 打开内存映像 | | `Ctrl+Q` | 退出 | | `Ctrl+Shift+S` | 打开 Volshell | | `Ctrl+Shift+M` | 打开 MITRE 覆盖矩阵 | | `F5` | 刷新插件列表 | | `↑` / `↓` | 在 Volshell 输入栏中循环命令历史 | ## 菜单参考 | 菜单 | 项目 | 快捷键 | 操作 | |---|---|---|---| | **文件** | 打开映像… | `Ctrl+O` | 通过文件浏览器打开内存映像 | | **文件** | 退出 | `Ctrl+Q` | 关闭应用程序 | | **符号** | Linux 符号表 > 添加符号表文件… | — | 为 Linux 分析添加 .json/.json.gz/.isf/.isf.gz 文件 | | **符号** | Linux 符号表 > 添加符号表目录… | — | 添加 Linux 符号表的目录 | | **符号** | Linux 符号表 > 已加载:N 个路径 — 查看… | — | 显示已加载的 Linux 符号路径 | | **符号** | Linux 符号表 > 清除 Linux 符号 | — | 移除所有 Linux 符号路径 | | **符号** | macOS 符号表 > (相同结构) | — | 与 Linux 相同,用于 macOS | | **符号** | 清除所有自定义符号 | — | 移除所有 Linux 和 macOS 符号路径 | | **结果** | 关闭所有标签页 | — | 关闭所有结果标签页并显示欢迎屏幕 | | **结果** | 清除日志 | — | 清除 GUI 内日志显示(文件不受影响) | | **插件** | 刷新插件列表 | `F5` | 重新运行插件发现 | | **工具** | 打开 Volshell… | `Ctrl+Shift+S` | 打开交互式 Volshell 标签页 | | **工具** | MITRE 覆盖矩阵… | `Ctrl+Shift+M` | 打开覆盖矩阵窗口 | | **帮助** | 关于 | — | 显示版本信息对话框 | ## 目录结构 设置完成后,你的仓库根目录将如下所示: ``` volatility3/ ├── vol.py ← Volatility3 CLI ├── volshell.py ← Volatility3 interactive shell ├── remora.py ← GUI frontend (this tool) ├── requirements.txt ├── setup.py ├── volatility3/ │ ├── framework/ │ ├── plugins/ │ │ ├── windows/ ← Windows plugins │ │ ├── linux/ ← Linux plugins │ │ └── mac/ ← macOS plugins │ └── symbols/ │ ├── generic/ │ └── (your .json symbol files) └── (case directory — logs written here, alongside evidence) ``` ## 取证稳健性 取证稳健性是核心设计原则,而非事后考虑。 ### 只读证据处理 - `remora.py` 仅通过 `-f` 标志将证据文件传递给 Volatility3 - 任何时候执行写操作 - 工具从不复制、修改或移动原始文件 - 加载时显示文件名和大小,以便检查员在运行任何插件之前确认正确的映像 ### 精确命令透明度 每个插件调用都记录完整的 `vol.py` 命令,包括所有标志。任何发现都可以通过原样重新运行记录的命令来独立重现。 ### 非破坏性停止 **■ 停止** 按钮通过 `proc.terminate()` 终止正在运行的插件进程。停止插件不会影响证据文件,不会损坏进行中的输出,并会向审计日志写入一条 `[WARNING] Plugin stopped by user.` 条目。 ### 输出目录隔离 转储文件的插件(例如 `windows.dumpfiles`)写入明确指定的输出目录,而非证据映像旁边。 ### 无网络访问 ## 故障排除 ### `错误:需要 PyQt6` ``` pip install PyQt6 ``` ### 浏览器中未出现插件 确保你是在克隆的 `volatility3/` 目录内运行 `remora.py` — 具体来说,`vol.py` 和 `volshell.py` 必须存在于同一文件夹中。按 `F5` 重试插件发现。检查日志面板以获取具体的导入错误消息。 ### Linux/macOS 插件失败并显示 `No symbol table` 你需要一个匹配目标内核的 ISF 符号文件。通过 **符号 > Linux 符号表 > 添加符号表文件…** 加载它。 ### MITRE 筛选器对某个技术未显示任何插件 少数技术仅映射到少量插件。尝试父技术(例如选择 `T1003` 而不是 `T1003.001`)。同时确认插件发现已完成 — 状态栏应显示插件计数。如果列表为空,请按 `F5` 刷新。 ### MITRE 覆盖矩阵为空 插件发现必须在打开矩阵之前完成。等待状态栏显示插件计数,然后重试。 ### PDF 导出按钮为灰色 ### XLSX 导出显示 `pip install openpyxl` ``` pip install openpyxl ``` ### Volshell 标签页显示 `Failed to start volshell.py` 确认 `volshell.py` 与 `remora.py` 存在于同一目录中,并且 Volatility3 的依赖项已完全安装: ``` pip install -r requirements.txt ``` ### 日志文件未创建 日志文件写入在证据映像旁边。如果该目录是只读的(例如挂载的 ISO 或写保护的共享),日志写入会静默失败以避免 GUI 崩溃。将映像复制到可写位置,或检查目录权限。 ### 主题每次启动时恢复为深色 主题首选项通过 `QSettings` 存储在组织名称 `vol3gui` 下。在 Linux 上,这通常是 `~/.config/vol3gui/prefs.conf`。如果该文件不可写,则无法保存首选项。 ## MITRE ATT&CK 映射 — 设计说明 该映射基于以下原则构建: **1. 映射插件检测的内容,而非插件本身。** `netscan` 由分析师使用。它*检测到的证据*是对手的网络活动 (T1049, T1071, T1021)。映射反映的是对手技术,而非分析师操作。 **2. 取证基础架构没有映射。** 诸如 `windows.info`、`windows.crashinfo`、`windows.statistics` 和 `windows.virtmap` 之类的插件建立系统的基本事实。它们不检测对手行为。将它们映射到 T1082(系统信息发现)将意味着“对手运行了 remora.py”,这是不正确的。它们被有意排除。 **3. 置信度等级是保守的。** 只有当插件是专门为该检测设计时,才获得 `High` — `skeleton_key_check` → T1556.001 是 `High`;`strings` → T1071 是 `Low`,因为在字符串输出中找到 C2 URI 是旁证。当 `PLUGIN_MITRE_CONFIDENCE` 中没有显式条目时,默认置信度为 `Medium`。 **4. 父技术选择会级联。** 在筛选器中选择 T1003 会显示映射到 T1003、T1003.001、T1003.002、T1003.004 和 T1003.005 的插件。这反映了 ATT&CK 本身的结构。 **5. 已知的局限性。** 以下技术只能通过自定义 Volatility3 插件或手动 VAD 分析检测 — 目前没有原生插件映射到它们: - T1055.013(进程替身) - T1134.003/004/005(令牌模拟子技术) - T1070.001(清除 Windows 事件日志 — 工件在事件日志中,而非内存中) ## 许可协议 Remora 根据 [MIT 许可证](LICENSE) 发布。版权所有 (c) 2026 BushidoCyb3r。 MITRE ATT&CK® 是 The MITRE Corporation 的注册商标。技术描述和行为者配置文件源自公开可用的 ATT&CK 知识库。 *为补充 [Volatility3](https://github.com/volatilityfoundation/volatility3) — 世界领先的开源内存取证框架而构建。*
标签:Cloudflare, DAST, JARM, MITRE ATT&CK, Python, SecList, Volatility3, Volshell, 内存分析, 内存取证, 取证工具, 图形用户界面, 威胁情报, 威胁行为者过滤, 审计日志, 工作流自动化, 开发者工具, 恶意软件分析, 插件浏览器, 数字取证, 数据导出, 无后门, 桌面应用, 用户界面, 自动化脚本, 逆向工具