news 2026/4/25 6:10:26

工业控制系统中未知USB设备(设备描述)的排查实战案例

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
工业控制系统中未知USB设备(设备描述)的排查实战案例

工业控制系统中一个“来历不明”的U盘,是如何被追查到底的?

某个清晨,某智能制造车间的操作员工作站突然弹出一条系统提示:“检测到新USB设备接入”。这本是再平常不过的一幕——操作员拷个报表、传个配置文件,插个U盘再正常不过。但这一次,日志里跳出的几个字段却让安全工程师皱起了眉头:

idVendor=1d6b, idProduct=0101, Manufacturer: Linux 5.4.0-91-generic xhci-hcd

1d6b?这不是Linux内核自己用的VID吗?怎么从物理USB口冒出来了?

一场关于未知USB设备的排查就此展开。


当一个U盘插入工控机时,系统究竟知道了什么?

在大多数人眼里,USB设备就是一个“即插即用”的黑盒。但在操作系统底层,每一次热插拔都是一场精密的“身份审查”。

当你把一个U盘塞进工控机的瞬间,主机就开始了一场快速而严谨的“枚举”流程:供电、分配地址、索取描述符、匹配驱动……整个过程通常在毫秒级完成。而最关键的是——哪怕设备最终没能挂载成功,只要它完成了基本枚举,就会在系统中留下完整的“数字指纹”

这些所谓的“设备描述”,远不止你看到的那个盘符那么简单。它们才是真正的“身份证信息”:

字段含义安全意义
VID(Vendor ID)厂商编号,由USB-IF统一分配可追溯至制造商,全球唯一
PID(Product ID)产品型号ID,厂商自定义区分具体设备类型
Serial Number序列号高端设备具备个体唯一性
Device Class设备类别,如存储、HID、通信等直接反映功能与风险等级
Manufacturer/Product String厂商名/产品名字符串辅助识别,但可伪造
bcdUSB支持的USB协议版本判断设备新旧与性能

比如常见的SanDisk U盘:

VID=0781, PID=5567 → 查库可知为 Cruzer Blade Class=08 → 大容量存储设备 Serial=4C530001... → 每个设备独一无二

正是这些细节,构成了我们追踪“未知USB设备”的第一道防线。

🔍关键洞察:攻击者可以伪装产品名称,甚至模拟合法VID/PID,但要批量伪造真实存在的序列号+类描述+协议一致性,成本极高。换句话说,设备描述的组合特征,比杀毒软件更早告诉你“这家伙不对劲”


我们是怎么抓住那个“可疑U盘”的?

回到开头那起事件。操作员只是像往常一样插了个“转接头”,可系统日志却捕捉到了异常信号:

[ 9876.543210] usb 2-2: new full-speed USB device number 3 using ohci-pci [ 9876.544000] usb 2-2: New USB device found, idVendor=1d6b, idProduct=0101 [ 9876.544005] usb 2-2: Product: USB2.0 Hub [ 9876.544010] usb 2-2: Manufacturer: Linux 5.4.0-91-generic xhci-hcd

三个危险信号立刻浮现:

  1. VID=1d6b 是 Linux 内核用于虚拟主机控制器的保留标识,不该出现在外部设备上;
  2. 它自称是一个“Hub”(集线器),意味着可能扩展出更多隐藏设备;
  3. 厂商字符串直接暴露了内核版本,极可能是某种调试工具或恶意固件模拟。

这不是普通U盘,更像是有人试图通过USB通道建立隐蔽连接。

第一步:翻遍所有日志,找出蛛丝马迹

我们在该工作站执行了以下命令,提取完整上下文:

# 查看内核实时日志 dmesg | grep -i "usb.*2-2" # 检查历史系统日志 journalctl -u systemd-udevd --since "2024-04-05 10:00" | grep -i usb

结果确认:设备仅短暂存在约40秒后被拔出,期间未生成任何文件访问记录,也没有触发防病毒告警。传统防护手段完全失效。

第二步:构建设备指纹数据库,实现精准比对

为了不再“靠人眼查日志”,我们搭建了一个轻量级USB设备指纹库,结构如下:

