白泽带你读论文 | Robbery on DevOps

admin 2022年12月10日11:28:24评论23 views字数 4631阅读15分26秒阅读模式

如需转载请注明出处,侵权必究。

对DevOps的抢劫:

      理解和缓解持续集成平台上的恶意挖矿行为


    今天分享的是关于持续集成平台中恶意挖矿行为的一项研究工作。作者来自印第安纳大学伯明顿分校和华中科技大学,其中来自印第安纳大学伯明顿分校的王晓峰、廖晓静课题组在近年侧重于对网络犯罪问题的研究,来自华中科技大学的李志,主要研究方向包括云原生安全、可信容器与系统安全、云黑产。本文首次发现了滥用DevOps平台进行大规模非法挖矿的行为,并系统地调查研究了DevOps平台中非法挖矿攻击的流程、特征以及造成的经济损失。

经调查发现,攻击者通过向Dockerfile文件注入恶意命令的方式,利用CI管道中容器镜像的构建过程进行非法挖矿。该攻击行为从2014年出现后一直持续至今,给CI服务及相关云平台造成了严重性能影响及经济损失。当前包括亚马逊云(AWS)、微软云(Azure)、CircleCI和TravisCI在内的23家主流CI服务提供商均在遭受加密挖矿攻击,这类攻击为攻击者带来平均每月超过2万美元的收益。针对该攻击,论文提出了区别于传统挖矿攻击检测的防御技术,旨在通过向CI服务中的任务注入延时抖动,在保障正常任务性能的情况下迫使攻击者无法通过挖矿获益,从而放弃攻击活动。

Cryptojacking & DevOps

在故事开始之前,先介绍一下cryptojacking和DevOps两个术语。

白泽带你读论文 | Robbery on DevOps


Cryptojacking是指在未经授权的情况下使用他人的计算机进行加密货币的挖掘,因此也称作挖矿劫持。传统的cryptojacking一般是通过恶意脚本劫持用户的浏览器进行挖矿。

白泽带你读论文 | Robbery on DevOps

DevOps是软件开发、测试、部署的一种模式,它是敏捷开发的升级版,将敏捷开发中的一次部署改为常态化部署,让开发人员和运维人员更好地沟通合作,使得软件整体过程更加快捷可靠。CI服务平台作用于DevOps开发流程的测试环节,可在代码变更后自动整合项目并进行单元测试,以达到持续集成的目的。

背景介绍

由于挖掘当前主流加密货币需要千兆字节的内存,这是浏览器难以负担的,因此浏览器挖矿劫持浪潮逐渐消退。于是恶意挖矿者转而将矛头指向了资源丰富、保护松散的免费互联网服务——CI平台。作者将不法分子在CI平台上滥用计算资源来挖矿的行为称作Cijacking。与浏览器挖矿劫持不同,Cijacking可以伪装成CI作业,因此更难检测,因为合法的CI工作流(如容器映像构建和测试)也需要密集的计算。

白泽带你读论文 | Robbery on DevOps图表 1.Attack overview

Cijacking发生在攻击者的代码仓库经过CI平台的授权和CI平台写回配置文件到仓库之后,此时攻击者通过向Dockerfile文件注入恶意命令触发非法挖矿行为。图2展示了一个运行恶意挖矿程序的Dockerfile:

白泽带你读论文 | Robbery on DevOps图表 2.恶意Dockerfile示例

为了观测Cijacking,论文首先利用攻击者在挖矿时必须指定的关键挖掘信息检测Cijacking的实例,并在相关数据的分析中揭示了攻击策略的演变、采矿作业的持续时间及其生命周期。随后提出了Cijitter,策略性地向CI工作流的执行注入延时,惩罚资源消耗高的挖掘作业,来缓解Cijacking带来的影响。

数据收集


白泽带你读论文 | Robbery on DevOps图表 3.CijScan architecture


作者提出了CijScan技术,在超过58万个Github仓库中检测Cijacking行为,由于无论在Github仓库的DevOps配置文件中还是在CI平台的执行日志中,GitHub项目在CI平台上的工作流都有完整的记录,所以CijScan从Devops配置文件和CI平台执行日志获取Cijacking的相关线索,如:钱包地址、矿池地址、挖矿程序执行的元数据。

