案例分析:NPM 中恶意包利用环境变量差异绕过检测

事件简述

2022年7月14日,OSCS 监测发现NPM仓库中上传了 branch-node-core、epic-ue-loading 两个恶意组件包,出自相同的模板,通过多种方式绕过静态、动态检测机制。

由于发现这些恶意组件包在不同环境中的运行结果并不相同,我们对代码进行了分析,发现这些恶意组件包会检测用户运行环境的特征,根据特征判断是否进入恶意逻辑。

接下来我们以 branch-node-core 为例,分析其中尝试绕过代码静态分析和运行时动态检测的手法,希望能帮助安全研究人员和开发者关注此类风险,更加了解其中的绕过手法。

详细分析

如下图 package.json 所示,branch-node-core 只会在安装和构建时使用 node build-utils/update-library.js 调用恶意代码

(branch-node-core/package.json)

攻击者首先在 update-library.js 中定义了一个名为 filter 的列表,filter 列表中的元素使用 join 来生成字符串,例如将 ["mirrors", "tencent", "com"] 转mirrors.tencent.com

join 是为了尝试绕过静态检测对代码中特殊字符串的分析,其中存放着攻击者用来判断是否开启投毒的环境信息元素。

(filter 列表代码片段)

代码随后对环境信息进行了判断,在 data 中传入了环境变量,然后一共判断了 6 个条件,这些条件使用 || 连接,任一条件的返回值为true,将不会去调用 var req = http.request ,执行恶意代码。

(判断环境信息的表达式)


1.判断环境变量内容

表达式的第一个条件:判断运行环境内的环境变量是否符合目标真实服务器的环境变量模板。

  • some() 方法用于检测数组中的元素是否满足指定条件(通过将元素传入匿名函数来判断条件),当匿名函数返回值为 true 则停止继续运行,直接返回 true。

  • every() 方法用于检测数组所有元素是否都符合指定条件(通过将元素传入匿名函数来判断条件),当匿名函数返回值为 false 则停止继续运行,直接返回 false。

攻击者通过结合 some 和 every 方法来将环境变量 data 与 filter 列表内的每一个元素进行比对,如果环境变量 data 完全包含 filter 的中的任一元素,则返回 true。

例如如果环境变量中包含 npm_config_registry=``registry.npmmirror.com ,则表达式返回 true,不会执行恶意代码。

( 判断环境变量内容)

2.判断环境变量数量

表达式的第二个条件:判断本机系统的环境变量的个数是否大于 10 个。

一般真实服务器的环境数量都大于 10,攻击者借此判断是否为沙箱环境,若本机环境变量的个数不满足 10 个,那么第二个条件就会返回 true,不会执行恶意代码。

(判断环境变量数量)

3.判断当前目录

表达式的第三个条件:判断当前路径是否为用户默认的 NPM 包存放路径

(判断当前目录)

4.判断是否有流量分析

表达式的第四个条件:判断环境信息内是否存在 mitmproxy 代理劫持工具进行流量分析

(判断是否存在代理)

5.判断 NPM 包名是否存在

表达式的第五和第六个条件:会去判断环境信息中是否存在 NPM 的包名与版本

(判断NPM包名是否存在)

if 判断的表达式均为 false 时,接下来会通过http方法试图请求 eo1ew7v449gkbah.m.pipedream.net 域名,将环境变量中的敏感数据发送给恶意域名

(传输敏感数据)

总结

目前 branch-node-core 和 epic-ue-loading 的下载数量分别为 532、318,OSCS 推测有用户可能已经安装了恶意组件。

通过分析 branch-node-core 我们可以发现其使用的多种绕过检测方式,类似这样的情况可能还有很多,对抗也会持续。对企业安全团队来说,需要持续提升风险检测防范能力;对于开发者而言,在引入项目依赖时需要注意甄别。

优秀的个人博客,低调大师

微信关注我们

原文链接:https://www.oschina.net/news/203067

转载内容版权归作者及来源网站所有!

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

相关文章

发表评论

资源下载

更多资源
Mario,低调大师唯一一个Java游戏作品

Mario,低调大师唯一一个Java游戏作品

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

Oracle Database,又名Oracle RDBMS

Oracle Database,又名Oracle RDBMS

Oracle Database,又名Oracle RDBMS,或简称Oracle。是甲骨文公司的一款关系数据库管理系统。它是在数据库领域一直处于领先地位的产品。可以说Oracle数据库系统是目前世界上流行的关系数据库管理系统,系统可移植性好、使用方便、功能强,适用于各类大、中、小、微机环境。它是一种高效率、可靠性好的、适应高吞吐量的数据库方案。

Java Development Kit(Java开发工具)

Java Development Kit(Java开发工具)

JDK是 Java 语言的软件开发工具包,主要用于移动设备、嵌入式设备上的java应用程序。JDK是整个java开发的核心,它包含了JAVA的运行环境(JVM+Java系统类库)和JAVA工具。

Sublime Text 一个代码编辑器

Sublime Text 一个代码编辑器

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。