0x005_又见“震网”20170614
1.事件简介
昨日,我刚刚做完上期的《“暗云”来袭》的节目,本以为可以休息几天,再组织些“震网”病毒的内容做为下一期的选题。不料,就在今天(2017年6月14日)各大安全机构再次发布了漏洞安全通告,其中一个内容就是“震网三代”。看来,我的下一期节目只能提前了。
先说一下此次“安全通告”的情况:
本次通告主要针对Windows Search远程代码执行漏洞(cve-2017-8543)及LNK文件快捷方式代码执行漏洞(cve-2017-8464)。
微软 14 日凌晨发布的安全公告,称 CVE-2017-8464 被国家背景的网 络攻击所使用,实施攻击。
该漏洞的原理同 2010 年破坏伊朗核设施的震网行动中所使用的、用于穿透 核设施中隔离网络的 Windows 安全漏洞 CVE-2010-2568 非常相似。它可以很容易 地被黑客利用并组装成用于攻击基础设施、存放关键资料的核心隔离系统等的网 络武器。
微软在同一天发布了 Windows XP 和 Windows Server 2003 等 Windows 不继续 支持的版本的补丁,这个修改是为了避免上月发生的 WannaCry 蠕虫勒索事件的 重现。
Window XP 的补丁更新可以在微软下载中心找到,但不会自动通过 Windows 推送。
1.1.Microsoft Windows Search 远程命令执行漏洞
1.1.1.漏洞背景
Windows 搜索服务(Windows Search Service)漏洞是一个远程代码执行漏洞(WSS:Windows 中允许用户跨多个 Windows 服务和客户机搜索的 功能)。
Windows Search的功能是为我们电脑中的文件、电子邮件和其他内容提供内容索引、属性缓存和搜索结果。Windows Search默认是开机启动的,它会利用计算机的空闲时间来建立索引,加大对计算机硬盘的使用率。攻击者通过精心构造”搜索”的Server MessageBlock (SMB)消息来攻击windows search组件,从而实现远程命令执行,同时获取到所有管理权限。
1.1.2.漏洞影响
危害级别: 严重
发现日期: 2017年6月13号
1.1.3.漏洞编号
CVE-2017-8543
1.1.4.影响版本
◆Microsoft Windows 10 Version 1607 for32-bit Systems
◆Microsoft Windows 10 Version 1607 forx64-based Systems
◆Microsoft Windows 10 for 32-bit Systems
◆Microsoft Windows 10 for x64-based Systems
◆Microsoft Windows 10 version 1511 for32-bit Systems
◆Microsoft Windows 10 version 1511 forx64-based Systems
◆Microsoft Windows 10 version 1703 for32-bit Systems
◆Microsoft Windows 10 version 1703 forx64-based Systems
◆Microsoft Windows 7 for 32-bit Systems SP1
◆Microsoft Windows 7 for x64-based SystemsSP1
◆Microsoft Windows 8.1 for 32-bit Systems
◆Microsoft Windows 8.1 for x64-based Systems
◆Microsoft Windows RT 8.1
◆Microsoft Windows Server 2008 R2 forItanium-based Systems SP1
◆Microsoft Windows Server 2008 R2 forx64-based Systems SP1
◆Microsoft Windows Server 2008 for 32-bitSystems SP2
◆Microsoft Windows Server 2008 for x64-basedSystems SP2
◆Microsoft Windows Server 2012
◆Microsoft Windows Server 2012 R2
◆Microsoft Windows Server 2016
1.2.Microsoft Windows LNK 快捷方式远程命令执行漏洞
1.2.1.漏洞背景
该漏洞是一个微软 Windows 系统处理 LNK 文件过程中发生的远程代码执行 漏洞。在windows中快捷方式LNK文件小巧,打开程序方便。但是也会因为漏洞造成很大影响,比如远程命令执行。攻击者可以通过(u)盘等设备包含恶意LNK文件进行传播,当存在漏洞的电脑被插上存在漏洞文件的 U 盘时,不需要任何额外操作, 漏洞攻击程序就可以借此完全控制用户的电脑系统。如果用户通过Windows资源管理器或者远程共享打开了恶意LNK文件,或者从互联网下载、拷贝文件等操作就会被感染。曾经的震网病毒又名Stuxnet病毒就是利用此类漏洞进行传播,对工控设备造成了巨大灾害,比如2010年6月攻击伊朗核设备。这个漏洞不具备提权问题,用户是什么权限获取的就是什么权限,所以把用户权限降到最低能降低危害。
1.2.2.漏洞影响
危害级别:严重
发现日期:2017年6月13号
1.2.3.漏洞编号
CVE-2017-8464
1.2.4.影响版本
◆Microsoft Windows 10 Version 1607 for32-bit Systems
◆Microsoft Windows 10 Version 1607 forx64-based Systems
◆Microsoft Windows 10 for 32-bit Systems
◆Microsoft Windows 10 for x64-based Systems
◆Microsoft Windows 10 version 1511 for32-bit Systems
◆Microsoft Windows 10 version 1511 forx64-based Systems
◆Microsoft Windows 10 version 1703 for32-bit Systems
◆Microsoft Windows 10 version 1703 forx64-based Systems
◆Microsoft Windows 7 for 32-bit Systems SP1
◆Microsoft Windows 7 for x64-based SystemsSP1
◆Microsoft Windows 8.1 for 32-bit Systems
◆Microsoft Windows 8.1 for x64-based Systems
◆Microsoft Windows RT 8.1
◆Microsoft Windows Server 2008 R2 forItanium-based Systems SP1
◆Microsoft Windows Server 2008 R2 forx64-based Systems SP1
◆Microsoft Windows Server 2008 for 32-bitSystems SP2
◆Microsoft Windows Server 2008 for x64-basedSystems SP2
◆Microsoft Windows Server 2012
◆Microsoft Windows Server 2012 R2
◆Microsoft Windows Server 2016
2.“震网”病毒的故事
2.1.故事背景
有一本书《零日漏洞:震网病毒全揭秘》是目前关于震网病毒入侵伊朗核设施事件最为全面和权威的读物,由美国自由撰稿人Kim Zetter以在《连线》杂志期间的工作为基础,广泛采访事件相关人物,多方收集一手信息,精心梳理而成的一本非小说类著作,出版于2014年10月。
2010年1月,联合国负责核查伊朗核设施的国际原子能机构(IAEA)开始注意到,纳坦兹铀浓缩工厂出现了问题。
核设施埋在沙漠之下50英尺的深处,那里有一个巨大的离心机车间。过去2年间,这里的铀浓缩离心机正常运转着,从六氟化铀中提炼高纯度铀。在过去数周,工人们大批量的拆掉离心机,并换成新的。故障比例高得令人吃惊。
在纳坦兹,离心机型号为IR-1,预期使用寿命10年。但似乎它们很脆弱、很容易损坏。即使是正常情况下,伊朗都会由于原料不达标、维护问题和工人操作错误等原因,每年更换10%的离心机。
2009年11月,纳坦兹大概有8700台离心机,也就是说正常情况下一年替换800台。但IAEA的官员发现,在2009年12月到2010年1月期间,离心机的替换率高得不正常。
IAEA核查人员大约每2个月去一次,有时提前通知,有时临时行动。每次工人们都会把坏的离心机换下来,堆放在一个房间里,等待检查。核查人员用手持伽马射线探测仪对其检查,看是否有放射性物质溢出,然后再批准其报废,把每次报废数量记录下来、报给维也纳总部。
IAEA在每一间离心机堆放库外面都设立了摄像头,监督技术人员和工人的一举一动。每次核查人员去了之后,要看摄像头有没有被人动过,并检查视频录像,看纳坦兹的人有没有偷做手脚。几周后,总部负责详查视频的人发现,报废的离心机数量严重超出正常水平。
IAEA官方并未公布报废离心机的具体数量。但新闻报道中引述一名欧洲外交人士的说法是900至1000台。2010年10月退休的前IAEA官员、监察部门副主管海诺宁说,“凭我的经验推测,大约有2000台。”
不管具体数量是多少,很明显,设备的确出问题了。可是,伊朗人无需向IAEA解释到底发生了什么,IAEA检察人员也无权过问。监察部门的任务是检查铀浓缩工厂的铀,而不是跟踪坏了多少设备。
检察人员并不知道,问题的答案就在他们眼皮底下,在工业控制室的计算机中。几个月前,2009年6月,有人在其中悄悄地释放了一个破坏性的数字弹头,随后这个弹头一步一步攻入纳坦兹的核心系统,带着明确的目标——破坏伊朗铀浓缩项目、阻止伊朗总统内贾德制造核武器。
答案就在那里,但核查人员用了一年的时间才明白。而这还是在一大群计算机安全专家耗时几个月、对病毒进行解构的基础上才达成的。这段程序是如此特殊,以至于它创造了历史——它是世界上第一个数字武器。它的到来,宣告了数字战争时代的开启。
2.2.发现过程
在2010年6月白俄罗斯一家小型反病毒公司VirusBlockAda反病毒部门负责人舍基·乌尔森,系统地梳理近期在伊朗计算机上发现的恶意文件,发现了它。它绝非一种温和而有趣的普通病毒,而是一部如恶魔般可怕又冷静的顶级作品。
Stuxnet蠕虫(俗称“震网”、“双子”、“超级病毒”、“超级工厂病毒”)是第一个专门定向攻击真实世界中基础(能源)设施的“蠕虫”病毒,比如核电站,水坝,国家电网。互联网安全专家对此表示担心。
作为世界上首个网络“超级破坏性武器”,Stuxnet的计算机病毒已经感染了全球超过 45000个网络,伊朗遭到的攻击最为严重,60%的个人电脑感染了这种病毒。计算机安防专家认为,该病毒是有史以来最高端的“蠕虫”病毒。蠕虫是一种典型的计算机病毒,它能自我复制,并将副本通过网络传输,任何一台个人电脑只要和染毒电脑相连,就会被感染。
“震网”病毒利用了微软Windows操作系统的4个漏洞,其中有3个全新的零日漏洞;伪造驱动程序的数字签名;通过一套完整的入侵和传播流程,突破工业专用局域网的物理限制;利用WinCC系统的2个漏洞,对其开展破坏性攻击。
虽然每年有超过1200万种恶意代码出现,但“零日漏洞”大概只有10来个。因此,“零日漏洞”利用程序(zero-day exploits),是黑客世界中最牛的东西。因为它利用的漏洞是软件开发者和反病毒公司尚未发现的——这意味着根本没有补丁。
通常意义上的犯罪性黑客会利用这些漏洞盗取银行和信用卡信息来获取非法收入。而“震网”病毒不像一些恶意软件那样可以赚钱,它需要花钱研制。这次的攻击者使用的正是这种价值很高的“零日漏洞”利用程序和高超的攻击技术。伊朗设备上的这些病毒在漏洞利用(exploit)技术和后门(rootkit)运用技术方面的表现,是空前的。简直不能再牛了。安全专家在对软件进行反编译后发现,它不可能是黑客所为,应该是一个“受国家资助的高级团队研发的结晶”,因此专家们相信“震网”病毒出自情报部门之手。美国《纽约时报》也称,美国和以色列情报机构合作制造出“震网”病毒。
2.3.带来的影响
赛门铁克(Symantec)和微软(Microsoft)公司的研究,近60%的感染发生在伊朗,其次为印尼(约20%)和印度(约10%), 阿塞拜疆、美国与巴基斯坦等地亦有小量个案。由于“震网”感染的重灾区集中在伊朗境内。美国和以色列因此被怀疑是“震网”的发明人。
这种新病毒采取了多种先进技术,因此具有极强的隐身和破坏力。只要电脑操作员将被病毒感染的U盘插入USB接口,这种病毒就会在神不知鬼不觉的情况下(不会有任何其他操作要求或者提示出现)取得一些工业用电脑系统的控制权。
利用漏洞通过U盘传播病毒,不像通过互联网上的网站和邮件传播那样普遍,但也非闻所未闻。库普瑞和乌尔森之前所见过的所有U盘传播病毒,都是利用了Windows系统的自动运行功能,这样当U盘插入计算机时,U盘上的恶意代码就会立刻执行。但这个家伙更加聪明。
在Windows系统中,.lnk文件负责渲染U盘或其他移动存储介质中的文件图标。当我们插入U盘时,资源管理器或类似工具就会自动扫描其中的.lnk文件,来显示各种格式的文件,如音乐文件、Word文档、其他程序等。在这个病毒中,攻击者精心设计了一个漏洞利用程序,并将其插入其中.lnk文件中。当Windows扫描时,它能执行这个漏洞利用程序,秘密地将U盘上的恶意文件“货物”运送到计算机上,就像军用运输机将伪装的伞兵投放到敌方领土上一样。
与传统的电脑病毒相比,“震网”病毒不会通过窃取个人隐私信息牟利。由于它的打击对象是全球各地的重要目标,是全球首个投入实战舞台的“网络武器”。他可以破坏世界各国的化工、发电和电力传输企业所使用的核心生产控制电脑软件,并且代替其对工厂其他电脑“发号施令”。极具毒性和破坏力。
“震网”代码非常精密、复杂,采取了多种先进技术,具有极强的隐身性。主要有两个功能,一是使伊朗的离心机运行失控,二是掩盖发生故障的情况,“谎报军情”,以“正常运转”记录回传给管理部门,造成决策的误判。在2011年2月的攻击中,伊朗纳坦兹铀浓缩基地至少有1/5的离心机因感染该病毒而被迫关闭。
“震网”定向明确,具有精确制导的“网络导弹”能力。它是专门针对工业控制系统编写的恶意病毒,能够利用Windows系统和西门子SIMATICWinCC系统的多个漏洞进行攻击,“震网”病毒打击的西门子公司的SIMATICWinCC监控与数据采集 (SCADA)系统一般都是独立于网络而自成体系运行,也即“离线”操作的。但只要操作员将被病毒感染的U盘插入该系统USB接口,这种病毒就会在神不知鬼不觉的情况下 (不会有任何其他操作要求或者提示出现)取得该系统的控制权。它不再以刺探情报为己任,而是能根据指令,定向破坏伊朗离心机等要害目标。
2.4.详细传播过程
时间关系震网病毒的具体工作原理就不展开讲了,大家可以看我整理的文字内容。
样本典型行为分析:
2.4.1.运行环境
Stuxnet蠕虫在以下操作系统中可以激活运行:
◆Windows 2000、Windows Server 2000
◆Windows XP、Windows Server 2003
◆Windows Vista
◆Windows 7、Windows Server 2008
当它发现自己运行在非Windows NT系列操作系统中,即刻退出。
被攻击的软件系统包括:
◆SIMATIC WinCC 7.0
◆SIMATIC WinCC 6.2
但不排除其他版本存在这一问题的可能。
2.4.2.本地行为
样本被激活后,典型的运行流程如图1 所示。
样本首先判断当前操作系统类型,如果是Windows 9X/ME,就直接退出。
接下来加载一个主要的DLL模块,后续的行为都将在这个DLL中进行。为了躲避查杀,样本并不将DLL模块释放为磁盘文件然后加载,而是直接拷贝到内存中,然后模拟DLL的加载过程。
具体而言,样本先申请足够的内存空间,然后Hookntdll.dll导出的6个系统函数:
◆ZwMapViewOfSection
◆ZwCreateSection
◆ZwOpenFile
◆ZwClose
◆ZwQueryAttributesFile
◆ZwQuerySection
为此,样本先修改ntdll.dll文件内存映像中PE头的保护属性,然后将偏移0x40处的无用数据改写为跳转代码,用以实现hook。
进而,样本就可以使用ZwCreateSection在内存空间中创建一个新的PE节,并将要加载的DLL模块拷贝到其中,最后使用LoadLibraryW来获取模块句柄。
图1 样本的典型运行流程
此后,样本跳转到被加载的DLL中执行,衍生下列文件:
%System32%\drivers\mrxcls.sys %System32%\drivers\mrxnet.sys%Windir%\inf\oem7A.PNF%Windir%\inf\mdmeric3.PNF %Windir%\inf\mdmcpq3.PNF%Windir%\inf\oem6C.PNF 其中有两个驱动程序mrxcls.sys和mrxnet.sys,分别被注册成名为MRXCLS和MRXNET的系统服务,实现开机自启动。这两个驱动程序都使用了Rootkit技术,并有数字签名。
mrxcls.sys负责查找主机中安装的WinCC系统,并进行攻击。具体地说,它监控系统进程的镜像加载操作,将存储在%Windir%\inf\oem7A.PNF中的一个模块注入到services.exe、S7tgtopx.exe、CCProjectMgr.exe三个进程中,后两者是WinCC系统运行时的进程。
mrxnet.sys通过修改一些内核调用来隐藏被拷贝到U盘的lnk文件和DLL文件(图2 )。
图2驱动程序隐藏某些lnk文件
图3 样本的多种传播方式
2.4.3.传播方式
Stuxnet蠕虫的攻击目标是SIMATIC WinCC软件。后者主要用于工业控制系统的数据采集与监控,一般部署在专用的内部局域网中,并与外部互联网实行物理上的隔离。为了实现攻击,Stuxnet蠕虫采取多种手段进行渗透和传播,如图3所示。
整体的传播思路是:首先感染外部主机;然后感染U盘,利用快捷方式文件解析漏洞,传播到内部网络;在内网中,通过快捷方式解析漏洞、RPC远程执行漏洞、打印机后台程序服务漏洞,实现联网主机之间的传播;最后抵达安装了WinCC软件的主机,展开攻击。
2.4.3.1.快捷方式文件解析漏洞(MS10-046)
这个漏洞利用Windows在解析快捷方式文件(例如.lnk文件)时的系统机制缺陷,使系统加载攻击者指定的DLL文件,从而触发攻击行为。具体而言,Windows在显示快捷方式文件时,会根据文件中的信息寻找它所需的图标资源,并将其作为文件的图标展现给用户。如果图标资源在一个DLL文件中,系统就会加载这个DLL文件。攻击者可以构造这样一个快捷方式文件,使系统加载指定的DLL文件,从而执行其中的恶意代码。快捷方式文件的显示是系统自动执行,无需用户交互,因此漏洞的利用效果很好。
Stuxnet蠕虫搜索计算机中的可移动存储设备(图4)。一旦发现,就将快捷方式文件和DLL文件拷贝到其中(图5)。如果用户将这个设备再插入到内部网络中的计算机上使用,就会触发漏洞,从而实现所谓的“摆渡”攻击,即利用移动存储设备对物理隔离网络的渗入。
图4 查找U盘
拷贝到U盘的DLL文件有两个:~wtr4132.tmp和~wtr4141.tmp。后者Hook了kernel32.dll和ntdll.dll中的下列导出函数:
FindFirstFileW FindNextFileW FindFirstFileExWNtQueryDirectoryFile ZwQueryDirectoryFile 实现对U盘中lnk文件和DLL文件的隐藏。因此,Stuxnet一共使用了两种措施(内核态驱动程序、用户态Hook API)来实现对U盘文件的隐藏,使攻击过程很难被用户发觉,也能一定程度上躲避杀毒软件的扫描。
图5 拷贝文件到U盘
2.4.3.2.RPC远程执行漏洞(MS08-067)与提升权限漏洞
这是2008年爆发的最严重的一个微软操作系统漏洞,具有利用简单、波及范围广、危害程度高等特点。
图6 发动RPC攻击
具体而言,存在此漏洞的系统收到精心构造的RPC请求时,可能允许远程执行代码。在Windows 2000、Windows XP和Windows Server 2003系统中,利用这一漏洞,攻击者可以通过恶意构造的网络包直接发起攻击,无需通过认证地运行任意代码,并且获取完整的权限。因此该漏洞常被蠕虫用于大规模的传播和攻击。
Stuxnet蠕虫利用这个漏洞实现在内部局域网中的传播(图6)。利用这一漏洞时,如果权限不够导致失败,还会使用一个尚未公开的漏洞来提升自身权限(图1),然后再次尝试攻击。截止本报告发布,微软尚未给出该提权漏洞的解决方案。
2.4.3.3.打印机后台程序服务漏洞(MS10-061)
这是一个零日漏洞,首先发现于Stuxnet蠕虫中。
Windows打印后台程序没有合理地设置用户权限。攻击者可以通过提交精心构造的打印请求,将文件发送到暴露了打印后台程序接口的主机的%System32%目录中。成功利用这个漏洞可以以系统权限执行任意代码,从而实现传播和攻击。
图7 利用打印服务漏洞
Stuxnet蠕虫利用这个漏洞实现在内部局域网中的传播。如图7所示,它向目标主机发送两个文件:winsta.exe、sysnullevnt.mof。后者是微软的一种托管对象格式(MOF)文件,在一些特定事件驱动下,它将驱使winsta.exe被执行。
2.4.3.4.内核模式驱动程序(MS10-073)
2.4.3.5.任务计划程序漏洞(MS10-092)
2.4.4.攻击行为
Stuxnet蠕虫查询两个注册表键来判断主机中是否安装WinCC系统(图8):
HKLM\SOFTWARE\SIEMENS\WinCC\Setup
HKLM\SOFTWARE\SIEMENS\STEP7
图8 查询注册表,判断是否安装WinCC
一旦发现WinCC系统,就利用其中的两个漏洞展开攻击:
一是WinCC系统中存在一个硬编码漏洞,保存了访问数据库的默认账户名和密码,Stuxnet利用这一漏洞尝试访问该系统的SQL数据库(图9)。
二是在WinCC需要使用的Step7工程中,在打开工程文件时,存在DLL加载策略上的缺陷,从而导致一种类似于“DLL预加载攻击”的利用方式。最终,Stuxnet通过替换Step7软件中的s7otbxdx.dll,实现对一些查询、读取函数的Hook。
图9 查询WinCC的数据库
2.4.5.样本文件的衍生关系
本节综合介绍样本在上述复制、传播、攻击过程中,各文件的衍生关系。
如图10所示。样本的来源有多种可能。
对原始样本、通过RPC漏洞或打印服务漏洞传播的样本,都是exe文件,它在自己的.stud节中隐形加载模块,名为“kernel32.dll.aslr.<随机数字>.dll”。
对U盘传播的样本,当系统显示快捷方式文件时触发漏洞,加载~wtr4141.tmp文件,后者加载一个名为“shell32.dll.aslr.<随机数字>.dll”的模块,这个模块将另一个文件~wtr4132.tmp加载为“kernel32.dll.aslr.<随机数字>.dll”。
图10 样本文件衍生的关系
模块“kernel32.dll.aslr.<随机数字>.dll”将启动后续的大部分操作,它导出了22个函数来完成恶意代码的主要功能;在其资源节中,包含了一些要衍生的文件,它们以加密的形式被保存。
其中,第16号导出函数用于衍生本地文件,包括资源编号201的mrxcls.sys和编号242的mrxnet.sys两个驱动程序,以及4个.pnf文件。
第17号导出函数用于攻击WinCC系统的第二个漏洞,它释放一个s7otbxdx.dll,而将WinCC系统中的同名文件修改为s7otbxsx.dll,并对这个文件的导出函数进行一次封装,从而实现Hook。
第19号导出函数负责利用快捷方式解析漏洞进行传播。它释放多个lnk文件和两个扩展名为tmp的文件。
第22号导出函数负责利用RPC漏洞和打印服务漏洞进行传播。它释放的文件中,资源编号221的文件用于RPC攻击、编号222的文件用于打印服务攻击、编号250的文件用于提权。
3.震网二代
在2011年,一种基于Stuxnet代码的新型的蠕虫Duqu又出现在欧洲,号称“震网二代”。 Duqu主要收集工业控制系统的情报数据和资产信息,为攻击者提供下一步攻击的必要信息。攻击者通过僵尸网络对其内置的RAT进行远程控制,并且采用私有协议与CC端进行通讯,传出的数据被包装成jpg文件和加密文件。
4.如何防范“震网III”
4.1.Microsoft Windows Search 远程命令执行漏洞
补丁地址
https://support.microsoft.com/zh-cn/help/4025687/microsoft-security-advisory-4025685-guidance-for-older-platforms
手工修复
https://portal.msrc.microsoft.com/en-us/security-guidance
其它建议
手工关闭windows search 服务。
系统中所有运行的及没有运行的系统服务都显示在“服务”窗口了,找到我们需要的“WindowsSearch”服务项。并禁用它。
4.2.Microsoft Windows LNK 快捷方式远程命令执行漏洞
补丁地址
https://support.microsoft.com/zh-cn/help/4025687/microsoft-security-advisory-4025685-guidance-for-older-platforms
手工修复
https://portal.msrc.microsoft.com/en-us/security-guidance
其它建议
做好系统移动设备的安全防护工作,确认安全文件才进行打开操作。
非常棒
厉害😄,安全专家!