Part1 前言
大家好,我是ABC_123。前面几期大篇幅介绍了俄乌网络战中,俄罗斯沙虫APT组织针对乌克兰多次大停电事故的详细溯源分析过程,本期ABC_123继续给大家介绍,2022年(时间上离我们较近)的第3次针对乌克兰大停电事故的分析。在时隔6年之后,俄罗斯沙虫APT组织针对OT环境的渗透技术有了较大的转变,利用了新颖的LotL技术来影响工业控制系统(ICS),接下来详细给大家讲解一下。
注:此篇文章的草稿在我的电脑里放了大半年了,一直没写出来的原因是,关于2022年这次乌克兰大停电攻击事件的公开资料实在是太少了,很多APT攻击流程没办法形成闭环。沙虫APT组织总共对乌克兰发起了3次大停电攻击事件,缺少对于2022年这次较新的事件的分析总是感觉有缺憾。终于ABC_123在最近一个月多方查找资料,将此次攻击事件形成了闭环,特意写完文章分享给大家。
第1次大停电事故:《第113篇:俄乌网络战之一,沙虫APT组织致乌克兰第1次大停电事件复盘》
第2次大停电事故:《第115篇:俄乌网络战之二,乌克兰第2次大停电事件复盘》
Part2 技术研究过程
- 攻击事件简介
在2022年12月底,俄罗斯沙虫组织针对乌克兰电网系统发起了第三次断电攻击,使受害者的变电站的断路器跳闸断电,与以往不同的是使用了LotL技术进行攻击。随后沙虫APT组织在受害者的IT环境中通过域控制器的GPO组策略批量部署了CADDYWIPER变种数据擦除恶意程序,对目标进行第二次破坏。
参与乌克兰电网攻击的APT组织一般认为是俄罗斯军事情报机构GRU(74455部队)旗下的沙虫APT组织Sandworm,自2015年以来的10年间,此APT组织一直在致力于通过APT入侵手段,攻击并破坏乌克兰国家电网。沙虫APT组织曾在2015年、2016年对乌克兰电力系统的OT环境进行了多次断电破坏,例如重写固件破坏UPS(不间断电源系统)、破坏串行以太网转换器、对SIPROTEC继电器开展DoS攻击、擦除OT系统等。2022年该组织通过针对乌克兰的高压变电站发动攻击,相比之下,2022年这次断电攻击,沙虫APT组织的攻击活动出人意料地简化了很多,转变为仅执行未授权的ICS控制命令,而恶意数据擦除器活动仅限于IT环境,利用OT环境自带的正常功能导致断电效果。
- 详细APT攻击路径
沙虫APT组织的此次攻击行动始于2022年6月,攻击者在多个月内潜伏并准备破坏性操作,最终在2022年10月10日和12日引发两起严重事件,造成关键电力系统瘫痪。2022年6月份,Sandworm团队的ELECTRUM入侵了乌克兰一家电力公司的网络,获取了面向互联网的Web权限,并部署了一个PHP脚本程序Functions.php,该程序是HTTP tunnel隧道代理程序Neo-reGeorg,获取内网访问权限。
随后,Sandworm获取到一个位于变电站OT环境中虚拟机管理程序的访问权限,该虚拟机运行着已过生命周期(EOL)版本SCADA控制软件MicroSCADA,该软件使用 IEC 104 和 IEC 101 协议管理电力公司的变电站。ELECTRUM随后编写并执行一系列“利用现有资源”(LOTL)攻击脚本,对乌克兰变电站进行控制。
2022年7月,Sandworm 团队部署了GOGETTER 隧道软件,用于与外部服务器建立基于TLS的“Yamux”C2通道,并通过基于 TLS 的隧道对 C2 通信进行代理,以提升通信的隐蔽性。为了维持GOGETTER的持久性,Sandworm团队配置了Systemd服务单元,并指定WantedBy=multi-user.target,以确保在系统开始接受用户登录时自动运行GOGETTER。同时,攻击者还将 GOGETTER 恶意软件伪装成合法或看似合法的服务,以隐藏其恶意行为。 GOGETTER Systemd 配置文件如下图所示,ExecStart指定了需要执行的程序路径。
2022年10月10日,这几个月期间,沙虫APT组织一直潜伏于该电力公司的网络中,一直到10月份使用了一组脚本在OT网络中的MicroSCADA中执行了恶意命令。Sandworm 访问了托管受害者变电站环境的 SCADA 管理实例的虚拟机监控程序,将名为 a.iso 的 ISO 映像挂在到运行 SCADA 服务器的虚拟机的CD-ROM上,该系统配置为允许插入的 CD-ROM 自动运行。a.iso包括多个可自动运行的定制脚本,如PowerShell(.ps1)、Visual Basic(.vbs)和批处理(.bat)文件,通过MicroSCADA系统的合法程序scilc.exe程序控制 SCADA 服务器,通过 IEC-60870-5-101 协议(用于串行连接)或 IEC-60870-5-104 协议(用于 TCP/IP 连接)将命令传递给变电站远程终端单元(RTU)。
由于该SCADA服务器的操作系统配置为自动运行 CD-ROM 映像,ISO 映像中的恶意VBS脚本(lun.vbs)被自动执行,该VBS脚本进一步调用了n.bat脚本,从而启动了MicroSCADA系统中的二进制文件scilc.exe。Sandworm团队借助MicroSCADA平台的SCIL-API接口,通过scilc.exe执行了命令:C:\sc\prog\exec\scilc.exe -do pack\scil\s1.txt。该命令用于执行文件s1.txt中预定义的 SCADA 指令列表。这些指令是由攻击者提前设置好的,用于向远程变电站发送未经授权的命令消息。通过这种方式,Sandworm团队能够对电力基础设施进行直接干预,执行破坏性操作。如下图所示,展示了破坏OT环境的整个执行链。
wscript.exe "d:\pack\lun.vbs",lun.vbs内容如下,表明其调用了n.bat批处理脚本:cmd /c "D:\pack\n.bat"。
该命令片段的语法包括“scilc.exe”,这是MicroSCADA软件套件的一种本地实用程序。该实用程序位于MicroSCADA 安装目录中的“\sc\prog\exec”文件夹内,与MicroSCADA使用的其他实用程序、库和资源一起。受影响的MicroSCADA 系统运行的是一个 EOL 软件版本,该版本允许默认访问SCIL-API。“-do”标志指定要执行的SCIL程序文件(图 8)。最后,该命令提供了一个名为“s1.txt”的文件,该文件位于攻击者ISO的“pack\scil\”文件夹中。我们评估“pack\scil\s1.txt”可能是一个包含攻击者在MicroSCADA中执行的 SCIL命令的文件。该文件在分析时无法恢复。
2022年10月12日,沙虫组织在IT环境中,通过获取的域管权限,使用名为TANKTRAP的PowerShell工具,通过两个Windows组策略(GPO)批量部署并运行名为CaddyWiper的恶意擦除工具,TANKTRAP与其他破坏性工具一起使用,包括NEARMISS、SDELETE、PARTYTICKET和CADDYWIPER。他们通过GPO组策略将CaddyWiper的可执行文件msserver.exe从一个域控服务器复制到受害主机的本地硬盘,并利用GPO部署和执行该恶意软件。目的是清除与OT(操作技术)能力相关的文件、映射驱动器以及物理驱动器分区。此外,他们还修改ACL条目,并通过GPO配置了定时任务,在预定时间自动执行CaddyWiper,从而实现对目标系统的破坏性操作。通过后期的溯源分析,存在两个Sandworm TANKTRAP GPO 1与Sandworm TANKTRAP GPO 2两个CPO组策略文件,两个TANKTRAP GPO从一个预先准备的目录将 CADDYWIPER 部署到系统中,命名为msserver.exe。然后,CADDYWIPER被作为计划任务在预定时间执行。
- 后门程序Industroyer2分析
沙虫APT组织在历年入侵乌克兰电网过程中使用了多款破坏软件,包括BlackEnergy3、Industroyer(又称CrashOverride)。其中,最初的Industroyer恶意软件是在2016年12月针对乌克兰电力公司的网络攻击中被发现的,也是首次在野外发现的可以直接与电网设备交互以造成停电的恶意软件。Industroyer采用了模块化编程设计,它使用四种工业控制协议(IEC 104模块、IEC 101 模块、OPC DA模块、IEC 61850模块),依据目标环境向相应协议的断路器发送命令导致断电,从而快速部署到不同的工业系统中执行破坏操作。同时会禁用保护继电器的安全设备,让电力系统在出现危险电气条件(过电流、过电压)时无法自动断电,从而在操作员重新送电时,可能导致设备在异常状态下继续工作,最终发生灾难性物理损坏。
Industroyer2 是一个约 37Kb 的单一可执行文件,最初被发现时名为108_100.exe。它的执行是通过被攻击的域控制器GPO部署的,其中创建了一个计划任务来加载该二进制文件。该恶意软件旨在针对特定的工业控制系统(ICS),这些系统利用 IEC 60870-5-104 协议进行 SCADA 通信。如下图所示,分析二进制文件发现了预编译的硬编码 IP 地址和端口,表明该后门尝试通过访问若干硬编码的IP地址的端口 2404 与工业控制系统(ICS)软件进行通信。这意味着攻击者至少对其目标有一定的了解。
在2022年的攻击事件中,使用了Industroyer V2更新版本,相比之下,此更新版本的恶意软件,已经不具有先前Industroyer中的恶意擦除模块。新版本的Industroyer能够像原始版本一样向断路器发送命令以触发停电,能够向保护继电器发送命令。还试图使用数据擦除软件摧毁乌克兰人用来控制电网的计算机,阻止使用电力公司的计算机快速恢复供电。根据ESET的推断,模块化设计的Industroyer2恶意软件完全可以重新设计后攻击IEC-104(乌克兰电网使用的工控协议)之外的不同协议,包括美国变电站使用的协议。APT参与者的工具具有模块化架构,使网络参与者能够对目标设备进行高度自动化的攻击。模块与目标设备交互,使低技能网络参与者的操作能够模仿高技能参与者的能力。
- MicroSCADA系统简介
MicroSCADA 是日立能源的一款产品,已在超过 10,000个变电站中部署,管理和监控电力在电网、过程工业、医院、海港和数据中心等关键基础设施中的分配。SCIL 是一种为 MicroSCADA 控制系统设计的高级编程语言,可以操作系统及其功能。SCIL 程序通常是基于文本的语句,可以由命令、对象、变量、对预定义函数的调用和表达式组成。SCIL 程序可以通过多种方式执行,例如工程师/操作员在 MicroSCADA 系统中点击按钮或图像、计划或过程派生的更改,或者在这种情况下手动执行。
由于沙虫APT组织进行了一定的反取证,导致安全专家无法识别提取攻击时的SCIL 命令集s1.txt,但推测可能是打开受害者变电站环境中的断路器的命令。SCIL命令将操作MicroSCADA 服务器通过 IEC-60870-5-104 协议(用于 TCP/IP 连接)或 IEC-60870-5-101 协议(用于串行连接)将命令转发给变电站 RTU。
- 恶意擦除工具CaddyWiper分析
对于Windows ICS系统,使用Industroyer2和CaddyWiper的组合,而在Linux和Solaris系统上,则使用ORCSHRED、SOLOSHRED和AWFULSHRED。沙虫APT组织在多次针对乌克兰电网的攻击行动中,每次都会使用数据擦除恶意软件,旨在使数据无法恢复并在环境中造成进一步的干扰,同时擦除取证痕迹。WhisperGate 是第一个清除工具,它曾对乌克兰政府机构进行了攻击。WhisperGate之后不久,HermeticWiper 和IsaacWiper相继出现,CaddyWiper 是第四个攻击乌克兰目标的清除工具。
在2022年这次攻击中,沙虫APT组织使用了名为CaddyWiper破坏性擦除工具。该工具于2022年3月俄乌战争时被首次曝光,使用C语言编写的32位程序。一旦攻击者获取DC域控服务器权限,会通过Microsoft组策略对象(GPO)将自身部署到域内每台机器上,最大程度传播恶意擦除软件,实现最大程度的破坏。大小仅为9kb,一旦以管理员身份执行,系统将立即崩溃,通常在5到20秒之间。一旦被调用执行,将尝试清除所有文件,然后再清除任何映射驱动器。接着,它将尝试清除物理驱动器分区本身。与以往不同的是,沙虫APT组织在此次攻击活动中,仅将次破坏工具用于受害者的IT环境中,并没有使用它去破坏虚拟机监控程序或者SCADA系统。
在本次入侵活动中,CaddyWiper恶意软件会调用系统库 netapi32.dll 中的 DsRoleGetPrimaryDomainInformation()函数确认设备是否为域控制器,所在的计算机如果是DC域控制器,则终止运行不会进行数据擦除破坏。如果不是DC计算机,CaddyWiper会开始清除流程,擦除执行流程通过访问“C:\Users”并枚举目录及子目录中的所有文件,以避免在清除过程完成之前破坏操作系统。然后修改本地管理员的ACL条目,从而拒绝后期溯源人员的分析取证操作。然后,同时调用Windows API WriteFile函数通过空字节覆盖这些枚举出来的文件。随后它会使用递归方式,CaddyWiper 尝试以递归方式破坏所有其他存储驱动器上的所有文件,从“D\:”开始,一直到“Z\:”。
在所有文件被清零后,清除工具将尝试覆盖所有逻辑分区,从“//./PHYSICALDRIVE9”开始,一直到“//./PHYSICALDRIVE0”。如果这些分区存在,CaddyWiper 将逐个覆盖分区的前 780 个字节。该清除工具的原始版本会覆盖前 1920 个字节。由于“//./PHYSICALDRIVE0”也是 MBR 的位置,覆盖会导致崩溃并无法加载操作系统,通过清除主引导记录(MBR)和 Windows 启动加载程序导致主机崩溃。包括 Windows MBR(主引导记录)和 GPT(全局唯一标识符分区表)。如下图所示,则是虚拟机环境下,CaddyWiper软件破坏导致蓝屏重启的真实截图。
Part3 总结
1. 沙虫APT组织在本次攻击中,使用了CaddyWiper数据擦除软件及其他技术,进行了成功的反取证,导致众多安全公司在相应的受害者主机中,未能提取有效的恶意样本,进而导致很多溯源工作无法形成闭环。
2. 沙虫APT组织攻击策略发生了重大转变,他们开始专注于使用OT级别的LotL技术(利用现有的资源实施攻击)。在本次APT攻击中,他们利用了MicroSCADA系统软件中自带的合法可执行程序进行攻击,触发变电站的断路器,导致乌克兰的关键基础设施停电。由于LoLBins属于合法程序,甚至是杀软的白名单程序,因而防御方往往会忽略这些白名单路径,从而偏离正确的溯源方向。通过使用这类轻量级且通用的工具,Sandworm不仅减少了攻击所需的时间和资源消耗,还提高了其操作的隐蔽性。
3. 俄罗斯的进攻性OT武器库正在日益成熟,本地攻击案例,展示了该APT组织有能力针对其他SCADA 系统和使用不限于MicroSCADA软件和 SCIL的编程语言开发能力实现此次破坏操作,具有跟踪新型的OT攻击技术、OT攻击武器的研发能力、利用不同类型的OT基础设施发动攻击的能力。此次攻击的 OT 组件可能在短短两个月内开发完成,由此推断,沙虫组织能够快速实现针对全球不同原始设备制造商(OEM)的OT系统的攻击能力及武器研发能力。所以也提醒我们需要加强工控系统的安全防护。
公众号专注于网络安全技术,包括安全咨询、APT事件分析、红队攻防、蓝队分析、渗透测试、代码审计等,99%原创,敬请关注。
Contact me: 0day123abc#gmail.com
(replace # with @)