百度360必应搜狗淘宝本站头条
当前位置:网站首页 > IT知识 > 正文

微软发现新的NETGEAR 固件漏洞,可能导致身份盗用和整个系统受损

liuian 2025-02-07 18:19 11 浏览

译文声明

本文是翻译文章,文章原作者microsoft,文章来源:microsoft.com
原文地址:https://www.microsoft.com/security/blog/2021/06/30/microsoft-finds-new-netgear-firmware-vulnerabilities-that-could-lead-to-identity-theft-and-full-system-compromise/


译文仅供参考,具体内容表达以及含义原文为准

×

安全解决方案的不断改进迫使攻击者探索危及系统的替代方法。在操作系统以内或者之外的通过VPN设备和其他面向互联网的系统发起固件攻击和勒索软件攻击数量在不断增加案例,这些攻击会变得越来越常见,用户必须确保运行硬件类路由器中固件的安全,我们最近在 NetGear DGN2200v1系列路由器中发现了可能危及网络安全的漏洞。
在我们的研究中,我们解开了路由器的固件,发现了三个可以被利用的漏洞,我们通过微软安全漏洞研究中心(MSVR)的协同漏洞披露给NetGear我们的发现,并且与NetGear安全团队密切合作,在保持向后兼容性的同时提供缓解这些问题的建议。关键的安全问题(CVSS评分:7.1 – 9.4)已被NETGEAR修复。关于DGN2200v1上的多个HTTPd认证漏洞,请参阅NETGEAR的安全咨询。

获取和解压固件

固件可从供应商的网站上获得,这使我们更容易获得副本进行检查。它是一个简单的 .zip 文件,包含发行说明 (.html) 和固件映像本身(.chk 文件)。在 .chk 文件上运行binwalk最终提取了文件系统 ( squashfs)。

路由器固件文件系统本身是一个标准的 Linux 根文件系统,并添加了一些小功能。我们关心和研究有以下几点

  1. /www — 包含html页面和.gif图片
  2. /usr/sbin – 包含 NETGEAR 的各种自定义二进制文件,包括 HTTPd、FTPC 等

由于我们看到异常通信使用 httpd 服务的标准端口,因此我们将重点放在 httpd 上。httpd 本身是一个 32 位大端 MIPS ELF,针对 uClibc (嵌入式设备的标准 libc)编译,似乎整个服务器端逻辑 (CGI) 都被编译到 httpd 中。

探索

在探索嵌入式web服务时,首先要考虑以下几个问题

  1. Web 服务是否显示一些未经身份验证的页面?如果是这样,他们是如何治理的?
  2. Web 服务如何执行身份验证?
  3. Web服务是否正确处理请求(即是否存在内存损坏错误)?
  4. Web 服务是否实施了某些安全措施,例如(反)跨站点请求伪造令牌或内容安全策略?

为了回答这些问题,我们对 httpd 二进制文件进行了静态分析,并通过运行 QEMU(一个开源模拟器)对固件进行仿真模拟,另外使用了hook(例如 NVRAM getter 和 setter)进行了一些动态分析。

DGN 2200V1路由器中存在的漏洞

绕过身份验证访问路由器管理界面

在检查 httpd 如何规定哪些页面应该在没有身份验证的情况下提供时,我们发现了以下伪代码:

这些代码是httpd中的第一个页面处理代码,它会自动允许一些页面,例如form.css或者func.js,正常来说,这些设置并没有问题,但是异常点在于NetGear使用strstr函数来检查是否有“.jpg”“.gif”或者“ess_“字符串,用来匹配整个 url 。
因此我们可以使用GET 方式在URL中带有strstr检查的字符串(如 “?.gif” )来访问设备的任意界面,其中包括身份验证的界面,使用如下

https://ip/WAN_wan.htm?pic.gif

就可以成功绕过身份验证访问路由器管理界面了。

通过加密侧信道攻击推断路由器凭证

在这个阶段,我们已经完全控制了路由器管理界面,但是我们继续研究身份验证本身是如何实现的。
我们注意到httpd 组件对http界面进行基础认证,需要将username和password 使用base64来进行编译,然后在http header中发送,最后在路由器内存中保存的用户名和密码进行验证,路由器将这些信息存储在NVRAM中。
在我们检查身份验证的过程中,我们发现了一种可以让攻击者获取正确凭据的旁道攻击:

这里要注意,username 和 password 是使用strcmp来进行比较的,strcmp 在 libc 中的实现是通过逐个字符比较直到观察到 NUL 终止符或直到发生不匹配来工作。

攻击者可以通过测量失败所需的时间来利用后者。例如,在测量第一个字符的次数时,我们得到如下图:

这表示第一个字符是“n”。攻击者可以重复此过程(“na”、“nb”、“nc”等)以获取第二个字符,直到泄露整个用户名和密码。

我们向 NETGEAR 建议他们可以通过执行基于 XOR 的内存比较来避免此类攻击,例如:

即使字节不匹配,该功能也会继续。类似的方法可以在加密安全库中看到,例如OpenSSL 的 CRYPTO_memcmp。

检索存储在设备中的密钥

当完成身份验证绕过漏洞之后,我们仍然想看看是否可以利用其他现有的漏洞来恢复路由器使用的username和密码,因为我们决定使用路由器的配置备份\恢复功能。
我们可以使用身份绕过获取文件:
hxxp://router_addr:8080/NETGEAR_DGN2200[.]cfg?pic[.]gif.
这个文件具有高熵,这表明它已被加密,我们无法直接读取内容,并且binwalk也没有任何结果。

