Chapter 2
第二章 威胁无处不在——个人篇
一、根本的缺陷:安全漏洞
(一)漏洞产生的原因
安全漏洞是信息系统在生命周期的各个阶段(设计、实现、运维等过程)中产生的某类问题,这些问题会对系统的安全(机密性、完整性、可用性等)产生影响。漏洞可能会造成:敏感信息泄露导致机密性的破坏;数据库中的信息被非法篡改导致完整性的破坏;服务器进程的崩溃导致可用性的丧失。漏洞也可能同时导致多个安全属性的破坏。
漏洞也可以被认为是一种设计者预期之外的危险逻辑,使攻击者可以在没有获得授权的情况下进入某些禁止进入的区域,实施某些未被许可的操作。就好比是坐飞机都要查验身份证,但当系统有漏洞的时候,某些人没有身份证也能混入机场并登上飞机。需要说明的是,漏洞通常并不是设计者故意制造的,而只是设计者“没有想到”的。
在计算机领域,还有一个流行词语——Bug,指一些程序设计上的小错误。需要注意的是,漏洞与Bug并不等同,它们之间的关系基本可以描述为:大部分的Bug影响功能性,并不涉及安全性,也就不构成漏洞;大部分的漏洞来源于Bug,但并不是全部,它们之间只是有一个很大的交集。
漏洞可以存在于硬件和软件中,但更多的还是以软件漏洞的形式存在的。计算机、手机、网站、办公系统、智能家居、可穿戴设备、车联网系统中,都普遍存在安全漏洞。而且理论上来说,越是复杂的系统,越容易出现漏洞。
近年来,随着联网业务系统的日益复杂化,一种非代码级别的安全漏洞开始引起关注,这就是逻辑漏洞。所谓逻辑漏洞,是指业务系统在设计的时候考虑不周,使攻击者可以在所有操作完全“合法”的情况下完成攻击。
例如,手机支付软件(如支付宝、微信支付等)上的“付款二维码”可以被“截屏”,于是就有犯罪分子诱骗受害者把付款二维码截屏图片发送给自己,之后在异地用扫码设备盗刷用户账户。这就是一个典型的业务系统逻辑漏洞,设计者在设计时并没有想到付款二维码可以被这样使用。在发现这种骗术之后,所有手机支付软件都增加了一个功能:付款二维码禁止截屏,或者只要一截屏,二维码立即失效。从而也就解决了这个逻辑漏洞问题。
手机付款二维码截屏提示
(二)常见的漏洞类型
漏洞的分类方法有很多,从漏洞使用的技术手法上来看,常见的有SQL注入漏洞、XSS漏洞(跨站脚本攻击漏洞)、命令执行漏洞、信息泄露漏洞等十余种;从漏洞作用方式来看,可以分为本地提权漏洞、远程代码执行漏洞、拒绝服务漏洞等;从漏洞的普遍性来看,可以分为通用型漏洞和事件型漏洞。下面对后面两种分类方法进行具体介绍。
1.本地提权漏洞
本地提权漏洞,是指可以实现非法提升程序或用户的系统权限,从而实现越权操作的安全漏洞。生活中常见的苹果手机越狱、安卓手机Root,实际上就都是利用本地提权漏洞实现的,目的是让使用者可以获得iOS系统或安卓系统禁止用户拥有的系统权限。利用此类漏洞,恶意程序可以非法访问某些系统资源,进而实现盗窃信息或系统破坏。
2.远程代码执行漏洞
现代计算机系统大多可以远程登录或访问,但必须在设备开启了远程访问功能,并且访问者的登录账号拥有远程访问权限时才行。而远程代码执行漏洞,就是指无须验证账号的合法性,就可以实现远程登录访问的安全漏洞。
远程代码执行漏洞也是最危险的一类安全漏洞。如冲击波、熊猫烧香、永恒之蓝勒索蠕虫(WannaCry)等超级病毒能够实现快速大规模传播,主要就是因为这些病毒利用了未打补丁的计算机系统中的远程代码执行漏洞,来发动对联网计算机的自动攻击。对于存在此类漏洞的计算机和设备,只要连接在互联网上就是危险的,因为攻击者的攻击完全不需要使用者的配合,不需要使用者有任何不当的联网操作——如打开不明文件、浏览恶意网址等。
3.拒绝服务漏洞
拒绝服务漏洞,是指可以导致目标应用或系统暂时或永远性地失去响应正常服务的能力,影响系统的可用性。这种漏洞的主要作用是使程序系统崩溃,无法正常工作。拒绝服务漏洞,又可以细分为远程拒绝服务漏洞和本地拒绝服务漏洞。前者大多被攻击者用于向服务器发动攻击,而后者则大多被用于计算机病毒对本地系统和程序的攻击。
4.通用型漏洞
由于现今绝大多数的软件、网站或信息系统开发都不是从零起步,而是使用某些现成的开发平台或开源代码开发而来的,因此,使用同一系统平台或同一开源代码开发出来的软件、网站或信息系统往往会存在同样的或相似的安全漏洞。这种普遍存在的相同或相似的漏洞就是通用型漏洞。
5.事件型漏洞
事件型漏洞主要是指软件、网站或信息系统中的某一个具体的、独特的漏洞,这个漏洞的出现有很大的偶然性,只与相关软件、网站或信息系统自身的开发过程、运维过程有关,在其他地方不会重复出现。例如,常见的弱密码问题、业务逻辑漏洞、系统设置不当等,一般都属于事件型漏洞。
从历史经验来看,90%以上的软件、网站或信息系统都存在事件型安全漏洞。而当系统开发平台被曝出存在安全漏洞时,几乎所有使用该平台开发出来的软件、网站或信息系统都会同时存在安全漏洞。
最后再来介绍一下0day漏洞(也称为零日漏洞)的概念。所谓0day漏洞,是指已经有人知道,但厂商尚未修复的安全漏洞。攻击者利用0day漏洞发动攻击,理论上来说几乎是不可能防御的。但由于0day漏洞的发现非常困难,一旦被安全机构掌握,0day漏洞也就立即失效了。所以,网络攻击者如果持有0day漏洞,一般不会使用到普通人身上,而是会用来攻击高价值的目标。此外,如果厂商已经提供了补丁,但由于各种原因,相关软件、系统或设备还没有打上补丁,则漏洞也会被有效攻击和利用,这种漏洞称为Nday漏洞。
(三)计算机安全漏洞
2003年10月以后,每个月的第二个星期二,微软公司都会给全球计算机用户的Windows操作系统打补丁。而打补丁的主要目的就是修复系统漏洞,一个补丁可能修复多个系统漏洞。平均来说,微软补丁每年修复的安全漏洞不少于100个。
2014年4月以后,微软公司停止对Windows XP系统的更新服务,而从停止服务至2015年3月,微软公司官方共发布各类安全补丁96个,涉及安全漏洞362个,其中有55.5%的安全漏洞在Windows XP系统中同样存在。而另一方面,统计也显示,在2014年4月,即Windows XP系统停止服务之时,国内Windows XP系统用户占比仍高达63.7%,大大高于世界平均水平的26.3%。中国也因此成为受微软Windows XP停服事件影响最大的国家之一。
为尽可能地减小Windows XP停服事件对中国计算机用户的威胁,2014年2月28日,360发布了全球首款免费的Windows XP系统专用防护工具:360 XP盾甲。该工具采用了沙箱、系统加固、应用加固和热补丁等4项核心的安全防护策略,可以在相当大的程度上,保证Windows XP系统用户在不打补丁的情况下免遭各种漏洞攻击,由此也引发了国内外安全圈对于无补丁防护技术的一阵研究热潮。到2017年年底,中国境内的Windows XP系统用户比例已经逐步减少至10%以下。而在此期间,国内并未爆发因Windows XP系统漏洞而导致的大规模安全事件。360 XP盾甲也逐渐完成了自己的历史使命。
360 XP盾甲
需要特别说明的是,在个人计算机中,仅仅给操作系统打补丁是远远不够的。以下几类安全漏洞对个人计算机的安全使用也是至关重要的。
(1)浏览器/Flash插件漏洞
浏览器是个人计算机上网的主要工具之一,所以浏览器及其Flash插件的安全漏洞也最容易被攻击者利用和实施攻击。挂马攻击就是一种常见的浏览器漏洞攻击方式:攻击者可以首先制作一个网页,然后诱导用户使用浏览器访问这个页面;浏览器打开页面时,网页中的攻击代码会利用浏览器或Flash插件的漏洞,自动下载并偷偷运行恶意程序,整个过程用户完全没有感觉。
(2)办公软件漏洞
正常情况下,pdf、doc、xls、ppt等文档都是安全无害的,它们并不是可执行程序。但是在Adobe Reader、Office等办公软件存在漏洞的情况下,打开黑客精心构造的文档,攻击代码就能够控制计算机,如下载运行病毒、打开摄像头偷窥、监控键盘输入等。
在Pwn2Own的Adobe Reader比赛中,参赛者制作一个带有攻击代码的pdf文件,当使用Adobe Reader打开这个文件时,计算机会按照比赛要求自动弹出记事本程序。
在黑客的实际攻击中,如果打开攻击办公软件漏洞的恶意文档,木马病毒就会在系统后台偷偷下载运行,整个过程用户没有任何感觉。
(四)手机安全漏洞
智能手机时代,手机的安全漏洞引发了人们的关注。目前,国内市场上主流的手机操作系统主要是谷歌的安卓系统和苹果的iOS系统。研究显示,无论是开源开放的安卓系统,还是人们普遍认为相对安全的、封闭的iOS系统,安全漏洞都普遍存在。
1.安卓系统的漏洞与碎片化
与Windows操作系统或苹果的iOS操作系统不同,安卓系统的一大特点就是碎片化。所谓碎片化,是指每一个智能手机厂商都会根据自己的功能设计需要,对安卓操作系统做出大量的定制化开发和修改,并形成有自己特色的操作系统,由此就导致了手机操作系统在安卓大生态环境下的多样性。统计显示,当前仅国内流行的安卓手机操作系统版本就超过1000种。
安卓系统碎片化问题给安全性带来三个直接的后果。
第一,安卓系统不太可能形成如Windows系统那样的集体定期打补丁机制。手机补丁只能由手机厂商自己进行推送和管理。
第二,定制化开发会引入谷歌原生的安卓操作系统所没有的、新的安全漏洞。有检测分析显示,70%以上的安卓手机漏洞,实际上是被手机厂商定制开发出来的,谷歌的安卓系统原生漏洞仅占不到30%。
第三,考虑到兼容性和开发成本等问题,安全厂商也不太可能代替手机厂商,为用户提供第三方打补丁功能。
综上,安卓手机普遍存在安全漏洞多、修复周期长等问题。也就是说,手机远没有计算机安全。下图给出了360互联网安全中心于2017年1月发布的一项研究报告,展示了安卓手机存在的漏洞个数占比分布。可以看出,几乎没有任何一部手机是没有安全漏洞的,八成以上的手机拥有超过10个安全漏洞。
手机存在的漏洞个数占比分布
下图给出了不同类型安卓系统漏洞影响手机设备的比例。其中危险性最大的远程代码执行漏洞会影响到99.5%的安卓手机。这意味着,我们的手机随时存在被远程入侵的可能。
不同类型安卓系统漏洞影响手机设备的比例
2.iOS的安全性问题
那么,相对封闭、独家管控的苹果手机iOS系统是否就足够安全了呢?客观地说,由于没有碎片化问题,代码没有开源,因此苹果手机暴露出来的漏洞风险比安卓手机小。但苹果手机的系统安全性,总体来说是建立在其商业系统封闭性基础之上的。苹果手机每年被曝出的安全漏洞数量实际上几乎与Windows系统一样多。只不过由于其商业模式的封闭性,用户很少有机会在苹果应用商店之外的地方下载软件,所以遭到漏洞攻击的风险会相对小很多。
不过,2016年曝出的苹果手机三叉戟漏洞事件,还是让苹果手机的安全性引发了关注。
2016年8月25日,阿联酋一位著名人权活动家Ahmed Mansoor的苹果手机上收到两条含有链接的短信,信息显示,该链接将透露阿联酋监狱受虐囚犯的“秘密”。
不过,这位斗争经验丰富的“战士”并没有立即点开短信中的链接。事实上,Ahmed经常成为恶意软件针对的目标,每次得到新的间谍软件,都会在他身上进行尝试。Ahmed担心这两条短信中也有可能“暗藏杀机”,于是在第一时间将这两条短信报告给Citizenlab的安全研究人员。
Citizenlab和Lookout的安全研究人员对这两条短信中的链接进行研究后大吃一惊。研究人员发现,一旦Ahmed点击这两个链接,不需要任何具体操作,手机就会植入由以色列NSO公司研发的手机监控软件Pegasus。攻击者可以通过Pegasus远程控制Ahmed的手机,并且在Ahmed完全不知情的情况下,窃取手机上的短信、邮件、通话记录、电话录音、存储的密码等隐私数据,还能监听并窃取Whatsapp、微信等社交软件的聊天信息。
这两个链接之所以会有如此强大的能力,主要是由于Pegasus利用了苹果手机iOS操作系统中的3个0day漏洞,这3个漏洞也就是安全圈著名的“三叉戟漏洞”。漏洞消息的公布迫使苹果公司紧急发布安全更新。
这也是苹果公司史上第一次公开披露的针对iOS的APT 0day攻击。0day漏洞本就罕见,一次发现数个这样的漏洞更是罕见。正是由于这3个漏洞的危害性极大,苹果公司在短时间内紧急修复漏洞。
由于0day漏洞罕见,能够发现并利用这种系统安全漏洞编写攻击软件,在网络间谍领域意味着“丰厚利润”。据美联社报道,2015年11月,曾有人出价100万美元购买这类间谍软件。
(五)物联网安全漏洞
随着智能家居、可穿戴设备、车联网等新型物联网设备与服务的兴起,物联网设备的安全漏洞问题及其危害也逐渐显现出来。物联网设备安全漏洞的危害主要表现在三个方面。
第一是信息泄露。例如,家用网络摄像头的漏洞,就有可能导致自己的生活被黑客偷窥;智能手环的漏洞就有可能让自己的位置信息暴露,进而被有意者跟踪。
第二是有可能危及生命财产安全。例如,存在漏洞的智能网联汽车,就有可能被黑客通过技术手段,在没有钥匙的情况下打开车门,发动汽车,窃取财务。更有甚者,还可以通过对汽车的攻击致人伤亡。
第三是有可能因为设备被批量控制进而危害国家安全。2016年10月21日晚间发生的美国大面积断网事件,就是因为全球各地的大量物联网设备被恶意控制造成的。