几天前,有消息称在 PyPI 目录(Python 包索引)中发现了 11 个包含恶意代码的软件包。
在发现问题之前,这些软件包总共被下载了约 38 次,值得注意的是,检测到的恶意软件包因其使用复杂的方法来隐藏与攻击者服务器的通信渠道而脱颖而出。
发现的软件包如下:
- 重要包裹 (6305 次下载) e 重要包 (12897):这些包 建立与外部服务器的连接 在连接到 pypi.python.org 的幌子下 提供对系统的外壳访问 (反向shell)并使用trevorc2程序隐藏通信通道。
- 测试 (10001)和 信息板 (946): 使用 DNS 作为通信通道来传输信息 关于系统(在第一个数据包中,主机名,工作目录,内部和外部 IP,在第二个数据包中,用户名和主机名)。
- 猫头鹰 (3285) 不和谐安全 (557)Y 派对 (1859) - 识别系统上的 Discord 服务令牌并将其发送到外部主机。
- 制造商 (287):将/etc/passwd、/etc/hosts、/home的标识符、主机名和内容发送到外部主机。
- 10分10 (490) - 建立到外部主机的反向 shell 连接。
yandex-yt (4183):显示有关受感染系统的消息并重定向到包含有关其他操作的附加信息的页面,该页面通过 nda.ya.ru (api.ya.cc) 发布。
因此,需要特别注意 importantpackage 和 important-package 数据包中访问外部主机的方法,这些数据包使用 PyPI 目录中的 Fastly 内容分发网络来隐藏其活动。
实际上,请求是发送到pypi.python.org服务器的(包括在HTTPS请求中在SNI中指定python.org的名称),但是攻击者控制的服务器名称是在HTTP头“Host »。 内容分发网络向攻击者的服务器发送了类似的请求,在传输数据时使用到 pypi.python.org 的 TLS 连接的参数。
PyPI的基础架构由 Fastly 内容分发网络 (CDN) 提供支持。Fastly 使用 Varnish 的透明代理缓存典型请求,并采用 CDN 级别的 TLS 证书处理(而非终端服务器)来转发 HTTPS 请求。无论目标主机是什么,请求都会发送到代理,代理通过 HTTP“Host”标头识别目标主机,并且域名主机名绑定到所有 Fastly 客户端上常见的 CDN 负载均衡器 IP 地址。
攻击者的服务器也注册在了 CDN Fastly 上,Fastly 提供免费套餐,甚至允许匿名注册。值得注意的是,当创建“反向 shell”时,攻击者会使用类似的方案向受害者发送请求,但这次是由攻击者的主机发起的。从外部来看,与攻击者服务器的交互看起来像是与 PyPI 目录的合法会话,并使用 PyPI TLS 证书进行加密。一种名为“域名伪装”的类似技术此前曾被用于绕过封锁,从而主动隐藏主机名。该技术涉及使用某些 CDN 提供的 HTTPS 选项,在 SNI 中指定虚拟主机,并在 TLS 会话中通过 HTTP 主机头传递请求的主机名。
为了隐藏恶意活动,额外使用了 TrevorC2 包,这使得与服务器的交互类似于正常的网页浏览。
pptest 和 ipboards 数据包使用不同的方法来隐藏网络活动,基于对 DNS 服务器的请求中的有用信息进行编码。 恶意软件通过执行 DNS 查询来传输信息,其中传输到命令和控制服务器的数据使用子域名中的 base64 格式进行编码。 攻击者通过控制域的 DNS 服务器来接受这些消息。