俗话说,苍蝇不叮无缝的蛋。 针对这种现象有人解释:鸡蛋裂缝后很容易就会坏掉,产生异味。与苍蝇而言,异味的鸡蛋正式它的食粮,于是苍蝇就不请而至。万事万物,皆有因果,正如苍蝇和蛋的故事,信息安全中,因为信息系统存在着大大小小、或明或暗的安全漏洞,那些攻击者可都是一些嗅觉灵敏的“苍蝇”,要防范攻击,则需要查找自身存在的漏洞、及时进行修补,才能够避免被“叮咬”。
**案例1: 微软漏洞 **
在上一篇中有介绍过震网事件,美国的病毒专家正是利用了Windows系统多个漏洞,达到入侵攻击的效果。上篇中未对技术细节做展开,本篇就在此稍作展开,以让深入了解攻击的原理。
漏洞1: 快捷方式文件解析漏洞(MS10-046)
Windows在显示快捷方式文件时,会根据文件中的信息寻找它所需的图标资源,并将其作为文件的图标展现给用户。如果图标资源在一个DLL文件中,系统就会加载这个DLL文件。攻击者可以构造这样一个快捷方式文件,使系统加载指定的DLL文件,从而执行其中的恶意代码。快捷方式文件的显示是系统自动执行,无需用户交互,因此漏洞的利用效果很好。
Stuxnet蠕虫搜索计算机中的可移动存储设备
一旦发现,就将快捷方式文件和DLL文件拷贝到其中。
如果用户将这个设备再插入到内部网络中的计算机上使用,就会触发漏洞,从而实现所谓的“摆渡”攻击,即利用移动存储设备对物理隔离网络的渗入。
拷贝到U盘的DLL文件有两个:~wtr4132.tmp和~wtr4141.tmp。后者Hook了kernel32.dll和ntdll.dll中的下列导出函数: FindFirstFileW FindNextFileW FindFirstFileExWNtQueryDirectoryFile ZwQueryDirectoryFile 实现对U盘中lnk文件和DLL文件的隐藏。因此,Stuxnet一共使用了两种措施(内核态驱动程序、用户态Hook API)来实现对U盘文件的隐藏,使攻击过程很难被用户发觉,也能一定程度上躲避杀毒软件的扫描。
漏洞2: RPC远程执行漏洞(MS08-067)与提升权限漏洞
存在此漏洞的系统收到精心构造的RPC请求时,可能允许远程执行代码。在Windows 2000、Windows XP和Windows Server 2003系统中,利用这一漏洞,攻击者可以通过恶意构造的网络包直接发起攻击,无需通过认证地运行任意代码,并且获取完整的权限。因此该漏洞常被蠕虫用于大规模的传播和攻击。 Stuxnet蠕虫利用这个漏洞实现在内部局域网中的传播, 反汇编代码如下
其实,震网病毒利用的漏洞还不止上面谈的2个,据专家分析,不少于4个,可以想象,windows如此庞大又公开的操作系统,可以利用的漏洞有多少,对攻击者而言,可以用“取之不尽,用之不竭”来形容。
案例2: 苹果漏洞
微软可说是PC时代的代表,那么,移动互联网时代苹果无疑是主角。2016年,上海电信在其网上营业厅发出一则“重要提醒:iPhone用户请注意!”的公告,建议用户尽快升级自己的iPhone操作系统,避免个人隐私泄露等安全问题的发生。运营商发公告提醒用户更新iOS版本,这是比较少见的。运营商之所以这样做,是因为这次iOS遭遇了其史上最大的系统漏洞,用户如果不及时更新,个人信息有可能被窃取,通话、社交聊天等信息可能被截获,更可怕的是iPhone手机还可能变成被不法分子控制的远程音频视频录制器。
2016年8月底,苹果推送了iOS 9.3.5版本更新,这距离iOS 9.3.4版本推出仅仅相隔20天时间。苹果之所以这次匆匆发布新的版本更新,原因是为了封堵重要的安全漏洞,属于紧急更新。
据了解,iOS 9.3.5主要是针对三个新发现的iOS漏洞。这三个漏洞统称为Trident,其中一个存在于Safari WebKit(一种开源的浏览器引擎),一旦目标用户被盯上,点击一个网页链接,或将导致“整台设备就‘缴械投降’了”。另一个漏洞存在于iOS核心,有可能致使信息泄露,第三个问题是内核内存损坏。
这三个高危漏洞被研究人员称作“三叉戟”。简单来说,如果用户点击黑客发来的链接,就可能导致手机被远程控制,聊天记录、密码泄露,黑客可利用这些漏洞获得对iPhone的几乎全部控制权。当然,软件是人写的,人无完人,程序的漏洞也是在所难免。客观的说,苹果公司的软件更新服务在业内还是不错的,知错就改,其升级体验也足够傻瓜化,只要按照系统提示升级系统,一般问题也不会太大。
案例3: INTEL CPU的硬件漏洞
就在一个月前,时间刚刚跨入2018的门槛,媒体上流传出一条爆炸性新闻,人称Intel 芯片的“Meltdown”(熔断)和“Spectre”(幽灵)漏洞。Google Project Zero团队发现了一些由CPU“预测执行”(Speculative Execution)引发的芯片级漏洞,漏洞都是先天性质的架构设计缺陷导致的,可以让非特权用户访问到系统内存从而读取敏感信息。更糟糕的是,Project Zero研究员还发现每一颗1995年后发布的处理器都会受到影响。要知道在服务器与桌面计算领域,Intel是处于垄断地位,它的处理器存在这么严重的漏洞,后果显然很严重。特别是重要的服务器,如云计算服务厂商,通过虚拟化共享计算资源的形态,硬件上的资源保护失效,无疑是致命的。各大服务商阿里云、华为云、微软云、百度云、亚马逊云等厂商就启动了应急措施推进漏洞修复,主流Windows和Linux系统也发布了相关的补丁来应对,到目前为止,大家能做的也只有减轻漏洞所带来的负面影响,要彻底解决还是要以后CPU的升级换代。当然,从另外一个层面来看,如果国产芯片厂商若能利用这些危机,强调安全性,借机推进国产芯片在工业界中的应用,那么未必是一件坏事。
漏洞也被称为脆弱性,冯.诺依曼建立计算机系统结构理论时认为,计算机系统也有天生的类似基因的缺陷,也可能在使用和发展过程中产生意想不到的问题。
信息安全漏洞就是导致访问控制矩阵所定义的安全策略和系统操作之间冲突的所有因素。 -- Dennin
一个错误如果可以被攻击者用于违反目标系统的一个合理的安全策略,那么它就是一个漏洞。 -- 美国MITRE公司
漏洞是存在预评估对象中的,在一定的环境条件下可能违反安全功能要求的弱点。 -- ISO/IEC 15408
要指出的是,有时漏洞也被称作错误(error)、缺陷(fault)、弱点(weakness)或是故障(failure)等,这些术语很容易引起混淆。在许多情况下,人们习惯于见错误、缺陷、弱点都简单地称为漏洞。需要指出的是,**从严格意义上来讲,错误、缺陷、弱点并不等于漏洞。错误、缺陷、弱点是产生漏洞的几种诱发条件,漏洞被利用后必然会破坏安全属性,但不一定引起产品或系统故障,**例如网银账号被盗用只是影响个人的资金安全与隐私,并不会导致银行交易系统的故障。
硬件、软件或者产品的漏洞是在需求、设计、开发、部署或者维护阶段,由于开发或者使用者有意或无意产生的缺陷所造成的,是人为的。
1)技术原因
现在的软硬件技术的不断发展,系统规模不断膨胀,内部的结构复杂化,而复杂性恰恰是产生漏洞的重要原因。我们在开发时也时为节约成本,缩短开发时间,常使用开源软件,而天底下并不存在免费的午餐,开源软件中存在的一些问题也会导致安全漏洞。很典型的例子就是,2014年爆出的著名的心脏流血漏洞,就是大名鼎鼎的openssl库中存在的参数边界检查失效问题,能让攻击者都到服务器的内存数据,世界上三分之二的网站都首次漏洞影响,震惊业内。
根据中国国家漏洞数据库(CNNVD)数据,2017年记录了超过1.6万个漏洞,接近比2016年全年的漏洞记录数的2倍,漏洞的数量是屡创新高。
2) 经济原因
软件系统的安全性不是显性价值,厂商要实现安全性就要额外付出巨大的代价。另外,软件产品的卖方对产品质量比买方存在的信息不对称,买方不知情的情况下,卖方并不愿意在安全质量上做大的投入。
3) 应用环境原因
随着互联网融入社会生活的方方面面,网络技术和信息技术不断融合发展,导致软件系统的运行环境发生了改变,从传统的封闭、静态和可控状态变为开放、动态和难控状态。复杂的网络环境导致软件系统攻防信息不对称进一步增强,攻易守难的矛盾进一步凸显。今天,还有一些政府信息系统碰到安全问题时最有效的手段就是拔掉网线。
4) 安全缺陷
在需求阶段,需求定义的不完善是导致安全缺陷的最主要原因。在系统设计阶段,错误的设计方案也是安全缺陷的直接原因。在编码阶段,空指针、边界检查、类型不一致等常见问题常常导致安全缺陷。在测试阶段,往往注重功能方面,而忽视各种条件下的验证。在维护阶段,修改了一处问题,却有引起另外一个地方的问题,这种并不少见。在使用阶段,错误的配置或使用也可导致系统中的安全缺陷。
1)首先需要知道已发现的漏洞
从公开的漏洞库了解漏洞信息是方便、有效的途径。目前,国内外安全界都建立了国家级的漏洞库,实现漏洞及其相关信息的集中管理和分类统计,并将这些信息公布给用户,让用户了解自己信息系统存在的安全漏洞,并掌握解决方法。这里介绍一下美国和我国的漏洞库
2006年8月,美国政府在原有“互联网可搜查漏洞索引ICAT”的基础上建立了国家漏洞库(NVD),由国土安全部(DHS)研究部署并提供建设资金,由国家标准技术研究院(NIST)负责技术开发和运维管理。NVD是漏洞库领域的集大成者,拥有高质量的漏洞数据资源,是漏洞发布和安全预警的重要平台,同时NVD和学术界、产业界保持高度合作,将漏洞数据广泛应用于安全风险评估,终端安全配置检查等领域,为美国国家信息安全保障做出了巨大贡献。
中国信息安全“国家漏洞库”由国家专项资金支持,中国信息安全测评中心这一中国专门设立的漏洞分析和风险评估职能机构负责建设。2009年10月中国信息安全“国家漏洞库”正式投入运行,并对外开展漏洞分析与风险评估服务。
2) 主动的挖掘安全漏洞
漏洞挖掘是发现未知安全漏洞的主要方法,它是对源代码、二进制代码、中间语言代码的漏洞进行主动发现的过程。漏洞挖掘还有一个特点是从人工发现阶段发展到依靠自动分析工具辅助的半自动化阶段。当前,主要有两种挖掘法:静态挖掘和动态挖掘。 静态挖掘是不运行代码,二直接对代码进行漏洞挖掘,常常分析代码中的控制流走向,提取处漏洞信息。 动态挖掘,则是在运行代码的状态下,通过监测代码的运行状态或者根据测试用例结果来挖掘漏洞的方法。模糊测试是一种快速有效的方法,通过提供非预期输入,并监控程序对输入的反应,从而发现程序内部漏洞。
3) 及时修复安全漏洞
在发现漏洞之后就需要进行风险评估,视风险等级来决定是否修复。从技术层面,漏洞修复主要通过安全补丁来完成。安全补丁在部署之前需要经过必要的测试。信息系统打补丁时,需要做好备份和相应的应急措施。
此刻您有话要说