{ "timestamp": "2024-04-05T10:23:15+08:00", "host": "scada-opstation", "port_path": "2-2", "vid": "1d6b", "pid": "0101", "class": "09", // Hub类 "product": "USB2.0 Hub", "manufacturer": "Linux 5.4.0-91-generic xhci-hcd", "serial": null, "risk_level": "high" }

并将所有历史USB接入事件导入ELK平台,做了一次全厂区扫描。结果令人惊讶:过去一周内,另有两台HMI设备也记录过相同VID/PID组合,时间均发生在非工作时段。

这已经不是误操作,而是有规律的行为。

第三步:视频回溯+人员定位,闭环追责

调取现场监控录像发现,当天上午10:23,张姓操作员确实在该工作站插入了一个外形类似CH340芯片的USB转串口模块。他声称是为了临时调试一台老式仪表。

问题在于:为什么一个串口适配器会报出“Hub”类设备?又为何使用Linux内核保留VID?

进一步分析其携带设备的固件后确认:这是一个经过修改的开发板,烧录了自定义USB描述符,意图绕过简单的白名单检查。虽然本次无恶意代码注入,但已具备中间人攻击(MITM)能力——它可以监听、篡改甚至注入PLC通信流量。

第四步:从被动响应到主动防御

事件处理并未止于警告和通报。我们推动实施了几项实质性改进:

✅ 实施USB设备白名单策略

利用udev规则,在设备接入时自动校验VID/PID是否在注册清单中:

# /etc/udev/rules.d/99-usb-whitelist.rules ACTION=="add", SUBSYSTEM=="usb", \ ENV{ID_VENDOR_ID}=="0781", ENV{ID_MODEL_ID}=="5567", GOTO="usb_accept" ACTION=="add", SUBSYSTEM=="usb", \ ENV{ID_VENDOR_ID}=="abcd", ENV{ID_MODEL_ID}=="1234", GOTO="usb_accept" ACTION=="add", SUBSYSTEM=="usb", \ RUN+="/usr/local/bin/block_usb.sh %k" LABEL="usb_accept"

只有SanDisk企业级U盘、特定型号加密狗等预登记设备才能正常挂载。

✅ 关键端口物理封禁 + BIOS级控制
  • 对非维护用途的USB接口进行胶封或使用物理锁;
  • 在BIOS中关闭前置USB端口,仅开放后置指定接口;
  • 启用UEFI安全启动,防止恶意固件加载。
✅ 集成至终端安全管理平台

将USB日志采集脚本升级为守护进程,支持:
- 自动脱敏上传至SIEM系统;
- 联动身份认证,记录“谁在何时接入了什么设备”;
- 触发实时告警并推送至运维微信群。


不只是查U盘,更是重建工控安全的认知边界

这次排查看似只解决了一个“小问题”,实则暴露出工业控制系统中最脆弱的一环:我们太习惯于防御网络层面的攻击,却忽视了物理接口的“最后一厘米”

想想看:
- Stuxnet(震网病毒)是怎么进来的?U盘。
- 某石化厂PLC程序被篡改?维修人员带入感染设备。
- 某电力调度系统数据泄露?实习生用私人U盘拷贝日志。

这些都不是理论推演,而是真实发生过的事故。

而我们的应对方式,往往停留在“贴个封条”“发个通知”这种低效管理手段上。真正有效的做法,应该是:

🛠 把USB接入变成一次“可审计、可追溯、可阻断”的标准化操作

就像你在银行转账需要双重验证一样,任何外部设备接入关键系统,都应该经历:

  1. 身份识别:VID/PID/序列号是否在册?
  2. 用途申报:是否关联工单?是否有审批记录?
  3. 行为监控:接入期间是否有异常读写?
  4. 责任绑定:操作员账号+时间戳+视频记录三重关联。

唯有如此,才能把“人为失误”关进制度的笼子。


给工控安全团队的几点实战建议

如果你也在负责工厂的信息安全,不妨从以下几个动作开始:

1. 立即跑一遍“USB资产普查”

在每台工控机执行:

lsusb -v | grep -E "(idVendor|idProduct|iProduct|iManufacturer)" > usb_inventory.txt

整理出当前所有合法设备的VID/PID清单,作为白名单基础。

2. 部署最小化日志采集脚本

无需复杂系统,一个几行的shell脚本就能实现基本审计:

#!/bin/bash # log_usb.sh - 记录每次USB接入 echo "$(date): USB ADD on $1, VID=$(cat /sys/bus/usb/devices/$1/idVendor 2>/dev/null)" >> /var/log/usb.log

配合udev规则启用即可。

3. 建立“高风险设备”特征库

重点关注以下类型:
-VID=1d6b(Linux虚拟设备)
-Class=02(CDC通信类,常用于4G模块或恶意C2通道)
-Class=ef(Miscellaneous,杂项设备,易被滥用)
- 无序列号、空厂商字符串的设备

一旦出现,立即告警。

4. 推动管理制度落地

技术只是工具。必须配套制定:
- 《外部设备接入管理办法》
- 《移动介质使用登记表》
- 《违规接入处罚机制》

并在入职培训中明确告知员工:“插U盘不是小事,出了问题要追责。”


结束语:安全,始于对每一个细节的较真

那个写着“Linux 5.4.0-91-generic xhci-hcd”的U盘早已被收缴封存,但它留下的警示仍在回响。

在工业控制系统中,最危险的从来不是那些复杂的APT攻击,而是我们认为“应该没问题”的侥幸心理

一次随意的插拔,可能打开潘多拉魔盒;
一条不起眼的日志,或许就是入侵前的最后预警。

而我们要做的,就是让每一个VID、每一个PID、每一次接入,都无所遁形。

毕竟,在关乎生产安全的世界里,
没有“差不多”,只有“零差错”

如果你正在构建自己的工控安全体系,欢迎留言交流实践心得。也别忘了点赞+收藏,让更多一线工程师看到这场“从U盘说起”的安全觉醒。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/23 17:21:09

7步掌握Maya USD插件:从零到精通的完整实战指南

7步掌握Maya USD插件:从零到精通的完整实战指南 【免费下载链接】OpenUSD Universal Scene Description 项目地址: https://gitcode.com/GitHub_Trending/ope/OpenUSD OpenUSD作为新一代通用场景描述格式,正在彻底改变3D内容创作流程。Maya USD插…

作者头像 李华
网站建设 2026/4/18 5:23:05

碳排放问题:训练大模型的环境代价

碳排放问题:训练大模型的环境代价 在人工智能飞速演进的今天,我们正见证着大模型带来的技术奇迹——从流畅对话到多模态理解,从代码生成到复杂推理。然而,这些能力的背后并非无代价。每一次惊艳的表现,都可能伴随着数万…

作者头像 李华
网站建设 2026/4/22 13:35:27

零基础玩转Python PDF生成:fpdf2让你轻松输出专业文档

零基础玩转Python PDF生成:fpdf2让你轻松输出专业文档 【免费下载链接】fpdf2 项目地址: https://gitcode.com/gh_mirrors/fpd/fpdf2 fpdf2是一个功能强大的Python PDF生成库,专为简化文档创建流程而生。无论你是需要生成报告、发票、简历还是数…

作者头像 李华
网站建设 2026/4/23 15:43:36

容器化监控困局如何破?一线大厂都在用的Docker性能监控最佳实践

第一章:容器化监控困局的根源剖析在现代云原生架构中,容器化技术虽极大提升了应用部署的灵活性与效率,却也为系统监控带来了前所未有的复杂性。传统监控工具基于静态主机与固定IP设计,难以适应容器频繁启停、动态调度和短暂生命周…

作者头像 李华
网站建设 2026/4/22 4:04:02

NPX 命令行工具全面使用指南

NPX 命令行工具全面使用指南 【免费下载链接】npx execute npm package binaries (moved) 项目地址: https://gitcode.com/gh_mirrors/np/npx 工具概述与核心价值 NPX 是一款专为 Node.js 生态系统设计的命令行工具,其主要功能是便捷地执行 npm 包中的二进制…

作者头像 李华
网站建设 2026/4/22 20:51:22

企业级稳定性经过真实业务场景验证

企业级稳定性经过真实业务场景验证 在大模型技术加速落地的今天,企业面临的已不再是“要不要用AI”的问题,而是“如何让大模型稳定、高效地跑在生产环境里”。从金融投研到智能客服,从多模态内容审核到工业知识问答,越来越多的应用…

作者头像 李华