Skip to main content

攻击供应链

存储库管理软件

在企业环境中,我们常常遇见存储库管理软件,例如 JFog Artifactory, Nexus Sonatype 等。这些软件存储了企业内在用的软件包、项目文件、二进制文件等。

image.png

image.png

image.png

Sonatype

这些Nexus 或 JFrog Artifactory 等工件存储库管理器充当组织软件可信来源沦陷会产生严重后果能够控制并导致通常所说的供应链攻击供应链污染。这是由于这些系统在软件开发或基础架构配置和交付过程使发挥的关键作。 原因如下:

集中信任:这些系统是组织内信任包和应用程序的版本中央来源这可以防止开发人员直接、CI/CD 系统和部署流程都网络上获取不受信任或不稳定的软件。对于这些应用系统中提取工件具有上传、部署、写入等权限的用户可以将项目或文件放置在应用的存储库中,终端用户或计划任务可以将并期望这些应用实例配置为包存储库,以便在服务器上的正常安装过程中使用,或者直接下载可执行文。考虑到这些应用企业用户获取其他软件的绝对可信来源,因此的。如果攻击者通过写入可以破坏系统并将合法工件替换为恶意文件污染了供应链大量用户会被攻陷,危害极大。正因为这样的应用被认为是可信的来源。因此用户不太担心存在恶意软件的可能性便会最终传播到多个系统

考慮广泛影响:根据组织的规模和工件存储库的使用范围,单个恶意文件最终可能会出现在大量系统上。这可能会导致终端系统遭不同企業大规模破坏。

持久性和版本控制:因为工件存储库保留旧版本的工件,所以恶意文件在受损后很长时间内仍可供下载,除非及时发现并删除攻击者上传的恶意文件,否则系统可能会在工件存储库最初遭到破坏后很长时间内受到危害。

自动化:在 DevOps 环境對於存儲庫以及項目管理軟,新软有著不同偏好的构建和部署经常发生,而針對這些軟且通常是自动化的。这意味着攻击者分发的恶意文件可以快速分布到整个组织,并且很难追踪和删除工件的所有实例。

访问机密:通常,这些系统可以访问部署应用程序所需的机密,例如数据库凭证、API 密钥等。如果遭到沦陷,擊方法也有所不同击者可以访问这些敏感信息。

由于这些原因因此本篇更加注工件存储库的安全性至关通用攻擊方法,並假設這些軟件不存在 CVE 漏洞


匿名访问

例如 Artifactory 和 Sonatype,是允许匿名访问的,即攻击者不需要凭证也可以访问存储库中的文件,甚至具有一定权限,例如更改文件或项目的属性。并且,如果存在更严重的配置失误,匿名状态下甚至可以部署文件,这种情况对于攻击者无疑是快的胜利。如果即便在匿名状态下没有任何写权限,我们应该枚举匿名访问的所有权限。除此之外,因为存储库管理软件同样可能存储了内部应用的源代码以及其他敏感文件,我们可以从中提取敏感信息,例如 API Key,Key明文帐号密码等。

 

供应链污染

不管是具有写权限的匿名访问,还是获得了存储库管理软件的有效凭证,如果我们具备写权限,便可以上传替换更改文件。从攻击者的角度,将经常被下载或自动化安装的文件替换为植入了木马的程序,可以从而攻陷污染众多主机与用户。

image.pngimage.png

如上图所示,该二进制文件已经被下载了 73 次了,说明无论是终端用户下载,还是服务器上的计划任务自动拉取文件并执行,只要该文件在供应链中被污染了,后果严重。但即便在授权的渗透或者红队行动中,对于此类攻击依旧要极为谨慎,因为要彻底清除污染十分麻烦。

 

攻击计划任务

在 Dev01 的 /opt 目录下,我们发现了一个有意思的文本文件 status_report.txt。查看其内容,看起来是一些用于搜集主机信息的命令的执行输出。根据文件权限,我们猜测是 root 用户在执行某个脚本后将输出保存在了这个文件里。

image.png

观察到这个文件在不断更改,意味着脚本可能在背景中以特定时间间隔执行,即有着类似于计划任务的活动在驱动着。

image.png

使用 pspy (https://github.com/DominicBreuker/pspy) 观察背景中的进程,我们发现了这些相关的内容:

image.png

简单地说,有一个在 root 目录下的脚本 status.sh 在负责从仓库 https://github.com/raven-medicine/Automation 克隆最新的项目到 /root/Automation 目录中,目录里的脚本 cron.sh 被执行。

回顾一下我们在课程早期的时候,在 Web01 的 FTP 服务器中发现了一个文本文件,包含了一对有效的 Github 帐号

image.png

用该凭证得以成功登陆。

image.png

如我们所料,这个脚本被克隆到了 Dev01 的本地然后被 root 用户执行。

image.png

既然我们有了Github 凭证,那么可以更新该脚本,插入恶意命令,实现对这个简单供应链的污染。就 Dev01 上而言,因为是 root 用户执行的,如果我们尚未找到提权路径,我们可以用此方法来实现本地特权提升