Skip to content

Latest commit

 

History

History
265 lines (159 loc) · 15 KB

File metadata and controls

265 lines (159 loc) · 15 KB

八、物联网、SCADA/ICS 的网络扫描

在本章中,我们将介绍以下配方:

  • SCADA/ICS 简介
  • 使用 Nmap 扫描 SCADA/ICS
  • 使用 Nessus 扫描 SCADA/ICS 系统

SCADA/ICS 简介

用于管理和执行各种工业操作(如生产线管理控制和操作控制)的自动化技术是操作技术的一部分:

工业控制系统ICS)覆盖了运营技术领域的很大一部分,用于监控各种操作,如自动化生产、硬件系统的控制和监控、通过控制水位调节温度、,以及核设施的流量。大多数 ICS 的使用都是在要求随时可用的非常关键的系统中完成的。

用于 ICS 的硬件有两种类型,可编程逻辑控制器PLC)或离散过程控制系统DPC),它们依次由监控和数据采集SCADA系统管理。SCADA 通过提供基于接口的控制,而不是用户必须手动输入每个命令,从而允许并简化 ICS 系统的管理。这使得这些系统的管理变得强大和简单,从而实现了非常高的可用性:

主要组成部分如下:

  • SCADA 显示单元基本上是一个组件,它拥有一个交互界面,供管理员审查、验证和修改要传递给 ICS 系统的各种命令。这允许用户从远处控制 ICS 系统,而无需实际在场。例如,远程管理员可以使用 web 门户管理建筑物中所有恒温器的配置。
  • 控制单元充当 SCADA 显示单元和远程终端单元之间的桥梁。控制单元始终需要将来自远程终端单元的数据实时发送到 SCADA 显示单元。这是必要的,以便通知管理员任何可以查看和修复的故障,以确保系统的高可用性。
  • 远程终端单元****RTU可以是PLC(可编程逻辑控制器,是制造业中用于处理和执行指令的制造业标准计算机),将多个设备连接到 SCADA 网络,使它们能够在远距离进行监测和管理。RT、控制单元和 SCADA 显示单元之间的这些链路不需要采用有线网络的形式,也可以采用无线网络。

确保这些 SCADA 系统的安全非常重要,因为简单的错误配置可能会导致实际工业制造环境中的灾难。有许多开源工具可用于此目的。Nmap 就是这样一种工具,它允许用户为 SCADA/ICS 系统端口扫描编写自定义脚本。此外,分析师可以使用 Metasploit 模块在 SCADA/ICS 环境中利用这些漏洞。

以下是一些 Metasploit 模块,可用于识别和利用 SCADA/ICS 系统上的问题:

| 供应商 | 系统/部件 | Metasploit 模块 | | 7-技术 | IGSS | exploit/windows/scada/igss9_igssdataserver_listall.rb | | | | exploit/windows/scada/igss9_igssdataserver_rename.rb | | | | exploit/windows/scada/igss9_misc.rb | | | | auxiliary/admin/scada/igss_exec_17.rb | | 阿泽特赫 | 数据采集工厂 | exploit/windows/scada/daq_factory_bof.rb | | 3 秒 | CoDeSys | exploit/windows/scada/codesys_web_server.rb | | BACnet | 客户端 | exploit/windows/fileformat/bacnet_csv.rb | | | 操作员工作站 | exploit/windows/browser/teechart_pro.rb | | 贝克霍夫 | 双猫 | auxiliary/dos/scada/beckhoff_twincat.rb | | 通用电气 | D20 可编程逻辑控制器 | auxiliary/gather/d20pass.rb | | | | unstable-modules/auxiliary/d20tftpbd.rb | | 图标学 | 基因 32 | exploit/windows/scada/iconics_genbroker.rb | | | | exploit/windows/scada/iconics_webhmi_setactivexguid.rb | | 测量英尺 | 斯卡达波罗 | exploit/windows/scada/scadapro_cmdexe.rb | | 艾条 | 设备管理器 | exploit/windows/scada/moxa_mdmtool.rb | | RealFlex | RealWin SCADA | exploit/windows/scada/realwin.rb | | | | exploit/windows/scada/realwin_scpc_initialize.rb | | | | exploit/windows/scada/realwin_scpc_initialize_rf.rb | | | | exploit/windows/scada/realwin_scpc_txtevent.rb | | | | exploit/windows/scada/realwin_on_fc_binfile_a.rb | | | | exploit/windows/scada/realwin_on_fcs_login.rb | | 斯卡达泰克 | 前体 | exploit/windows/scada/procyon_core_server.rb | | 施耐德电气 | CitectSCADA | exploit/windows/scada/citect_scada_odbc.rb | | 锡尔科斯蒂米 | Winlog | exploit/windows/scada/winlog_runtime.rb | | 西门子 Technomatix | 工厂链接 | exploit/windows/scada/factorylink_cssservice.rb | | | | exploit/windows/scada/factorylink_vrn_09.rb | | Unitronics | 服务器 | exploit/exploits/windows/browser/teechart_pro.rb |