CijScan的具体步骤为:爬虫收集CI相关仓库及其配置文件和CI平台的日志文件;对于配置文件,Interpreter运行命令分析器从中提取命令,然后使用静态参数标识符识别参数,使用上下文构造器来检索相关容器映像的文件系统,外部脚本提取器收集脚本并解析命令和参数;对于日志文件,使用执行跟踪标识符查找每个命令的执行跟踪;Mining Detector使用命令参数和跟踪信息得到钱包、矿池地址、挖矿作业的元数据(如哈希率提示、网络连接状态、挖矿过程反馈)等信息,拥有这些信息的仓库被标记为非法。最终作者标记出了894个非法仓库。

通过以上方法,CijScan在23个平台上共检测到1974个Cijacking实例,与865个GitHub存储库、607个GitHub帐户、71个矿池和104个钱包地址相关联。

主要发现

  • 各平台受害情况如下图,TravisCI拥有最多的Cijacking实例,其次是Wercker和Tddium。

    白泽带你读论文 | Robbery on DevOps图表 4. Distribution of victimized CI platforms


  • 攻击策略为了逃避审查的演变。例如,重命名加密挖掘工具以避免检测;在平台超时之前终止挖掘作业,作者发现每个Cijacking实例平均重启了105次。

  • 一些攻击者拥有多个代码库,最多达到297个,用于将挖掘作业同时分派到多个CI平台。

  • 在所有发现的实例中,73.08%的钱包地址被至少768个(38.9%)Cijacking实例使用。这说明不同CI平台的不同Cijacking实例可能属于同一人,可视为一次活动。作者将实例聚类后检测出了30个攻击活动,涉及1886个实例。下图所示最大攻击活动包含879个Cijacking实例。


    白泽带你读论文 | Robbery on DevOps图表 5.Cijacking Top-10 campaigns identified by wallet address


  • Cijacking实例的平均生命周期为42.8天,代码库平均寿命为337.8天,其中86.18%的实例在近两年启动,说明年来Cijacking行为确实泛滥。

    白泽带你读论文 | Robbery on DevOps图表 6. Lifecycle of Cijacking instances


  • 代码仓库可能存在被盗号的情况。作者发现有一些仓库的创建时间与cijacking的开始时间间隔几年,因此联系了一个代码库的所有者,所有者表示并不知道仓库的变化,表明部分仓库拥有者的账号可能被盗。

缓解措施

如何防范有别于传统挖矿劫持的新型Cijacking?以往基于签名检测的方法通过寻找挖矿代码模式和运行时的统计数据,如CPU、内存占用,容易被代码混淆导致漏报,另外,合法的CI任务也会占用大量资源,因此也会导致误报。

白泽带你读论文 | Robbery on DevOps

图表 7. Mitigation architecture


作者提出了Cijitter来缓解cijacking所带来的影响,利用挖掘加密货币的特性(需要在一系列有限时间内各自完成一个小任务,有一个没有完成就会浪费投入在任务中的所有计算)引入运行时延迟,另外,挖掘算法进行密集的哈希计算必然会导致频繁的内存页面访问,因此优先考虑对这些内存页面的访问进行干扰。具体步骤为Profiler周期性检查页表的访问位,如果对某页面的访问频率超过阈值,则DelayInjector会在两个检查周期之间的间隔期间对页面的每次访问注入延迟。

Cijitter性能评估

白泽带你读论文 | Robbery on DevOps图表 8.Effectiveness on defending against different miners


图8中作者对比了9种加密货币在加入Cijitter后挖矿时的哈希率,空白部分显示了Cijitter后降低的哈希率,总体来说挖矿程序的哈希率平均较少了95.3%。

另外,使用了Cijitter之后,一些加密货币(包括收益最高的Monero)的收益降为了0,即无利可图。

白泽带你读论文 | Robbery on DevOps图表 9.Effectiveness of Cijitter and references


图9中展示了Cijitter与已有的其他方法在多任务情景下抑制率的比较,Cijitter在多任务情景下表现更好。

