forensics-osquerySkill forensics-osquery

SQL驱动的取证调查和系统询问,使用osquery将操作系统作为关系数据库进行查询。支持Linux、macOS和Windows端点的快速证据收集、威胁狩猎和应急响应。

数字取证 0 次安装 8 次浏览 更新于 3/1/2026

forensics-osquery

概览

osquery 将操作系统转化为可查询的关系型数据库,使安全分析师能够使用 SQL 而非传统的 CLI 工具来调查违规行为。这项技能提供了取证调查工作流程、常见的检测查询和应急响应模式,以便在 Linux、macOS 和 Windows 端点上快速收集证据。 核心能力

  • 基于 SQL 的系统询问,用于进程、网络、文件和用户分析
  • 跨平台取证物证收集(Linux、macOS、Windows)
  • 不部署重量级取证工具的实时系统分析
  • 针对 MITRE ATT&CK 技术的威胁狩猎查询
  • 通过 osqueryd 进行计划监控,以实现持续检测
  • 与 SIEM 和应急响应平台集成

快速开始

交互式调查(osqueryi)

# 启动交互式 shell
osqueryi

# 检查运行中的进程
SELECT pid, name, path, cmdline, uid FROM processes WHERE name LIKE '%suspicious%';

# 识别监听网络服务
SELECT DISTINCT processes.name, listening_ports.port, listening_ports.address, processes.pid, processes.path
FROM listening_ports
JOIN processes USING (pid)
WHERE listening_ports.address != '127.0.0.1';

# 查找具有已删除可执行文件的进程(潜在恶意软件)
SELECT name, path, pid, cmdline FROM processes WHERE on_disk = 0;

# 检查持久性机制(Linux/macOS 定时任务)
SELECT command, path FROM crontab;

单行取证查询

# 单次查询执行
osqueryi --json "SELECT * FROM logged_in_users;"

# 导出查询结果进行分析
osqueryi --json "SELECT * FROM processes;" > processes_snapshot.json

# 检查可疑内核模块(Linux)
osqueryi --line "SELECT name, used_by, status FROM kernel_modules WHERE name NOT IN (SELECT name FROM known_good_modules);"

核心工作流程

工作流程 1:初始应急响应分类

对于快速评估潜在受妥协系统的: 进度: [ ] 1. 收集正在运行的进程和命令行 [ ] 2. 识别网络连接和监听端口 [ ] 3. 检查用户账户和最近的登录 [ ] 4. 检查持久性机制(计划任务、启动项) [ ] 5. 审查可疑文件修改和执行 [ ] 6. 用时间戳和进程祖先记录发现 [ ] 7. 将证据导出为 JSON 格式以保存 系统地完成每个步骤。使用捆绑的分类脚本来自动收集。 执行分类./scripts/osquery_triage.sh > incident_triage_$(date +%Y%m%d_%H%M%S).json

工作流程 2:针对特定 TTPs 的威胁狩猎

当寻找特定的 MITRE ATT&CK 技术时:

  1. 选择目标技术
    • 从威胁情报中识别技术(例如,T1055 - 进程注入)
    • 将技术映射到可观察的系统工件
    • 参见 references/mitre-attack-queries.md 以获取预构建的查询
  2. 构建检测查询
    • 确定相关的 osquery 表(进程、文件事件、注册表等)
    • 连接表以关联相关工件
    • 使用 references/table-guide.md 作为模式参考
  3. 执行狩猎
    -- 示例:搜寻凭证转储(T1003)
    SELECT p.pid, p.name, p.cmdline, p.path, p.parent, pm.permissions
    FROM processes p
    JOIN process_memory_map pm ON p.pid = pm.pid
    WHERE p.name IN ('mimikatz.exe', 'procdump.exe', 'pwdump.exe')
       OR p.cmdline LIKE '%sekurlsa%'
       OR (pm.path = '/etc/shadow' OR pm.path LIKE '%SAM%');
    
  4. 分析结果
    • 审查进程祖先和命令行参数
    • 检查文件哈希值与威胁情报
    • 记录可疑活动的timeline
  5. 调查转移
    • 使用发现结果识别额外的指标
    • 查询相关工件(网络连接、文件、注册表)
    • 如果确认妥协,扩大狩猎范围

工作流程 3:持久性机制分析

跨平台检测持久性: Linux/macOS 持久性

-- 定时任务
SELECT * FROM crontab;

-- 系统服务(Linux)
SELECT name, path, status, source FROM systemd_units WHERE source != '/usr/lib/systemd/system';

-- 启动代理/守护进程(macOS)
SELECT name, path, program, run_at_load FROM launchd WHERE run_at_load = 1;

-- Bash 配置文件修改
SELECT * FROM file WHERE path IN ('/etc/profile', '/etc/bash.bashrc', '/home/*/.bashrc', '/home/*/.bash_profile');

