news 2026/3/21 12:06:59

工业控制系统中未知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/3/19 15:51:17

突破传统:S2CNN球面卷积神经网络如何重塑三维数据处理

突破传统:S2CNN球面卷积神经网络如何重塑三维数据处理 【免费下载链接】s2cnn 项目地址: https://gitcode.com/gh_mirrors/s2c/s2cnn 在深度学习飞速发展的今天,球面卷积神经网络S2CNN正以其独特的技术优势,为处理非欧几里得空间的球…

作者头像 李华
网站建设 2026/3/19 17:19:34

揭秘VSCode组织级智能体配置:3步实现团队开发效率翻倍

第一章:VSCode组织级智能体配置概述在现代软件开发协作中,Visual Studio Code(VSCode)通过其强大的扩展生态与远程开发能力,成为组织级智能体协同工作的核心工具。借助配置管理机制,企业可统一开发环境标准…

作者头像 李华
网站建设 2026/3/20 22:25:50

Linux内存取证分析技术深度解析:从原理到实战的高级指南

Linux内存取证分析技术深度解析:从原理到实战的高级指南 【免费下载链接】volatility3 Volatility 3.0 development 项目地址: https://gitcode.com/GitHub_Trending/vo/volatility3 在数字取证领域,内存分析正成为发现隐蔽攻击和提取关键证据的核…

作者头像 李华
网站建设 2026/3/16 6:27:05

贴吧垂直领域引流:针对性强但需注意规则

ms-swift 框架在垂直领域内容生成中的实践与思考 在当前 AI 内容生成技术快速普及的背景下,如何让大模型真正“接地气”,成为特定社区或平台中自然、可信的参与者,已经成为许多运营团队关注的核心问题。尤其是在像百度贴吧这样语言风格鲜明、…

作者头像 李华
网站建设 2026/3/18 20:42:26

法律AI终极部署指南:如何快速实现企业法务智能化转型

法律AI终极部署指南:如何快速实现企业法务智能化转型 【免费下载链接】Awesome-Chinese-LLM 整理开源的中文大语言模型,以规模较小、可私有化部署、训练成本较低的模型为主,包括底座模型,垂直领域微调及应用,数据集与教…

作者头像 李华