如需转载请注明出处,侵权必究。
对DevOps的抢劫:
理解和缓解持续集成平台上的恶意挖矿行为
今天分享的是关于持续集成平台中恶意挖矿行为的一项研究工作。作者来自印第安纳大学伯明顿分校和华中科技大学,其中来自印第安纳大学伯明顿分校的王晓峰、廖晓静课题组在近年侧重于对网络犯罪问题的研究,来自华中科技大学的李志,主要研究方向包括云原生安全、可信容器与系统安全、云黑产。本文首次发现了滥用DevOps平台进行大规模非法挖矿的行为,并系统地调查研究了DevOps平台中非法挖矿攻击的流程、特征以及造成的经济损失。
Cryptojacking & DevOps
背景介绍
图表 1.Attack overview
图表 2.恶意Dockerfile示例
数据收集
图表 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。
图表 4. Distribution of victimized CI platforms
-
攻击策略为了逃避审查的演变。例如,重命名加密挖掘工具以避免检测;在平台超时之前终止挖掘作业,作者发现每个Cijacking实例平均重启了105次。
-
一些攻击者拥有多个代码库,最多达到297个,用于将挖掘作业同时分派到多个CI平台。
-
在所有发现的实例中,73.08%的钱包地址被至少768个(38.9%)Cijacking实例使用。这说明不同CI平台的不同Cijacking实例可能属于同一人,可视为一次活动。作者将实例聚类后检测出了30个攻击活动,涉及1886个实例。下图所示最大攻击活动包含879个Cijacking实例。
图表 5.Cijacking Top-10 campaigns identified by wallet address
-
Cijacking实例的平均生命周期为42.8天,代码库平均寿命为337.8天,其中86.18%的实例在近两年启动,说明近年来Cijacking行为确实泛滥。
图表 6. Lifecycle of Cijacking instances
-
代码仓库可能存在被盗号的情况。作者发现有一些仓库的创建时间与cijacking的开始时间间隔几年,因此联系了一个代码库的所有者,所有者表示并不知道仓库的变化,表明部分仓库拥有者的账号可能被盗。
缓解措施
如何防范有别于传统挖矿劫持的新型Cijacking?以往基于签名检测的方法通过寻找挖矿代码模式和运行时的统计数据,如CPU、内存占用,容易被代码混淆导致漏报,另外,合法的CI任务也会占用大量资源,因此也会导致误报。
图表 7. Mitigation architecture
作者提出了Cijitter来缓解cijacking所带来的影响,利用挖掘加密货币的特性(需要在一系列有限时间内各自完成一个小任务,有一个没有完成就会浪费投入在任务中的所有计算)引入运行时延迟,另外,挖掘算法进行密集的哈希计算必然会导致频繁的内存页面访问,因此优先考虑对这些内存页面的访问进行干扰。具体步骤为Profiler周期性检查页表的访问位,如果对某页面的访问频率超过阈值,则DelayInjector会在两个检查周期之间的间隔期间对页面的每次访问注入延迟。
Cijitter性能评估
图表 8.Effectiveness on defending against different miners
图8中作者对比了9种加密货币在加入Cijitter后挖矿时的哈希率,空白部分显示了Cijitter后降低的哈希率,总体来说挖矿程序的哈希率平均较少了95.3%。
另外,使用了Cijitter之后,一些加密货币(包括收益最高的Monero)的收益降为了0,即无利可图。
图表 9.Effectiveness of Cijitter and references
图9中展示了Cijitter与已有的其他方法在多任务情景下抑制率的比较,Cijitter在多任务情景下表现更好。
图表 10.Performance overhead on CI jobs
如图10所示,作者随机抽取了264个实际的CI作业用于测试Cijitter的开销,其中94.3%的CI作业开销低于10%,95%的CI作业开销在74.2S之内。根据实际测试,绝对开销小于1分钟被认为对开发人员的生产力影响极低,如果相对开销低于10%,工作只会受到轻微影响。在Cijitter下,没有CI作业的绝对开销超过一分钟且相对开销超过10%。
结论
Q&A
Q1:先前的工作或文章有哪些不足?
Q2:理论上,只要提供足量计算资源的平台都可以使用,为什么要选择CI平台?
CI平台的免费使用时间更长,提供的内存资源也更多。
Q3:作者通过分析Cijacking行为的趋势和生命周期,进一步得到了哪些信息?
不同CI平台的不同Cijacking实例可能是被同一个人操纵的;攻击者会通过创建新账号或盗取他人账号应对平台的封号或免费资格到期。
Q4:Cijitter的实现原理是什么?
利用挖矿劫持的两个特性:需要在若干限制时间窗口中各自完成一个小的计算任务,只要有一个没完成就会前功尽弃;使用的挖矿算法会进行密集的哈希计算,从而频繁访问某些内存页面。
借助这两个特性:Cijitter考虑向时间窗口中注入延迟,限制对I/O密集的内存页的访问。
Q5:攻击者是否有可能避免Cijitter的拦截?
为了避免对I/O密集的内存页的访问拦截,攻击者可以将计算从一个内存页分到多个或者为同一个计算任务分配多个内存副本,在访问某一内存页受限后转而访问其他副本以继续挖矿作业,但是无论哪种做法都会不可避免地降低cache/TLB的命中率和哈希率,因此虽然可以,但挖矿的收益就大大降低了。
文案:张聪聪
排版:CXT
戳“阅读原文”即可查看论文原文哦~
复旦白泽战队
一个有情怀的安全团队
还没有关注复旦白泽战队?
公众号、知乎、微博搜索:复旦白泽战队也能找到我们哦~
原文始发于微信公众号(复旦白泽战队):白泽带你读论文 | Robbery on DevOps
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论