还有许多开源工具可以用来执行这些操作。PLCScan 就是这样一种工具。

PLCScan 是一种实用工具,用于使用端口扫描方法识别 PLC 设备。这将识别从特定端口接收到的数据包,以及之前记录的各种 SCADA/PLC 设备的特定签名。它在后端使用一组脚本来执行这些操作。

使用自动化脚本扫描控制系统可能是一项乏味的任务,因为它们很容易崩溃。大多数 SCADA/ICS 系统都是带有遗留软件的遗留系统,其更换成本效益不高,并且没有足够的硬件实现自动化。这导致了许多漏洞。

使用 Nmap 扫描 SCADA/ICS

Nmap 提供多个脚本,其功能还允许用户创建多个自定义脚本,以识别网络中存在的 SCADA 系统。这允许分析员创建特定的测试用例来测试 SCADA 系统。最新的 Nmap 脚本库中默认可用的一些脚本如下所示:

  • s7-info.nse:用于列举西门子 S7 PLC 设备,收集系统名称、版本、模块、类型等信息。此脚本的工作方式与 PLCScan 实用程序的工作方式类似。
  • modbus-discover.nse:枚举 SCADA Modbus从机 IDsid)并采集 sid 号、从机 ID 数据等信息。Modbus 是各种 PLC 和 SCADA 系统使用的协议。

我们将在下面的食谱中看到这些脚本的语法和用法。

准备

要完成此活动,您必须在计算机上满足以下先决条件:

  1. 您必须安装了 Nmap。
  2. 您必须具有对要在其上执行扫描的主机的网络访问权限。

要安装 Nmap,您可以按照第 2 章了解网络扫描工具中提供的说明进行操作。这将允许您下载兼容版本的 Nmap 并安装所有必需的插件。要检查您的机器是否安装了 Nmap,请打开命令提示符并键入Nmap。如果安装了 Nmap,您将看到与以下类似的屏幕:

如果看不到前面的屏幕,请将命令提示符控件移动到安装了 Nmap 的文件夹(C:\Program Files\Nmap中),重试相同的步骤。如果执行此操作后未看到屏幕,请卸下并重新安装 Nmap。

要填充要在其上执行扫描的主机上打开的端口,您需要具有对该特定主机的网络级别访问权限。检查您是否有权访问特定主机的一种简单方法是通过 ICMP 向主机发送 ping 数据包。但是,此方法仅在该网络中启用 ICMP 和 ping 时有效。在禁用 ICMP 的情况下,实时主机检测技术会有所不同。我们将在本书的后续章节中详细介绍这一点。

此外,要创建一个测试平台,请按照中提供的说明安装 Conpot,这是 Kali 操作系统上众所周知的蜜罐 https://github.com/mushorg/conpot

安装 Conpot 后,使用以下命令在系统上运行 Conpot:

sudoconpot --template default

怎么做…

执行以下步骤:

  1. 在命令提示符下打开 Nmap。

  2. 在命令提示符中输入以下语法,以获取scripts7-info.nse脚本的扫描结果:

Nmap --script s7-info.nse -p 102 192.168.75.133

您可以观察到扫描仪已将系统检测为Siemens, SIMATIC, S7-200设备。

  1. 在命令提示符中输入以下语法,以获取modbu-discover.nse脚本的扫描结果:
Nmap --script modbus-discover.nse --script-args='modbus-discover.aggressive=true' -p 502 192.168.75.133

该模块还发现该设备为Siemens, SIMATIC, S7-200

它是如何工作的。。。

这些 Nmap 脚本允许用户识别 SCADA 系统正在使用的特定端口。例如,如前一配方中所示,端口102502是可用于确定网络中是否存在 SIMATIC 设备的特定端口。分析员可以扫描整个网络的端口102502,一旦发现,他们可以执行服务扫描,以检查其中是否有任何端口正在运行任何相关的 SCADA 软件。

还有更多。。。

在任何给定实例中,如果 Nmap 中存在的默认脚本没有完成任务,则用户可以从 GitHub 或任何资源下载其他开发人员开发的自定义 Nmap 脚本,并将其粘贴到 Nmap 安装文件夹的 scripts 文件夹中以使用它们。例如,从链接克隆文件夹 https://github.com/jpalanco/Nmap-scada 用于多个其他 SCADA 系统,并将其粘贴到脚本文件夹中,以便您可以使用 Nmap 运行它们:

使用 Nessus 扫描 SCADA/ICS 系统