Windows 持久性

-- 注册表运行键
SELECT key, name, path, type FROM registry WHERE key LIKE '%Run%' OR key LIKE '%RunOnce%';

-- 计划任务
SELECT name, action, path, enabled FROM scheduled_tasks WHERE enabled = 1;

-- 服务
SELECT name, display_name, status, path, start_type FROM services WHERE start_type = 'AUTO_START';

-- WMI 事件消费者
SELECT name, command_line_template FROM wmi_cli_event_consumers;

查看结果以寻找:

  • 启动位置中不寻常的可执行文件
  • Base64 编码或混淆的命令
  • 临时目录或用户可写目录中的可执行文件
  • 最近修改的持久性机制

工作流程 4:网络连接分析

调查可疑网络活动:

-- 带有进程详细信息的活跃网络连接
SELECT p.name, p.pid, p.path, p.cmdline, ps.remote_address, ps.remote_port, ps.state
FROM processes p
JOIN process_open_sockets ps ON p.pid = ps.pid
WHERE ps.remote_address NOT IN ('127.0.0.1', '::1', '0.0.0.0')
ORDER BY ps.remote_port;

-- 映射到进程的监听端口
SELECT DISTINCT p.name, lp.port, lp.address, lp.protocol, p.path, p.cmdline
FROM listening_ports lp
LEFT JOIN processes p ON lp.pid = p.pid
WHERE lp.address NOT IN ('127.0.0.1', '::1')
ORDER BY lp.port;

-- DNS 查找(需要事件表或进程监控)
SELECT name, domains, pid FROM dns_resolvers;

调查清单

  • [ ] 识别非标准监听端口(不是 80、443、22、3389)
  • [ ] 检查具有外部连接的进程
  • [ ] 根据威胁情报审查目标 IP
  • [ ] 将连接与进程执行时间线相关联
  • [ ] 验证连接的合法商业目的

工作流程 5:文件系统取证

分析文件修改和可疑文件:

-- 在敏感位置最近修改的文件
SELECT path, filename, size, mtime, ctime, md5, sha256
FROM hash
WHERE path LIKE '/etc/%' OR path LIKE '/tmp/%' OR path LIKE 'C:\Windows\Temp\%'
  AND mtime > (strftime('%s', 'now') - 86400);  -- 最后 24 小时

-- 在不寻常位置的可执行文件
SELECT path, filename, size, md5, sha256
FROM hash
WHERE (path LIKE '/tmp/%' OR path LIKE '/var/tmp/%' OR path LIKE 'C:\Users\%\AppData\%')
  AND (filename LIKE '%.exe' OR filename LIKE '%.sh' OR filename LIKE '%.py');

-- SUID/SGID 二进制文件(Linux/macOS) - 潜在权限提升
SELECT path, filename, mode, uid, gid
FROM file
WHERE (mode LIKE '%4%' OR mode LIKE '%2%')
  AND path LIKE '/usr/%' OR path LIKE '/bin/%';

文件分析工作流程

  1. 通过位置和时间戳识别可疑文件
  2. 提取文件哈希值(MD5、SHA256)进行威胁情报查找
  3. 审查文件权限和所有权
  4. 检查生活离地二进制文件(LOLBins)滥用
  5. 为取证时间线记录文件元数据

取证查询模式

模式 1:进程分析

标准进程调查查询:

-- 具有网络连接的进程
SELECT p.pid, p.name, p.path, p.cmdline, ps.remote_address, ps.remote_port
FROM processes p
JOIN process_open_sockets ps ON p.pid = ps.pid;

-- 进程树(父子关系)
SELECT p1.pid, p1.name AS process, p1.cmdline,
       p2.pid AS parent_pid, p2.name AS parent_name, p2.cmdline AS parent_cmdline
FROM processes p1
LEFT JOIN processes p2 ON p1.parent = p2.pid;

-- 高权限进程(UID 0 / SYSTEM)
SELECT pid, name, path, cmdline, uid, euid FROM processes WHERE uid = 0 OR euid = 0;

模式 2:用户活动监控

跟踪用户账户和认证:

-- 当前登录用户
SELECT user, tty, host, time, pid FROM logged_in_users;

-- 具有登录 shell 的用户账户
SELECT username, uid, gid, shell, directory FROM users WHERE shell NOT LIKE '%nologin%';

-- 最近的认证事件(需要 auditd/Windows 事件日志集成)
SELECT * FROM user_events WHERE time > (strftime('%s', 'now') - 3600);

-- Sudo 使用历史记录(Linux/macOS)
SELECT username, command, time FROM sudo_usage_history ORDER BY time DESC LIMIT 50;

模式 3:系统配置审查

识别配置更改:

-- 内核配置和参数(Linux)
SELECT name, value FROM kernel_info;
SELECT path, key, value FROM sysctl WHERE key LIKE 'kernel.%';

-- 安装的包(检测未经授权的软件)
SELECT name, version, install_time FROM deb_packages ORDER BY install_time DESC LIMIT 20;  -- Debian/Ubuntu
SELECT name, version, install_time FROM rpm_packages ORDER BY install_time DESC LIMIT 20;  -- RHEL/CentOS

-- 系统信息
SELECT hostname, computer_name, local_hostname FROM system_info;

安全考虑

  • 敏感数据处理:osquery 可以访问敏感的系统信息(密码哈希、私钥、进程内存)。将访问权限限制在取证分析师和应急响应人员。将查询结果导出到加密存储。在与第三方共享之前清理日志。
  • 访问控制:需要在调查系统上具有 root/administrator 权限。使用专用的取证用户账户,并进行审计日志记录。限制 osqueryd 配置文件(osquery.conf)以防止查询篡改。实施对查询结果的最小权限访问。
  • 审计日志:记录所有 osquery 执行以维护取证链。记录分析师用户名、时间戳、执行的查询和查询的系统。为合规和法律要求维护不可变的审计日志。使用 osqueryd --audit 标志进行详细日志记录。
  • 合规性:osquery 支持 NIST SP 800-53 AU(审计和问责)控制和 NIST 网络安全框架检测能力。能够为 GDPR 数据泄露调查(第 33 条)收集证据(文章 33)。查询结果构成取证证据 - 维护完整性和链。
  • 安全默认值:在调查期间使用只读查询以避免系统修改。在生产环境中使用之前,在实验室环境中测试复杂查询。监控 osqueryd 资源消耗以防止拒绝服务。除非明确需要,否则在 osqueryd 配置中禁用危险的表格(例如,curlyara)。

捆绑资源

脚本

  • scripts/osquery_triage.sh - 用于快速应急响应的自动化分类收集脚本
  • scripts/osquery_hunt.py - 具有 MITRE ATT&CK 映射的威胁狩猎查询执行器
  • scripts/parse_osquery_json.py - 解析和分析 osquery JSON 输出
  • scripts/osquery_to_timeline.py - 从 osquery 结果生成取证时间线

参考资料

  • references/table-guide.md - 取证调查的综合 osquery 表参考
  • references/mitre-attack-queries.md - 映射到 MITRE ATT&CK 技术的预构建查询
  • references/platform-differences.md - 平台特定的表和查询变体(Linux/macOS/Windows)
  • references/osqueryd-deployment.md - 部署 osqueryd 进行持续监控和车队管理

资产

  • assets/osquery.conf - 安全监控的生产 osqueryd 配置模板
  • assets/forensic-packs/ - 用于应急响应场景的查询包
    • ir-triage.conf - 初始分类查询
    • persistence-hunt.conf - 持久性机制检测
    • lateral-movement.conf - 横向移动指标
    • credential-access.conf - 凭证转储检测

常见调查场景

场景 1:Webshell 检测

在受妥协的 Web 服务器上检测 Webshell:

-- 检查具有可疑子进程的 Web 服务器进程
SELECT p1.name AS webserver, p1.pid, p1.cmdline,
       p2.name AS child, p2.cmdline AS child_cmdline
FROM processes p1
JOIN processes p2 ON p1.pid = p2.parent
WHERE p1.name IN ('httpd', 'nginx', 'apache2', 'w3wp.exe')
  AND p2.name IN ('bash', 'sh', 'cmd.exe', 'powershell.exe', 'perl', 'python');

-- 文件在 Web 目录中最近修改
SELECT path, filename, mtime, md5, sha256
FROM hash
WHERE path LIKE '/var/www/%' OR path LIKE 'C:\inetpub\wwwroot\%'
  AND (filename LIKE '%.php' OR filename LIKE '%.asp' OR filename LIKE '%.jsp')
  AND mtime > (strftime('%s', 'now') - 604800);  -- 最后 7 天

场景 2:勒索软件调查

识别勒索软件指标:

-- 快速写入许多文件的进程(潜在加密活动)
SELECT p.name, p.pid, p.cmdline, COUNT(fe.path) AS files_modified
FROM processes p
JOIN file_events fe ON p.pid = fe.pid
WHERE fe.action = 'WRITE' AND fe.time > (strftime('%s', 'now') - 300)
GROUP BY p.pid
HAVING files_modified > 100;

-- 查找勒索信文件
SELECT path, filename FROM file
WHERE filename LIKE '%DECRYPT%' OR filename LIKE '%README%' OR filename LIKE '%RANSOM%';

-- 检查文件扩展名更改(加密文件)
SELECT path, filename FROM file
WHERE filename LIKE '%.locked' OR filename LIKE '%.encrypted' OR filename LIKE '%.crypto';

