研究人员发现,恶意软件作者越来越多地使用很少被发现的编程语言,如 Go、Rust、Nim 和 DLang,以创建新工具并阻碍分析。

根据黑莓研究和情报团队周一发布的一份报告,这四种语言的使用正在增加被识别的恶意软件家族的数量。该团队选择了这四种语言进行检查,部分原因是它们适合其检测方法,还因为这些语言有强大的社区支持,可以被认为是更发达的。

“这些不常见的编程语言不再像以前想象的那样很少使用,”根据这篇文章。“威胁行为者已开始采用它们来重写已知的恶意软件系列或为新的恶意软件集创建工具。”

具体来说,研究人员正在追踪更多以稀有语言编写的加载器和释放器。报告称:“这些新的第一阶段恶意软件旨在解码、加载和部署商品恶意软件,例如 Remcos 和 NanoCore 远程访问木马 (RAT) 以及 Cobalt Strike。” “它们通常被用来帮助威胁行为者逃避端点的检测。”

事实上,使用合法的钴攻击的安全工具已经展开:它的网络攻击中使用高达161%,比上年同期,在犯罪软件世界在经历全面主流。

创新的阴暗面

恶意软件制造商可能以迟迟不放弃任何工作而闻名,但他们乐于采用新的编程语言,原因与守法同行相同:它有助于消除开发周期中的痛点,对于一个。此外,从恶意软件作者的角度来看,新语言使他们的创作比保护工具领先一步——或两步或三步。“恶意软件作者以其适应和修改他们的技能和行为以利用新技术的能力而闻名,”威胁研究副总裁 Eric Milam 写道。“这从开发周期和保护解决方案固有的缺乏覆盖中获得了多重好处。”

此外,就像非恶意软件程序员一样,恶意软件作者需要保护自己免受利用。Blackberry 将“EmoCrash”作为他们加强防御以避免的一个例子:大约一年前,安全研究员 James Quinn 透露,他开发了一个称为 EmoCrash 的终止开关,它利用了安装程序中的缓冲区溢出。臭名昭著的Emotet infostealer 中的主要二进制文件,导致它崩溃并阻止它感染系统六个月。实际上,他已经炮制了一种 Emotet 疫苗。

关键案例:APT28 和 APT29 的“Go”流畅度不断提高

当谈到这些更晦涩的语言时,恶意软件开发人员历来主要用 Go 编写:一种通用语言,与 C++ 非常相似,因为它是静态类型和编译的。事实上,它的编译器最初是用 C 编写的,尽管现在它也用 Go 编写了。

研究人员说,C 语言恶意软件仍然是最普遍的。但是两个俄罗斯的威胁参与者 APT28 和 APT29 已经开始比其他组织更频繁地在恶意软件集中使用更奇特的语言。APT28又名 Fancy Bear 或 Strontium 等,而APT29又名 Nobelium、Cozy Bear 或 the Dukes 等。

黑莓研究人员表示,Go 现在是“威胁行为者的‘首选’语言之一”,他们正在制造变种,黑莓研究人员表示,无论是在高级持续威胁 (APT) 级别还是商品级别。他们写道:“基于 Go 的新样本现在半定期出现,包括所有类型的恶意软件,并针对多个活动中的所有主要操作系统。”

APT28 和 APT29 就是很好的例子。APT28 因涉嫌通过渗透民主党全国委员会干预 2016 年总统选举而臭名昭著,与广泛的攻击和恶意软件系列有关,但 Zebrocy 恶意软件系列尤其“在其杀伤链中使用了多种不常见的编程语言,”据报道。

Zebrocy,又名 Sednit、APT28、Fancy Bear 和 Strontium,被威胁组织 Sofacy 使用,作为下载器运行并收集有关受感染主机的数据。

正如研究人员所解释的那样,当 Zebrocy 样本在 2015 年首次出现时,它们分为三个部分:Delphi 下载器、AutoIT 下载器和 Delphi 后门。无论 Zebrocy 是用哪种语言编写的,它都会通过包含初始木马的网络钓鱼活动进行传播,该木马尝试与命令和控制 (C2) 服务器进行通信,并执行下载程序以通过已建立的后门投放恶意负载。报告称,它已被多次重写,但“通过电子邮件附件和一般功能传递的方法基本保持不变”。

