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
}


參考來源


BitSight