Origin Logger
A closer look at this Agent Tesla successor
Overview
This is a .NET stealer that is possibly a clone or new version of AgentTesla. It has been sold on public grayware sites such as fudsender[.]com
.
There is even a YouTube commercial for the stealer!
https://www.youtube.com/watch?v=o-MDujYrtto
Sample
b1114c27beb856eae1f9fba0a880450702b7bda007f0fbacc4d5df561d83ec88
UnpacMe
References
Settings
public static bool Keylogger = true;
public static int LoggerInterval = 10;
public static bool PasswordRecovery = true;
public static bool CookieRecovery = true;
public static int TenantId = 4319;
public static string PcHwid = "";
public static string PcName = "";
public static string AsmLocation = "";
public static int CheckInterval = 5000;
public static string PublicKey = "<RSAKeyValue><Modulus>rAoFBxYpptcD05ezf2if4RlryyqIBxjA3797MhTklk3xemvM9Y+Wle6P5hBHzSu95KQmgea8lzbH7RA3HOb1UvKErFeJ3jT5XhsqaT4AcDLRQraXpmxz+rzW0GK+ZvJFYmIL+18m4j/TAHjT40L0wEcfu2qzrIzroEFupW/oELM=</Modulus><Exponent>AQAB</Exponent></RSAKeyValue>";
public static string PublicUserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:99.0) Gecko/20100101 Firefox/99.0";
public static bool AppAddStartup = Convert.ToBoolean("false");
public static bool HideFileStartup = Convert.ToBoolean("false");
public static string AppStartupFullPath = "";
public static string StartupDirectoryPath = "";
public static string StartupEnvName = "appdata";
public static string StartupDirectoryName = "hhlquS";
public static string StartupInstallationName = "hhlquS.exe";
public static string StartupRegName = "hhlquS";
public static string DownloadFolderName = "4yyaqgto.m0g";
public static string DownloadDirectoryPath = "";
public static string CurrentUrl = "";
public static string[] FallbackUrls = new string[] { "https://nitrosoftwares.shop/gate" };
Yara Rule
rule OriginLogger {
strings:
$s1 = "select * from Win32_Processor" wide
$s2 = "FileArgs" wide
$s3 = "StringFileInfo" wide
$s4 = "select * from Win32_VideoController" wide
$s5 = "Win32_NetworkAdapterConfiguration" wide
$s6 = "downloadexecute" wide
$x = "x-key" wide nocase
$dl_bytes = {7E ?? ?? ?? ?? 72 ?? ?? ?? ?? 03 04 28 ?? ?? ?? ?? 0A 02 06 28 ?? ?? ?? ?? 06 28 }
condition:
filesize < 50KB and
(
(
5 of ($s*) and
$x
) or
(
$dl_bytes
)
)
}
import re
file_data = open('/tmp/origin.bin', 'rb').read()
def filter_printable(data):
out = []
for c in data:
if c < 33 or c > 126 or c == 92:
continue
out.append(c)
return bytes(out)
def get_c2s(file_data):
c2s = []
for s in file_data.split(b'h\x00t\x00t\x00'):
if s[:2] == b'p\x00':
tmp = s.split(b'\x00\x00')[0]
out = b'htt' + filter_printable(tmp.replace(b'\x00',b''))
if len(out) < 4 or len(out) > 50:
continue
#print(out)
c2s.append(out.decode('utf-8'))
return c2s
get_c2s(file_data)
# import required module
import os
# assign directory
directory = '/tmp/samples'
# iterate over files in
# that directory
for filename in os.listdir(directory):
f = os.path.join(directory, filename)
# checking if it is a file
if os.path.isfile(f):
print(f)
file_data = open(f, 'rb').read()
print(get_c2s(file_data))