APT28 使用的 Go 重写选择:

  • 2018 年:一个链接到 APT28 的基于 Go 的木马被确定为Zebrocy 变体,具有原始 Delphi 下载器的重写版本。

  • 2019 年:研究人员在针对东欧和中亚大使馆和外交部的同一个 Zebrocy 活动中发现了一个 Nim 下载器和 Go 后门。

  • 2020 年及之前几年: APT28 越来越喜欢 Go,使用其他重写的 Zebrocy 核心组件:后门负载和下载器。最近,APT28使用 COVID-19 大流行作为诱饵,于 12 月发布了Go 下载程序变体。

就 APT29/Cozy Bear 而言,以其参与2020 年初SolarWinds 供应链攻击而闻名,它在 2018 年使用WellMess(一种用 Go 和 .NET 编写的远程访问木马 (RAT))针对 Windows 和 Linux 机器。

研究人员指出,WellMess 最流行的变体是 Go 版本,它有 32 位和 64 位变体作为 PE 和 ELF 文件,“使 APT29 能够将其部署到不止一种类型的架构和操作系统。”

APT29 通常通过首先扫描组织的外部 IP 地址中的漏洞,然后对易受攻击的系统进行公开攻击来渗透受害者的网络

该组织越来越多地使用 Go 变体,包括在 2020 年使用更复杂的 WellMess 变体,试图从包括美国、英国和加拿大在内的世界各国的学术和药物研究机构窃取 COVID-19 疫苗研究。研究人员指出,较新的变体虽然用 Go 编写,但变得更加复杂:例如,APT29 添加了更多网络通信协议以及在感染后运行 PowerShell 脚本的能力。

黑莓研究人员断言:“这两个威胁行为者仍然活跃,并且进行了一些迄今为止最具影响力的俄罗斯网络攻击。” “最近的活动表明,这些团体一直在使用本文中提到的不常见的编程语言来增加其恶意软件的复杂性、针对多个平台并逃避检测。”

时间线

除了 Go 及其对 APT28 和 APT29 日益增长的吸引力之外,过去十年中其他稀有语言也越来越多地被其他威胁行为者用于越来越多的恶意软件系列。下面是四种语言如何越来越多地出现的时间表,特别是 Rust、Nim 和 D 语言。黑莓分析师指出,这并不是用这些语言开发的恶意软件家族的详尽列表。

DLang 恶意软件似乎是不断演变的威胁环境中最不受欢迎的语言,但它在过去一年中出现了一些温和的增长。报告预测,这可能标志着恶意软件开发人员更普遍地采用 DLang 的趋势。

使用 Go 编译的 Cobalt Strike 的初始阶段程序的使用大幅增加,最近在 Nim 中,根据文章,初始阶段程序是用于促进第一阶段的二进制文件,通过接触下载进行初始访问,这一点并不谦虚来自 TeamServer 的 Cobalt Strike 信标。“该服务器负责为信标本身提供服务,”报告称。“重要的是,防御者在捕捉用这些语言编写的 Cobalt Strike 相关文件方面保持领先地位,以增强防御能力以应对如此强大的威胁。”

来自巴别塔的噪音帮助攻击者

