1.1 勒索攻击的3个途径
工控系统的结构从下至上可分为现场设备层、现场控制层、过程监控层和生产管理层。各层次保护对象和各层次具体保护资产如图1所示。
图1 工控系统结构
针对工控系统的勒索攻击,其攻击途径主要有3个:互联网侧、内部、现场侧,如图2所示。其中自互联网侧入侵到工控系统的途径又大致分为两类:一类是从互联网侧先入侵到IT网络再入侵到工控网络;一类是从互联网入侵暴露在互联网的现场仪表或控制设备。
图2 工控系统的攻击来源示意图
1.2 勒索攻击的4个阶段
从互联网侧先入侵到IT网络再入侵到工控网络的过程如图3所示。
图3 从互联网侧先入侵到IT网络再入侵到工控网络的过程示意图
从IT进入到OT区域后,按照ATT&CK的攻击链通用过程如图4所示。
图4 ATT&CK的攻击链通用过程示意图
而对于进入OT区域后的勒索攻击,需要基于图4的通用攻击链,增加数据窃取、数据加密等过程,如图5所示。
图5 基于通用供给链增加数据窃取、数据加密等过程示意图
通过对大量勒索攻击过程的分析,可以将勒索攻击分为攻击载荷投放、攻击执行、数据窃取与加密、勒索实施4个阶段,如图6所示。
图6 勒索攻击的4个阶段示意图
1.2.1 攻击载荷投递阶段
攻击载荷投递阶段常发生的攻击手法包括弱口令攻击、漏洞利用攻击、网站挂马攻击、激活工具与破解软件攻击、僵尸网络攻击、供应链攻击等。
(1)弱口令攻击。弱口令攻击即有限口令爆破攻击。计算机中涉及弱口令爆破攻击的暴露面,主要包括远程桌面弱口令、VNC弱口令、SMB弱口令、数据库管理系统弱口令、Tomcat弱口令、RPC(Remote Procedure Call)远程过程调用、phpMyAdmin弱口令、FTP(File Transfer Protocol,文件传输协议)弱口令等。
(2)漏洞利用攻击。利用系统漏洞或应用软件漏洞进行攻击,是APT攻击常用手段。而在近年来的勒索病毒投递中,也经常能看到漏洞的利用。此外还有不少勒索病毒通过已有的漏洞利用工具进行漏洞检测/勒索传播。
(3)网站挂马攻击。网站挂马攻击作为常见攻击手段,也越来越多被用于勒索传播。挂马攻击还常与其他攻击手段相伴使用——比如钓鱼邮件结合挂马攻击,诱骗用户安装病毒文件。
(4)激活工具与破解软件攻击。程序激活工具、破解软件这类程序本身开发管理不规范,开发人员鱼龙混杂。因此也成为勒索传播的主要渠道,特别是国内个人用户感染勒索病毒的主要渠道之一。
(5)僵尸网络攻击。僵尸网络也常被黑客用来传播和实施勒索。攻击者通常利用各类木马、蠕虫、漏洞利用工具抓取“傀儡机”,经营布置其僵尸网络。在需要发起攻击时,向被控端发起指令,利用被控端发起二次攻击。
(6)供应链攻击。供应链攻击隐蔽性较高、发现难度大、影响范围广、时间跨度长,经常被APT组织用来作为攻击手段。
1.2.2 攻击执行阶段
攻击执行阶段的关键步骤包括防御绕过、发现、横向移动等。
图7 防御绕过的3个阶段
阶段1:Loader(启动器),用来感染设备或主机并获得启动持久性,通过各种安全防护系统难以发现的隐蔽方式下载阶段2组件。
阶段2:建立C&C(命令与控制,Command and Control)通信,并下载阶段3需要的各类组件。
阶段3:根据工控环境启动各种攻击组件。一般情况下主要有四类组件:工具集组件(如漏洞利用工具、网络扫描、SOCK5代理、反向VPN(虚拟私人网络,Virtual Private Network)、端口转发、远程访问工具等);流量嗅探组件(比如监听并抓取Modbus、IEC 104等工控流量);数据窃取组件(比如拦截80端口流量到自己架设的WEB网站,通过提前注入WEB页面的js程序记录敏感信息);实施勒索组件。
(2)发现。勒索病毒要发现有价值的数据以及可以加密的数据,需要对工控系统的设备和软件进行充分研究,在一定程度上给黑客增添了难度。
(3)横向移动。针对企业的勒索病毒攻击,我们经常可以看到单次攻击事件导致的大量设备同时中招,甚至整个工控网络瘫痪。黑客拿下一个客户端之后,一般会利用多种攻击手段刺探工控网络情况,并横向移动到内网其他设备中。攻击者可以使用武器化的PLC在内部网络上获得初步立足点,甚至进行横向移动。攻击者不仅可以简单地连接到暴露的PLC并修改逻辑,还可以武装这些PLC并故意造成故障,将工程师引诱到他们那里。作为一种诊断方法,工程师将执行一个会危及他们机器的上传程序。这将促成攻击者在OT网络上站稳了脚跟。
图8 横向移动攻击示意图
1.2.3 数据窃取与加密阶段
进入到OT区域的勒索病毒在数据窃取的方式上与IT方式上基本没有区别,主要的方式如下。
通过使用公共网络端口、进程注入和Windows服务持久性来避免检测、只是启动出站网络连接、使用TCP端口80或443、简单恶意软件签名,如MD5哈希,文件名,使得传统的反病毒方法有效性大大降低、使用TLS加密,表现为https连接。
将“垃圾数据”添加到每个编码字符串;将合法的流量掺入到C&C通信中,从而使网络流看起来是合法的;在对C2网络请求进行编码的过程中,在每个原始字符之间插入伪随机字符;使用隐写术将通信隐藏在Bitmap、PNG、JPG、PDF文件中;使用Base64、更改后的base64、Base64 + bzip2、Base64 +反向XOR + RSA-2048来混淆与C2服务器的通信;将加密的C2数据转换为十六进制表示形式,然后再将其编码为base64;使用自定义系统对C2通信进行编码;模拟合法的即时通信软件(如MSN和Yahoo)生成的数据来逃避检测。
3、标准加密协议
用OpenSSL库加密C2通信,对C2通信进行DES加密/3DES加密/RSA编码加密/AES加密/AES256加密);使用SSL库进行C2通信,对C2通信进行XOR加密/RC2加密/RC4加密/base64编码加密/SSL加密/TLS加密;使用Plink实用程序创建SSH隧道/RDP隧道,对C2通信进行SEAL加密/RSA-2048加密;使用Caracachs来加密C2有效载荷;使用Blowfish密码来加密C2通信。
4、自定义加密协议
对C2通信进行DES加密/3DES加密/XOR加密/自定义算法加密/加法运算加密/ROR(循环右移)操作/base64编码加密/RC4编码加密/RSA编码加密/按位NOT操作;使用自定义SSL库进行C2通信;对C2通信进行FakeTLS加密;利用Microsoft CryptoAPI的自定义加密器来加密C2流量。
可以从一种协议接收C2命令并在另一种协议上做出响应。通常可以是HTTP,HTTPS和DNS流量的混合。
使用与端口关联的协议或完全不同的协议进行C2通信。
通过非标准端口进行C2通信,以绕过配置不当的代理和防火墙。
8、使用WMI与本地和远程系统进行交互,将其用作执行各种攻击手段使用WMI收集受害主机的详细信息,如搜集系统信息、搜集进程信息、查询Windows注册表、窃取凭据、检查防病毒软件状态、获取防火墙详细信息等;使用WMI将有效负载传递给远程主机,如远程控制工具;使用WMI来启动恶意软件;通过WMIEXEC执行命令;使用WMIC(WMI命令行)执行有效负载;使用WMI执行powershell.exe;利用WMI进行横向运动;使用WMIC清理痕迹;使用WMIC删除卷影副本。
使用HTTP进行命令和控制;使用HTTPS隐藏C2通信;使用FTP进行命令和控制;使用FTPS进行命令和控制;使用SMTP进行命令和控制;使用POP3进行命令和控制;使用DNS进行命令和控制;使用SMB进行命令和控制;使用SSL进行命令和控制;使用SSH进行命令和控制;使用RDP进行命令和控制;使用IRC进行命令和控制;使用Wininet API连接到C2服务器的端口80;使用的JavaScript通过HTTP或HTTPS与C2服务器进行通信;通过发送和接收电子邮件将SMTP / S和POP3 / S用于C2通信。
使用TCP进行C2通信;使用UDP进行C2通信;使用SOCKS进行通信;可以通过原始套接字进行通信;使用ICMP进行C2通信;使用英特尔®主动管理技术(AMT)局域网串行(SOL)通道进行命令和控制。
可以使用自定义命令和控制协议进行通信,而不是将命令/数据封装在现有的标准应用层协议中。实现包括模仿众所周知的协议或在TCP/IP/另一个标准网络堆栈提供的基本协议之上开发自定义协议(包括原始套接字)。
使用多层加密来执行C2通信,例如在加密协议(例如HTTPS或SMTPS)内通过隧道传输自定义加密方案。
使用其他受害者作为代理来中继命令和控制通信;使用SOCK5代理建立C2通道;使用SOCKS5代理建立C2通道;Dridex包含一个反向连接模块,可以在受害者的计算机上建立网络流量隧道,这样受感染的计算机就成了P2P僵尸网络的一部分,可以通过该僵尸网络将C2流量中继到其他受感染的主机上;使用多个代理来混淆受害者的网络流量;使用全球服务提供商的IP作为来自受害者的C2流量的代理;使用受感染的主机作为SOCKS5代理,以进行隧道和代理;Turla RPC后门包括本地UPnP RPC代理。
14、网络服务
攻击者可能会将内容(例如死点解析器)发送到具有嵌入式域或IP地址的Web服务上(如谷歌和推特)。受害者会连接到这些内容并被重新定向。
攻击者可能创建多级通道(即多个C2服务器),受害者计算机上的后门程序在不同条件或根据不同的功能连接到不同的C2服务器。例如首先回连第一个C2服务器,然后根据第一个服务器给的指令再确定连接到其他的C2服务器。
攻击者可以通过远程操作,在内部受害者系统之间使用SMB、管理员共享、远程桌面连接等方式实现横向复制文件(远程控制工具、恶意代码等)。
使用ASCII对命令和控制信息进行编码;使用Unicode对命令和控制信息进行编码;使用Base64对命令和控制信息进行编码;使用MIME对命令和控制信息进行编码;使用UTF-8对命令和控制信息进行编码。
域前置利用内容交付网络(CDN)和其他服务(具有多个域)的路由方案,来混淆HTTPS流量或通过HTTPS隧道传输的流量的真实目的地。该技术在TLS标头的SNI字段和HTTP标头的Host字段中使用不同的域名。如果两个域都来自同一个CDN,则CDN可以在解开TLS标头后路由到HTTP标头中指定的地址。该技术的一种变体,“无域”前置,利用了空白的SNI字段;即使CDN尝试验证SNI和HTTP Host字段是否匹配,因为空白SNI字段会被忽略,因此(无域)前置也可以工作。
可以通过多种编程语言(例如C,C ++,Java和VBScript)调用已公开的各种COM接口,以执行任意可执行程序。还存在特定的COM对象,它们可以直接执行某项功能(而非通过代码执行),例如创建计划任务、无文件下载/执行,以及其他攻击行为,例如特权提升和持久化。
通过DCOM,在具有适当特权的用户上下文中可以随意进行远程攻击操作,通过Office应用程序以及其他包含不安全方法的Windows对象,甚至可以直接执行shell代码。DCOM还可以在现有文档中执行宏,还可以直接通过COM创建的Microsoft Office应用程序实例直接调用动态数据交换(DDE)执行,而无需使用恶意文档。
端口试探(port knocking)是一种通过连接尝试,从外部打开原先关闭端口的方法。一旦收到正确顺序的连接尝试,防火墙就会动态打开一些特定的端口给允许尝试连接的主机。端口试探类似于一次秘密握手协议,比如一种最基本的方式:发送一定序列的UDP、TCP数据包。当运行在主机上的daemon程序捕捉到数据包以后,如果这个序列正确,则开启相应的端口,或者防火墙允许客户端通过。
DCShadow是一种通过域控制器使用的合法API来修改活动目录中的现有数据的新型攻击技术。当攻击者“拿下”域管理员权限之后,可以将这种技术应用于工作站,以绕过大多数SIEM解决方案,实现对该域的长久控制。
使用自定义程序或算法(例如LZWA)进行压缩;使用常用的压缩库(例如zlib)进行压缩;使用压缩程序(例如7zip,RAR,ZIP)进行压缩。
在一天中的某个特定时间或时间段内执行数据泄露。
以固定大小的数据块而不是整个文件泄露数据;将数据包大小限制为低于某个阈值。
通过命令和控制通道执行数据泄露。使用与命令和控制通信相同的协议将数据编码到正常通信通道中。
采用与主命令控制协议不同的协议进行数据泄漏。替代协议包括FTP,SMTP,HTTP/S,DNS,SMB或任何其他其他不用作主要命令和控制通道的网络协议。
(2)数据加密
勒索病毒常见加密方式如表1所示。
表1 勒索病毒常见加密方式
勒索病毒一般先对窃取的数据实施加密后再回传。数据回传方式常见有电子邮件、FTP、HTTP及Tor匿名网络,勒索攻击者可以选择其中任意一种方式,并将相关参数硬编码到勒索病毒代码中实现回传。
1.3 勒索攻击的4类逃逸技术
对代码进行混淆,并使用加载器间接执行,各层载荷不落地,只在内存中加载,如无文件勒索攻击病毒ProLock (2020.4.19)、WannaRen勒索软件(2020.4.14)、FTCode 勒索软件 (2020.1)、Sorebrect (2019.1.2)。其中常用的技术有如下几点。
通常使用被混淆的较为复杂的自定义加解密算法,将攻击载荷加密存放于自身文件的资源段或远程服务器中,只在运行时获取并解密,避免了载荷落地,规避安全软件检测。
使用多层攻击载荷嵌套加载,每层载荷使用不同的混淆手段在内存中加载,规避安全软件检测。
使用跨进程内存操作的API函数将其他正常进程的内存空间替换为恶意代码,将自身伪装为正常进程执行,躲避安全软件检测。
隐写术即信息隐藏的技术,将载荷和配置信息隐藏在其他信息中,或以不常见的载体来存储信息。比如加载器将PE格式的攻击载荷隐藏在图片像素中,运行时通过解析图片的像素点数据来还原载荷,以躲避检测。
通过注册自定义的异常处理函数,打乱正常的执行流程,破坏调试器功能,以此对抗分析。比如注册VEH异常处理函数,捕获int 3指令触发的异常,实现间接调用API及反调试的效果。
通过隐蔽网络通道,将控制命令、窃取的敏感数据通过正常的网络通道与正常流量一并进行传送。
来源:《工业信息安全》2023年第4期