缓冲区溢出:是针对程序设计缺陷,向程序输入缓冲区写入使之溢出的内容(通常是超过缓冲区能保存的最大数据量的数据),从而破坏程序运行、趁著中断之际并获取程序乃至系统的控制权。
缓冲区溢出原指当某个数据超过了处理程序限制的范围时,程序出现的异常操作。造成此现象的原因有:
存在缺陷的程序设计。
尤其是C语言,不像其他一些高级语言会自动进行数组或者指针的边界检查,增加溢出风险。
C语言中的C标准库还具有一些非常危险的操作函数,使用不当也为溢出创造条件。
因黑客在Unix的内核发现通过缓冲区溢出可以获得系统的最高等级权限,而成为攻击手段之一。也有人发现相同的问题也会出现在Windows操作系统上,以致其成为黑客最为常用的攻击手段,蠕虫病毒利用操作系统高危漏洞进行的破坏与大规模传播均是利用此技术。比较知名的蠕虫病毒冲击波蠕虫,就基于Windows操作系统的缓冲区溢出漏洞。
—— 维基百科
Canonical 的 Ubuntu 开发人员 Chris Coulson 发现了一个关键的漏洞,可以利用它来远程攻击运行流行操作系统的机器。该漏洞编号为 CVE-2017-9445,位于 Systemd init system 和service manager 中。
远程攻击者可以触发缓冲区溢出漏洞,通过恶意的 DNS 响应执行恶意代码。
专家已经发现 'systemd-resolved' 的 'dns_packet_new' 功能中的漏洞,它处理DNS响应,并为本地应用程序提供网络名称解析。每当系统尝试在攻击者控制的DNS服务上查找主机名时,特制的恶意DNS响应可能导致远程 “systemd-resolved” 程序崩溃。
攻击者可以通过发送一个大的DNS响应来触发漏洞,导致缓冲区溢出,远程执行代码。
“传递给 dns_packet_new 的某些大小可能导致它分配的缓冲区太小。页面对齐的数字 - sizeof(DnsPacket)+ sizeof(iphdr)+ sizeof(udphdr)将这样做 - 所以在x86上这将是一个页对齐的数字 - 80.例如,在 x86 上调用大小为 4016 的 dns_packet_new 将导致4096字节的分配,但是 108 个字节用于 DnsPacket 结构。“Coulson 解释说。
恶意的DNS服务器可以利用特制的TCP有效载荷来解决这个问题,以便系统解析分配一个太小的缓冲区,然后再写出任意数据。
漏洞影响
这个缺陷影响了 Systemd 版本 223,该版本早于 2015 年 6 月,其后还包括 2017 年 3 月 发布的Systemd 版本 233。
该漏洞影响 Ubuntu 17.04 版和 16.10 版 ; Debian 版本 Stretch(又名Debian 9),Buster(又名10)和 Sid(又名Unstable); 以及使用 Systemd 的各种其他 Linux 发行版。
Linux用户和系统管理员必须尽快更新其操作系统。
ref:
Your Linux Machine Can Be Hacked Remotely With Just A Malicious DNS Response
Linux Systemd Bug Could Have Led to Crash, Code Execution
A critical flaw allows hacking Linux machines with just a malicious DNS Response