标题 | 简介 | 类型 | 公开时间 | ||||||||||||||||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||||||||||||||||||
详情 | |||||||||||||||||||||||||||||||||||||||||||
[SAFE-ID: JIWO-2025-3538] 作者: ShYLie 发表于: [2025-04-23]
本文共 [4] 位读者顶过
一、前言 文章目的本文深入剖析D-Link DWR-932B路由器的固件安全,揭示可能导致攻击者未经授权访问和控制设备的严重漏洞,包括硬编码凭据、弱根密码以及管理与更新机制中的关键缺陷,如未认证的远程命令执行和不安全的固件更新协议。研究采用静态与动态分析相结合的方法,并通过逆向工程定位问题。本文可能存在一些不足,请大家斧正!此分析提醒人们在不断扩展的IoT生态系统中,强化安全实践的重要性,适合安全爱好者、网络管理员及关注家庭网络安全的人士。 随着物联网(IoT)设备的快速增长,智能家居设备、路由器和摄像头等设备已成为我们日常生活的一部分。研究表明,这些设备的安全性直接关系到用户隐私和网络安全,因为固件是设备的核心软件,包含了操作系统的配置和功能。如果固件存在漏洞,攻击者可能远程控制设备,窃取数据或发起网络攻击。因此,固件安全分析成为保护 IoT 设备的关键。
D-Link DWR-932B 路由器的简介及其在 IoT 中的应用[出自:jiwo.org] 二、基础知识:固件分析入门 什么是固件及其作用固件(Firmware)是存储在设备硬件中的软件,控制嵌入式设备的基本功能,如路由器的 Wi-Fi 连接和网络设置。研究表明,固件安全直接影响 IoT 设备的安全性,如果存在漏洞,攻击者可能远程控制设备或窃取数据。 常见的固件格式及其解包工具常见的固件格式包括 ZIP(用于分发)和 YAFFS2(用于闪存文件系统)。解包工具如: ◆binwalk:识别和提取文件系统,示例命令为 binwalk -e firmware.bin (Binwalk GitHub)。 ◆unyaffs:解包 YAFFS2 文件系统,示例为 unyaffs image.yaffs2 (Unyaffs GitHub)。 ◆其他工具如 unsquashfs 用于 SquashFS 文件系统。
固件分析的基本流程固件分析的流程包括: 1.获取固件:从官方网站下载,如 D-Link 路由器的固件。 2.解包固件:使用上述工具提取文件系统。 3.静态分析:检查敏感文件如 .conf 和 /etc/shadow,逆向分析危险二进制程序。 常用工具介绍常用工具包括: ◆IDA Pro:逆向工程二进制文件 (IDA Pro 官网)。 ◆firmwalker:扫描固件中的敏感文件和漏洞:craigz28/firmwalker: Script for searching the extracted firmware file system for goodies! 三、基础知识:网络安全协议与 IoT 设备 网络安全协议是物联网(IoT)设备通信的核心,它们确保设备之间能够安全、高效地交换数据。以下是对几种常见网络协议(UPnP、FOTA、SSH、SSL/TLS)的简介,这些协议在 IoT 设备中广泛使用,了解它们的作用有助于提升设备的安全性。UPnP(通用即插即用)◆简介:UPnP 是一种网络协议,主要用于设备自动发现和配置网络服务。它在家庭网络中尤为常见,例如路由器、智能电视和其他 IoT 设备通过 UPnP 实现无缝连接和通信。UPnP 的设计目标是简化设备的联网过程,无需用户手动配置。 ◆作用:在 IoT 设备中,UPnP 允许设备快速加入网络并与其他设备交互,例如通过路由器自动开放端口以支持远程访问或媒体流传输。 FOTA(固件空中升级)◆简介:FOTA 是一种通过网络远程更新设备固件的技术,是 IoT 设备维护和安全更新的关键机制。它允许制造商在设备部署后推送补丁或功能改进,而无需物理接触设备。 ◆作用:FOTA 确保 IoT 设备能够及时修复安全漏洞或提升性能,例如智能家居设备通过 FOTA 获取最新的安全更新以抵御新兴威胁。 SSH(安全外壳协议)◆简介:SSH 是一种加密协议,提供安全的远程登录和文件传输功能。它最初设计用于服务器管理,但在 IoT 设备中也被广泛用于远程管理和调试,例如访问智能设备的命令行界面。 ◆作用:在 IoT 场景中,SSH 为开发者或管理员提供了一种安全的途径来监控和维护设备,尤其是在设备分布于不同地理位置时。 SSL/TLS(安全套接层/传输层安全)◆简介:SSL/TLS 是用于加密网络通信的协议,广泛应用于保护数据传输的安全性。在 IoT 设备中,SSL/TLS 常用于 HTTPS 请求、API 通信或设备与云端之间的数据交换,确保数据在传输过程中不被窃听或篡改。 ◆作用:SSL/TLS 为 IoT 设备提供端到端的通信安全,例如智能摄像头通过 TLS 加密上传视频流,防止未经授权的访问。 四、固件获取与初始访问:固件文件解包
固件下载地址:https://ftp.dlink.de/dwr/dwr-932/archive/driver_software/DWR-932_fw_revb_202eu_ALL_multi_20150119.zip 破解固件压缩包密码解压和binwalk发现存在问题,无法将目标固件提取,所以大概率存在密码: ![]() 爆破失败格式不正确:
修复压缩包:
继续爆破:
解压密码是:beUT9Z
开始解析压缩包内的文件
发现2K-mdm-image-mdm9625.yaffs2 是根文件系统直接开始分析!
在mnt/hgfs/VMShare/IOT/DWR-932/yaffs2-root/(共享文件夹)下解压,而VMware 共享文件夹 (HGFS)不支持符号链接。
成功解压出来目录:
五、敏感配置文件分析:寻找信息泄露
配置文件信息泄露首先查找路径下的所有.conf文件,.conf文件大多都是配置文件,将所有的配置文件都集合起来审计: ![]()
可以寻找到非常多的数据泄露和安全隐患:
分析配置文件识别安全风险
1. Wi-Fi SSID 和密码 ![]()
风险:任何人都可以用这些凭据连接你的 Wi-Fi 网络,进行未授权访问或中间人攻击。 建议:立即更改 Wi-Fi 密码、避免在明文文件中存储密码,可以使用WPA-Enterprise认证。
2. 设备管理密码 ![]()
风险:可能是动态 DNS(DDNS)账户的凭据,允许攻击者控制远程主机名、可能被用于访问某些管理接口。 建议:立即更改该账号的密码。不要在明文文件中存储账号密码,改用环境变量或加密存储。 3. 可能的内部网络信息 文件中包含多个内网 IP 地址: ![]()
风险:这些 IP 可能是内部服务器、网关或 IoT 设备,攻击者可以利用这些信息构建攻击路径。可能用于内部网络的端口转发(UPnP 配置)。 建议:不要暴露内部 IP,避免直接放入配置文件。确保防火墙配置妥当,限制未授权访问。
4. D-Bus 配置泄露 ![]()
风险:可能允许任意进程监听和控制 D-Bus,攻击者可利用此漏洞获取敏感信息或远程控制设备。
5.UPnP配置暴露 ![]()
风险:secure_mode=no可能允许外部设备修改路由规则,导致端口转发被滥用。
6. 可能的硬编码 SSH 配置 ![]()
风险:如果这些设置与 SSH 配置有关,可能导致远程用户未授权访问设备控制台。
六、弱密码破解:存在Root弱密码爆破问题
/etc/shadow文件的格式与加密方式(MD5、SHA-256、SHA-512)。爆破shadow文件从而获得Root用户密码:
#shadow密码爆破 shadow文件加密的密码具有固定格式: $id$salt$encrypted
◆id:表示加密算法,1 代表 MD5,5 代表 SHA-256,6 代表 SHA-512。 ◆salt:表示密码学中的 Salt,由系统随机生成 。 ◆encrypted:表示密码的 hash。 冒号后面的数值是一些日期和密码修改间隔天数的信息,可以不用管,以上述示例中 root 账号为例: ![]()
工具安装:john-Linux密码爆破工具
sudo apt install john
配置爆破字典,使用kali自带的工具:
密码字典生成与Crunch工具-CSDN博客
gzip -d /usr/share/wordlists/rockyou.txt.gz #-d 将压缩文件解压 直接开始爆破:
┌──(kali㉿kali)-[/mnt/hgfs/VMShare/IOT/DWR-932] 成功爆破出root的密码为1234!
七、使用 Firmwalker:扫描进行信息搜集 该脚本主要用于扫描固件解包后的文件系统,从中查找各种敏感信息和潜在的安全隐患,例如密码文件、哈希值、SSL/SSH相关文件、数据库文件、脚本、二进制文件、IP 地址、URL 和电子邮件等。通过将扫描结果输出到一个指定文件中(默认为 firmwalker.txt),方便后续的安全分析和漏洞挖掘。
如果需要拓展查找文件的多样性就可以手动在在下列文件中添加各种文件类型的关键字:
这些关键词或文件名进行搜索。具体作用如下: ◆binaries:存放固件中可能存在的重要二进制文件(如系统工具、调试程序等)的名称列表,帮助定位系统中关键可执行文件。 ◆dbfiles:记录数据库相关文件的名称(如数据库配置文件、数据存储文件等),用于查找可能泄露数据库信息的文件。 ◆files:通用文件列表,包含其他可能包含敏感信息或配置的文件名称,作为补充搜索目标。 ◆passfiles:列举常见的存放密码或认证信息的文件名称(例如密码文件、用户凭据文件等),用于检测是否存在密码泄露。 ◆patterns:预设搜索模式或正则表达式列表,工具会利用这些模式在固件文件内容中搜索敏感信息(如密码、API 密钥等)。 ◆sshfiles:存放与 SSH 相关的文件名称,如 SSH 配置、私钥、公钥文件等,用于识别可能存在的 SSH 安全隐患。 ◆sslfiles:列出与 SSL/TLS 相关的文件(如 .pem、.crt 证书文件等),便于查找证书及其相关信息,并可能进一步通过 Shodan 等工具检测这些证书在互联网中的暴露情况。 ◆webservers:记录与 Web 服务器相关的文件名称(例如 Web 服务的配置文件或默认页面等),帮助定位固件中 Web 服务的相关组件和潜在信息。 直接开始脚本分析: ![]()
直接将提取出来的信息丢给AI去分析,固件中存在的关键安全问题包括: ◆敏感账户和密码文件泄露,易被暴力破解。 ◆SSL/SSH 密钥及证书文件未做妥善保护,可能导致通信中间人攻击和远程入侵。 ◆大量配置文件和脚本中可能存在硬编码的敏感信息或弱口令。 ◆内部网络信息暴露,为横向移动攻击提供线索。 ◆服务和二进制文件未加固,存在利用已知漏洞的风险。 也可以单独筛选出其中关键的二进制文件: ![]()
八、逆向分析存在风险的二进制程序 分析完敏感的配置文件后,我们接下来需要对存在风险的二进制程序进行深入分析。这些程序通常是设备功能的核心,包含关键的业务逻辑和网络通信功能,因此可能隐藏着高危漏洞。以下是我们分析的思路和方法。定位关键二进制文件为了找到值得关注的二进制文件,我们可以使用 firmwalker 工具快速扫描固件,识别出与网络服务、安全认证和系统管理相关的重要文件。以下是一些常见的、需要重点分析的二进制文件: ![]()
◆远程访问和文件传输相关:
◆多功能工具:
◆远程终端服务:
◆加密和安全通信:
◆Web 服务器:
这些文件通常与设备的核心功能密切相关,是潜在漏洞的集中区域,因此需要优先分析。
检查自启动脚本 例如,可以通过以下命令提取所有自启动脚本的内容到一个文件进行分析: ![]()
生成的 new_text.txt 文件包含了 init.d 目录下所有脚本的合集。通过分析这个文件,我们可以找出被启动的二进制文件、Web 服务及其对应的启动命令。例如,一个名为 start_appmgr 的脚本引起了我们的注意,因为 “mgr” 通常暗示这是一个主控程序(manager)。从中我们可能发现以下关键程序: ◆/bin/appmgr:主管理守护进程,负责设备管理和 Web 接口。 ◆/sbin/fotad:FOTA 更新守护进程,负责固件在线升级。 这些被自启动脚本调用的文件是我们分析的重点目标。 /bin/appmgr:主管理守护进程/bin/appmgr 是路由器的核心管理程序,可能包含 Web 服务、远程管理等功能模块。分析时,我们需要关注以下风险点: ◆未经身份验证的远程命令执行:检查程序是否允许通过网络接口(如 UDP 端口)直接执行命令,而无需身份验证。这类漏洞可能导致攻击者远程控制设备。 ◆默认凭据:分析代码中是否硬编码了默认的管理员账号和密码,这些凭据可能被攻击者利用。 ◆硬编码 WPS PIN:WPS PIN 是 Wi-Fi 保护设置的认证码,如果程序中存在硬编码的 PIN,可能导致 Wi-Fi 网络被轻易破解。 ◆UPnP 安全问题:通过分析 /var/miniupnpd.conf 配置文件,发现 UPnP 服务关闭了安全模式(secure_mode=no),这可能允许未经授权的外部设备请求端口转发,暴露内部网络服务。 发现未授权远程命令执行漏洞
这个漏洞是一个 未授权远程命令执行漏洞(Unauthenticated Remote Command Execution Vulnerability),具体表现为目标设备(如路由器)上运行的程序通过 UDP 协议监听特定端口(如 0.0.0.0:39889),并接受特定的控制命令(如 HELODBG),触发执行高危操作。
我们可以继续逆向分析一下如何获知其绑定的端口号和ip地址的:
作用:创建一个UNIX域数据报套接字,绑定到本地路径/var/usock/appmgr.us,用于本地进程间通信(非网络通信),但是不涉及IP和端口。 继续向后看就可以发现这个后门漏洞在持续的监听0.0.0.0:39889,来检测是否需要开启后门服务,即执行 /sbin/telnetd -l /bin/sh 让这名用户获得root权限: if ( targetfd >= 0 ){ while ( recvfrom(targetfd, addr, 0x200u, 0, &addr_, addr_len) > 0 )// 持续监听网络数据,并接收 { if ( !strncmp("HELODBG", addr, 7u) )// 如果路由器接收到HELODBG字符串 { dword_7E178 = 1; strcpy(addr, "Hello\n"); v36 = strlen(addr); sendto(targetfd, addr, v36 + 1, 0, &addr_, addr_len[0]); if ( !unk_84138 ) { unk_84138 = 1; system("/sbin/telnetd -l /bin/sh");// 就会执行 /sbin/telnetd -l /bin/sh 让这名用户获得root权限 } } else if ( !strncmp("BYEDBG", addr, 6u) ) { dword_7E178 = 0; } LOBYTE(addr[0].sa_family) = 0; } }
发现默认凭证漏洞
这个函数发现如果没有配置管理员的话就直接创建一个默认管理员账户,账号密码默认为admin,admin! chpasswd 是一个 Linux 命令,用于批量更新用户密码。它从标准输入或文件中读取用户名和密码对(格式为 用户名:密码),并自动更新系统中相应用户的密码。 发现默认 WPS PIN 码
默认配置下,该路由器 WPS 系统的 PIN 码永远都是 28296607 因为这个 PIN 码是硬编码在 /bin/appmgr 程序中。 扩展说明:WPS PIN是Wi-Fi Protected Setup的认证码,该实现常用于路由器等网络设备,通过分级配置策略保证设备在出厂设置和用户自定义配置间灵活切换。 发现路由器存在UPnP 安全问题根据前面firmwalker收集的信息我们可以很快定位到这个款路由器存在UPnP服务:
UPnP(通用即插即用)协议用于设备自动发现和配置网络服务,其子协议IGD(Internet网关设备)允许内网设备请求路由器动态添加端口转发规则,以简化NAT穿透过程。 UPnP 并不安全,因为存在许多安全问题!想象一下:您正在打开端口以允许传入的外部设备与您的设备建立连接并绕过 NAT 防火墙。这会将您的计算机或任何其他设备公开暴露给不需要的连接甚至黑客。 ![]()
我们可以根据UPnP的配置文件是由谁生成的来查找目标程序的位置,来寻找相关漏洞! ![]() 我们可以往上看可以发现 aUpnpCfg2upnpin 有被引用的痕迹,直接查看调用发现剩下的字符串是通过偏移来计算的所以直接锁定目标位置!
直接锁定目标!
该函数的主要作用是配置并启动一个 UPnP(通用即插即用)守护进程 miniupnpd,以支持网络设备的自动发现和端口映射。
我们可以通过逆向发现/var/miniupnpd.conf配置文件的内容:
ext_ifname=rmnet0
配置文件中设置了 secure_mode=no,明确关闭了安全模式。关闭安全模式可能允许未经授权的 UPnP 请求通过,使设备更容易受到外部攻击。攻击者可能利用 UPnP 协议执行未经授权的操作。
/sbin/fotad 负责与服务器通信并下载固件更新,是设备固件升级的关键组件。分析时,我们需要关注:
◆硬编码凭据:检查程序中是否使用了固定的认证信息(如用户名、密码或 API 密钥),这些信息可能被攻击者截获并利用。
◆不安全更新机制:分析固件下载和验证流程,检查是否存在未加密传输、中间人攻击或固件篡改的风险。
根据前面firmwalker收集的信息我们可以很快定位到这个款路由器的固件更新程序:
“fotad” 是路由器中用于固件在线升级(FOTA, Firmware Over-The-Air)的守护进程,其主要职责是与 FOTA 服务器建立通信并进行固件更新。
|