
Anthropic-Cybersecurity-Skills 实战Windows USB 设备连接历史取证分析指南【免费下载链接】Anthropic-Cybersecurity-Skills817 structured cybersecurity skills for AI agents · Mapped to 6 frameworks: MITRE ATTCK, NIST CSF 2.0, MITRE ATLAS, D3FEND, NIST AI RMF MITRE F3 (Fight Fraud) · agentskills.io standard · Works with Claude Code, GitHub Copilot, Codex CLI, Cursor, Gemini CLI 20 platforms · 29 security domains · Apache 2.0项目地址: https://gitcode.com/GitHub_Trending/an/Anthropic-Cybersecurity-Skills本文是 Anthropic-Cybersecurity-Skills 仓库中analyzing-usb-device-connection-history技能Skill的深度实战指南。该技能属于数字取证Digital Forensics子域聚焦于通过关联 Windows 注册表键USBSTOR、MountedDevices、MountPoints2、事件日志System、Security、DriverFrameworks-UserMode与setupapi.dev.log完整重建 USB 设备的连接历史、首次/末次插入时间戳与盘符映射。读完本文后你将掌握一套可直接落地的手工取证工作流以及基于本仓库 agent.py 的自动化解析能力可应用于可移动介质数据泄露调查、内部威胁追踪、合规审计与设备溯源场景。何时使用本技能根据 SKILL.md 的定位本技能在以下场景中价值最高调查经由可移动存储设备U 盘、移动硬盘实施的数据泄露Exfiltration事件内部威胁调查中追踪特定用户的 USB 设备使用情况合规审计中验证可移动介质管控策略removable media policy是否得到执行将 USB 连接事件与文件访问、复制事件进行关联取证在应急响应中建立完整的设备连接时间线。在 MITRE ATTCK 视角下本技能覆盖了T1052.001Exfiltration Over Physical Medium: Exfiltration over USB、T1025Data from Removable Media、T1091Replication Through Removable Media、T1005Data from Local System与T1074.001Data Staged: Local Data Staging在 NIST CSF 2.0 上对应RS.AN-03、DE.AE-02、RS.MA-01见 SKILL.md 的 frontmatter 与仓库 ATTACK_COVERAGE.md 的技术映射体系。前置条件取证镜像forensic image或已提取的注册表配置单元hives与事件日志可访问SYSTEM、SOFTWARE、NTUSER.DAT注册表配置单元SetupAPI 日志setupapi.dev.log用于首次连接时间戳Windows 事件日志System、Security、DriverFrameworks-UserMode工具USBDeview、USB Forensic Tracker、RegRipper理解 USB 设备标识体系VIDVendor ID、PIDProduct ID、序列号serial number。取证工作流总览完整的分析流程分为五个步骤前四步分别从不同证据源提取信息第五步汇总为统一时间线提取 USB 相关取证产物挂载镜像、拷贝配置单元/日志解析USBSTOR注册表键设备清单与末次连接时间提取MountedDevices盘符映射与MountPoints2用户关联从setupapi.dev.log与事件日志提取首次连接时间戳汇总构建 USB 活动时间线并输出报告。提示完整操作应始终在取证镜像的只读副本上进行本技能提供的工作流以mount -o ro,loop只读挂载为起点。Step 1提取 USB 相关取证产物对取证镜像进行只读挂载后将关键证据文件拷贝到案件工作目录。挂载时需根据镜像的分区起始扇区计算偏移示例中为2048*512即标准 1 MiB 对齐# Mount forensic image and copy relevant artifacts mount -o ro,loop,offset$((2048*512)) /cases/case-2024-001/images/evidence.dd /mnt/evidence mkdir -p /cases/case-2024-001/usb/ # Registry hives cp /mnt/evidence/Windows/System32/config/SYSTEM /cases/case-2024-001/usb/ cp /mnt/evidence/Windows/System32/config/SOFTWARE /cases/case-2024-001/usb/ cp /mnt/evidence/Users/*/NTUSER.DAT /cases/case-2024-001/usb/ # SetupAPI logs (first connection timestamps) cp /mnt/evidence/Windows/INF/setupapi.dev.log /cases/case-2024-001/usb/ # Event logs cp /mnt/evidence/Windows/System32/winevt/Logs/System.evtx /cases/case-2024-001/usb/ cp /mnt/evidence/Windows/System32/winevt/Logs/Microsoft-Windows-DriverFrameworks-UserMode%4Operational.evtx \ /cases/case-2024-001/usb/ 2/dev/null cp /mnt/evidence/Windows/System32/winevt/Logs/Microsoft-Windows-Partition%4Diagnostic.evtx \ /cases/case-2024-001/usb/ 2/dev/null本技能原文档 SKILL.md 中明确说明事件日志的Microsoft-Windows-DriverFrameworks-UserMode%4Operational.evtx与Microsoft-Windows-Partition%4Diagnostic.evtx路径在部分系统中不存在拷贝命令后附加了2/dev/null以容忍缺失这保证了工作流在差异化 Windows 环境中的健壮性。Step 2解析 USBSTOR 注册表键USBSTOR是 SYSTEM 配置单元中存储 USB 大容量存储设备标识与连接数据的核心键。其枚举路径结构为ControlSet00X\Enum\USBSTOR\DiskVen_厂商Prod_产品Rev_修订\序列号注意必须先读取Select键中的Current值确定当前 ControlSet通常是 ControlSet001否则可能解析到非活动配置单元。使用python-registryRegistry模块解析的完整脚本如下python3 PYEOF from Registry import Registry import json reg Registry.Registry(/cases/case-2024-001/usb/SYSTEM) # Find current ControlSet select reg.open(Select) current select.value(Current).value() controlset fControlSet{current:03d} # Parse USBSTOR usbstor_path f{controlset}\\Enum\\USBSTOR usbstor reg.open(usbstor_path) devices [] print( USBSTOR DEVICES \n) for device_class in usbstor.subkeys(): # Format: DiskVen_VENDORProd_PRODUCTRev_REVISION class_name device_class.name() parts class_name.split() vendor parts[1].replace(Ven_, ) if len(parts) 1 else Unknown product parts[2].replace(Prod_, ) if len(parts) 2 else Unknown revision parts[3].replace(Rev_, ) if len(parts) 3 else Unknown for instance in device_class.subkeys(): serial instance.name() last_write instance.timestamp() device_info { vendor: vendor, product: product, revision: revision, serial: serial, last_connected: str(last_write), } # Get friendly name if available try: friendly instance.value(FriendlyName).value() device_info[friendly_name] friendly except: pass # Get device parameters try: params instance.subkey(Device Parameters) try: device_info[class_guid] params.value(ClassGUID).value() except: pass except: pass devices.append(device_info) print(fDevice: {vendor} {product}) print(f Serial: {serial}) print(f Last Connected: {last_write}) print(f Friendly Name: {device_info.get(friendly_name, N/A)}) print() # Save results with open(/cases/case-2024-001/analysis/usb_devices.json, w) as f: json.dump(devices, f, indent2) print(f\nTotal USB storage devices found: {len(devices)}) PYEOF关键点设备类名解析DiskVen_KingstonProd_DataTraveler_3.0Rev_PMAP这类名称按拆分后分别对应厂商、产品、修订号末次连接时间取自实例键的最后写入时间戳instance.timestamp()这是 USBSTOR 能提供的末次连接证据FriendlyName人类可读的设备名称用于与采购/白名单记录比对ClassGUID位于Device Parameters子键用于进一步归类设备。仓库中的 agent.py第 12-42 行parse_usbstor将该逻辑封装为可复用函数且改用regipy库实现同样的遍历RegistryHive打开 SYSTEM →Select键读取Current→iter_subkeys()遍历设备类与实例 → 从instance.header.last_modified获取末次连接时间戳。可见原文档的解析思路与仓库参考实现api-reference.md 中的 regipy 示例完全一致仅是库 API 不同。Step 3提取盘符映射与用户关联USBSTOR 只告诉我们什么设备被插过还需回答插到哪个盘符和哪个用户用过。这一步分别由MountedDevices与MountPoints2承担。MountedDevices盘符到设备的映射python3 PYEOF from Registry import Registry import struct reg Registry.Registry(/cases/case-2024-001/usb/SYSTEM) mounted reg.open(MountedDevices) print( MOUNTED DEVICES (Drive Letter Assignments) \n) for value in mounted.values(): name value.name() data value.value() if name.startswith(\\DosDevices\\): drive_letter name.replace(\\DosDevices\\, ) if len(data) 24: # USB device - contains device path string try: device_path data.decode(utf-16-le).strip(\x00) if USBSTOR in device_path or USB# in device_path: print(f {drive_letter} - {device_path}) except: pass else: # Fixed disk - contains disk signature offset disk_sig struct.unpack(I, data[0:4])[0] offset struct.unpack(Q, data[4:12])[0] print(f {drive_letter} - Disk Signature: 0x{disk_sig:08X}, Offset: {offset}) PYEOF解析要点值名\DosDevices\E:中的盘符即设备挂载盘符数据长度 24 字节的值通常是 USB 设备其内容为 UTF-16LE 编码的设备路径字符串可通过包含USBSTOR或USB#判定为 USB 设备长度 ≤ 24 字节的值对应固定磁盘内容是 4 字节磁盘签名 8 字节分区偏移因此需要struct.unpack按I与Q解包。MountPoints2哪个用户访问了哪些卷python3 PYEOF from Registry import Registry import os, glob print(\n USER MOUNT POINTS (MountPoints2) \n) for ntuser in glob.glob(/cases/case-2024-001/usb/NTUSER*.DAT): try: reg Registry.Registry(ntuser) mp2 reg.open(Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\MountPoints2) print(fUser hive: {os.path.basename(ntuser)}) for key in mp2.subkeys(): guid key.name() last_write key.timestamp() if { in guid: print(f Volume: {guid} | Last accessed: {last_write}) print() except Exception as e: print(f Error parsing {ntuser}: {e}) PYEOF由于 MountPoints2 位于每个用户各自的NTUSER.DAT中脚本通过glob遍历所有用户配置单元从而建立设备卷 GUID → 用户 → 访问时间的关联。这正是将设备与具体嫌疑人用户关联起来的关键证据链。仓库参考文档 api-reference.md 汇总了本技能涉及的四个核心注册表路径可作为手工分析的速查表路径配置单元说明ControlSet00X\Enum\USBSTORSYSTEMUSB 大容量存储设备标识符MountedDevicesSYSTEM盘符到设备的映射ControlSet00X\Enum\USBSYSTEM所有 USB 设备不限于存储Software\Microsoft\Windows\CurrentVersion\Explorer\MountPoints2NTUSER.DAT按用户的卷访问历史Step 4提取首次连接时间戳USBSTOR 只提供末次连接时间首次连接时间需要从 SetupAPI 日志与事件日志中获取。SetupAPI首次安装时间python3 PYEOF import re print( SETUPAPI USB DEVICE INSTALLATIONS \n) with open(/cases/case-2024-001/usb/setupapi.dev.log, r, errorsignore) as f: content f.read() # Find USB device installation sections pattern r\s\[Device Install.*?\n.*?Section start (\d{4}/\d{2}/\d{2} \d{2}:\d{2}:\d{2}).*?\n(.*?) matches re.findall(pattern, content, re.DOTALL) usb_installs [] for timestamp, section in matches: if USBSTOR in section or USB\\VID in section: # Extract device ID dev_match re.search(r(USBSTOR\\[^\s]|USB\\VID_\wPID_\w[^\s]*), section) if dev_match: device_id dev_match.group(1) usb_installs.append({ first_install: timestamp, device_id: device_id }) print(f {timestamp} | {device_id}) print(f\nTotal USB installations found: {len(usb_installs)}) PYEOF正则逻辑说明匹配 [Device Install ...] Section start 时间戳 ... 格式的安装段再在段内查找USBSTOR\...或USB\VID_...PID_...设备 ID从而得到该设备首次被系统识别并安装驱动的时间。事件日志连接/拔出事件python3 PYEOF import json from evtx import PyEvtxParser try: parser PyEvtxParser(/cases/case-2024-001/usb/System.evtx) print(\n SYSTEM EVENT LOG USB EVENTS \n) for record in parser.records_json(): data json.loads(record[data]) event_id str(data[Event][System][EventID]) # USB device connection events if event_id in (20001, 20003, 10000, 10100): timestamp data[Event][System][TimeCreated][#attributes][SystemTime] event_data data[Event].get(UserData, data[Event].get(EventData, {})) print(f [{timestamp}] EventID {event_id}: {json.dumps(event_data, defaultstr)[:200]}) except Exception as e: print(fError: {e}) PYEOF需要关注的事件 ID 汇总本技能原文档明确列出事件源事件 ID含义DriverFrameworks-UserMode2003、2010、2100、2102USB 设备驱动安装/启停相关Security6416识别到新的外部设备外接设备审计System20001、20003、10000、10100USB 插拔相关连接事件结合仓库 agent.py 中的parse_setupapi_log第 85-100 行可见自动化实现使用了相同的正则模式\s\[Device Install...与Section start说明该正则模式在仓库实现中已被验证为有效。这样手工脚本与仓库 Agent 代码形成互相印证读者可以放心复用。Step 5构建 USB 活动时间线与报告将前四步证据汇总为统一时间线输出 CSV 供后续分析工具如 Excel、Splunk、Timesketch使用python3 PYEOF import json, csv timeline [] # Load USBSTOR data with open(/cases/case-2024-001/analysis/usb_devices.json) as f: devices json.load(f) for device in devices: timeline.append({ timestamp: device[last_connected], source: USBSTOR Registry, device: f{device[vendor]} {device[product]}, serial: device[serial], event: Last Connected, detail: device.get(friendly_name, ) }) # Sort chronologically timeline.sort(keylambda x: x[timestamp]) # Write timeline CSV with open(/cases/case-2024-001/analysis/usb_timeline.csv, w, newline) as f: writer csv.DictWriter(f, fieldnames[timestamp, source, device, serial, event, detail]) writer.writeheader() writer.writerows(timeline) print(fUSB Timeline: {len(timeline)} events written to usb_timeline.csv) # Print summary print(\n USB DEVICE SUMMARY ) for entry in timeline: print(f {entry[timestamp]} | {entry[device]} | {entry[serial][:20]} | {entry[event]}) PYEOF仓库 agent.py 的build_timeline第 103-125 行在手工脚本基础上做了增强同时把 USBSTOR 的Last Connected事件与 MountPoints2 的Volume Accessed事件合并进同一条时间线并按时间戳排序后通过export_timeline_csv第 128-135 行导出。该 Agent 的 CLI 用法为python3 agent.py \ --system-hive /cases/case-2024-001/usb/SYSTEM \ --ntuser /cases/case-2024-001/usb/NTUSER.DAT \ --setupapi-log /cases/case-2024-001/usb/setupapi.dev.log \ --output-dir ./usb_analysis \ --case-id CASE-2024-001从main()第 138-178 行可以看到参数约定--system-hive为必填--ntuser、--setupapi-log可选输出包含设备清单、盘符映射、时间线事件数以及一份 JSON 报告。这种手工脚本 可复用 Agent的组合正是本技能设计的意图——先用文档理解原理再用 Agent 自动化重复劳动。关键概念速查概念说明USBSTOR存储 USB 大容量存储设备标识与连接数据的注册表键VID/PID唯一标识 USB 设备厂商与型号的厂商 ID 与产品 ID设备序列号单个 USB 设备的唯一标识注意部分设备共享序列号MountedDevices将卷 GUID 与盘符映射到物理设备的注册表键MountPoints2按用户记录卷访问历史的注册表键SetupAPI 日志记录设备首次连接驱动安装时间的 Windows 驱动安装日志DeviceContainersSOFTWARE 配置单元中携带设备元数据与时间戳的注册表键EMDMgmt追踪 ReadyBoost 兼容设备含序列号与时间戳的注册表键其中DeviceContainers与EMDMgmt位于SOFTWARE配置单元可作为 USBSTOR 之外的时间戳佐证源详见 api-reference.md。工具与系统工具用途USB Forensic Tracker专门的 USB 设备历史提取工具USBDeviewNirSoft 出品列出系统连接过的所有 USB 设备RegRipperusbstor 插件从注册表配置单元自动提取 USB 产物Registry Explorer交互式分析 USB 相关注册表键KAPE自动化收集 USB 相关取证产物Plaso/log2timeline构建包含 USB 连接事件的完整时间线FTK Imager取证成像含可移动介质Velociraptor端点 Agent内置 USB 设备历史狩猎产物常见实战场景场景 1离职员工数据泄露提取 USBSTOR 条目识别所有连接过的 USB 设备用设备序列号关联 MountPoints2 确认具体用户访问将时间戳与文件访问日志、Jump List 最近文件交叉比对在 USN Journal 中查找大规模文件复制特征。场景 2安全系统上出现未授权设备将所有 USBSTOR 条目与公司白名单设备清单比对通过 VID/PID 识别未获企业批准的硬件确定未授权设备的首次与末次连接时间核查是否发生了数据传输。场景 3经 USB 传播的恶意软件找出恶意软件执行Prefetch 时间戳之前刚刚插入的 USB 设备提取设备序列号与厂商信息检查该设备的 autorun 是否被启用在 Prefetch 与 ShimCache 中查找从可移动盘符启动的可执行文件痕迹。场景 4跨多台系统追踪同一 U 盘在所有取证镜像的 USBSTOR 中搜索同一序列号绘制该 U 盘在各系统的连接时间地图还原设备在组织内的移动路径与网络共享访问日志关联。报告输出格式本技能给出了标准的取证报告输出模板节选USB Device History Analysis: System: DESKTOP-ABC123 (Windows 10 Pro) Total USB Storage Devices: 12 Analysis Sources: USBSTOR, MountedDevices, MountPoints2, SetupAPI, Event Logs Device Inventory: 1. Kingston DataTraveler 3.0 (Serial: 0019E06B4521A2B0) First Connected: 2024-01-10 09:15:32 (SetupAPI) Last Connected: 2024-01-18 14:30:00 (USBSTOR) Drive Letter: E: User Access: suspect_user (MountPoints2) 2. WD My Passport (Serial: 575834314131363035) First Connected: 2024-01-15 20:00:00 Last Connected: 2024-01-15 23:45:00 Drive Letter: F: User Access: suspect_user Suspicious Findings: - Kingston drive connected 15 times during investigation period - WD Passport connected only once, late evening (unusual hours) - Unknown device (VID_1234PID_5678) connected 2024-01-17, no matching approved device Timeline: /cases/case-2024-001/analysis/usb_timeline.csv报告中 Suspicious Findings 段落的价值在于将证据转化为可操作的调查线索——连接频次异常、非工作时间插入、无法匹配白名单的未知设备都是需要进一步深挖的切入点。局限性与注意事项USBSTOR 只记录末次连接它不提供每次插入的历史记录完整连接历史必须依赖事件日志2003/20001 等与 SetupAPI 日志共享序列号问题部分厂商尤其是廉价 U 盘会让多个设备共用同一序列号此时无法通过序列号唯一区分物理设备需结合 VID/PID 与体积特征日志留存窗口System 事件日志与 DriverFrameworks-UserMode 日志受日志大小与轮转策略影响可能无法覆盖全部历史需与注册表证据互为补充仅限授权取证本技能及仓库整体明确要求仅在拥有授权或书面许可的系统上进行取证分析遵守适用的法律与交战规则见 README.md 的使用声明与 SECURITY.md。延伸阅读技能正文SKILL.md参考 API 文档regipy / python-evtx 用法api-reference.md自动化 Agent 脚本scripts/agent.py框架映射说明mappings/README.mdATTCK 覆盖总览ATTACK_COVERAGE.md【免费下载链接】Anthropic-Cybersecurity-Skills817 structured cybersecurity skills for AI agents · Mapped to 6 frameworks: MITRE ATTCK, NIST CSF 2.0, MITRE ATLAS, D3FEND, NIST AI RMF MITRE F3 (Fight Fraud) · agentskills.io standard · Works with Claude Code, GitHub Copilot, Codex CLI, Cursor, Gemini CLI 20 platforms · 29 security domains · Apache 2.0项目地址: https://gitcode.com/GitHub_Trending/an/Anthropic-Cybersecurity-Skills创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考