AgentTesla 是一个非常活跃的窃密类恶意软件,主要通过电子邮件附件进行传播分发。攻击者正在尝试使用 Telegram 回传数据,但主要还是靠邮件服务器。
恶意软件即服务
AgentTesla 是使用 .NET 开发的 Windows 恶意软件,主要从受害者的系统中窃取敏感信息。由于该恶意软件随处可用而且成本低廉,AgentTesla 被认为是商品化恶意软件的典型代表。恶意软件即服务使水平较低的犯罪分子也可以进行各种类型的攻击,对网络安全状况构成了重大威胁。自从 2014 年开始,AgentTesla 就成为了持续且广泛的威胁。
AgentTesla 也被称为 Negasteal 和 OriginLogger,主要是 2018 年 10 月该恶意软件被揭露后产生的变化。研究人员披露了该恶意软件背后的疑似攻击者,应该是土耳其人。当年信息被披露后,AgentTesla 突然就暂停了销售。2019 年 3 月,攻击者通过 Discord 宣布由于法律问题停止销售,但也介绍了替代方案 OriginLogger。
OriginLogger 实质上就是 AgentTesla 的变种,二者共享开发代码。对 AgentTesla 的检测方法对于识别 OriginLogger 也是有效的,OriginLogger 样本也会被检测为 AgentTesla 家族的恶意样本。和 AgentTesla 类似,OriginLogger 也是恶意软件即服务(MaaS)。OriginLogger 的网站如下所示:
OriginLogger 网站截图
网站售卖使用许可证,最长可达六个月。购买这些许可证后就能够获得使用恶意软件构建工具的权限,支持攻击者定制 AgentTesla 样本文件,包括数据泄露的方法。
由于 AgentTesla 和 OriginLogger 有许多相似之处,将其区分开非常有挑战。本文将二者统称为 AgentTesla,除非要对二者进行比较。
信息窃取程序
名称变化后,该恶意软件一直持续更新。AgentTesla 家族一直位于最常见、最流行的恶意软件排行榜前列,ANY.RUN、MalwareBazaar 与 Unpac.Me 等都可以证明。
通常来说,AgentTesla 会使用带有恶意附件的网络钓鱼邮件进行攻击。攻击者将恶意软件加载程序,如 GuLoader、PureCrypter 与 PrivateLoader,作为初始感染媒介。感染链启动后,最终 Payload 会进行持久化,尽可能保持更长时间收集用户凭据、按键记录、剪贴板信息和屏幕截图。具体来说,可以从浏览器、VPN 客户端、邮件客户端、FTP 客户端、VNC 客户端等应用程序收集各种敏感信息。
数据泄露可以通过各种协议实现,如 SMTP、FTP、HTTP、Telegram 与 Discord。2020 年 8 月,攻击者引入了 Telegram。2022 年 10 月,攻击者引入了 Discord。数据会以明文的形式回传给攻击者,以未加密的状态保留在服务器上。
数据回传
过去的三个月中,研究人员分析了 1500 余个 AgentTesla 样本的配置文件。配置文件中,大约四分之三都是利用电子邮件进行数据泄露。Telegram 已经占比达到 14%,而使用 HTTP 回传数据已经许久未用过了。
数据分析
分析人员分析了 3 个月内 210 次攻击行动中的受害者信息。2023 年 10 月到 12 月期间,至少 5300 台计算机被入侵,共计 2000 余个 IP 地址。根据情况看,受害者最多的是美国、中国与德国。
受害者分布情况
而 AgentTesla 回传的数据中,密码是最常见的。几乎所有共计都会窃取密码,如下所示:
数据泄露类别分类
顶级域名的词云如下所示,大多数是美国公司和中国公司,也有俄罗斯公司、土耳其公司和希腊公司。
按受害者数量排名
这些域名数据反映了受害者的国家分布情况,而查看顶级域名情况时。大多数受害者可能在欧洲,如土耳其、意大利、俄罗斯、波兰、希腊、罗马尼亚、德国和西班牙。
顶级域名排行
后续利用
攻击者获取了这些数据后,要么直接利用这些数据,要么直接出售以供进一步利用。直接利用时,攻击者通常会使用各种身份信息,将资金、加密货币或者其他有价值的资产从受害者账户转移到攻击者的账户。进一步利用时,攻击者可以将数据用于其他以利润为导向的攻击,例如勒索软件攻击和商业电子邮件泄露(BEC)攻击等。事实上,已经有攻击者利用 AgentTesla 恶意软件重定向东南亚、中东和北非的石油公司与天然气公司的金融交易。
总结
2014 年以来,AgentTesla 是一个以恶意软件即服务为卖点的 Windows 恶意软件。该恶意软件后来更名为 OriginLogger,也表明了该恶意软件的适应性。数据分析显示,AgentTesla 的数千名受害者主要在美国、中国与德国。大量数据被泄露,不仅直接构成财务威胁,还助长勒索软件和其他类型的攻击。
Yara
rule agent_tesla
{
meta:
description = "Detecting HTML strings used by Agent Tesla malware"
author = "Stormshield"
version = "1.0"
strings:
$html_username = "<br>UserName&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;: " wide ascii
$html_pc_name = "<br>PC&nbsp;Name&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;: " wide ascii
$html_os_name = "<br>OS&nbsp;Full&nbsp;Name&nbsp;&nbsp;: " wide ascii
$html_os_platform = "<br>OS&nbsp;Platform&nbsp;&nbsp;&nbsp;: " wide ascii
$html_clipboard = "<br><span style=font-style:normal;text-decoration:none;text-transform:none;color:#FF0000;><strong>[clipboard]</strong></span>" wide ascii
condition:
3 of them
}
rule AgentTesla
{
meta:
author = "kevoreilly"
description = "AgentTesla Payload"
cape_type = "AgentTesla Payload"
strings:
$string1 = "smtp" wide
$string2 = "appdata" wide
$string3 = "76487-337-8429955-22614" wide
$string4 = "yyyy-MM-dd HH:mm:ss" wide
//$string5 = "%site_username%" wide
$string6 = "webpanel" wide
$string7 = "<br>UserName&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:" wide
$string8 = "<br>IP Address&nbsp;&nbsp;:" wide
$agt1 = "IELibrary.dll" ascii
$agt2 = "C:\\Users\\Admin\\Desktop\\IELibrary\\IELibrary\\obj\\Debug\\IELibrary.pdb" ascii
$agt3 = "GetSavedPasswords" ascii
$agt4 = "GetSavedCookies" ascii
condition:
uint16(0) == 0x5A4D and (all of ($string*) or 3 of ($agt*))
}
rule AgentTeslaV2 {
meta:
author = "ditekshen"
description = "AgenetTesla Type 2 Keylogger payload"
cape_type = "AgentTesla Payload"
strings:
$s1 = "get_kbHook" ascii
$s2 = "GetPrivateProfileString" ascii
$s3 = "get_OSFullName" ascii
$s4 = "get_PasswordHash" ascii
$s5 = "remove_Key" ascii
$s6 = "FtpWebRequest" ascii
$s7 = "logins" fullword wide
$s8 = "keylog" fullword wide
$s9 = "1.85 (Hash, version 2, native byte-order)" wide
$cl1 = "Postbox" fullword ascii
$cl2 = "BlackHawk" fullword ascii
$cl3 = "WaterFox" fullword ascii
$cl4 = "CyberFox" fullword ascii
$cl5 = "IceDragon" fullword ascii
$cl6 = "Thunderbird" fullword ascii
condition:
(uint16(0) == 0x5a4d and 6 of ($s*)) or (6 of ($s*) and 2 of ($cl*))
}
rule AgentTeslaV3 {
meta:
author = "ditekshen"
description = "AgentTeslaV3 infostealer payload"
cape_type = "AgentTesla payload"
strings:
$s1 = "get_kbok" fullword ascii
$s2 = "get_CHoo" fullword ascii
$s3 = "set_passwordIsSet" fullword ascii
$s4 = "get_enableLog" fullword ascii
$s5 = "bot%telegramapi%" wide
$s6 = "KillTorProcess" fullword ascii
$s7 = "GetMozilla" ascii
$s8 = "torbrowser" wide
$s9 = "%chatid%" wide
$s10 = "logins" fullword wide
$s11 = "credential" fullword wide
$s12 = "AccountConfiguration+" wide
$s13 = "<a.+?href\\s*=\\s*([\"'])(?<href>.+?)\\1[^>]*>" fullword wide
$s14 = "set_Lenght" fullword ascii
$s15 = "get_Keys" fullword ascii
$s16 = "set_AllowAutoRedirect" fullword ascii
$s17 = "set_wtqQe" fullword ascii
$s18 = "set_UseShellExecute" fullword ascii
$s19 = "set_IsBodyHtml" fullword ascii
$s20 = "set_FElvMn" fullword ascii
$s21 = "set_RedirectStandardOutput" fullword ascii
$g1 = "get_Clipboard" fullword ascii
$g2 = "get_Keyboard" fullword ascii
$g3 = "get_Password" fullword ascii
$g4 = "get_CtrlKeyDown" fullword ascii
$g5 = "get_ShiftKeyDown" fullword ascii
$g6 = "get_AltKeyDown" fullword ascii
$m1 = "yyyy-MM-dd hh-mm-ssCookieapplication/zipSCSC_.jpegScreenshotimage/jpeg/log.tmpKLKL_.html<html></html>Logtext/html[]Time" ascii
$m2 = "%image/jpg:Zone.Identifier\\tmpG.tmp%urlkey%-f \\Data\\Tor\\torrcp=%PostURL%127.0.0.1POST+%2B" ascii
$m3 = ">{CTRL}</font>Windows RDPcredentialpolicyblobrdgchrome{{{0}}}CopyToComputeHashsha512CopySystemDrive\\WScript.ShellRegReadg401" ascii
$m4 = "%startupfolder%\\%insfolder%\\%insname%/\\%insfolder%\\Software\\Microsoft\\Windows\\CurrentVersion\\Run%insregname%SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\StartupApproved\\RunTruehttp" ascii
$m5 = "\\WindowsLoad%ftphost%/%ftpuser%%ftppassword%STORLengthWriteCloseGetBytesOpera" ascii
condition:
(uint16(0) == 0x5a4d and (8 of ($s*) or (6 of ($s*) and 4 of ($g*)))) or (2 of ($m*))
}
rule AgentTeslaXor
{
meta:
author = "kevoreilly"
description = "AgentTesla xor-based config decoding"
cape_type = "AgentTesla Payload"
strings:
$decode = {06 91 06 61 20 [4] 61 D2 9C 06 17 58 0A 06 7E [4] 8E 69 FE 04 2D ?? 2A}
condition:
uint16(0) == 0x5A4D and any of them
}
rule AgentTeslaV4
{
meta:
author = "kevoreilly"
description = "AgentTesla Payload"
cape_type = "AgentTesla Payload"
packed = "7f8a95173e17256698324886bb138b7936b9e8c5b9ab8fffbfe01080f02f286c"
strings:
$decode1 = {(07|FE 0C 01 00) (07|FE 0C 01 00) 8E 69 (17|20 01 00 00 00) 63 8F ?? 00 00 01 25 47 (06|FE 0C 00 00) (1A|20 04 00 00 00) 58 4A D2 61 D2 52}
$decode2 = {(07|FE 0C 01 00) (08|FE 0C 02 00) 8F ?? 00 00 01 25 47 (07|FE 0C 01 00) (11 07|FE 0C 07 00) 91 (06|FE 0C 00 00) (1A|20 04 00 00 00) 58 4A 61 D2 61 D2 52}
$decode3 = {(07|FE 0C 01 00) (11 07|FE 0C 07 00) 8F ?? 00 00 01 25 47 (07|FE 0C 01 00) (08|FE 0C 02 00) 91 61 D2 52}
condition:
uint16(0) == 0x5A4D and all of them
}
rule AgentTeslaV4JIT
{
meta:
author = "kevoreilly"
description = "AgentTesla JIT-compiled native code"
cape_type = "AgentTesla Payload"
packed = "7f8a95173e17256698324886bb138b7936b9e8c5b9ab8fffbfe01080f02f286c"
strings:
$decode1 = {8B 01 8B 40 3C FF 50 10 8B C8 E8 [4] 89 45 CC B8 1A 00 00 00}
$decode2 = {83 F8 18 75 2? 8B [2-5] D1 F8}
$decode3 = {8D 4C 0? 08 0F B6 01 [0-3] 0F B6 5? 04 33 C2 88 01 B8 19 00 00 00}
condition:
2 of them
}