软件供应链投毒 — NPM 恶意组件分析

f41a36c119025d1b673aca1721b0d0ff.gif 聚焦源代码安全,网罗国内外最新资讯!

ee67c83b685ae2da25270eef4a3cae66.png

专栏·供应链安全

数字化时代,软件无处不在。软件如同社会中的“虚拟人”,已经成为支撑社会正常运转的最基本元素之一,软件的安全性问题也正在成为当今社会的根本性、基础性问题。

随着软件产业的快速发展,软件供应链也越发复杂多元,复杂的软件供应链会引入一系列的安全问题,导致信息系统的整体安全防护难度越来越大。近年来,针对软件供应链的安全攻击事件一直呈快速增长态势,造成的危害也越来越严重。

为此,我们推出“供应链安全”栏目。本栏目汇聚供应链安全资讯,分析供应链安全风险,提供缓解建议,为供应链安全保驾护航。

注:以往发布的部分供应链安全相关内容,请见文末“推荐阅读”部分。

7bd8a171820c2274c7e705cae2339f2b.png

一、概述

NPM 仓库是最易遭受投毒攻击的开源仓库之一。最近一个月,奇安信开源卫士开源仓库监控平台检测出超过300个恶意组件,其中大部分的恶意组件攻击方式集中在下载安装阶段。

恶意组件利用 NPM 提供的一系列生命周期钩子执行恶意代码获取敏感信息,如用户名、密码、DNS、服务器ip、GitHub 配置等,发送给攻击者,或者通过反弹shell,造成主机失陷,以此来达到攻击的目的。其中部分恶意代码会经过加密混淆等加工,使检测难度进一步加大。

本文将选取奇安信开源卫士开源仓库监控平台近一个月监测到的部分标志性恶意组件进行分析。

二、部分标志性恶意组件示例及分析

奇安信开源卫士近一个月监测到的部分标志性恶意组件如下表所示:

恶意行为

组件

版本

窃取用户信息

npm_package_devdependencies_sass

2.69.5

banca-movil-ionic-v4

1.1.2

update-material-outline-gap

3.7.14

窃取服务器信息

slotbooking-ui

2.18.0

lifi-contracts

1.0.0

@sber-ufs-sbert/icons

4.45.0

窃取Git账户信息

@gusmano/reext

0.0.225

后门攻击

qr-emvco

1.1.2

deuna-msa-bo-sh-request-manager

6.6.6

doneida

1.0.7

接下来对上表所列的部分组件进行分析。

1

slotbooking-ui

slotbooking-ui@2.18.0版本的包会在安装时运行脚本来窃取服务器信息。

(1)slotbooking-u在安装过程中通过package.json里定义的命令,执行预先编写好的index.js脚本。

35401459ec9f52e84e1b6b4999eec19f.png

(2)脚本会获取服务器内环境变量,以及 /etc/hosts和/etc/resolv.conf 文件内容,hosts 文件是 linux 系统中负责 ip 地址与域名快速解析的文件,/etc/resolv.conf 是DNS客户机配置文件,用于设置 DNS 服务器的 IP 地址及 DNS 域名,还包含了主机的域名搜索顺序。这些信息一旦泄漏,可能会被攻击者利用,对服务器发起攻击。

f9514a641672553c91ebaba7dd13e6c7.png

(3)/etc/hosts 和 /etc/resolv.conf 的文件内容会经过 get_file() 函数进行base64 编码。经过base64编码后的字符串没有特殊字符,不会产生歧义,也没有直接暴露明文,有利于传输。

fb32bdc1c6e6a270c6178ae24bbad2a3.png

(4)最后,恶意组件将收集的信息通过 post 请求发送给攻击者。

c0e9880df1cdd625538164b37d87f780.png

2

@gusmano/reext

@gusmano/reext@0.0.225 版本会在安装时运行脚本窃取服务器的 Git 配置信息,主要会造成用户的 Git 账号和邮箱泄露,并且该恶意包会在执行完恶意代码后自动删除恶意代码。该恶意包的周下载量为1560次。遗憾的是,目前为止该恶意包仍没有被 NPM 官方禁止。

418493dcbfb9a1715aceed5492271de3.png

(1)@gusmano/reext 在下载过程中按照顺序运行 package.json:script 中编写好的 preinstall.js 和 postinstall.js,其中 preinstall.js 收集使用者机器上的 Git 配置信息并发送给攻击者,postinstall.js 负责执行完恶意代码后删除恶意代码脚本和文件。

611949696240f6a82d75d0e85215f3b8.png

