执行摘要
在 Cyfirma,我们致力于提供当前流行的威胁以及针对组织和个人的恶意实体所采用的策略的最新见解。本报告对 Konni RAT 进行了全面分析,Konni RAT 是一种针对 Windows 系统的复杂远程访问木马 (RAT)。Konni RAT 采用多阶段攻击过程,结合使用批处理文件、PowerShell 脚本和 VBScript 来窃取敏感数据、保持持久性并执行其他有效负载。Konni RAT 采用的主要策略包括利用 Windows 资源管理器限制、混淆文件路径、动态生成和编码 URL 以及使用临时文件擦除其活动痕迹。该恶意软件有效地将关键数据(例如系统信息和用户文件)窃取到远程服务器。通过其模块化设计和先进的规避策略,Konni RAT 对系统安全构成了重大风险,有效地逃避了检测并阻碍了防御者的分析工作。
介绍
Konni RAT 是一种针对性极强的恶意软件,以其先进的间谍和数据泄露功能而闻名。此远程访问木马 (RAT) 旨在悄无声息地渗透到 Windows 环境、收集敏感信息并在受感染的系统上保持长期持久性。Konni RAT 使用分层方法,利用多个脚本和可执行文件执行其恶意操作,包括数据收集、有效负载执行和敏感文件泄露。
该恶意软件利用 Windows 操作系统的默认功能,例如 Windows 资源管理器的文件扩展名隐藏和 LNK 文件中 260 个字符的限制,使其能够执行未被发现的命令。它还采用了基于时间戳的 URL 生成和混淆等动态技术,使得恶意软件在静态分析期间难以检测到。本报告研究了 Konni RAT 攻击的各个阶段,从初始感染到数据泄露,并详细介绍了其关键的规避技术。该分析旨在深入了解 Konni RAT 的功能及其对系统安全的影响,并提出加强对此类高级持续性威胁的防御建议。
主要发现
-
该恶意软件利用文件扩展名隐藏和 LNK 文件中 260 个字符的限制来运行未被发现的命令。
-
Konni RAT 使用批处理文件、PowerShell 脚本和 VBScript 执行不同的攻击阶段。
-
它使用加密的 URL 将系统和用户数据泄露到远程服务器。
-
该恶意软件使用复杂的变量和动态 URL 来避免被检测到。
-
Konni RAT 通过修改注册表和使用 VBScript 来保持持久性。
-
它会在执行期间删除文件和命令以留下最少的痕迹。
-
它伪装成无害文件(如 .docx 文档),然后执行恶意操作。
-
该恶意软件收集敏感的用户和系统信息,然后将其泄露到远程服务器。
ETLM 归因
Konni RAT 于 2014 年首次被发现,是一种与朝鲜网络间谍组织 APT37 有关的远程访问木马 (RAT)。它曾被用于针对俄罗斯、东亚、欧洲和中东的政治组织和实体的活动。
该恶意软件以其复杂的功能而闻名,包括数据泄露、命令执行、通过 UAC 绕过和注册表修改保持持久性,以及与其命令和控制 (C2) 服务器的加密通信。Konni RAT 旨在适应系统状态,采用混淆和隐身技术来逃避检测并最大限度地发挥其效力。
最近的攻击活动展示了 Konni RAT 不断演变的策略,例如将其嵌入后门软件安装程序中或利用启用了恶意宏的 Word 文档来获取访问权限。2024 年 2 月,它被嵌入俄罗斯外交部用于攻击敏感系统的软件中;而 2023 年 11 月,网络钓鱼攻击利用恶意文档来部署恶意软件,使攻击者能够窃取数据并执行远程命令。
威胁形势:
Konni RAT 在高度动态的威胁形势下运作,利用社会工程策略和恶意文档渗透系统。最近的活动已经证明了其适应不断发展的网络安全措施的能力,使用模糊脚本和加密通信渠道来避免检测。
Konni RAT 周围的威胁形势凸显了现代网络威胁日益增长的复杂性和适应性。作为一种高度复杂的远程访问木马 (RAT),Konni RAT 利用一系列先进技术来绕过传统安全措施并逃避检测。最近有迹象表明威胁行为者的行动正在不断发展,这表明 Konni RAT 不断发展,拥有旨在增强其隐蔽性和有效性的新功能。这凸显了主动和自适应防御策略的迫切需求,因为网络犯罪分子正在不断改进他们的技术以绕过安全措施。像 Konni RAT 这样的威胁的持久性和不断发展的特性凸显了持续警惕、全面监控和强大的事件响应机制在减轻与此类恶意软件家族相关的风险方面的重要性。
Konni RAT 分析
该恶意软件以 zip 压缩文件的形式进行传播,作为有效载荷的载体:
文件名:folder.zip
文件大小:5.69 MB (5969884 字节)
MD5:cae6a87fd9ab544e5ccceb38f35c201e
SHA256:61ce43ea1c2ddafb23ee8ee083417fd375bbefce200f9bb48166af7c67df4d3c
最后修改时间:2025-02-24
该 zip 存档包含一个 .LNK 文件以及两个 PDF 文件:
1.2024년 귀속 연말정산 안내문_세한.docx.lnk
(MD5: a2785ec65622217be80174b887b1eb06)
2.첨부1. 24년 귀속 편리한 연말정산 사용자매뉴얼(근로자용).pdf
(MD5: 80567b8f7d0195245912f394f0ca3fde)
3.첨부2. 24년 귀속 편리한 연말정산 사용자매뉴얼(사업자용).pdf
(MD5: 3a3000d74350ca5d5c9cd84898799c21)
档案中包含的 PDF 文件作为掩护,使档案看起来合法,而 LNK 文件是主要的恶意负载。
文件分析 | |
文件名 | 2024년 귀속 연말정산 안내문_세한.docx.lnk |
文件大小 | 1.54 MB(1610903 字节) |
已签名 | 未签名 |
MD5 | a2785ec65622217be80174b887b1eb06 |
SHA-256 | b81513f0f8d3db382bb8f931bf2b7a0d4f26f74cfcf60b5d889de87ef2f1d543 |
上次修改 | 2025 年 2 月 24 日 |
快捷方式文件 (2024년 귀속 연말정산 안내문_세한.docx.lnk) 属性中的“目标”字段显示 cmd.exe 的路径:
LNK 文件的属性
在这种情况下,威胁行为者利用Windows 资源管理器 shell 对话框的字符限制来隐藏 LNK 文件要执行的实际命令。默认情况下,Windows 资源管理器 shell 对话框在文件路径或某些字段(例如快捷方式属性中的“目标”字段)中最多显示 260 个字符。在这个特定的 LNK 文件中,目标字段包含 25 个字符(%windir%system32cmd.exe),后跟 235 个空格字符,这有效地隐藏了文件打算执行的实际命令。
下面的截图显示了两件事:隐藏的命令行参数以及 LNK 文件如何显示为 .docx 文件,从而误导用户认为它是良性的:
LNK 文件中隐藏的命令行参数
该命令行参数随后触发混淆的 PowerShell 命令的执行,然后启动下一阶段的恶意活动。
行为和代码分析
第一阶段执行:命令执行
该命令首先执行 cmd.exe,在 Windows PowerShell 目录及其子目录中搜索 .exe 文件。然后,它通过搜索字符串“rshell.exe”(可执行文件名称的部分匹配)来筛选结果,并验证是否存在任何匹配的文件。找到匹配的 PowerShell 可执行文件后,该命令会将参数传递给已识别的 PowerShell 实例以进一步执行:
搜索 Powershell 可执行文件
第二阶段执行:PowerShell脚本执行
-
在第二阶段,PowerShell通过cmd.exe执行,脚本作为参数传递给它。PowerShell脚本中的语句“$devote = repetition;”调用了“repetition”函数:
重复功能
重复函数负责确定系统中特定 .lnk 文件的位置。它首先调用追逐函数,该函数使用“Get-Location”检索当前目录。然后,它以当前目录 ($preaching) 作为参数调用分离函数,该函数在该目录中搜索 .lnk 文件。
如果未找到 .lnk 文件,则该过程将回退到搜索系统的临时目录。但是,在当前情况下不会发生此回退。该函数最终返回 .lnk 文件的路径(working-directoryfolder2024년 귀속 연말정산 안내문_세한.docx.lnk),该路径分配给 $devote。此路径对于后续的文件操作至关重要,并成为脚本中进一步操作的源文件。
-
接下来,语句 $uneasiness = wickedness -distant $devote; 调用 wickedness 函数,并将 $devote(代表 .lnk 文件的路径)作为其参数传递。
邪恶函数
wickedness 函数通过删除最后四个字符 (.lnk) 来修改此路径,并返回新路径 (working-directoryfolder2024년 귀속 연말정산 안내문_세한.docx)。
-
语句 friend -thousand $devote -harangue 0x000021B8 -deformed 0x000FDB3A -greatness 0x2B -measuring $uneasiness; 调用 friend 函数。
友元函数
该函数打开.lnk 文件 ($devote),从指定偏移量 ($deformed) 开始读取数据,将数据与特定值 ($greatness) 进行异或运算,并将结果写入 $uneasiness 路径 (working-directoryfolder2024년 귀속 연말정산 안내문_세한.docx),即.docx 文件。
使用& $uneasiness;语句,执行并打开新创建的.docx文件。此.docx文件不是恶意的;但是,它充当了脚本执行的其他恶意进程的掩护。
文档(docx 文件)
-
此外,语句“$accompany = morally;”调用 morally 函数,将路径 C:UsersPublicdisappear.cab 分配给变量 $accompany。
道德功能
然后,脚本中的语句“friend -thousand $devote -harangue 0x000FFCF2 -deformed 0x00013CDE -greatness 0x72 -measuring $accompany;”调用了 friend 函数。这次,friend 函数从 $devote 文件(当前工作目录中的 LNK 文件)读取数据,从指定的偏移量(0x000FFCF2)开始,通过对字节与 $greatness(0x72)进行异或运算对其进行操作,并将结果写入位于 $accompany 的 .cab 文件。这实际上会创建新数据并将其写入 C:UsersPublic 目录中的 Expensive.cab。
-
脚本继续执行,并通过语句“pregnant -hearing $devote;”调用pregnant函数删除LNK文件。
该脚本利用了 Microsoft Windows 的默认行为,即使禁用了“隐藏已知文件类型的扩展名”选项,也不会显示 .lnk 文件扩展名。通过利用此行为,脚本可以有效地删除 LNK 文件,留下同名的 .docx 文件。此策略隐藏了 LNK 文件的存在,并让受害者产生错觉,认为 .docx 文件与最初从压缩档案中提取的文件相同。
-
接下来,语句“$widow = familiar;”调用 familiar 函数,该函数返回公共用户配置文件中的 Documents 目录的路径(C:UsersPublicDocuments)并将其分配给 $widow 变量。
-
紧接着,脚本执行语句“weaving -sweeten $accompany -chosen $widow;”,通过调用编织函数将disappear.cab文件(C:UsersPublicdisappear.cab)的内容提取到Documents文件夹(C:UsersPublicDocuments)中。
-
这实际上执行了 expand.exe (C:WindowsSystem32expand.exe),它执行提取过程以解压指定 .cab 文件的内容:
提取的文件
提取后,脚本使用语句“pregnant -hearing $accompany;”从公共目录(C:UsersPublicdisappear.cab)中删除CAB文件。此语句调用之前用于删除LNK文件的pregnant函数,从而确保删除残留痕迹。
-
最后,PowerShell 脚本使用语句“$hail = sulphide;”和“& $hail;”执行位于 Documents 目录(C:UsersPublicDocuments)中的“start.vbs”文件,从而调用 sulphide 函数:
在此阶段,脚本会清除先前活动的痕迹,从 .cab 文件中提取其他有效负载,并执行 VBScript(start.vbs)以执行进一步的恶意操作。此复杂的攻击将多个恶意组件部署到 Documents 文件夹中,删除 .lnk 和 .cab 文件等证据,并通过 VBScript 继续破坏系统。
第三阶段执行:VBScript
在此阶段,VBScript 充当恶意软件攻击的一个组件,旨在进一步破坏系统,同时保持隐蔽性。该脚本首先使用 GetObject 创建 Internet Explorer Shell Windows COM 对象的实例,提供与 Windows Shell 交互的方法。然后,它通过 Item() 检索活动的 shell 项,使脚本能够间接执行命令,例如运行批处理文件。通过动态计算脚本的目录,它确保了灵活性并避免了硬编码路径,从而使恶意软件能够适应不同的环境。
start.vbs 脚本
通过 ShellExecute 方法执行的批处理文件 (9315288.bat) 包含旨在部署更多有效负载和修改系统设置的其他恶意指令。
第四阶段执行:(批量闪电战)
VBScript 执行的批处理文件执行一系列条件和迭代操作,旨在保持持久性、执行额外的有效载荷以及清理痕迹。
首先,批处理文件 9315288.bat 使用 pushd “%~dp0” 将工作目录切换到其自己的位置。
9315288.bat
如果文件 40137808.bat 存在(本例中确实存在),它会通过将 VBScript(start.vbs)添加到注册表的 Run 键来建立持久性机制,确保它在系统启动时执行。然后它会执行 40137808.bat 和 32791673.bat,最后删除 40137808.bat 以减少其存在的证据。
接下来,脚本检查文件 f.txt 是否存在。如果未找到 f.txt,则进入循环,调用 45150722.bat 并暂停 57 秒,然后重新检查 f.txt 是否存在。此循环持续到创建 f.txt。一旦找到 f.txt,脚本将退出循环并删除 f.txt 以进行清理。
由于 f.txt 最初不存在,因此批处理脚本将继续在循环中执行。
此批处理文件演示了一种结构化方法,通过执行多个有效载荷并确保其完成,同时尽量减少痕迹,从而保持持久性。它使用循环和条件,反映了一种旨在逃避检测、实现持久性和适应系统状态的设计。
-
批处理文件 40137808.bat 由第一个批处理文件 (9315288.bat) 执行,并执行多项操作来检索、提取和执行有效载荷,同时确保留下最少的痕迹。
它首先使用“pushd %~dp0”导航到其工作目录。变量 fn 设置为 di3726,代表正在处理的 zip 文件的名称。然后它调用另一个批处理文件 92754154.bat,其参数包括下载 zip 文件的 URL 和目标路径 %~dp0%fn%.zip。
92754154.bat 执行一个复杂的 PowerShell 函数。该脚本通过附加参数键(例如基于时间戳的值 ((Get-Date).Ticks.ToString()) 和编码令牌(ojWJDlyHMcm 函数))来操纵 URL。生成的 URL 成为原始输入的动态更改版本。捕获的 URL 与批处理文件中观察到的行为一致:
捕获的 URL/GET 请求
捕获的响应
如果指定的 zip 文件未成功下载,如本例所示,脚本将跳转到标签 END1,绕过进一步执行。
-
批处理文件 32791673.bat 也是由第一个批处理文件 (9315288.bat) 执行的。它旨在枚举系统文件、收集系统信息并将收集到的数据传输到外部服务器。
它通过在单独的文本文件(d1.txt、d2.txt、d3.txt)中生成目录列表来收集用户的下载、文档和桌面文件夹中的数据。此外,它使用 systeminfo 命令检索系统信息,并将其保存为 d4.txt。创建这些文件后,脚本会多次调用 96001702.bat,将收集的数据上传到远程服务器。每次调用 96001702.bat 时,都会传递文本文件(d1.txt、d2.txt、d3.txt 或 d4.txt)、基于计算机名称的自定义文件名以及服务器 URL 作为参数。
批处理文件 96001702.bat 使用 PowerShell 脚本中的混淆函数对文件内容和其他元数据进行编码,操纵 URL 以附加加密的查询参数,并通过 HTTP POST 请求发送数据。如果上传成功,则上传的文件将从系统中删除,并创建一个名为 upok.txt 的标记文件以确认传输成功。这确保敏感信息泄露到命令和控制服务器,同时采用加密和隐身技术来逃避检测。
-
批处理文件 45150722.bat 也由第一个批处理文件 (9315288.bat) 执行。它旨在从指定的 URL 获取 .cab 文件并执行其内容。但是,由于下载失败,脚本遵循了不同的执行路径。
该脚本尝试调用 92754154.bat 从 URL 为 http[:]//www[.]roofcolor[.]com/wp-includes/js/src/list[.]php?f=%COMPUTERNAME%.txt 的远程服务器下载 .cab 文件 (alBuT.cab)。此 URL 动态包含计算机名称以供识别。但是,由于下载失败,没有可供提取的 .cab 文件。因此,expand 命令和后续文件操作(例如删除 alBuT.cab 和执行 temprun.bat)均不会发生。下载有效负载失败实际上会停止脚本的预期操作,导致除了初始清理之外不会执行任何新文件或操作。
泄漏:
尽管无法通过 45150722.bat 下载附加有效载荷,但之前在 32791673.bat 中执行的泄露活动仍然成功。该脚本从用户的下载、文档和桌面文件夹中收集目录列表,并将其存储在文本文件(d1.txt、d2.txt 和 d3.txt)中,而系统信息则存储在 d4.txt 中。
包含系统信息的 d4.txt 文件
使用批处理脚本 96001702.bat,这些文件将被泄露至远程服务器,URL 为 http[:]//www[.]roofcolor[.]com/wp-includes/js/src/upload[.]php。
数据泄露至远程服务器
在此过程中,文件内容会使用动态标识符进行编码和传输,例如计算机名称 (%COMPUTERNAME%) 和当前时间戳,从而使泄露过程变得隐秘,并针对特定系统进行量身定制。即使没有下载和执行 .cab 负载,此阶段也能确保攻击者成功检索有关用户文件和系统配置的敏感信息。
持久性:
批处理脚本 40137808.bat 通过将 VBScript 文件 start.vbs 添加到 Windows 注册表的 Run 项(具体到当前用户的配置下)来建立持久性:
使用 Windows 注册表实现持久性
反分析:
-
滥用 Windows 资源管理器限制进行隐藏:威胁行为者利用 Windows 资源管理器的限制,将实际命令隐藏在 LNK 文件的“目标”字段中,并使用 260 个字符的限制来掩盖有效负载。该文件显示为一个良性快捷方式,包含 25 个可见字符,后面跟着 235 个空格字符。此外,威胁行为者还利用 Windows 的默认行为,即隐藏已知文件类型的文件扩展名,即使此选项被禁用。这允许攻击者删除 LNK 文件并留下一个名称相似的 .docx 文件,在隐藏恶意软件的真实意图的同时,营造出无害文档的假象。
-
使用混淆技术:92754154.bat 和 96001702.bat 都包含带有混淆变量名和复杂逻辑的 PowerShell 函数,因此很难立即了解脚本的用途。使用冗长、看似随机的变量名(例如 $lOcktuwXswUB、$JsWwCwoGDM)进一步使分析变得复杂,并阻碍了追踪脚本逻辑的努力。
-
URL 操纵和编码:脚本使用时间戳和加密函数动态生成和编码 URL 的各个部分。这不仅可以使 URL 适应当前环境,还可以防止 URL 在静态分析期间被立即识别或标记。动态附加的时间戳 (Get-Date.Ticks) 和编码令牌 (cNJJuYyltV) 增加了额外的复杂性。
-
隐秘的文件操作:临时文件(例如 temprun.bat)被创建、使用并立即删除,以最大程度地减少活动痕迹。这种方法几乎不会给法医调查人员留下任何证据,因为恶意软件会在执行过程中自行清理。
-
抑制输出:这些脚本通常使用输出重定向到 nul (> nul) 来抑制命令输出。通过阻止用户或分析师查看正在执行的操作,恶意软件有效地将其活动隐藏在众目睽睽之下。
-
分层执行和模块化:脚本是模块化的,每个批处理文件处理特定任务(数据收集、泄露、有效载荷执行)。这种分层方法使得分析整个恶意软件变得更加困难,因为部分功能分布在单独的脚本中。
Konni-RAT 功能
分析 Konni RAT 可以让我们深入了解其操作特性。基于此分析,以下几点突出了这种信息窃取恶意软件的功能:
-
使用批处理文件、PowerShell 脚本和 VBScript 的组合来执行复杂的攻击阶段,使检测更加困难并确保执行的灵活性。
-
能够使用动态生成的加密 URL 和基于自定义时间戳的方法将关键数据(包括系统信息和用户文件)泄露到远程服务器。
-
实施复杂变量名、动态 URL 生成和加密等技术来掩盖恶意活动的真实意图,有效地逃避静态分析。
-
通过修改 Windows 注册表来执行恶意脚本,从而实现持久性,确保 RAT 在系统重启后仍然处于活动状态。
-
通过删除 LNK、CAB 和其他临时文件来采用清理策略,几乎不留下其活动的痕迹,并使攻击后的取证调查变得复杂。
-
收集并泄露关键系统信息(例如目录列表、系统配置)以协助进一步的攻击或侦察。
结论
Konni RAT 是一种高度复杂的恶意软件,它利用 Windows 操作系统中的特定功能(例如 Windows 资源管理器中的文件扩展名隐藏和 LNK 文件的 260 个字符路径限制)来逃避检测并执行恶意命令。该恶意软件采用多阶段攻击策略,利用批处理文件、PowerShell 脚本和 VBScript 收集系统信息、窃取敏感数据并部署其他有效负载。它使用高级混淆技术(包括动态 URL 生成、加密和复杂变量名)进一步复杂化分析并逃避检测。此外,Konni RAT 通过注册表修改确保持久性,并通过删除临时文件最大限度地减少其活动的痕迹。这些功能使 Konni RAT 成为重大的安全威胁,使其能够悄无声息地破坏系统、窃取数据并保持长期访问,同时避免检测。
随着 Konni RAT 等威胁不断演变,组织必须实施强大的网络安全措施和主动防御策略来减轻相关风险。为了减少 Konni RAT 的威胁,用户在打开来自不受信任来源的文件或点击不熟悉的链接时应谨慎,尤其是那些推广可疑软件或内容的链接。此外,部署强大的网络安全措施,例如使用信誉良好的防病毒软件、定期更新所有软件以及保持警惕以防范社会工程攻击,可以显著增强对此类复杂恶意软件的防护。教育用户了解潜在威胁并在组织内推广安全意识文化也是将 Konni RAT 和类似恶意软件带来的风险降至最低的重要步骤。
IOC:
61ce43ea1c2ddafb23ee8ee083417fd375bbefce200f9bb48166af7c67df4d3cb81513f0f8d3db382bb8f931bf2b7a0d4f26f74cfcf60b5d889de87ef2f1d54376ee4da0af1921b820cc0913b4011bb5382edac958eb2592ee1c3a00a41c2041f1b4eb84e77e39803a0463b49b66600adb19347512354d0481568a8411b75b24c348e945e1f6123bd054277d16a39da715deed8f5a6849bc70a57913b877e2baa8b0f9717bc16d48e55be95886500179ca4b7dad9610dd0865dbf8849901a791474978a976de1c869385d37ae422b1718918bc8cc05353a4bebb2b75846ab74cee8e8471fbe1b7fc85508e549444893bdea7579c5032c2626abcb1356129787ee3c3981f65663c9923da9ca28c20951543ae3796bd39f86964769490b01c2bd74c53e24db4b7858fd9d17de2bfc3d73096f41172dfcc31a807231acb97aff9d0a19b9eb292395e0d84c4a1a8eb5c88abbe0f71060cd06a436bf79da914e3e0c1
原文始发于微信公众号(Ots安全):Konni RAT 分析:隐身、持久性和反分析技术
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论