一、小白剧场
小白:最近显卡的价格还是在一路上涨,有个朋友还说他想卖掉自己的显卡,赚一点差价。
大东:确实,19年的显卡现在可能已经翻一番了。
小白:似乎是和产能的下降有关。
大东:没错,除了产能下降之外,虚拟货币的火热也是显卡价格上涨的一大原因。
小白:“矿老板”囤积显卡来挖矿,市场供大于求,显卡价格自然就会上涨。我还看到有新闻报道说:还有黑客入侵电脑让你的电脑替他挖矿呢。
大东:这样的现象的确存在。最近,黑客已经不满足通过入侵个人主机让个人主机帮忙挖矿了,他们盯上了服务器,例如 github、docker hub、travis c++I 和 CirCle CI等。
小白:这是神马情况?东哥你可以讲一讲吗?
二、话说事件
大东:当然可以,让我捋一捋事情的经过。
小白:如果黑客入侵github的服务器,听起来技术难度很高的样子。
大东:其实他们是钻了github的一个空子,这个入侵过程可能比侵入PC还要容易,甚至不需要个人上当受骗。侵入PC还可能通过钓鱼邮件勾到上当者呢。
小白:欸,那是怎么做到的呢?
大东:其实是利用了github action的自动执行工作流的功能,轻松将挖矿程序运行在github的服务器上。只需要提交Pull Request,即使项目管理者没有同意,恶意挖矿代码依然能够执行。
Github action(图片来自网络)
小白:啊,听起来操作确实比较简单,那github的工作人员有采取措施缓解或者制止吗?
大东:github人员当然也是想禁止这种现象的发生,但是似乎没有起到很好的效果。他们采取的方式是封锁违规账号,但是官方封锁一个账号,黑客就可以新建一个账号,就像在玩“猫和老鼠”游戏一样,黑客不断换马甲号,官方一直封号,屡禁不止呀。官方人员心里也很苦。
小白:那这个现象是什么时候被发现的,到现在有多久了?
大东:去年11月被一位敏锐的程序员发现有黑客在薅github服务器的羊毛,到现在这种攻击方式还存在,甚至有荷兰的程序员发现攻击代码里竟然存在中文。
攻击代码截图(图片来自网络)
小白:我如果是github的工作人员,我的内心一定很郁闷。那我们普通用户有什么可以做的事情吗?
大东:虽然这种攻击不需要被攻击的仓库管理者接受恶意Pull Request,但也是有一个限定条件的,那就是需要在.github/workflows目录里面的任意.yml文件中配置了在收到Pull Request时执行。这样来自黑客的Action才会被自动执行。
小白:所以我如果没有使用这个功能,黑客大概也不会找上我。
大东:没错。
小白:那如果我需要使用这个功能呢?这岂不是给了黑客可乘之机?
大东:不必太担心,有解决办法的。你可以设置只允许本地Action或只允许Github官方及特定作者创建的Action。
设置截图(图片来自网络)
小白:学到了学到了。
大东:而且你还可以将情况反馈给客服,GitHub会对恶意账号进行封号和关闭相关Pull Request的操作。
三、大话始末
小白:我还想知道这种攻击行为是怎么被发现的,东哥你清楚吗?
大东:那我也讲一下这个被发现的始末吧。
小白:好啊好啊。
大东:去年11月,有一名名为Tib的程序员发现,自己在一个没有参加的repo上收到了PR请求。令他感到惊讶的是,他在14个小时内就收到了7个,而且这些请求全是来自一个“y4ndexhater1”的用户,且没有任何描述内容。
Tib收到的请求(图片来自网络)
小白:确实有一点点奇怪,那这名程序员怎么处理的呢?
大东:Tib顺着好奇心点进项目主页看了看,然后发现了几个不太正常的点。
小白:是什么呢?
大东:首先,这个项目不是热门项目,star数量为0。其次打开项目主页后发现,项目内容是Perl项目的github action、circle ci、travis-ci示例代码集合,ReadMe文档看起来也是非常混乱的。而且这个看起来混乱、冷门的repo,竟然在3天里被fork了2次。
小白:这看起来都不像是一个正经的开源项目。后来呢?
大东:然后这名程序员发现自己的工作流中加入了一个ci.yml文件。
小白:这份代码有什么问题?
大东:这里面有一行内容:eval “$(echo “YXB0IHvwZGF0ZSAt。
小白:欸,这是什么?
大东:这串看似神秘的字符,其实是base64编码,经过翻译后,就可以得到另一段代码。
小白:嗅到了阴谋的气息,这段代码的目的是什么呀?
大东:它会下载一个prog二进制代码。
小白:惊,下载的这个prog二进制代码应该就是最后的挖矿程序吧?
大东:没错,为了保险起见,Tib在docker容器中运行了此程序,他还断开了电脑的网络连接。经过运行之后,最终发现这个prog是一个名为XMRing的挖矿程序。
四、小白内心说
小白:可怕,环环相扣。黑客为了使用免费服务器挖矿也下了不少功夫呀。
大东:哈哈哈,不然他们怎么“借用”github的服务器呢。事实上,除了github外,安全公司Aqua还推测,像Docker Hub、Travis CI、Circle CI这些SaaS软件开发环境,都可能遭受这类攻击。
小白:攻击的手法应该与攻击github的类似吧。
大东:是的,在这个攻击过程中,首先会派生一个合法的repo,这个repo负责将恶意的GitHub Action添加到原始代码。然后,黑客再向原始repo提交一个PR,将代码合并回原始repo。下载的挖矿程序会伪装成prog或者gcc编译器,通过提交PR在项目执行自动化工作流。此时服务器将运行伪装后的挖矿程序。
小白:那攻击一次之后有什么效果呢?
大东:一次攻击就可以运行多达100个挖矿程序,据Aqua估计,仅在三天的时间里,挖矿黑客就在GitHub上有超过2.33万次commit、在Docker Hub上5.8万次build,转化了大约3万个挖矿任务。github服务器的计算量也因此受到了不少影响。
小白:希望github快快找到杜绝此类事件发生的办法。
大东:我们也可以设置刚刚所说的配置,让黑客没办法利用这个漏洞。
小白:没错,我还注意到程序员在检测程序时,断掉了网络,并且在docker中运行。我们在运行不明程序时,也要保持谨慎态度呀。
大东:不错不错,值得表扬。
参考资料:
1. 黑客用GitHub服务器挖矿,三天跑了3万个任务,代码惊现中文
https://mp.weixin.qq.com/s/0QXukYOoHbtCb-4Y5Af1Hw
2. Threat Alert: Massive Cryptomining Campaign Abusing GitHub, Docker Hub, Travis CI & Circle CI
https://blog.aquasec.com/container-security-alert-campaign-abusing-github-dockerhub-travis-ci-circle-ci
3. Issue 2070: Github: Widespread injection vulnerabilities in Actions
https://bugs.chromium.org/p/project-zero/issues/detail?id=2070
来源:中国科学院信息工程研究所