(2)preinstall.js 负责收集 Git 配置并发送给攻击者。首先通过服务器环境变量获取 Git 配置文件的位置,其次判断Git的配置文件是否存在,如果存在,则使用 iniparser 模块的 api 对 Git 配置文件进一步解析,获取用户的 Git 配置信息。

d6356e12f677a1cb82f68d30a3b37694.png

(3)获取解析后的 Git 的配置信息对象,将用户机器上 Git 配置中的用户名和邮箱作为 get 请求的参数发送给攻击者。

59214fabeb3ae0a3c23109c0d1cf400a.png

(4)postinstall.js 负责销毁攻击代码,在发送完 Git 配置信息后,会删除掉package.json 中的 script 内容,重写 package.json 文件,同时还会删除指定目录下的所有文件。

87c98b14520e1539c1b59c51773c1d6c.png

3

qr-emvco

qr-emvco@1.1.2 版本安装包会对使用者服务器进行后门攻击

qr-emvc 在安装过程中会运行 packag.json 文件中 scripts:preinstall 下的bash 命令,利用反弹shell直接操控被攻击者服务器。

f1dbaf9716083e10f954ca3cf14f7b64.png

三、总结

利用 NPM 安装过程中执行各种命令或脚本的攻击方式越来越多,部分恶意组件仍可从官方或镜像仓库中下载安装。因此,开发者需提高安全防范意识,建议在使用第三方组件前先查看 package.json 文件内容,排查可能引入的安全风险。

奇安信开源卫士可以从项目中识别已使用的恶意开源组件,并在结果界面进行展示。

80d2b9748d15b43018c0156fe73b3923.png

马上试用开源卫士:https://oss.qianxin.com

a0f2bd33be630f1edb72eba3d5ffa3c1.jpeg

开源卫士试用地址:https://oss.qianxin.com

代码卫士试用地址:https://codesafe.qianxin.com


推荐阅读

奇安信开源卫士率先通过可信开源治理工具评估

在线阅读版:《2023中国软件供应链安全分析报告》全文

奇安信入选全球《软件成分分析全景图》代表厂商

奇安信入选全球《静态应用安全测试全景图》代表厂商

英韩:Lazarus 黑客组织利用安全认证软件 0day 漏洞发动供应链攻击

Okta 支持系统遭攻陷,已有Cloudflare、1Password等三家客户受影响

黑客攻陷Okta发动供应链攻击,影响130多家组织机构

Okta 结束Lapsus$ 供应链事件调查,称将加强第三方管控

Okta 提醒:社工攻击正在瞄准超级管理员权限

《软件供应商手册:SBOM的生成和提供》解读

Telegram 和 AWS等电商平台用户遭供应链攻击

美国商务部发布软件物料清单 (SBOM) 的最小元素(上)

美国商务部发布软件物料清单 (SBOM) 的最小元素(中)

美国商务部发布软件物料清单 (SBOM) 的最小元素(下)

速修复MOVEit Transfer 中的这个新0day!

MOVEit 文件传输软件0day被用于窃取数据

MSI UEFI 签名密钥遭泄漏 恐引发“灾难性”供应链攻击

OilRig APT 组织或在中东地区发动更多 IT 供应链攻击

“木马源”攻击影响多数编程语言的编译器,将在软件供应链攻击中发挥巨大作用

GitHub 在 “tar” 和 npm CLI 中发现7个高危的代码执行漏洞

流行的 NPM 包依赖关系中存在远程代码执行缺陷

速修复!热门npm 库 netmask 被曝严重的软件供应链漏洞,已存在9年

Npm 恶意包试图窃取 Discord 敏感信息和浏览器文件

微软“照片”应用Raw 格式图像编码器漏洞 (CVE-2021-24091)的技术分析

速修复!热门npm 库 netmask 被曝严重的软件供应链漏洞,已存在9年

SolarWinds 供应链事件后,美国考虑实施软件安全评级和标准机制

找到软件供应链的薄弱链条

GitHub谈软件供应链安全及其重要性

揭秘新的供应链攻击:一研究员靠它成功入侵微软、苹果等 35 家科技公司

开源软件漏洞安全风险分析

开源OS FreeBSD 中 ftpd chroot 本地提权漏洞 (CVE-2020-7468) 的技术分析

集结30+漏洞 exploit,Gitpaste-12 蠕虫影响 Linux 和开源组件等

限时赠书|《软件供应链安全—源代码缺陷实例剖析》新书上市

