温馨提示×

如何利用CPUInfo进行安全审计

小樊
38
2025-11-15 10:23:38
栏目: 编程语言

利用 CPUInfo 进行安全审计

一、审计目标与总体思路

  • 通过核对 CPU 的型号、微架构、核心/线程、缓存层级、虚拟化与加密指令集等,确认资产清单与合规基线一致,识别未授权变更可疑特征
  • /proc/cpuinfolscpu 为主,结合 dmidecode、cpuid、inxi 等工具交叉验证,确保信息一致性与完整性,降低伪造或误判风险。

二、采集与取证要点

  • 采集命令与关键字段
    • 基础信息:cat /proc/cpuinfo(关注 processor、model name、cpu cores、siblings、cache size、flags)
    • 结构化汇总:lscpu(关注 Architecture、CPU(s)、Thread(s) per core、Core(s) per socket、Socket(s)、NUMA node(s)、Model name、Virtualization、L1/L2/L3 缓存)
    • 固件/插槽层:sudo dmidecode -t processor(关注 Version、Max Speed、Current Speed、Core Enabled、Thread Count、Status)
    • 指令集与品牌:cpuid | grep -i brand;必要时 cpuid 查看扩展特性
    • 综合信息:inxi -C/-Fx(便于生成审计报告)
  • 取证建议
    • 同时记录时间戳、主机名、MAC/序列号、内核版本与命令输出,保存为只读副本(如 sha256 校验)。
    • 在变更窗口前后各采集一次,便于比对差异。

三、基线核对清单

检查项 审计要点 判定参考
资产一致性 型号、微架构、插槽数、核心/线程、缓存层级与 CMDB/采购清单一致 无未登记型号或核心数异常
虚拟化状态 flags 含 vmx/svm 且 lscpu Virtualization 为 VT-x/AMD-V 虚拟化开启/关闭与策略一致
加密与加速 flags 含 aes、sha-ni、rdrand、pclmulqdq 与安全合规要求匹配
64 位能力 flags 含 lm(Long Mode) 确认为 x86_64 能力
超线程/SMT Thread(s) per core 与策略一致(启用/禁用) 与基线策略一致
频率与步进 model、stepping、cpu MHz 与规格一致 无异常降频/步进变更
插槽与 NUMA Socket(s)、NUMA node(s) 与物理拓扑一致 多路服务器需重点核对
固件/微码 dmidecode 的 Version、Max/Current Speed 与厂商发布一致 无异常回退或未知版本
以上字段均可由 /proc/cpuinfo、lscpu、dmidecode、cpuid 获取,用于构建合规基线与差异比对。

四、风险判定与处置

  • 未授权变更
    • 现象:型号/步进/微码版本/插槽数/核心数较基线变化;lscpu 与 dmidecode 不一致。
    • 处置:冻结变更、复核工单与固件更新记录,回滚可疑固件/微码,复核供应链与访问控制。
  • 虚拟化被禁用或异常启用
    • 现象:flags 缺失 vmx/svm 或 lscpu Virtualization 显示 None,与业务需求不符。
    • 处置:核查 BIOS/UEFI 策略、启动参数与云安全组/策略模板,恢复合规配置并留痕。
  • 可疑指令集缺失
    • 现象:合规要求具备的 aes、sha-ni、rdrand 等缺失(在支持的型号上)。
    • 处置:排查微码/BIOS 设置、可疑内核模块或虚拟化层拦截,必要时更换硬件或调整合规范围。
  • 异常拓扑与核心数
    • 现象:核心/线程数、NUMA 节点与物理机规格不符(如虚拟机被过度/不足分配)。
    • 处置:与云平台/虚拟化平台核对配额与策略,修正资源配置并完善监控告警。
  • 频率与步进异常
    • 现象:cpu MHz 长期异常低/高,stepping 与型号不匹配。
    • 处置:检查电源/散热策略、降频/加速策略与微码版本,排除硬件故障或被篡改可能。

五、自动化脚本与报告模板

  • 快速采集脚本(bash)
    • 保存为:cpu_audit.sh
    • 用法:bash cpu_audit.sh > cpu_audit_$(date +%F_%T).log
    • 说明:汇总关键字段并计算逻辑/物理核心数,便于留痕与比对
    • 脚本内容:
      • #!/usr/bin/env bash
      • echo “=== lscpu ===”; lscpu
      • echo “=== /proc/cpuinfo (model,flags) ===”; grep -E ‘^(model name|flags)’ /proc/cpuinfo | sort -u
      • echo “=== CPU 核心/线程统计 ===”
      • echo " Logical CPUs: $(grep -c ^processor /proc/cpuinfo)"
      • echo " Physical cores per socket: $(lscpu | awk -F: ‘/^Core(s) per socket/ {gsub(/ /,“”,$2); print $2}’)"
      • echo " Sockets: $(lscpu | awk -F: ‘/^Socket(s)/ {gsub(/ /,“”,$2); print $2}’)"
      • echo “=== dmidecode -t processor ===”; sudo dmidecode -t processor 2>/dev/null
      • echo “=== cpuid brand string ===”; cpuid | grep -i brand | head -n1
  • 报告字段建议
    • 基本信息:采集时间、主机名、内核版本、架构
    • 关键指标:model name、stepping、cpu MHz、cache size、flags(aes/sha-ni/rdrand/vmx/svm 等)
    • 拓扑指标:CPU(s)、Core(s) per socket、Thread(s) per core、Socket(s)、NUMA node(s)
    • 固件/插槽:dmidecode 的 Version、Max/Current Speed、Core Enabled、Thread Count、Status
    • 合规结论:与基线的差异、风险等级、处置建议与复核人
  • 自动化思路
    • 将脚本纳入 Ansible/ SaltStack/自研 CMDB,定期采集并入库;对关键字段设置阈值与差异告警,与变更管理流程联动。

0