近年来,NPM、PyPI等开源组件仓库是投毒的重灾区,今天从攻防的视简述攻击者是如何针对性的对某个目标进行投毒,企业又该如何进行防范。
攻击者最常用的投毒手法为命名混淆和组件抢注,区别如下:
1. 命名混淆
攻击者在信息收集阶段,得知目标企业使用的组件清单,攻击者在官方仓库发布命名相似的投毒组件,例如投毒包mysql-connector-py模仿mysql-connector-python,当目标企业用户在安装组件的时候不小心拼写错误则会直接中招。
2. 组件抢注
如果攻击者的信息收集能力比较牛p,获取了目标企业私有仓库中的组件清单(一方包),并且目标企业并没有在官方仓库中进行注册,那么攻击者可直接在官方仓库中提前注册同名的恶意组件,当目标企业用户未正确配置私有源,则会直接从官方仓库拉取到攻击者发布的投毒包。
3. 还有MavenGate攻击(针对Maven组件)
原理:攻击者收集目标企业过期域名注册的Maven组件,通过接管域名进而接管Maven仓库中的GroupID对应的Maven组件。
例如某家公司的域名 sub.compony123.com 注册的Maven的GroupID为 com.compony123.sub,如果该域名过期了,攻击者可购买该域名,并接管对应的 com.compony123.sub 对应的Maven组件。
1. 公开的项目依赖(适用于命名混淆)
从Github/Gitee等平台,从目标企业公开项目中的依赖文件中获取依赖信息:
2. 目标企业的产品、域名等信息(适用于组件抢注)
通过企业官网等渠道,获取企业的产品名、域名/子域名、公司名、业务系统、招聘信息等信息,这些名称有可能是企业内部组件的命名,示例:
针对不同语言仓库,有不同的投毒防范措施:
1. 强制使用私有源仓库拉取内部组件
2. 提前将内部组件名、组织名、GroupID等在公开仓库上进行抢注
3. 建立沙箱环境,同步到私有源之前针对组件进行检测
4. 建立应急下架流程,订阅实时投毒情报,第一时间将投毒组件进行隔离
5. 在NPM、Nuget等支持作用域的平台上使用私有命名空间(如@compony/xxx)隔离一方包和三方包。
原文始发于微信公众号(KeepHack1ng):攻防视角看开源组件投毒
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论