热门开源CI/CD解决方案 GoCD 中曝极严重漏洞,可被用于接管服务器并执行任意代码

GitKraken漏洞可用于盗取源代码,四大代码托管平台撤销SSH密钥

因服务器配置不当,热门直播平台 Twitch 的125GB 数据和源代码被泄露

彪马PUMA源代码被盗,称客户数据不受影响

多租户AWS漏洞暴露账户资源

适用于Kubernetes 的AWS IAM 验证器中存在漏洞,导致提权等攻击

PyPI 仓库中的恶意Python包将被盗AWS密钥发送至不安全的站点

热门PyPI 包 “ctx” 和 PHP库 “phpass” 长时间未更新遭劫持,用于窃取AWS密钥

如何找到 AWS 环境下应用程序中易于得手的漏洞?

题图:pixabay License

转载请注明“转自奇安信代码卫士 https://codesafe.qianxin.com”。

d49733ad60c76ac6962afd87f50a251f.jpeg

59e041c0d7beb5ecce8b0e5b5881571d.jpeg

奇安信代码卫士 (codesafe)

国内首个专注于软件开发安全的产品线。

   318d4c4e8c6caee17ec8381a3e700231.gif 觉得不错,就点个 “在看” 或 "赞” 吧~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/248304.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

redis五种数据结构特点

redis五种数据结构特点 redis-string介绍SDS内部存储数据结构三种编码方式特点总结 redis-list介绍quicklist特点总结 redis-hash特点总结 redis-set介绍 特点总结redis-zset介绍特点总结 redis使用五种数据结构,分别是string(字符串)&#x…

使用Python实现对word的批量操作

Python在平时写写小工具真是方便快捷,Pyhon大法好。以下所有代码都是找了好多网上的大佬分享的代码按照自己的需求改的。 调用的库为Python-docx、win32com、PyPDF2、xlwings(操作excel)。 因为公司的任务要对上千个word文件进行批量操作&a…

Flink+Kafka消费

引入jar <dependency><groupId>org.apache.flink</groupId><artifactId>flink-java</artifactId><version>1.8.0</version> </dependency> <dependency><groupId>org.apache.flink</groupId><artifactI…

uniapp播放 m3u8格式视频 兼容pc和移动端

支持全自动播放、设置参数 自己摸索出来的,花了一天时间,给点订阅支持下,订阅后,不懂的地方可以私聊我。 代码实现 代码实现 1.安装dplayer组件 npm i dplayer2. static/index.html下引入 hls 引入hls.min.js 可以存放在static项目hls下面<script src="/static…

如何连接到 Azure SQL 数据库(下)

在《如何连接到 Azure SQL 数据库&#xff08;上&#xff09;》中&#xff0c;我们已经了解到了以下内容↓↓↓ 开始之前&#xff1a;Azure 连接凭据和防火墙 如何检索 Azure 连接凭据如何配置服务器防火墙使用 SQL Server Management Studio 连接到 Azure使用 dbForge Studio…

最大子数组和java实现【动态规划基础练习】

12.15 最大子数组和 给你一个整数数组 nums &#xff0c;请你找出一个具有最大和的连续子数组&#xff08;子数组最少包含一个元素&#xff09;&#xff0c;返回其最大和。 子数组 是数组中的一个连续部分。 示例 1&#xff1a; 输入&#xff1a;nums [-2,1,-3,4,-1,2,1,-5,4]…

在 Windows PC 上轻松下载并安装 FFmpeg

FFmpeg 是一种开源媒体工具&#xff0c;可用于将任何视频格式转换为您需要的格式。该工具只是命令行&#xff0c;因此它没有图形、可点击的界面。如果您习惯使用常规图形 Windows 程序&#xff0c;安装 FFmpeg 一开始可能看起来很复杂&#xff0c;但不用担心&#xff0c;它;很简…

八大排序(插入排序 | 选择排序 | 冒泡排序)

在我们内存中我们一般会有一些没有顺序的数据&#xff0c;我们成为内排序&#xff0c;而今天分享八大排序的是时间复杂度为O&#xff08;N^2&#xff09;的插入排序&#xff0c;选择排序和教学意义比较强的冒泡排序。 插入排序 这是插入排序的动图&#xff0c;通过动图我们也…

01-EEA电子电器架构

1.背景 汽车正在从传统的机械装置逐步电气化&#xff0c;汽车电子电气功能不断的丰富。越来越多的电气系统和功能被集成到汽车上&#xff0c;传统的原理及线束设计已经远远不能满足。为此&#xff0c;EEA(电子电气架构)应运而生。如何设计电子电气架构&#xff0c;满足日益增长…

