内存 strings 筛查做什么
拿到内存镜像后,最省时间的初筛是用 strings 提取可读字符串,筛出 URL、IP、域名、矿池地址与命令行片段,再与进程列表、网络连接互证,定位承载它们的进程。它的定位是快速缩小范围:字符串噪音很大,必须结合其他证据才能当结论用。
基本信息
| 核心命令 | strings -a -n 8 <镜像文件> 配合 grep -E |
|---|---|
| 提取目标 | URL、IP、域名、矿池地址、命令行参数 |
| 关联手段 | 内存取证套件(如进程与网络插件)定位承载进程 |
| 性能提示 | 大镜像扫描耗时,可分块处理后合并 |
| 前提 | 镜像已固定哈希并保存在只读介质上 |
| 输出定位 | 线索清单,不是最终 IoC 列表 |
典型使用场景
- 内存镜像到手后的第一轮快速筛查
- 从大量连接里筛出可疑的外联域名
- 定位挖矿类样本使用的矿池地址
- 提取命令行片段,辅助判断攻击者执行过什么
- 与磁盘取证结果对照,验证磁盘上没有留下的痕迹
- 整理对外共享线索清单:域名、地址、哈希
提取网络与执行线索
提取网络与执行线索
strings -a -n 8 /evidence/mem.raw | grep -aE 'https?://' | sort -u | head -n 40 # 提取 URL
strings -a -n 8 /evidence/mem.raw | grep -aE '([0-9]{1,3}\.){3}[0-9]{1,3}' | sort -u | head -n 40 # 提取 IP
strings -a -n 8 /evidence/mem.raw | grep -aiE 'stratum|pool|miner' | sort -u | head -n 20 # 挖矿特征
strings -a -n 8 /evidence/mem.raw | grep -aE 'curl|wget|base64 -d' | sort -u | head -n 20 # 下载执行痕迹
ls -la /evidence/mem.raw; sha256sum /evidence/mem.raw # 镜像留存信息提取目标与后续动作
| 目标 | 筛法要点 | 后续动作 |
|---|---|---|
| URL | 以 https?:// 为前缀筛选 | 区分内网外网,排除常见 CDN |
| IP 地址 | 点分四段匹配 | 与连接列表比对,确认是否真连过 |
| 域名 | 按后缀与关键词筛选 | 查注册时间与解析记录 |
| 矿池特征 | stratum、pool 等关键字 | 与高 CPU 占用进程互证 |
| 命令行片段 | base64 -d、下载类命令 | 与历史命令、日志相互印证 |
strings 输出里缓存与历史残留混杂,噪音极多:先按类型归并去重,再挑出与进程、连接吻合的那几条,别一股脑当 IoC 上报。
大镜像直接扫会很慢也很吃内存:用 -n 控制最短字符串长度,或按大小切块(split)处理后合并结果,同时记录分块信息以便回溯位置。