Blackberry 的团队描述了为什么使用不太常见的语言帮助攻击者做他们肮脏的事的许多原因:

  • 弥补现有语言的不足。恶意程序员可能会追求其他语言所缺乏的许多东西,无论是更简单的语法、性能提升还是更有效的内存管理。再说一次,一种新语言可能是特定目标环境的完美工具:例如,报告指出,物联网 (IoT) 设备使用较低级别的语言,如 C 或汇编。另一个优点是一些语言的用户友好特性,这可以简化开发并提高开发人员的生活质量:示例包括Python的pip 包管理器或Node.JS 的 npm。

  • 搞砸逆向工程。并非所有恶意软件分析工具都支持奇异的编程语言,这使得分析变得困难重重。“与传统的基于 C/C++/C# 的二进制文件相比,用 Go、Rust、Nim 和 DLang 编写的二进制文件在反汇编时会显得更加复杂、复杂和乏味,”黑莓研究人员解释说。

  • 搞砸了基于签名的检测。为了发现签名,该签名必须保持不变。静态特征的一个例子是散列,它要求每个字节都相同,无论是整个文件的散列,还是证书的散列等等。 调整这些先前静态特征的新语言变体可能无法被发现. 一个例子是 BazarLoader,它是用 Nim 重写的。
    “基于静态属性的现有恶意软件家族的签名在用这些更晦涩的语言重写后标记相同的恶意软件几乎没有成功。在像 Buer 和 RustyBuer(以及 BazarLoader 和 NimzaLoader)这样的情况下,通常必须创建新规则来标记这些相切相关的变体,”研究人员写道。

  • 混淆视听。当谈到外来语言时,考虑到它相对较新的事实,语言本身几乎可以起到混淆的作用。研究人员说:“语言本身可以产生与传统混淆类似的效果,可用于试图绕过传统安全措施并阻碍分析工作。”

  • 交叉编译更有效地针对 Windows 和 Mac。恶意软件开发人员可以编写一个恶意软件变体并对其进行交叉编译,以针对大多数企业中使用的多种架构和操作系统。恶意软件作者需要更少的工具来定位网络,从而可以用更少的工作来构建更广泛的网络。

  • 教老狗新把戏。根据这篇文章,恶意软件开发人员正在使用用外来语言编写的释放器和加载器来增强用 C++ 和 C# 等传统语言编写的旧恶意软件。同样,这节省了大量工作,因为作者可以跳过重新编码恶意软件的费力过程,而可以简单地将其包装在新的 dropper 或 loader 的重写交付方法中。

或者,拥有深厚资源的威胁参与者正在用新语言完全重写现有的恶意软件,而不仅仅是包装器和加载器。示例: BazaLoader 切换到 NimzaLoader,而 Buer 切换到RustyBuer。

反击

Blackberry 建议,为了捕获这些多语言恶意软件家族,软件工程师和威胁研究人员如果采用动态或行为签名、通过沙箱输出标记行为的签名或端点检测和响应 (EDR),将有更好的机会,或者记录数据。报告称:“在这些情况下,这些技术可能更加可靠。”

研究人员表示,如果静态签名失败,采用与实现无关的检测规则来标记动态行为会有所帮助,因为恶意软件通常以相同的方式运行,尤其是当恶意软件被重新编码时。“在其他情况下,例如通常使用 Windows API 调用的有限子集注入进程的 shellcode 加载器,可以使用该有限子集识别它们,”报告阐明。

研究人员说,同样,在二进制文件中使用库通常可以“签名”。“本报告中调查的语言具有绑定,允许它们与 Win32 API 接口并使用这些 API 调用。从本质上讲,他们可以使用与更传统的语言(如 C++)几乎相同的方法。情况并非总是如此,因为特定语言可以使用自己的 API 代替 Win32 API。例如,他们可以使用加密库来限制某些事件的可见性。但是,在二进制文件中使用这些库通常也可以“签名”。”

黑莓警告说,恶意软件样本分析工具要赶上这些新语言还需要一段时间,但安全社区“必须积极主动地防御新兴技术和技术的恶意使用”。

“行业和客户必须了解并密切关注这些趋势,因为它们只会增加,”Blackberry 的 Milam 建议道。

