我正在与 Windows Defender 作斗争。几周以来,我们公司的一个 ClassLibrary.dll 被 Windows Defender 标记为木马“Trojan:MSIL/AgentTesla.CED!MTB”。当然,我们的客户大声抱怨。
我的第一步是研究这个恶意软件。这是 2014 年的作品,但仍然非常活跃,并且仍在广泛流通。它是在 .NET 框架上编写的,可以从受害者计算机中窃取信息。一些有趣的文章告诉我,它经常通过隐写术将实际恶意代码隐藏在图像中或嵌入其他文本文件中来伪装自己,然后在受害者计算机上提取并执行这些代码。
现在我仔细查看了我们的 ClassLibrary.dll。我认为有很多代码可能会触发防病毒程序寻找该恶意软件。程序集侧加载、Office Interop 等内容的代码。但当我开始删除一个又一个的文件、一行又一行的代码时,我真的很惊讶。 Windows Defender 检测并没有消失!我现在只剩下四个 cs 文件和一个 resx 文件,这些文件都没有多大作用。
当时我认为可能是 Windows Defender 只是缓存了文件名。但我用四个文件和几行代码创建了一个新的 .NET WinForms 项目,并且仍然得到相同的 Windows Defender 检测。结果可以在我尝试过的所有同事机器上重现。
从现在开始,我有一个非常小的测试项目,我将 dll 上传到 VirusTotal。在 70 个病毒扫描程序中,只有 Windows Defender 将其标记为恶意软件。它给我的一个提示是,在一个文件中使用了“Convert.FromBase64String()”方法。但这肯定被用在很多非恶意软件的项目中。这是结果:https://www.virustotal.com/gui/file/5987e3957cb53b5d91c59c77dec82eb8f08945ee6b80b9fadfb4af41be996710/detection
之后我将 dll 上传到 Microsoft (https://www.microsoft.com/en-us/wdsi/filesubmission)。但他们不想提供帮助并坚持认为这没什么,我应该更新我的签名。不知道当多台计算机和 VirusTotal 上的结果相同时,这应该有什么帮助。
你们中有人知道为什么这么简单的样本会被标记为恶意软件吗? Windows Defender 真的有可能会因为这么几个触发词而跳转吗?
如果您想亲自尝试:它是一个 .NET Framework 4.8 类库,包含以下文件。这就是全部。编译它。扫描一下。我每次都会遇到 Tesla 特工木马。
a.cs
using System.Threading;
namespace ClassLibrary.Controller
{
public class a
{
private void A()
{
ThreadPool.QueueUserWorkItem(null, null);
}
}
}
b.cs
using System.Threading;
namespace ClassLibrary
{
public class b
{
private void B()
{
var t = new Thread(() => { })
{
Name = "ClassLibrary.Data"
};
}
}
}
d.cs
using System;
namespace ClassLibrary
{
public class d
{
private void D()
{
Convert.FromBase64String(string.Empty);
}
}
}
数据表转换器.cs
using System.Reflection;
namespace ClassLibrary
{
public class DataTableConverter
{
private Assembly AssemblyResolver()
{
return null;
}
}
}
还有一个包含一个条目的 MultiLangRes.resx 文件:名称:TextReplace,值:a
我也有同样的问题,我们的客户对此不满意。你能解决这个问题吗?如果是,请告诉我们解决方案