场景 3:权限提升检测

检测权限提升尝试:

-- 从非标准路径以 root 身份运行的进程
SELECT pid, name, path, cmdline, uid, euid FROM processes
WHERE (uid = 0 OR euid = 0)
  AND path NOT LIKE '/usr/%'
  AND path NOT LIKE '/sbin/%'
  AND path NOT LIKE '/bin/%'
  AND path NOT LIKE 'C:\Windows\%';

-- SUID 二进制文件(Linux/macOS)
SELECT path, filename, uid, gid FROM file
WHERE mode LIKE '%4%' AND path NOT IN (SELECT path FROM known_suid_binaries);

-- Sudoers 文件修改
SELECT * FROM file WHERE path = '/etc/sudoers' AND mtime > (strftime('%s', 'now') - 86400);

集成点

SIEM 集成

将 osqueryd 日志转发到 SIEM 平台:

  • Splunk:使用 Splunk osquery 插件或通用转发器
  • Elasticsearch:配置 osqueryd 输出 JSON 日志,使用 Filebeat 进行摄取
  • Sentinel:通过 Azure Monitor Agent 或自定义摄取流式传输日志
  • QRadar:使用 QRadar osquery 应用程序或日志源扩展 配置 osqueryd 结果日志记录:
{
  "options": {
    "logger_plugin": "filesystem",
    "logger_path": "/var/log/osquery",
    "disable_logging": false
  }
}

EDR/XDR 集成

与端点检测结合:

  • 将 osquery 结果与 EDR 警报相关联
  • 使用 osquery 进行 EDR 警报丰富和调查
  • 根据 EDR 威胁情报部署 osquery 包
  • 用自定义 osquery 表增强 EDR 遥测

威胁情报丰富

用威胁情报丰富发现结果:

  • 对 VirusTotal、MISP 或威胁源数据库查询文件哈希值
  • 将网络指标与 IOC 数据库匹配
  • 用 MITRE ATT&CK 技术标记发现结果
  • 从威胁报告中生成狩猎假设

故障排除

问题:osquery 未找到预期结果

解决方案:验证表可用性和平台兼容性

  • 检查表模式:osqueryi ".schema processes"
  • 列出可用表:osqueryi ".tables"
  • 查阅 references/platform-differences.md 中的平台特定表
  • 一些表需要特定的 osquery 版本或内核功能

问题:高资源消耗

解决方案:优化查询性能和调度

  • 在 WHERE 子句中使用索引列(pid、uid、path)
  • 避免没有过滤器的无界查询
  • 在 osquery.conf 中减少 osqueryd 查询频率
  • 使用 LIMIT 子句限制结果集大小
  • 监控:SELECT * FROM osquery_info; SELECT * FROM osquery_schedule;

问题:权限拒绝错误

解决方案:确保正确的权限提升

  • 以 sudo/admin 权限运行 osqueryi:sudo osqueryi
  • 一些表需要 root 访问权限(kernel_modules、process_memory_map)
  • 检查 osqueryd 配置文件上的文件权限
  • 查看阻止 osquery 的 SELinux/AppArmor 策略

最佳实践

  1. 记录查询:维护带有描述和预期结果的查询库
  2. 生产前测试:在生产系统上运行之前,在实验室中验证查询
  3. 最小化范围:使用 WHERE 子句限制查询范围,减少性能影响
  4. 导出结果:保存查询输出以保存证据(--json--csv 标志)
  5. 关联发现:连接多个表以进行全面的工件分析
  6. 版本控制:在 Git 中跟踪 osquery 配置和查询包
  7. 监控性能:在计划查询期间观察 osqueryd 的 CPU/内存使用情况
  8. 定期更新:保持 osquery 更新以获得最新的表模式和安全补丁

MITRE ATT&CK 覆盖

osquery 支持检测和调查 ATT&CK 矩阵中的技术:

  • 初始访问:检测可疑服务和计划任务(T1053)
  • 执行:监控进程创建和命令行参数(T1059)
  • 持久性:识别注册表修改、cron 作业、启动项(T1547、T1053)
  • 权限提升:查找 SUID 二进制文件、sudo 滥用、服务创建(T1548、T1543)
  • 防御绕过:检测进程注入、文件删除、时间戳伪造(T1055、T1070)
  • 凭证访问:搜寻凭证转储工具和访问(T1003、T1552)
  • 发现:跟踪系统枚举活动(T1082、T1083、T1057)
  • 横向移动:监控远程服务创建和认证(T1021)
  • 收集:检测归档创建和数据暂存(T1560、T1074)
  • 外泄:识别不寻常的网络连接和数据传输(T1041) 参见 references/mitre-attack-queries.md 以获取特定技术的检测查询。

参考资料