当我们对“备份\恢复“的功能进行逆向后,我们的问题被解决了。

可以看到文件内容是使用 “NtgrBak”的密钥进行DES加密。因此也可以通过这种方式来获取存储在NVRAM中的密码。

拓展

Ex6100v2 固件分析

看完这边漏洞分析文章之后,根据以往对Netgear固件分析中,发现这种情况存在许多版本的固件中,于是我翻出了实验室的NetGear Ex6100v2 路由设备,下载到对应版本的固件,然后对固件进行解包分析。
根据/etc/init.d/rcS文件中的内容,找到uhttpd 的组件(uHTTPd 是一个 OpenWrt/LUCI 开发者从头编写的 Web 服务器),可以看到这个固件是使用NX的保护措施。

在我分析/etc/boot文件中,看到如下内容,也可以证明这是一个OpenWRT类型的web组件。

在uhttpd组件的逆向中,看到了如下的伪代码

本来以为这也是一个存在身份验证绕过的固件,但是继续查看引用,看到这个函数需要在用户认证之后才会触发。

于是在经过实际的测试,确实是需要在经过认证后才能触发漏洞(鸡肋)

相关推荐

面试问了解Linux内存管理吗?10张图给你安排的明明白白!

来源:https://www.cnblogs.com/NanoDragon/p/12736887.html今天来带大家研究一下Linux内存管理。对于精通CURD的业务同学,内存管理好像离我们很远...

Linux Kernel 6.12震撼发布:实时性能飙升,开启全新计算时代!

概述LinusTorvalds在邮件列表中宣布推出LinuxKernel6.12,该版本带来了多项重要的更新和功能增强。更新亮点PREEMPT_RT支持主要内容:LinuxKernel...

linux Grub2功能、常见配置及使用方式

Grub2(GrandUnifiedBootloaderversion2)是一款功能强大的引导加载程序,提供了以下功能和常见配置:多操作系统支持:Grub2可以加载和引导多个操作系统,包括不同...

Linux内核必备知识点-platform总线详解

platform总线是学习linux驱动必须要掌握的一个知识点。本文参考已发布:Linux3.14内核一、概念嵌入式系统中有很多的物理总线:I2c、SPI、USB、uart、PCIE、APB、AHB...

linux kernel内核的头文件获取、安装等方法

交叉编译时经常会用到这些头文件。下载合适版本的linux地址:https://mirrors.aliyun.com/linux-kernel/https://mirrors.edge.kernel.o...

600个常用 Linux 命令,收藏备用!

本文为Linux命令大全,从A到Z都有总结,建议大家收藏以便查用,或者查漏补缺!A命令描述access用于检查调用程序是否可以访问指定的文件,用于检查文件是否存在accton用于打开或关闭记帐进程或...

Linux 中 `/proc/cpuinfo`文件中最常见的标志

/proc/cpuinfo是一个虚拟文件系统,在Linux系统中提供有关CPU(中央处理器)的信息。通过读取该文件,您可以获取有关处理器的详细信息,如型号、频率、核心数、缓存大小等。本文将介绍...

600个Linux命令大全,从A到Z,2023年收藏大吉!

本文为Linux命令大全(有PDF),从A到Z都有总结,建议大家收藏以便查用,或者查漏补缺!A命令描述access用于检查调用程序是否可以访问指定的文件,用于检查文件是否存在accton用于打开或关闭...

Linux下如何查看硬件信息?

我们在Linux下进行开发时,有时也需要知道当前的硬件信息,比如:CPU几核?使用情况?内存大小及使用情况?USB设备是否被识别?等等类似此类问题。下面良许介绍一些常用的硬件查看命令。lshwls...

从PXE到GRUB到VHD文件启动

今天玩点花活儿,之前的文章再探从VHD文件中启动Windows及Grub双启动VHD文件+TinyCoreLinux中研了一下GRUB和VHD文件的关联应用,那么结合PXE又会是怎么样的呢?...

bootra1n教学:Windows用户用U盘Linux实现checkra1n越狱方法

checkra1n越狱工具在前几天推出Linux版本,相信对于Windows用户可能也看得很模糊,甚至要切割硬碟到安装Linux系统太过于繁杂,这篇要来教大家最简易最快速利用U盘Linux...

不了解NUMA,就看不懂Linux内核

哈喽,我是子牙,一个很卷的硬核男人深入研究计算机底层、Windows内核、Linux内核、Hotspot源码……聚焦做那些大家想学没地方学的课程。为了保证课程质量及教学效果,一年磨一剑,三年先后做了这...

Linus Torvalds接受微软Hyper-V升级 下一代Linux启动会更快

虽然Windows的粉丝和Linux的粉丝经常喜欢进行激烈的键盘大战,但操作系统的制造商们自己也了解彼此的优缺点。毫无疑问,微软也明白这一点,事实上,它甚至鼓励用户尝试Linux,尽管是使用...

deepin使用笔记——开机卡LOGO,无法正常关机的解决办法

第一次使用deepin操作系统,很容易遇到几种情况:1,开机卡LOGO,无法进入系统。2,开机可以进入系统,但是进入系统后桌面环境无法正常打开,一直卡着什么都不能用。3,开机后看似一切正常,但关机的时...

如何检查Linux系统硬件信息?从CPU到显卡,一网打尽!

你可能会问:“我为什么要关心硬件信息?”答案很简单:硬件是Linux系统的根基,了解它可以帮你解决很多实际问题。比如:性能调优:知道CPU核心数和内存大小,才能更好地调整程序运行参数。故障排查:系统卡...