恶意软件制造者使用“异国情调”编程语言相关推荐

  1. 具有异国情调的迷迭香小羊排

    [@more@] 情人节,本来就是个洋鬼子节,情侣们烛光晚餐的好去处当然是暗暗幽幽的浪漫西餐厅.除了鲜花和巧克力,你有没有为他/她选好一份饱含心意的礼物呢? 这份礼物,不一定要名钻名表,不一定多么昂贵 ...

  2. 凭什么说这门编程语言是下一代 Java?

    问世于 1987 年的面向并发的编程语言 Erlang,比 Java 和 Ruby 等老牌语言都要出现得早,但是彼时的 Erlang 并不被业界广泛地熟知,因为在其发布的十年间,它只作为商业产品出售且 ...

  3. Erlang开源20周年:这门编程语言见证了互联网的技术成长

    Erlang于1998年12月8日星期二以开源的形式发布.你还记得那个星期你在哪里吗?我在达拉斯(德克萨斯州):我多次访问爱立信美国分公司,帮助他们建立了一个从事AXD301交换机研发的Erlang团 ...

  4. 微软推出 Project Freta:免费查找云虚拟机上的恶意软件

     聚焦源代码安全,网罗国内外最新资讯! 编译:奇安信代码卫士团队 微软推出未来的虚拟机取证服务 Project Freta,使任何人都能从云基础设施上的内存中提取恶意软件. 被列为"技术展示 ...

  5. 恶意文件 大数据案例库_无文件恶意软件感染完整指南

    有时,你可能会发现自己更想回到事物简单的年代,这个时代诞生了太多的技术,让我们的生活在更轻松的同时也变得更加复杂.其实不光是我们,网络安全专家也会经历这样的反思时刻,特别是当他们遇到无文件恶意软件感染 ...

  6. 无文件恶意软件感染完整指南

    原文链接:http://app.myzaker.com/news/article.php?pk=5c6b5bf977ac640fa908cd84 目录 什么是无文件感染 ? 为什么网络罪犯使用无文件恶 ...

  7. HummingBad恶意软件(介绍)

    建议:不应该从官方应用商店以外的渠道下载App,因为非官方的渠道下载的软件没有收到谷歌和苹果的审核,通常容易被隐藏恶意软件入侵我们的智能手机. 据Check Point的最新报告显示,目前在中国地区出 ...

  8. 功能性,声明式和命令式编程[关闭]

    功能,声明和命令式编程这两个术语是什么意思? #1楼 命令式 - 表达式描述要执行的动作序列(关联) 声明性 - 表达式是有助于程序行为的声明(关联,交换,幂等,单调) 功能 -词汇具有值作为唯一的影 ...

  9. 使C#代码现代化——第四部分:类型

    目录 介绍 背景 经典类型系统 剖析C#的类型系统 现代方式 生成迭代器 丢弃(Discards) 处理异步代码 模式匹配 可空类型 见解 结论 兴趣点 介绍 近年来,C#已经从一种具有一个功能的语言 ...

最新文章

  1. 约瑟夫环java链表_java使用链表实现约瑟夫环
  2. C++11多线程编程-两个进程轮流打印1~100
  3. 使用 KubernetesClient 操作 kubernetes
  4. 哈老师一到的飞鸽传书
  5. 使用com.alibaba.fastjson.JSONObject构造简单的JSON数据
  6. 带你了解极具弹性的Spark架构的原理
  7. android应用开发(23)---处理Activity状态更改
  8. 突发!百度AI开发者大会李彦宏遭泼水 百度官方回应...
  9. python怎么汇总数据_如何在Pandas Python中汇总数据?
  10. win10计算机管理字体糊,win10字体发虚模糊正确解决方法(5个方法)
  11. ADB下载及常用命令
  12. 如何用ChemDraw Prime 绘制任意弧线箭头
  13. [计算机组成原理]定点数运算及溢出检测
  14. UE支持的Codec对比
  15. play框架使用起来(6)
  16. 肖申克的救赎 经典语录
  17. ubuntu:VIM使用
  18. 可伸缩服务架构:框架与中间件
  19. EasyCVR视频广场iframe链接集成后播放失败是什么原因?
  20. 数据库---战德臣第四章--关系代数笔记

热门文章

  1. linux wc 命令详解,linux wc命令详解
  2. Matlab之基于MTI雷达生成表面杂波和目标回波(附源码)
  3. 港藤商贸插上世纪福星珠宝软件翅膀
  4. 拓嘉启远:与拼多多售前客服相关的核心数据
  5. linux网卡的vlan配置,linux增加vlan网卡配置
  6. 幽灵行动荒野服务器位置,幽灵行动荒野找出主数据库服务器
  7. Pymysql介绍及用法
  8. JNA粗浅的一些讲解
  9. 新房着急入住用什么除甲醛 新房除甲醛最有效方法排行榜
  10. 常用的几种java集合类总结