Malwarebytes安全更新如何导致错误地识别恶意软件

  不久前的4月15日,在Malwarebytes论坛上开始出现关于恶意软件检测问题的帖子。似乎突然间它将操作系统的一些部分文件还有它本身当做是恶意软件。

  C:WindowsSystem32SessEnv.dll (Trojan.Downloader.ED) -> No action taken. [2c3c895fbbb0b97dfa37ff68d42fc63a]

  C:WindowsSystem32upnphost.dll (Trojan.Downloader.ED) -> No action taken. [f1772bbd0a61f343e64b0463e3206898]

  C:WindowsSystem32wcncsvc.dll (Trojan.Downloader.ED) -> No action taken. [35339a4ef07b2b0b6dc48dda8a79b749]

  C:WindowsSystem32WebClnt.dll (Trojan.Downloader.ED) -> No action taken. [3a2e0adea3c82016c46d4720f21122de]

  C:WindowsSystem32WsmSvc.dll (Trojan.Downloader.ED) -> No action taken. [e7815f897dee56e036fbf374e91af60a]

  它为何开始检测到它自己就是恶意软件,一个可以解释的通的起因是有什么东西出现了极其严重的错误。

  C:Program Files (x86)Malwarebytes’ Anti-Malwarembam.exe (Trojan.Downloader.ED) -> No action taken. [0365915779f2d16560d1a6c139cabf41]

  C:Program Files (x86)Malwarebytes’ Anti-Malwarembamscheduler.exe (Trojan.Downloader.ED) -> No action taken. [d29647a1b2b9b18573be363108fb42be]

  C:Program Files (x86)Malwarebytes’ Anti-Malwarembamservice.exe (Trojan.Downloader.ED) -> No action taken. [1e4ad612fc6f0a2c3af7ce9941c2ab55]

  就像在主题为http://forums.malwarebytes.org/index.php?showtopic=125127 的帖子中所看到的,它开始认为一些运行的进程,注册表项,还有存储在硬盘上的文件都是恶意软件的部分。

  但Malwarebytes的开发人员很快就发布了解决此问题的更新,甚至提供了一个专门修复此问题的工具。如马尔辛.克列金斯基在Malwarebytes博客上所发的帖子,这个问题在几分钟内就得到了修复 -“在不到8分钟的时间里,就可以从我们的服务器上获取更新”。

  那么是什么方面出了问题了?为了能够弄明白其中的原因,我们必须搞清楚更新系统是如何工作来找到我们所需的合适的恶意软件定义文件。一条线索来自什么时候添加了错误签名,然后什么时候发布了修复的定义文件。从一个名叫“catscomputer”的用户所发的一个帖子中我发现好像是一个升到版本“v2013.04.15.12”的更新,破坏了操作系统。而根据一个名叫“莫里斯.纳加尔”的Malwarebytes员工在论坛上的所说,修复这个问题的更新是“v2013.04.15.13”。

  为了了解Malwarebytes在更新时做了些什么,我打开Wireshark 进行抓包分析(此时我正在写这篇博客)。它做的第一件事情是检查是否程序是最新的版本,然后是看看有没有什么新闻消息(我是这么认为的,但不是完全的确定)。所有有关更新的请求都发送到了“data-cdn.mbamupdates.com”。最后它所做的是我们感兴趣的部分,更新定义文件。它开始请求最新的定义文件:GET /v1/database/rules/version.chk HTTP/1.1。

  当时,返回的版本号是"v2013.06.27.09",这个版本的数据库我本地没有(目的就是确保我自己的是过期的,从而能够显示这个更新的过程)。使用这个新的版本信息,它开始请求这个定义文件的信息文件,它是一个yaml格式的文件,描述了定义文件的大小,在下载后进行校验的哈希值,以及一些其它的元数据。请求如下:

  GET /v1/database/rules/data/rules.v2013.06.27.09.ref.yaml HTTP/1.1

  随后,来自更新服务器的响应如下:

  filename: rules.v2013.06.27.09.ref

  version:

  previous: v2013.06.27.08

  current: v2013.06.27.09

  date: Thu, 27 Jun 2013 16:32:13 GMT

  package:

  size: 6616865

  md5: cc8b2b2ace236d10eb833d9d3b46e23a

  format: legacydb

  content:

  size: 26780341

  md5: 318dd700ef1ac0b26b2eb2cf38d90cd4

  format: legacydb

  metadata:

  size: 323

  当时,它看起来像是在做针对这一天的增量更新,其发出的请求如下:

  GET /v1/database/rules/data/rules.v2013.06.27.08_v2013.06.27.07.ref.inc HTTP/1.1。

  我获得了一个二进制数据文件,好像就是其定义文件。我想要补充说明的是,正在管理Malwarebytes更新服务器的某位管理员添加了一些额外的“X前向头”到了响应中:

  HTTP/1.1 200 OK

  Accept-Ranges: bytes

  Cache-Control: max-age=7200

  Content-MD5: TtzBRPrw2mTl+UYhEYzMvw==

  Content-Type: text/plain

  Date: Thu, 27 Jun 2013 16:51:37 GMT

  ETag: “8b6-4e02516192100"

  Expires: Thu, 27 Jun 2013 18:51:37 GMT

  Last-Modified: Thu, 27 Jun 2013 16:16:36 GMT

  Server: ECAcc (ams/489A)

  x-admin: tedivm was here.

  X-Cache: HIT

  x-shameless-plug: Looking for a dev job? Send your resume to jobs@malwarebytes.org

  Content-Length: 2230

  Connection: close

  我想tedivm是这个管理员的代号,所以它与“x-shameless-plug”头能够很好地吻合。

  现在根据这些已经获得的更新文件,我们知道了它是如何工作的,对于我们所需要的两个版本的定义文件,分别是“v2013.04.15.12”和“v2013.04.15.13”,我们能够像下面这样获取:

  GET /v1/database/rules/data/rules.v2013.04.15.12.ref HTTP/1.1

  GET /v1/database/rules/data/rules.v2013.04.15.13.ref HTTP/1.1

  我们所获得的两个二进制数据文件,一个大小是6294406字节,一个大小是6294350字节,两者没有什么大的变化,但的确删除了某些东西。关于这些更新文件有一个问题,它们已经被加密。我不会告诉你如何去解密它们,但我在一个好友的帮助下,通过使用OllyDbg工具进行一些逆向工程分析,最终我们搞清楚了如何解密这些文件。下面是这些解密后的文件的不同之处:

  VOFFSET=Trojan.Downloader.ED, 74433, 1, 6,

  687474703A2F2F36342E36342E32302E35302F32373753457236372E657865, NS

  VOFFSET=Trojan.Downloader.ED, 74485, 1, 14

  687474703A2F2F6674702E74636D6C732E6F72672F7172415165562E657865, NS

  这里的描述信息“Trojan.Downloader.ED”就是之前在论坛帖子上所述的出现问题的描述信息。尽管这些规则准确的工作原理,我不能说我已经100%确信是如何进行的,但这已经是到目前为止我所理解的东西:

  VOFFSET: 某种用于字节匹配的偏移。无论是什么在等号之后的都是描述

  74433和74485好像是数字签名标识符,

  1,6和1.14好像是某种范围,后面我会再回过来看它们

  是与VT上的一种恶意软件有关的URI的二进制编码格式

  是与polyloader恶意软件加载程序有关的URI的二进制编码格式

  NS: 没有关于这个是什么的线索

  我想在应用这些规则时出现了偏移错误或误解。如果你使用规则中的范围作为那些字节模式匹配中的串分割符的话,那么在第一条规则中范围1-6表示“http:”,而另一条规则中的范围1-14表示“http://ftp.tc“。我猜开始的时候"http:"与每个地方都可以匹配上,可能NS是一个标记,用以指示部分匹配也是可以的,谁知道了。

  我对MBAM检测为恶意软件的文件,做了一些检查,方法是首先执行Linux命令"strings -el "打印Unicode字符,然后根据其输出的字节编码,通过grep命令查找字符串"http:"。巧合的是,我从论坛上之前所投的帖子中所获得的所有被误认为是恶意软件的文件都包含了这些串,因此我想问题可能就出在这里。

  这是一件很有趣的事情去弄明白加密方法和实际的定义文件本身。我甚至尝试将我自己定义的字节模式放入到自定义的规则文件中,去看看它是否那样工作,而结果是确实如此。另外,要特别地感谢被我剥夺了睡眠的好友,你在凌晨4点为我制作出了解密工具,你知道自己是谁的。

