0、引言
固件(Firmware)是工控和物联网设备的核心部件,含有设备运行的操作系统、协议栈、配置文件、可执行脚本和应用组件等各类信息和程序。黑客通过通过获取和逆向分析设备固件,能够分析出设备的运行流程和网络行为,获得口令、密钥等敏感信息,并能够对设备进行漏洞利用和攻击。
1、大规模固件漏洞关联系统简介
CNCERT搭建了大规模固件漏洞关联系统,对主流厂商固件进行规模化安全分析,以评估工控和物联网厂商固件的脆弱性及安全机制的有效性。大规模固件漏洞关联系统基于立体、网状、多跳的二进制代码检索架构和基于局部敏感哈希的大规模同源检索方法,能够从海量固件库中快速检索出与指定漏洞二进制代码同源的组件。系统目前已收录41827个嵌入式固件文件,包括70家主流工控和物联网厂商,涉及工业控制系统、智能家居、车载设备、网络交换设备等诸多领域。
2、某厂商固件安全性分析
在多个工控和物联网安全事件中,攻击者采用弱口令和可利用漏洞对设备发起攻击,实现对设备的远程控制。本报告针对某主流工控厂商(厂商A)的弱口令和漏洞隐患,通过对固件中的“口令文件”和“曾曝过漏洞的组件”进行了分析,评估厂商整体安全性。
固件库中收集厂商A的固件共888个,以下是对两种隐患的概括分析结果:
1、识别出包含口令文件(shadow、passwd等)的固件数共14个,口令文件中密码加密类型有5种。
2、识别出“曾曝出漏洞的组件”的固件数共15个。其中,曾曝出漏洞的组件有6种,分别是“busybox”,“dropbear”,“libpcprofile.so”,“libc.so”,“libthread.so”和“lighttpd”,涉及64个CVE漏洞。
1、“口令文件”特征分析
在厂商A的固件文件中,包含口令文件的固件数共14个,shadow文件中登录密码的种类数共5个。表1示意了厂商A“口令文件”的分析结果。
表1厂商A“口令文件”的分析结果
Password | Number |
root:$1$nltziDm2$kSEvDcACCxLKa2dHk*** | 4 |
root:$1$ZdzWllz0$EbXFJKlLJ7A79po4QZ*** | 4 |
root:$5$Xgto46FtYeYDJec$V6zq.OdZDl2jINOPUNbeWZPMRlWeMg8VJXxjDBZj*** | 3 |
root:$1$N10jZsiE$wLEUmx7NmZLKhNYmIP*** | 2 |
root: | 1 |
为了进行对比,表2示意了某物联网厂商(厂商B)“口令文件”的分析结果,该厂商的固件中包含口令文件的固件数共245个,口令文件中登录密码的种类数共8个。
表2厂商B“口令文件”的分析结果
Password | Number |
root:$1$GTN.gpri$DlSyKvZKMR9A9Uj9e9*** | 130 |
root:$1$$zdlNHiCDxYDfeF4MZL*** | 96 |
root:x | 7 |
root: | 4 |
root:$1$$CoERg7ynjYLsj2j4gl*** | 3 |
root:C98ULvDZe7*** | 2 |
root:$1$.zak6opd$Q/WbbsEuMBnUwYqNr6i*** | 2 |
root:$1$$oCLuEVgI1iAqOA8pwkz*** | 1 |
通过以上两表可以看出,同厂商设备固件文件中的口令文件存在大量复用的情况,且厂商B复用情况更为突出。如果这些默认设定的口令被破解,会给攻击者带来可乘之机,利用默认口令远程登陆到设备,达到控制设备的目的。
2、“曾曝出漏洞的组件”特征分析
在厂商A的固件中,共有15个固件包含了“曾曝出漏洞的组件”,这些组件分别是“busybox”,“dropbear”,“libpcprofile.so”,“libc.so”,“libthread.so”和“lighttpd”。这15个固件关联到的已知漏洞次数共记9799次,分布到每种组件的漏洞数示意如图1所示。可以看到,组件“lighttpd”在15个固件中关联到的已知漏洞数最多,高达7770次,组件“busybox”和“dropbear”分别关联到1071次和910次已知漏洞。
图1 不同组件曾暴露的漏洞数
对包含这6种“曾曝出漏洞的组件”的固件数量进行分析,统计如图2所示。从图中可以看出,组件“libc.so”,“busybox”和“dropbear”在固件中广泛使用:15个固件均包含组件“busybox”和“libc.so”,有13个固件种包含组件“dropbear”。
图2 每个组件涉及的固件数量
进一步地,对这15个固件中不同组件包含CVE种类的数量进行统计,结果如图3所示。由图可以看出,在这6种“曾曝出漏洞的组件”中,组件busybox、dropbear、libc.so、libprofile.so、libthread.so、lighttpd分别关联到17、13、2、1、1、30种CVE漏洞,合计64种CVE漏洞。
图3 不同固件中不同组件包含CVE种类的数量
通过以上结果发现,在厂商A中的不同固件中存在具有同源漏洞的第三方组件。
2.1 固件漏洞验证
固件静态关联出的漏洞的存在性需要对固件进行动态分析来验证,比如通过QEMU等模拟固件动态仿真环境:
1) 使用FirmTool提取固件文件系统,确定固件架构,并为其创建QEMU磁盘镜像;
2) 推断固件的网络配置,并利用此配置完成固件模拟。
3) 通过漏洞扫描等工具发现和确认固件中存在的漏洞。
声明:本文来自工业互联网安全应急响应中心,版权归作者所有。文章内容仅代表作者独立观点,不代表安全内参立场,转载目的在于传递更多信息。如有侵权,请联系 anquanneican@163.com。