Nessus 有一系列插件——大约 308 页——可用于在 SCADA/ICS 设备上执行扫描。您可以在此处浏览插件系列:https://www.tenable.com/plugins/nessus/families/SCADA 。根据给定设备检查这些插件,以根据插件中存在的签名识别任何已识别的漏洞。

准备

要完成此活动,您必须在计算机上满足以下先决条件:

  1. 你必须安装 Nessus。
  2. 您必须具有对要在其上执行扫描的主机的网络访问权限。

要安装 Nessus,您可以按照第 2 章了解网络扫描工具中提供的说明进行操作。这将允许您下载 Nessus 的兼容版本并安装所有必需的插件。要检查您的机器是否安装了 Nessus,请打开搜索栏并搜索Nessus Web Client。找到并单击后,将在默认浏览器窗口中打开:

如果您确定 Nessus 已正确安装,您可以直接从浏览器使用https://localhost:8834URL 打开 Nessus Web 客户端。如果您无法找到Nessus Web 客户端,则应删除并重新安装 Nessus。Nessus 的拆卸和安装说明参见第 2 章了解网络扫描工具。如果您已找到 Nessus Web 客户端,但无法在浏览器窗口中打开它,则需要检查 Nessus 服务是否正在 Windows 服务实用程序中运行:

此外,您可以根据需要使用服务实用程序启动和停止 Nessus。为了使用命令行界面进一步确认此安装,您可以导航到安装目录以查看和访问 Nessus 的命令行实用程序:

始终建议具有管理员级别或根级别的凭据,以便扫描仪能够访问所有系统文件。与未经认证的扫描相比,这将允许扫描仪执行更深的扫描并填充更好的结果。政策合规模块仅在 Nessus 的付费版本中可用,如 Nessus Professional 或 Nessus Manager。为此,您必须从 tenable 购买激活密钥,并在设置页面中进行更新,如以下屏幕截图所示:

单击编辑按钮打开一个窗口,输入您从 tenable 购买的新激活码:

此外,您还可以安装 Conpot,如前一个配方中所述。此配方还需要安装 Kali Linux 操作系统。您可以从下载虚拟机 https://www.vmware.com/products/workstation-pro/workstation-pro-evaluation.html 和来自的 Kali Linuxhttps://www.offensive-security.com/kali-linux-vm-vmware-virtualbox-image-download/

怎么办。。

执行以下步骤:

  1. 打开 Nessus web 客户端。
  2. 使用安装期间创建的用户登录 Nessus 客户端。
  3. 点击策略页签,选择新建策略。然后,选择基本网络扫描模板:

通过提及从1-1000的范围,更改端口扫描的发现选项卡中的设置。这将允许扫描仪快速完成扫描:

  1. 确保在评估中的常规设置类别的精度选项卡中未选择执行彻底测试:

这将确保执行扫描的 PLC 或任何其他设备不会因产生的流量而受到任何影响。您还可以设置高级设置以确保生成的流量最小:

  1. 确保 SCADA 插件存在于插件选项卡中,否则获得的结果仅适用于非 SCADA 端口:

  1. 保存策略并从My Scans文件夹中选择新扫描。导航到用户定义的策略部分并选择策略:

  1. 选择策略并填写所需的详细信息。然后,启动扫描:

  1. 等待扫描完成并打开结果:

上述结果表明,扫描成功,Nessus 发现了两个 SCADA 相关漏洞:

  • ICCP/COTP(ISO 8073)协议检测:

  • Modbus/TCP 线圈访问:

它是如何工作的。。。

这些扫描结果将允许用户执行进一步的分析,以检查系统中的已知漏洞。由此,用户可以向管理员建议所需的修补程序。应始终确保所有 SCADA 连接都经过加密和端到端,否则仅限于执行点到点连接。

还有更多。。。

可以使用 Metasploit 模块执行类似的检查。打开我们在 VM 中安装的 Kali Linux,并在 Terminal 中键入以下命令:

msfconsole

这用于打开 Metasploit 控制台。还有一个名为 Armitage 的 Metasploit GUI 版本。要查找 SCADA 可用的各种 Metasploit 模块,请输入以下命令:

searchscada

如前一屏幕截图所示,加载了 Metasploit 支持的 SCADA 的各种模块。让我们尝试具体搜索 Modbus,以查看支持哪些模块:

searchmodbus

从前面的屏幕截图中,您可以使用modbusdetect使用以下语法识别 Modbus 是否在端口502上运行:

use auxiliary/scanner/scada/modbusdetect

使用show options填写所需的详细信息,以识别:

使用以下命令将 RHOSTS 设置为192.168.75.133并运行漏洞利用:

set RHOSTS 192.168.75.133

前面的屏幕截图显示模块已检测到端口502上存在 Modbus。