发布网友 发布时间:2022-04-24 00:27
共2个回答
热心网友 时间:2023-10-15 12:49
由于Stuxnet蠕虫病毒是首个针对工业控制系统编写的破坏性病毒,对大型工业、企业用户存在一定的风险,所以,病毒防护专家给企业用户提出如下安全防护建议,以提高企业抵御未知安全风险的能力:
在终端设备上开启防火墙功能。
为终端设备上所有的应用系统安装最新的补丁程序。
在终端上安装防病毒系统,设置为实时更新病毒库,并将病毒库升级到最新版本。
在终端上的用户设置最小用户权限。
在打开附件或通过网络接收文件时,弹出安全警告或提示。
在打开网络链接时,发出安全警告或提示。
尽量避免下载未知的软件或程序。
使用强口令,以保护系统免受攻击。
两个月前,赛门铁克首次披露了W32.Stuxnet针对工业生产控制系统(ICS) 进行攻击,如应用于管道和核动力工厂的控制系统。读者可参见赛门铁克2010年7月19日的博客– “W32.Stuxnet 攻击微软零日漏洞利用USB设备大肆传播”。
2010年9月29日,我们还将在Virus Bulletin 会议上发布一篇包含W32.Stuxnet详尽技术细节的论文。同时我们也注意到,最近非常多的人开始对Stuxnet感染系统且不易检测的事情表示关注。
由于Stuxnet针对某个特定的工业生产控制系统进行攻击,而这些行为不会在测试环境中出现,因此在测试环境下观察到的病毒行为不全面,很可能产生误导。事实上,运行后,Stuxnet会立即尝试进入一个可编程逻辑控制器(PLC) 的数据块—DB890。这个数据块其实是Stuxnet自己加的,并不属于目标系统本身。Stuxnet 会监测并向这个模块里写入数据,以根据情况和需求实时改变PLC的流程。
在这篇博客里,我们会深入探讨Stuxnet的PLC感染方式和Rootkit功能,特别是以下几个方面:
它如何选择作为攻击目标的工业生产控制系统;感染PLC代码块的方法;注入PLC的恶意代码;在被感染Windows机器中的PLC Rootkit代码。 这四点我们会分开讲,因为用来实现这些目的的代码差异很大。
Stuxnet的目的是通过修改PLC来改变工业生产控制系统的行为,包括拦截发送给PLC的读/写请求,以此判断系统是否为潜在的攻击目标;修改现有的PLC代码块,并往PLC中写入新的代码块;利用Rootkit功能隐藏PLC感染,躲避PLC管理员或程序员的检测。这些任务之间差别很大,比如,在被感染的Windows 机器中隐藏感染代码使用的是标准的C/C++ 代码,而Stuxnet 试图在工业生产控制系统及PLC中执行的恶意代码则是用MC7字节码写的。MC7 是PLC 环境中运行的一种汇编语言,并常用STL 进行编写。
在讨论Stuxnet攻击PLC的技术之前,让我们先来看看PLC是如何访问和编写的。
要进入PLC, 首先需要安装特殊的软件;Stuxnet 会专门针对编写PLC某些模块的WinCC/Step 7软件进行攻击。安装这些软件后,程序员可以通过数据线连接PLC,以访问其中的内容,重新配置PLC,下载程序至PLC,或调试之前加载的代码。一旦PLC被配置和编译后,Windows机器就可以断开和PLC的联系了,PLC会自行运行。为了使您有一个更直观的感受,下图显示了在实际操作中,实验室里一些基本的设备配置:
下面的截图显示了Step7 STL编译器中Stuxnet恶意代码的一部分。其中,编写Stuxnet功能代码块的MC7代码的开始部分是可视的;下面显示的代码来自于反汇编后的FC1873模块。
Step 7 软件使用库文件s7otbxdx.dll 来和PLC通信。当Step7 程序准备进入PLC时,它会调用该DLL文件中不同的例程。例如,如果一个代码块需要用Step 7从PLC中读出,那么,例程s7blk_read就会被调用到。s7otbxdx.dll中的代码会进入PLC, 读出其中的代码,并把它传回Step 7程序,如下图所示:
现在让我们看看当Stuxnet是如何进入PLC的。运行后,Stuxnet会将原始的s7otbxdx.dll文件重命名为s7otbxsx.dll。然后,它将用自身取代原始的DLL文件。现在,Stuxnet就可以拦截任何来自其他软件的访问PLC的命令。
被Stuxnet修改后的s7otbxdx.dll 文件保留了原来的导出表,导出函数为109个,这就令Stuxnet可以应付所有相同的请求。大部分导出命令会转发给真正的DLL,即重命名后的s7otbxsx.dll,并不会出现什么难对付的状况;事实上,109种导出形式中的93种都会照这样处理。然而,真正的“诡计”使用在剩下的16种导出命令中。这16种导出不会被简单的转发,而是被改动后的DLL 拦截了。被拦截的导出命令为在PLC中读、写、定位代码块的例程。通过拦截这些请求,Stuxnet 可以在PLC 管理员没有察觉的情况下,修改发送至PLC 或从PLC返回的数据。同时,通过利用这些例程,Stuxnet 可以将恶意代码隐藏在PLC 中。
为了更好的了解Stuxnet 如何进入和感染PLC,我们先来看看各种类型的数据。PLC 会处理由管理员加载到PLC的代码和数据。这里,我们将简要介绍一下最常见的模块和他们的功能:
数据模块(DB)包含了程序相关的数据,比如数字,结构等。系统数据模块(SDB) 包含了PLC 的配置信息; 它们是根据连接到PLC 的硬件模块的数量/种类设立的。组织模块(OB) 是程序的入口。他们由CPU 循环执行。针对Stuxnet, 有两个特别需要的OB:OB1 是PLC 程序的入口。它没有特别的时间要求,总是循环执行。OB35 是一个标准的“看门狗”模块,系统会每100ms执行一次。这个功能可能包含了所有用于监控紧要输入的逻辑,以达到立即响应,执行功能的目的。功能模块(FC)都是标准的代码快。它们包含了会被PLC 执行的代码。一般说来,OB1模块会引用至少一个FC 模块。下面的部分会详细讲述之前提到的威胁的四大方面。
热心网友 时间:2023-10-15 12:49
先去打开腾讯智慧安全页面热心网友 时间:2023-10-15 12:49
由于Stuxnet蠕虫病毒是首个针对工业控制系统编写的破坏性病毒,对大型工业、企业用户存在一定的风险,所以,病毒防护专家给企业用户提出如下安全防护建议,以提高企业抵御未知安全风险的能力:
在终端设备上开启防火墙功能。
为终端设备上所有的应用系统安装最新的补丁程序。
在终端上安装防病毒系统,设置为实时更新病毒库,并将病毒库升级到最新版本。
在终端上的用户设置最小用户权限。
在打开附件或通过网络接收文件时,弹出安全警告或提示。
在打开网络链接时,发出安全警告或提示。
尽量避免下载未知的软件或程序。
使用强口令,以保护系统免受攻击。
两个月前,赛门铁克首次披露了W32.Stuxnet针对工业生产控制系统(ICS) 进行攻击,如应用于管道和核动力工厂的控制系统。读者可参见赛门铁克2010年7月19日的博客– “W32.Stuxnet 攻击微软零日漏洞利用USB设备大肆传播”。
2010年9月29日,我们还将在Virus Bulletin 会议上发布一篇包含W32.Stuxnet详尽技术细节的论文。同时我们也注意到,最近非常多的人开始对Stuxnet感染系统且不易检测的事情表示关注。
由于Stuxnet针对某个特定的工业生产控制系统进行攻击,而这些行为不会在测试环境中出现,因此在测试环境下观察到的病毒行为不全面,很可能产生误导。事实上,运行后,Stuxnet会立即尝试进入一个可编程逻辑控制器(PLC) 的数据块—DB890。这个数据块其实是Stuxnet自己加的,并不属于目标系统本身。Stuxnet 会监测并向这个模块里写入数据,以根据情况和需求实时改变PLC的流程。
在这篇博客里,我们会深入探讨Stuxnet的PLC感染方式和Rootkit功能,特别是以下几个方面:
它如何选择作为攻击目标的工业生产控制系统;感染PLC代码块的方法;注入PLC的恶意代码;在被感染Windows机器中的PLC Rootkit代码。 这四点我们会分开讲,因为用来实现这些目的的代码差异很大。
Stuxnet的目的是通过修改PLC来改变工业生产控制系统的行为,包括拦截发送给PLC的读/写请求,以此判断系统是否为潜在的攻击目标;修改现有的PLC代码块,并往PLC中写入新的代码块;利用Rootkit功能隐藏PLC感染,躲避PLC管理员或程序员的检测。这些任务之间差别很大,比如,在被感染的Windows 机器中隐藏感染代码使用的是标准的C/C++ 代码,而Stuxnet 试图在工业生产控制系统及PLC中执行的恶意代码则是用MC7字节码写的。MC7 是PLC 环境中运行的一种汇编语言,并常用STL 进行编写。
在讨论Stuxnet攻击PLC的技术之前,让我们先来看看PLC是如何访问和编写的。
要进入PLC, 首先需要安装特殊的软件;Stuxnet 会专门针对编写PLC某些模块的WinCC/Step 7软件进行攻击。安装这些软件后,程序员可以通过数据线连接PLC,以访问其中的内容,重新配置PLC,下载程序至PLC,或调试之前加载的代码。一旦PLC被配置和编译后,Windows机器就可以断开和PLC的联系了,PLC会自行运行。为了使您有一个更直观的感受,下图显示了在实际操作中,实验室里一些基本的设备配置:
下面的截图显示了Step7 STL编译器中Stuxnet恶意代码的一部分。其中,编写Stuxnet功能代码块的MC7代码的开始部分是可视的;下面显示的代码来自于反汇编后的FC1873模块。
Step 7 软件使用库文件s7otbxdx.dll 来和PLC通信。当Step7 程序准备进入PLC时,它会调用该DLL文件中不同的例程。例如,如果一个代码块需要用Step 7从PLC中读出,那么,例程s7blk_read就会被调用到。s7otbxdx.dll中的代码会进入PLC, 读出其中的代码,并把它传回Step 7程序,如下图所示:
现在让我们看看当Stuxnet是如何进入PLC的。运行后,Stuxnet会将原始的s7otbxdx.dll文件重命名为s7otbxsx.dll。然后,它将用自身取代原始的DLL文件。现在,Stuxnet就可以拦截任何来自其他软件的访问PLC的命令。
被Stuxnet修改后的s7otbxdx.dll 文件保留了原来的导出表,导出函数为109个,这就令Stuxnet可以应付所有相同的请求。大部分导出命令会转发给真正的DLL,即重命名后的s7otbxsx.dll,并不会出现什么难对付的状况;事实上,109种导出形式中的93种都会照这样处理。然而,真正的“诡计”使用在剩下的16种导出命令中。这16种导出不会被简单的转发,而是被改动后的DLL 拦截了。被拦截的导出命令为在PLC中读、写、定位代码块的例程。通过拦截这些请求,Stuxnet 可以在PLC 管理员没有察觉的情况下,修改发送至PLC 或从PLC返回的数据。同时,通过利用这些例程,Stuxnet 可以将恶意代码隐藏在PLC 中。
为了更好的了解Stuxnet 如何进入和感染PLC,我们先来看看各种类型的数据。PLC 会处理由管理员加载到PLC的代码和数据。这里,我们将简要介绍一下最常见的模块和他们的功能:
数据模块(DB)包含了程序相关的数据,比如数字,结构等。系统数据模块(SDB) 包含了PLC 的配置信息; 它们是根据连接到PLC 的硬件模块的数量/种类设立的。组织模块(OB) 是程序的入口。他们由CPU 循环执行。针对Stuxnet, 有两个特别需要的OB:OB1 是PLC 程序的入口。它没有特别的时间要求,总是循环执行。OB35 是一个标准的“看门狗”模块,系统会每100ms执行一次。这个功能可能包含了所有用于监控紧要输入的逻辑,以达到立即响应,执行功能的目的。功能模块(FC)都是标准的代码快。它们包含了会被PLC 执行的代码。一般说来,OB1模块会引用至少一个FC 模块。下面的部分会详细讲述之前提到的威胁的四大方面。
热心网友 时间:2023-10-15 12:49
先去打开腾讯智慧安全页面