AgentTesla
AgentTesla窃密木马样本分析
1. 简介
Agent Tesla 是一种密码窃取间谍软件,自 2014 年以来一直存在。攻击者可以使用该恶意软件来监视受害者,使他们能够查看在支持的程序和网络浏览器中输入的所有内容。
Agent Tesla 病毒在其自己的网站上进行营销和销售,该网站错误地声称该程序是为个人使用而创建的合法键盘记录器,因此在黑客社区中非常流行。不仅仅是因为它的易用性和技术支持,可以在攻击者出售此恶意软件的“官方”网站以及专用的 Discord 服务器上找到。尽管声称该软件是合法的,但售卖人员还是会就非法使用该病毒提出建议。
2. 样本详情
本次分析的样本哈希如下:
MD5:af98b88c0b5dc353fbe536bd6fb8c4ec
SHA256:cc262fd3fa1f646aff2f5bcdea33beca5ed081260028b8604d5f714dd23c03ac
可以从any.run沙箱查看到样本的行为及下载样本。
将样本用PEStudio打开,可以看到Mircrosoft
将其标记为AgentTesla
:
libraries
标签可以看出这是一个.NET程序,且strings
标签内字符串数量有点多,version
标签中可以获取到样本的原始文件名及哈希情况:
3. 样本分析
使用dnSpy
加载样本,向下观察代码,可以在Helper
类中找到Gzip
其中存放了约10000
行数据,向下阅读代码,是C#
中常用的解压缩函数GZipStream
:
3.1. 样本释放
在retrun result
处下断,得到了解压内存存放的内存地址0x00027800
,在内存窗口中查看,可以明显看出是PE
文件结构:
使用dnSpy
自带的保存功能,将该地址处存放的数据保存到本地,再使用PEStudio
查看,这是一个名为:Ihinax.dll
的.NET
文件。
Ihinax.dll
函数名经过了混淆,经过了长时间的阅读,在LVU3WCMrRsWDmqar8f
空间下的Su370LNVnsglWDN9lR
类的第311行,找到了gzipStream
,下断点执行到此处,array2
中所存放的内容是PE
文件格式的内容。
保存下来,使用PEStudio
查看:
这里推荐使用互联网工具对文件进行解压。UnpacMe解压结果如下:
将手动解压与UnpacMe
解压的内容进行SHA256
比较,并无差别:
3.2. 样本解码
使用dnSpy
加载最终的恶意程序,进入主函数可以看到一些奇怪的函数,GetEnvironmentVariable
函数是用于获取系统变量的,参数却是函数97085277-F30F-47FA-9C3D-82DA9E6730B4.L()
。
进入其中可以看到类中有个类似于解密的东西,然后下方的方法进行方法传递:
解密字符集:
这里可以使用de4dot
对其进行动态解密,作者在readme
中进行了如下说明:
de4dot
对--strtyp
参数的说明如下:
String decrypter types
none Don't decrypt strings
default Use default string decrypter type (usually static)
static Use static string decrypter if available
delegate Use a delegate to call the real string decrypter
emulate Call real string decrypter and emulate certain instructions
这里选取了emulate
进行尝试,但是作者显然并不想我们这么容易就解除了混淆,加密字符串居然有6000535h - 600022Bh = 30Ah
处!
所以我简单生成了一个粗糙的bat:
de4dot.exe dump2.bin --strtyp emulate --strtok 600022B
rename dump2-cleaned.bin dump3.bin
de4dot.exe dump3.bin --strtyp emulate --strtok 600022C
del dump3.bin
rename dump3-cleaned.bin dump3.bin
de4dot.exe dump3.bin --strtyp emulate --strtok 600022D
del dump3.bin
rename dump3-cleaned.bin dump3.bin
de4dot.exe dump3.bin --strtyp emulate --strtok 600022E
del dump3.bin
rename dump3-cleaned.bin dump3.bin
de4dot.exe dump3.bin --strtyp emulate --strtok 600022F
del dump3.bin
rename dump3-cleaned.bin dump3.bin
……
……
……
de4dot.exe dump3.bin --strtyp emulate --strtok 6000533
del dump3.bin
rename dump3-cleaned.bin dump3.bin
de4dot.exe dump3.bin --strtyp emulate --strtok 6000534
del dump3.bin
rename dump3-cleaned.bin dump3.bin
de4dot.exe dump3.bin --strtyp emulate --strtok 6000535
del dump3.bin
rename dump3-cleaned.bin dump3.bin
在经过了大约二十分钟后,我获得了一个解密后的程序:
3.3. 代码阅读
对于C#
程序,既然字符串已经还原了,个人习惯是先阅读代码,然后就会有如下的这些发现。
3.3.1. 设置开机自启
3.3.2. 获取本机公网ip
3.3.3. 下载文件
3.3.4. 获取系统信息
3.3.5. 截取屏幕
3.3.6. FTP服务操作
3.3.7. 浏览器用户数据窃取
3.3.8. SMTP请求配置
3.3.9. 键盘记录
3.3.10. SOCKET通信
3.3.11. 数据上传
3.3.12. DES加密
3.3.13. 判断操作系统版本
3.3.14. 特殊软件的凭证窃取
特殊软件的凭证窃取(下图是Edge浏览器的窃取函数段)
从Edge凭证窃取函数可以看出,窃取函数存在以下特征:
UserName =
Password =
Browser = ""
检索全部代码,反复确认后,发现窃取目标包含以下对象:
Browser = "IE/Edge"
Browser = "Edge Chromium"
Browser = "QQ Browser"
Browser = "incredimail"
x.Browser = "Eudora"
Browser = "Falkon Browser"
Browser = "Falkon Browser"
Browser = "ClawsMail"
Browser = "Flock Browser"
Browser = "DynDNS"
x.Browser = "Psi/Psi+"
x.Browser = "Open VPN"
x.Browser = "FileZilla"
Browser = "WinSCP"
Browser = "FlashFXP"
x.Browser = "FTP Navigator"
x.Browser = "JDownloader"
Browser = "Paltalk"
Browser = "Pidgin"
Browser = "SmartFTP"
x.Browser = "WS_FTP"
Browser = "FTPCommander"
x.Browser = "FTPGetter"
Browser = "NO-IP"
Browser = "NO-IP"
Browser = "TheBat"
x.Browser = "Becky!"
Browser = "Trillian"
x.Browser = "Outlook"
x.Browser = "Foxmail"
x.Browser = "Opera Mail"
x.Browser = "PocoMail"
Browser = "eM Client"
x.Browser = "Mailbird"
x.Browser = "Mailbird"
Browser = "NordVPN"
Browser = "MySQL Workbench"
Browser = "Private Internet Access"
x.Browser = "Safari Browser"
x.Browser = "Internet Download Manager"
3.3.15. VNC凭证窃取
3.3.16. 下载Tor浏览器
3.4. 动态调试
进入程序入口,会生成一串字符串,用于标识受害者主机,然后会设置一个30s的定时循环任务,接着开始进行浏览器用户数据窃取;
汇总如下:
@"C:\Users\alee\AppData\Local\7Star\7Star\User Data"
@"C:\Users\alee\AppData\Local\uCozMedia\Uran\User Data"
@"C:\Users\alee\AppData\Local\MapleStudio\ChromePlus\User Data"
@"C:\Users\alee\AppData\Local\Yandex\YandexBrowser\User Data"
@"C:\Users\alee\AppData\Local\Torch\User Data"
@"C:\Users\alee\AppData\Local\Coowon\Coowon\User Data"
@"C:\Users\alee\AppData\Local\Comodo\Dragon\User Data"
@"C:\Users\alee\AppData\Local\Sputnik\Sputnik\User Data"
@"C:\Users\alee\AppData\Local\Iridium\User Data"
@"C:\Users\alee\AppData\Local\Vivaldi\User Data"
@"C:\Users\alee\AppData\Roaming\Opera Software\Opera Stable"
@"C:\Users\alee\AppData\Local\Chedot\User Data"
@"C:\Users\alee\AppData\Local\CocCoc\Browser\User Data"
@"C:\Users\alee\AppData\Local\Fenrir Inc\Sleipnir5\setting\modules\ChromiumViewer"
@"C:\Users\alee\AppData\Local\Epic Privacy Browser\User Data"
@"C:\Users\alee\AppData\Local\Elements Browser\User Data"
@"C:\Users\alee\AppData\Local\Amigo\User Data"
@"C:\Users\alee\AppData\Local\CatalinaGroup\Citrio\User Data"
@"C:\Users\alee\AppData\Local\BraveSoftware\Brave-Browser\User Data"
@"C:\Users\alee\AppData\Local\360Chrome\Chrome\User Data"
@"C:\Users\alee\AppData\Local\Kometa\User Data"
@"C:\Users\alee\AppData\Local\liebao\User Data"
@"C:\Users\alee\AppData\Local\CentBrowser\User Data"
@"C:\Users\alee\AppData\Local\QIP Surf\User Data"
@"C:\Users\alee\AppData\Local\Chromium\User Data"
@"C:\Users\alee\AppData\Local\Orbitum\User Data"
然后会在每一个目录下寻找logins
文件夹,窃取其中的信息
针对logins
内的文件窃取函数内容如下:
往下则是一列窃取函数的调用,核实并整理后如下:
list.AddRange(global::A.b.E.LoginsSteal(x.A, x.A));
list.AddRange(global::A.b.E.RimArtsSteal());
list.AddRange(global::A.b.E.ChromeSteal());
list.AddRange(global::A.b.E.FlockSteal());
list.AddRange(global::A.b.E.IceDragonSteal());
list.AddRange(global::A.b.E.OpearMailSteal());
list.AddRange(global::A.b.E.GetOSVersion());
list.AddRange(global::A.b.E.ClawsMailSteal());
list.AddRange(global::A.b.E.PostboxSteal());
list.AddRange(global::A.b.E.AppleSteal());
list.AddRange(global::A.b.E.IncrediMailSteal());
list.AddRange(global::A.b.E.BlackHawkSteal());
list.AddRange(global::A.b.E.IceCatSteal());
list.AddRange(global::A.b.E.WaterFoxSteal());
list.AddRange(global::A.b.E.PocomailSteal());
list.AddRange(global::A.b.E.UCBrowserSteal());
list.AddRange(global::A.b.E.FileZillaSteal());
list.AddRange(global::A.b.E.FirefoxSteal());
list.AddRange(global::A.b.E.WinSCP_2_Steal());
list.AddRange(global::A.b.E.FalkonSteal());
list.AddRange(global::A.b.E.QQBrowserSteal());
list.AddRange(global::A.b.E.CyberFoxSteal());
list.AddRange(global::A.b.E.SeaMonkeySteal());
list.AddRange(global::A.b.E.K-MeleonSteal());
list.AddRange(global::A.b.E.OutLookSteal());
list.AddRange(global::A.b.E.FoxmailSteal());
list.AddRange((IEnumerable<global::A.b.X>)global::A.b.E.EudoraSteal());
list.AddRange(global::A.b.E.ThunderbirdSteal());
list.AddRange(global::A.b.E.PaleMoonSteal());
4. 总结
AgentTesla是一款商业窃密木马,当中还存在某些交互并未深入分析,不过基础模块已经很清晰了,从这些模块可以看出大多是针对浏览器和邮件客户端的窃密。这里提醒大家尽量不要在浏览器中保存密码,在使用邮件客户端时,也应当格外小心。