jenkins学习19 - pipline 构建项目生成 allure报告并发送邮箱

前言 个人其实一直的不太喜欢用邮箱发送报告&#xff0c;测试报告用邮件通知这都是五六年前的事情了&#xff0c;但有部分小伙伴依然执着于发邮件报告通知。 这里整理了下发邮箱通知的教程。 配置你的邮箱 配置邮箱这一步最繁琐&#xff0c;由于每个人使用的邮箱不一样&…

十六、YARN和MapReduce配置

1、部署前提 &#xff08;1&#xff09;配置前提 已经配置好Hadoop集群。 配置内容&#xff1a; &#xff08;2&#xff09;部署说明 &#xff08;3&#xff09;集群规划 2、修改配置文件 MapReduce &#xff08;1&#xff09;修改mapred-env.sh配置文件 export JAVA_HOM…

Python多态原理及实现

对于弱类型的语言来说&#xff0c;变量并没有声明类型&#xff0c;因此同一个变量完全可以在不同的时间引用不同的对象。当同一个变量在调用同一个方法时&#xff0c;完全可能呈现出多种行为&#xff08;具体呈现出哪种行为由该变量所引用的对象来决定&#xff09;&#xff0c;…

Star 4.1k!Gitee GVP开源项目!新一代桌面应用开发框架 ElectronEgg!

前言 随着现代技术的快速升级迭代及发展&#xff0c;桌面应用开发已经变得越来越普及。然而对于非专业桌面应用开发工程师在面对这项任务时&#xff0c;可能会感到无从下手&#xff0c;甚至觉得这是一项困难的挑战。 本篇文章将分享一种新型桌面应用开发框架 ElectronEgg&…

机器学习支持向量机(SVM)

svm与logstic异同 svm支持向量机&#xff0c;因其英文名为support vector machine&#xff0c;故一般简称SVM&#xff0c;通俗来讲&#xff0c;它是一种二类分类模型&#xff0c;其基本模型定义为特征空间上的间隔最大的线性分类器&#xff0c;其学习策略便是间隔最大化&#x…

探索多功能SQL数据库编辑器 - Richardson Software RazorSQL

在当今数字化时代&#xff0c;SQL数据库的管理和编辑是许多企业和开发人员必不可少的任务。为了提高生产力和简化数据库操作&#xff0c;Richardson Software推出了一款强大而多功能的SQL数据库编辑器 - RazorSQL。 RazorSQL是一款功能全面的数据库管理工具&#xff0c;可适用…

ansible的基本使用

本章主要介绍在RHEL8中如何安装ansible 及 ansible 的基本使用。 ansible是如何工作的在 RHEL8中安装ansible编写ansible.cfg和清单文件ansible 的基本用法 如果管理的服务器很多&#xff0c;如几十台甚至几百台&#xff0c;那么就需要一个自动化管理工具了&#xff0c; ansi…

使用opencv的Laplacian算子实现图像边缘检测

1 边缘检测介绍 图像边缘检测技术是图像处理和计算机视觉等领域最基本的问题&#xff0c;也是经典的技术难题之一。如何快速、精确地提取图像边缘信息&#xff0c;一直是国内外的研究热点&#xff0c;同时边缘的检测也是图像处理中的一个难题。早期的经典算法包括边缘算子方法…

环境搭建及源码运行_java环境搭建_maven

1、介绍 1&#xff09;管理项目依赖和版本 统一的项目依赖和版本管理 2&#xff09;Maven支持多模块项目管理 通过定义父子模块的关系来管理多个子模块的构建和依赖关系。使用Maven可以实现多模块项目的统一管理和构建&#xff0c;从而提高项目的可维护性和可重用性。 3&#x…

初识Python解释器————解释器模式(后续更新...)

学习网页&#xff1a; Welcome to Python.orghttps://www.python.org/https://www.python.org/ Python解释器 Python解释器是用于执行Python代码的程序。Python解释器将Python代码转换为机器语言并执行它。 Python解释器有多种实现&#xff0c;包括CPython、IPython、Jython…

GPT 魔力涌现

GPT 二、Prompt 的典型构成 角色&#xff1a;给 AI 定义一个最匹配任务的角色&#xff0c;比如&#xff1a;「你是一位软件工程师」「你是一位小学老师」指示&#xff1a;对任务进行描述上下文&#xff1a;给出与任务相关的其它背景信息&#xff08;尤其在多轮交互中&#xff…