白泽带你读论文 | Robbery on DevOps

图表 10.Performance overhead on CI jobs


    如图10所示,作者随机抽取了264个实际的CI作业用于测试Cijitter的开销,其中94.3%的CI作业开销低于10%,95%的CI作业开销在74.2S之内。根据实际测试,绝对开销小于1分钟被认为对开发人员的生产力影响极低,如果相对开销低于10%,工作只会受到轻微影响。在Cijitter下,没有CI作业的绝对开销超过一分钟且相对开销超过10%。

结论

    通过对GitHub中代码存储仓库的系统性研究,作者发现GitHub中0.153%正在使用CI服务的代码仓库中均存在滥用CI平台的恶意挖矿行为,涉及865个GitHub代码仓库,共计30个攻击团体。该攻击最早出现于2014年并于2017年首次大规模爆发,至今仍有大量新的攻击实例不断在各CI平台中涌现。此外,作者根据各CI平台可提供算力的历史数据,估算发现最大的攻击团体在36个月中的净收益超过793,836.49美元。
    经对现有恶意挖矿实例的研究后,作者发现此类攻击长期活动于CI平台中,并不断演化以增强自身攻击能力、混淆CI平台中的检测与取证机制,即使攻击者账号被封禁,其依然有能力以极低的成本创建大量账号进行下一轮攻击,最终导致CI平台在与攻击者的博弈中虽能检测到挖矿攻击但难以有效进行遏制。为解决该问题,作者提出一种针对CI平台中加密挖矿攻击的防御方案,该防御方案旨在使挖矿攻击无法获得收益,从而迫使攻击者放弃利用CI平台,且对CI平台中正常任务影响微小。

Q&A

Q1:先前的工作或文章有哪些不足?

    先前的工作要么是研究浏览器中的挖矿劫持,要么只是小范围的研究某个CI平台的挖矿劫持,随着CI平台的发展传播,利用CI平台进行挖矿的行为愈发严重,进一步的更大规模的研究很有必要。
    先前检测和缓解非法挖矿的方法有基于签名检测,寻找挖矿代码模式,这种方法容易受到代码混淆的影响;基于运行时的统计数据(CPU、内存使用率等),可能误杀合法的CI任务,造成假阳性。


Q2:理论上,只要提供足量计算资源的平台都可以使用,为什么要选择CI平台?

    CI平台的免费使用时间更长,提供的内存资源也更多。


Q3:作者通过分析Cijacking行为的趋势和生命周期,进一步得到了哪些信息?

    不同CI平台的不同Cijacking实例可能是被同一个人操纵的;攻击者会通过创建新账号或盗取他人账号应对平台的封号或免费资格到期。


Q4:Cijitter的实现原理是什么?

    利用挖矿劫持的两个特性:需要在若干限制时间窗口中各自完成一个小的计算任务,只要有一个没完成就会前功尽弃;使用的挖矿算法会进行密集的哈希计算,从而频繁访问某些内存页面。

    借助这两个特性:Cijitter考虑向时间窗口中注入延迟,限制对I/O密集的内存页的访问。


Q5:攻击者是否有可能避免Cijitter的拦截?

    为了避免对I/O密集的内存页的访问拦截,攻击者可以将计算从一个内存页分到多个或者为同一个计算任务分配多个内存副本,在访问某一内存页受限后转而访问其他副本以继续挖矿作业,但是无论哪种做法都会不可避免地降低cache/TLB的命中率和哈希率,因此虽然可以,但挖矿的收益就大大降低了。


文案:张聪聪

排版:CXT

戳“阅读原文”即可查看论文原文哦~


复旦白泽战队

一个有情怀的安全团队



还没有关注复旦白泽战队?

公众号、知乎、微博搜索:复旦白泽战队也能找到我们哦~



原文始发于微信公众号(复旦白泽战队):白泽带你读论文 | Robbery on DevOps

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年12月10日11:28:24
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   白泽带你读论文 | Robbery on DevOpshttps://cn-sec.com/archives/1455676.html

发表评论

匿名网友 填写信息