时间: 2024-12-12 16:03:23

Malwarebytes安全更新如何导致错误地识别恶意软件的相关文章

如果深度学习能识别一杯尿,那它也能用来识别恶意软件

       这是一个悲伤的故事,你可能经历过. 你又热又渴,看到桌子上有一瓶看起来像水的东西,来不及思考,揭开瓶盖喝了一大口.哦!漏!是油! 时间回到10秒前,我们重来一次. 这一次,额外的剧情是,你有一个看不惯的死敌和你一起住(这种情况在合租大军中很容易出现),他放了一瓶类似水的不明液体在桌上. 你又进来了,有累又热又渴,这一次你又端起来这瓶液体.这一次,你仔细分析了这种物质.形状和体积,你利用曾经的斗争经验再次判断,然后信心满满地做出了正确选择,完美地躲避了这场恶作剧--一瓶100%纯尿.

nsis 脚本-NSIS打包自定义安装目录页面导致错误

问题描述 NSIS打包自定义安装目录页面导致错误 定义安装目录页面控件的方法 !define MUI_PAGE_CUSTOMFUNCTION_SHOW pagedirectory !define MUI_PAGE_CUSTOMFUNCTION_LEAVE pagedirectoryfinish !insertmacro MUI_PAGE_DIRECTORY ;安装目录页面 ;如果在这里加上系统的组件也就不会出现两次重复安装和错误. !insertmacro MUI_PAGE_INSTFILES

