姓名:朱晓宇 学号:15180110011
【嵌牛导读】在评估漏洞影响时,人们关注的往往是漏洞风险,而实际上,漏洞潜伏的时间也是一个非常重要的因素。时间跨度大,也就意味着在此期间使用这些含有漏洞的软件的设备更多,影响的设备就更多;而时间跨度长,也就意味着被利用的概率也会更高。因此,潜伏的时间长短也应该是一个重要的因素,今天就给大家细数那些潜伏多年的漏洞。
【嵌牛提问】:一个漏洞能潜伏多少年?
【嵌牛鼻子】:漏洞检测
5年:Stagefright漏洞
2015年7月,Stagefright库被爆出一个重大的安全问题,这个漏洞由于触发条件简单而备受关注。攻击者只需给被攻击对象发送一条精心设计的彩信,即可控制整个手机,之后可以删除之前发送的彩信,使用户无法轻易察觉被攻击。漏洞由以色列移动信息安全公司Zimperium的研究员发现。Stagefright系列漏洞影响之大,危害之大,堪称移动界的“心脏滴血”。
产生漏洞的原因,都是因为对数据校验完善造成的。
而漏洞影响2.2-4.0/5.0/5.1版本的Android用户,Android 2.2发布于2010年5月,也就是说这个漏洞潜伏了5年之久。
不过接下来的漏洞就没有这么年轻了,有的甚至潜伏了几十年。
7年:Linux系统double-free漏洞
今年3月研究人员曝光一个Linux内核漏洞,这个漏洞影响的范围涵盖大多数主流的Linux发行版,包括Red Hat Enterprise Linux 6, 7, Fedora, SUSE, Debian和Ubuntu。
由于漏洞可以追溯至2009年7月,那些Linux设备存在漏洞长达7年了,并且研究人员很难确定漏洞是否已经被利用过。
这个Linux漏洞编号为CVE-2017-2636,根据CVSS v3标准漏洞评分为7.8分。未经授权的攻击者可以利用这个漏洞注入执行任意代码,获取root权限,或者发动DoS让系统崩溃。
问题存在于N_HLDC linux内核驱动的竞争条件问题。这个内核驱动负责处理高级数据链路控制(High-Level Data Link Control或简称HDLC)数据,这就导致了double-free漏洞。
7年:Samba远程代码执行漏洞
Samba是Linux和UNIX系统的SMB协议服务软件,可以实现与其他操作系统(如:微软Windows操作系统)进行文件系统、打印机和其他资源的共享。
今年5月研究人员发现了这个漏洞,漏洞编号为:CVE-2017-7494。如果使用了该漏洞,当恶意的客户端连接上一个可写的共享目录时,通过上传恶意的链接库文件,使服务端程序加载并执行它,从而实现远程代码执行。根据服务器的情况,攻击者还有可能以root身份执行。
Samba 3.5.0到4.6.4/4.5.10/4.4.14的中间版本都受波及,也就是最早影响到7年前的版本。
9年:“脏牛”0day漏洞
Linux内核的内存子系统在处理写入时复制(copy-on-write, COW)时产生了竞争条件(race condition)。恶意用户可利用此漏洞,来获取高权限,对只读内存映射进行写访问。
竞争条件,指的是任务执行顺序异常,可导致应用崩溃,或令攻击者有机可乘,进一步执行其他代码。利用漏洞(编号CVE-2016-5195),攻击者可在其目标系统提升权限,甚至可能获得root权限。 由于漏洞影响大,研究人员们还把它取名为“脏牛”。
根据官方发布的补丁信息,这个问题可以追溯到2007年发布的Linux内核。
11年:Linux内核漏洞”Phoenix Talon”
2017年5月,启明星辰ADLab提交了四个存在于Linux内核的远程漏洞,并命名为“Phoenix
Talon”,其中一个漏洞为严重(Critical)级别,漏洞可导致远程DOS,在符合一定利用条件下可导致远程代码执行,包括传输层的TCP、DCCP、SCTP以及网络层的IPv4和IPv6协议均受影响。
漏洞本质上是double free的问题,使用setsockopt()函数中MCAST_JOIN_GROUP选项,并调用accept()函数即可触发该漏洞。
尽管之后漏洞没有引起足够多的重视,但这四个漏洞的影响范围包括所有Linux kernel 2.5.69 ~ Linux kernel 4.11的内核版本。2.5.69发布于2003年5月5日,而4.11发布于今年的5月5日。也就是说,时间跨度相当长。
11年:Linux内核提权漏洞
今年2月,Linux内核曝出权限提升漏洞(CVE-2017-6074)。
漏洞存在于Linux系统中的DCCP协议。按现在的实现,解析DCCP协议的流程中如果dccp_v6_conn_request有返回值,就会通过dccp_rcv_state_process中的__kfree_skb释放掉解析过程中收到了DCCP_PKT_REQUEST返回包的SKB地址。但是,如果IPV6_RECVPKTINFO开启的情况下编译内核,skb地址就会被存储在ireq->pktopts,而dccp_v6_conn_request中的引用计数会增加,这样skb就仍然会被使用。直到dccp_rcv_state_process进程中才会被释放。
攻击者使用某些内核堆喷射技术就能控制任意对象,并用任意数据重写其内容。如果重写过的对象中包含任何可触发的函数指针,攻击者便可在该内核中执行任意代码。
该漏洞可追溯至2005年,漏洞影响Linux操作系统主要发行版本,包括Redhat、Debian、OpenSUSE和Ubuntu。利用该漏洞,攻击者可以从低权限进程中进行内核代码执行。目前已知受影响的最老版本是2.6.18(2006年9月),不过该漏洞可能在先前的版本中已经存在,或许从支持DCCP开始(2005年10月的2.6.14)就已经存在问题了。
16年:“永恒之蓝”漏洞
5月12日晚,一款名为Wannacry
的蠕虫勒索软件袭击全球网络,这被认为是迄今为止最巨大的勒索交费活动,影响到近百个国家上千家企业及公共组织。
该软件被认为是一种蠕虫变种(也被称为“Wanna Decrypt0r”、“Wanna Cryptor”或“ Wcry”)。
中国教育网相连的中国高校也出现大规模的感染,感染甚至波及到了公安机关使用的内网。在全球范围内感染的计算机超过230,000。
WannaCry使用了美国国家安全局的“永恒之蓝”(EternalBlue)工具进行攻击。今年4月,黑客组织Shadow Brokers公布了NSA使用的这款工具,导致工具被黑客利用传播病毒。
而永恒之蓝实际上也是一个隐匿很久的漏洞。它利用了Windows服务器消息块1.0(SMBv1)的数个漏洞,这些漏洞在通用漏洞披露(CVE)网站中分别被列为CVE-2017-0143至0148。而影响到的操作系统从Windows
XP直到Windows 8的操作系统,微软在2017年3月14日推送了相关补丁。因此漏洞隐匿的时间可以说至少有16年。
20年:Kerberos协议漏洞
Kerberos这一名词来源于希腊神话“三个头的狗——冥府守门狗”,在系统中是一种认证协议,使用ticket让节点在不安全的网络环境下进行安全的通信,它能够防止窃听、防止replay攻击、保护数据完整性。
而利用这个漏洞的黑客可以提升自己的网络权限,还可以获取内网资源,比如窃取密码。
发送到网络时,并非ticket的所有部分都会被加密,通常Kerberos会检查消息中的加密部分从而进行认证。
因此,有方法能够强制让Kerberos协议使用纯文本和未经加密的部分进行认证。
三名研究员发现了这一漏洞,并且起了一个艺术的名字:“奥菲斯的竖琴”。但漏洞的危害却没有这么艺术了,漏洞影响的是Kerberos
v5,也就是影响到了20年之前的软件,而正因为其历史悠久,众多操作系统和应用中都含有这个组件,Windows、Debian、FreeBSD和Samba都使用到了Kerberos协议,影响范围十分广泛。
22年:Shellshock漏洞
1987年,年轻的程序员福克斯编写了Bash(Bourne-Again Shell的简称)。如今,逾70%连入网络的机器都装有该免费软件,比如服务器、电脑、路由器、某些类型的手机,乃至冰箱和相机等日常用品。
2014年,安全专家警告,Bash存在一个极其令人担忧的软件漏洞,编号为CVE-2014-6271。当用户正常访问时,只要shell是唤醒状态,这个漏洞就允许攻击者执行任意代码命令,为各种各样的黑客攻击敞开了大门。由于Bash存在于各种操作系统中,这一漏洞可以被用于控制世界范围内数以亿计的机器,或许会危及苹果电脑(Macintosh)和使用Android操作系统的智能手机。好在事件发生后,各大厂商都纷纷积极推出补丁,才成功减少了漏洞的影响。
很多人会把Shellshock漏洞与同年爆发的心脏出血漏洞相提并论,但实际上Shellshock的威胁更大。“心脏出血”漏洞可以被用于从服务器上盗取密码等行动,而Shellshock则可以用于控制整台机器,获取最高权限,并且利用的方式更加简单,只需要复制粘贴一条命令。而从时间来看,“心脏出血”漏洞潜伏了两年,给大约50万台机器造成影响,而后者潜伏了22年后才被发现,应该可以说是寿命最长的漏洞了。
开源漏洞更多?
从数据来看Linux的漏洞可能比Windows更多,其中也不乏一些潜伏几十年的漏洞。这就打了那些盲目信奉开源软件的人的脸,开源能够防范软件开发商植入“后门”,但未必漏洞更少。
开源软件的支持者认为:开放源代码不仅能够推动软件发展,还可以让更多的开发者检验代码的安全性。
这种想法可能源于一种思想。我们知道,密码学中有一个柯克霍夫原则(Kerckhoffs’s principle),由奥古斯特·柯克霍夫在19世纪提出:即使密码系统的任何细节已为人悉知,只要密匙(key,又称密钥或密钥)未泄漏,它也应是安全的。它和传统上使用隐密的设计、实现、或其他等等来提供加密的隐晦式安全想法相对。
开源运动的主要领导者之一埃里克·雷蒙(Eric J.
Raymond)则将它引伸到开放源代码软件,称一套未假定敌人可获得源代码的资安软件并不可靠,因此,“永无可信的封闭源码”。反过来说,开放源代码比封闭源码更安全。此种论点称为透明式的安全(security
through transparency)。
然而现实是,很多开源软件的漏洞不仅没有减少,并且一些存在很久的漏洞也未曾被发现。
埃里克·雷蒙曾经说过,“只要吸引足够多的眼球,一切漏洞都很浅显。”但是,哥伦比亚大学计算机科学教授史蒂夫·贝罗文说,在这件事情上,吸引更多眼球的是新功能,而不是质量。“质量需要干苦活、设计、检查和测试,这些事情根本比不上编程有趣,”贝罗文说。“如果不培养这些技能,开源社区就会在质量竞赛中落后得更远。”
2014年OpenSSL曝出Heartbleed漏洞时,AlienVault公司的安全顾问Javvad Malik说过:
“任何人都可以对代码进行审计,但并非每个人都会这样做,因为似乎每一个人都认为其他人已经对这些代码进行过安全审查了,这也就是问题之所在。”
或许正是源于这种“责任分散”,开源软件的安全性不如想象中完善。无论怎样,开源软件的安全性还是需要大家共同的努力。