值不能为 null。 参数名: value 说明: 执行当前 Web 请求期间,出现未经处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出

问题描述 值不能为null.参数名:value说明:执行当前Web请求期间,出现未经处理的异常.请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息.异常详细信息:System.ArgumentNullException:值不能为null.参数名:value源错误:执行当前Web请求期间生成了未经处理的异常.可以使用下面的异常堆栈跟踪信息确定有关异常原因和发生位置的信息.堆栈跟踪:[ArgumentNullException:值不能为null.参数名:value]System.

如果你认为比我学得好那你就进来 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。

问题描述 "/sc"应用程序中的服务器错误.--------------------------------------------------------------------------------用户'sc'登录失败.说明:执行当前Web请求期间,出现未处理的异常.请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息.异常详细信息:System.Exception:用户'sc'登录失败.源错误:执行当前Web请求期间生成了未处理的异常.可以使用下面的异常堆栈跟

高手们看看吧,学习学习 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息

问题描述 "/sc"应用程序中的服务器错误.--------------------------------------------------------------------------------用户'sc'登录失败.说明:执行当前Web请求期间,出现未处理的异常.请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息.异常详细信息:System.Exception:用户'sc'登录失败.源错误:行37:catch(SqlExceptione)行38:{行39:

Windows7系统下因设备本身电压问题导致usb无法识别的解决方法

  故障分析:从现象上看,USB设备和主板的接口都没有损坏,怀疑是因为意外断电导致系统设置错误. 对于这种情况是一般都是由于供电问题,由于USB硬盘在工作de时候要消耗一定的电,直接通过USB 接口来取电,就有可能出现供电不足.因此,几乎所有的移动硬盘都附带了单独de外接电源或者系通过键盘取电的PS2转接口,这时只要事先连接好外接电源或 者通过PS2转接线与键盘连接好,确保给移动硬盘提供足够的电能之后再试试,这时应该可以正常使用了吧. 处理方法: 从"控制面板"进入添加和删除硬件的窗口

中断ORACLE数据库关闭进程导致错误案例

昨晚下班的时候,我准备关闭本机的虚拟机上的ORACLE数据库后准备下班,但 是由于我SecureCRT开了多个窗口,结果一不小心,疏忽之下在一个生产服务器上执行了shutdown immediate命令,大概过了6到7秒,发现该命令还没有响应,我才发现我这个命令执行错了服务器.一惊之下,想都没有想直接CTRL+C想中断这个 操作. 如下所示: SQL> shutdown immeidate; SP2-0717: illegal SHUTDOWN option SQL> shutdown imm

ierp应用程序中的服务器错误无法识别的配置节connectionStrings

错误环境: Windows Server 2003 Enterprise Edition IIS 6.0 错误信息: "/ierp"应用程序中的服务器错误. -------------------------------------------------------------------------------- 配置错误 说明: 在处理向该请求提供服务所需的配置文件时出错.请检查下面的特定错误详细信息并适当地修改配置文件. 分析器错误信息: 无法识别的配置节"conne

当您尝试在Internet上冲浪时WindowsXPSP2将导致错误678或错误769故障

  故障现象: 设置 Windows xp Service Pack 2 (SP2) 后,当您尝试连接到 Internet 时,您收到以下错误消息之一: 错误 678"远程计算机没有响应" 错误 769"指定的目标不可到达" 原因分析: 通常情况下,当满足下列条件之一时可能会收到以下错误消息: 网络电缆已断开连接; 调制解调器已被禁用; 调制解调器驱动程序已损坏; 间谍软件在计算机上运行和干扰连接; Winsock 必须修复; 第三方防火墙软件阻止连接. 解决方案: