TL; ड
जुलाईको अन्त्य र अगस्ट २०२६ को सुरुमा दुई दिनमा प्रकाशित बीस npm प्याकेजहरू आफूलाई आन्तरिक UI कम्पोनेन्ट पुस्तकालयहरू र साझा ब्याकएन्ड उपयोगिताहरूको रूपमा प्रस्तुत गर्छन्। तिनीहरूमध्ये कुनै पनिले उनीहरूले विज्ञापन गरेको कार्यक्षमता लागू गर्दैनन्। प्रत्येकले एउटा स्टब क्लास, एउटा README जसले प्याकेजलाई आन्तरिक रूपमा वर्णन गर्दछ, र एउटा फाइल पठाउँछ। _polyfill.js.
रोचक कुरा त त्यो फाइल कहाँबाट बोलाइएको छ भन्ने हो। यो स्थापना हुक होइन। — प्रकटहरूले कुनै पनि पूर्व-स्थापना, स्थापना, वा पोस्ट-स्थापना घोषणा गर्दैनन्। बरु, अन्तिम पङ्क्ति index.js पढ्छ: try { require("./_polyfill"); } catch (_) {}। पहिलो पटक एप्लिकेसन कोडले प्याकेज आयात गर्दा पेलोड चल्छ। यससँग स्थापना गर्दै --ignore-scripts, को standard स्थापनाको समयमा आपूर्ति-श्रृंखला जोखिम कम गर्न सल्लाह, यसलाई रोक्दैन.
के _polyfill.js तीनवटा क्लाउडफ्लेयर वर्कर्स होस्टहरू मध्ये एकबाट प्लेटफर्म-विशिष्ट कार्यान्वयनयोग्य पुन: प्राप्त गर्नु, यसलाई अनियमित नाम अन्तर्गत अस्थायी निर्देशिकामा लेख्नु, यसलाई कार्यान्वयनयोग्य चिन्ह लगाउनु, र यसलाई अभिभावक प्रक्रियाबाट अलग गर्नु हो। त्यो कार्यान्वयनयोग्य आफैंमा एक लोडर हो: यसले प्रक्रिया नामद्वारा अन्त्य बिन्दु-सुरक्षा उत्पादनहरू गणना गर्दछ, ज्ञात विश्लेषण-वातावरण खाताहरू विरुद्ध हालको प्रयोगकर्ता नाम जाँच गर्दछ, मेमोरीमा AMSI र ETW टेलिमेट्री इन्टरफेसहरू प्याच गर्दछ, विन्डोज अडियो कम्पोनेन्टको नाम अन्तर्गत पर्सिस्टन्स स्थापना गर्दछ, र धेरै मेगाबाइट आकारमा तेस्रो बाइनरी पुन: प्राप्त गर्दछ। तेस्रो चरण इन्क्रिप्टेड आउँछ र डिस्कमा लेख्नुको सट्टा मेमोरीमा डिक्रिप्ट र कार्यान्वयन गरियो.
१ अगस्टमा, म्यानुअल समीक्षामा प्याकेजहरू दुर्भावनापूर्ण भएको पुष्टि भएको लगभग चार घण्टा पछि, बीस मध्ये उन्नाइस नामहरू तिनीहरूको आफ्नै प्रकाशकले पच्चीस सेकेन्डको क्रममा npm बाट हटाइदिए। २ अगस्टमा ती नामहरू मध्ये एउटा फेरि दर्ता गरियो - एउटै कोड बोकेको फरक खाताद्वारा। यो लेखिएको बेला डेलिभरी पूर्वाधारले तीनै चरणमा सेवा दिइरहेको थियो।
| प्याकेजहरू | २० npm नामहरू, ~७४ प्रकाशित संस्करणहरू |
| विषयवस्तुहरूको नामकरण | beaver-ui-* (13), accounts-* (३), प्लस afisha-storybook-default, bcore-bravo-eslint-config, arbocrate-sla-prober-arbocrate-sla-prober-core, a.poltoradnev-package-c |
| ट्रिगर | मोड्युल आयात (require), npm जीवनचक्र स्क्रिप्ट होइन |
| स्टेज 1 | _polyfill.js — पुन: प्राप्ति र सुरुवात |
| स्टेज 2 | स्ट्याटिकली-लिङ्क गरिएको लोडर, लिनक्समा UPX-प्याक गरिएको; एन्डपोइन्ट-सुरक्षा गणना, AMSI/ETW प्याचिङ, पर्सिस्टन्स |
| स्टेज 3 | beacon_linux.bin / beacon_mac.bin / update_win.exe, ४–१३ एमबी; डेलिभर गरिएको इन्क्रिप्टेड, मेमोरीमा कार्यान्वयन गरिएको |
| प्लेटफार्म | Linux x64 र arm64, macOS युनिभर्सल, Windows x64 |
| प्रकाशकहरू | दुई खाताहरू, एउटा कोडबेस |
| स्थिति | २० मध्ये १९ नामहरू अप्रकाशित अपरेटरद्वारा; १ पुन: प्रकाशित र प्रत्यक्ष; डेलिभरी पूर्वाधार प्रत्यक्ष |
आक्रमण शरीर रचना
चरण १ — प्याकेज
प्रत्येक सदस्यले एउटै तीन-फाइल आकार पठाउँछन्। index.js एउटा वर्ग निर्यात गर्दछ जसमा यसमा() जसले बुलियन सेट गर्छ, a संस्करण()र कन्फिगर गर्नुहोस् () जसले विकल्प वस्तुलाई मर्ज गर्छ। अरु केही होइन। README.md स्थापना लाइन दिन्छ, a आवश्यक छ लाइन, र वाक्य "आन्तरिक प्याकेज। निर्देशनहरूको लागि CONTRIBUTING.md हेर्नुहोस्" — योगदान गर्दै।md टार्बलमा छैन।
_पोलिफिल.जेएस यो ५ केबी भन्दा अलि कम छ र साधारण पूर्वाधार कोड जस्तै पढिन्छ। यो तीन वातावरण जाँचहरूसँग खुल्छ:
if (process.env.DISABLE_TELEMETRY ||
process.env.ANALYTICS_OPT_OUT ||
process.env.DO_NOT_TRACK)
return;ती चरहरू परम्परागत गोपनीयता नियन्त्रणहरू हुन्। यहाँ तिनीहरूले बाइनरी डाउनलोड र कार्यान्वयन गरिएको छ कि छैन भनेर गेट गर्छन्। एउटा मेसिन जसले सेट गर्छ ट्र्याक नगर्नुहोस् पूर्ण रूपमा छोडिएको छ।
अर्को रन-अनस स्ट्याम्प आउँछ: एउटा फाइल at /tmp/.analytics_stateवा विश्लेषण_स्थिति अन्तर्गत % TEMP% विन्डोजमा, जसको परिमार्जन समय २०,३५७-सेकेन्ड विन्डोसँग तुलना गरिएको छ। त्यो विन्डो भित्र मोड्युल तुरुन्तै फर्कन्छ, त्यसैले निर्माणको क्रममा बारम्बार आयात गर्दा दर्जनौंको सट्टा एउटा पुन: प्राप्ति प्रयास उत्पादन हुन्छ।
गन्तव्य होस्टहरू अक्षरशः उपस्थित छैनन्। तिनीहरू रनटाइममा टुक्राहरूबाट भेला हुन्छन्:
["oob-worker.cf102-","baf.workers.d","ev"].join("")
तीन होस्टहरू यसरी बनाइएका छन् र प्रयोग गर्नु अघि फेरबदल गरिएका छन्, त्यसैले प्रत्येक कार्यान्वयनको क्रम फरक हुन्छ। पुन: प्राप्ति भनेको IPv4 मा पिन गरिएको HTTPS GET हो जसमा प्रयोगकर्ता एजेन्ट of नोड-फेच/२.६ — नोड प्रक्रिया उत्सर्जन गर्नको लागि एक सम्भाव्य मान। १,००० बाइट भन्दा कमको प्रतिक्रिया खारेज गरिन्छ र अर्को होस्ट प्रयास गरिन्छ।
यदि तीनै जना असफल भएमा, मोड्युल DNS मा फिर्ता जान्छ। यसले TXT क्वेरी जारी गर्दछ ग। भाग गणना प्राप्त गर्न, त्यसपछि अनुरोधहरू ०। मार्फत n. औ. दशवटा ब्याचहरूमा, उत्तरहरूलाई संयोजन गर्दछ, र परिणामलाई base64-डिकोड गर्दछ। यो मार्गले DNS TXT रेकर्डहरूमा उही कार्यान्वयनयोग्य बोक्छ, जुन वातावरणमा जीवित रहन्छ जहाँ आउटबाउन्ड HTTP फिल्टर गरिएको छ तर DNS रिजोल्युसन छैन।
प्राप्त गरिएका बाइटहरू लेखिएका छन् /var/tmp/.cache_<8-hex> युनिक्समा, वा % TEMP% \ dotnet_diag_ <8-hex>.exe विन्डोजमा — एउटा फाइलनाम जुन .NET डायग्नोस्टिक्स आर्टिफ्याक्टको रूपमा पढिन्छ। युनिक्समा फाइललाई मोड ०७५५ दिइएको छ। लन्च हो spawn संग अलग गरिएको: सत्य, stdio: "बेवास्ता गर्नुहोस्", र अनरेफ(), त्यसैले बच्चाले सुरु गरेको नोड प्रक्रियाभन्दा बढी समय बाँच्छ; विन्डोजमा आह्वानले थप्छ विन्डोज लुकाउनुहोस्: सत्य.
दुई विवरणहरूले चित्र पूरा गर्छन्। सहायकलाई यसरी परिभाषित गरिएको छ const _l = (…a) => process.stderr.write(“”) पुन: प्राप्तिको प्रत्येक चरणमा कल गरिन्छ — यसले खाली स्ट्रिङ लेख्छ र यसको तर्कहरू खारेज गर्छ, जहाँ लगिङ बस्ने ठाउँ ओगटेको हुन्छ। र प्रत्येक प्याकेजले ८१ केबी फाइल पठाउँछ lib/telemetry.js जसको हेडर टिप्पणीले "एन्डपोइन्ट रोटेशन र पुन: प्रयास सहितको HTTPS ट्रान्सपोर्ट" र "फेइलओभरको लागि DNS-आधारित सेवा खोज" भएको "एनालिटिक्स SDK" को वर्णन गर्दछ। हालको निर्माणमा यसको आवश्यकता पर्दैन।
चरण २ — लोडर
Linux x64 बाइनरी UPX 3.96 सँग कम्प्रेस गरिएको स्थिर रूपमा लिङ्क गरिएको ELF हो। macOS बिल्ड x86_64 र arm64 लाई समेट्ने विश्वव्यापी बाइनरी हो; Windows बिल्ड एक स्ट्रिप गरिएको PE32+ कन्सोल कार्यान्वयनयोग्य हो। सबै चारैलाई पुनःप्राप्त गरियो र स्थिर रूपमा जाँच गरियो; कुनै पनि कार्यान्वयन गरिएको थिएन।
विन्डोज बिल्डको आयात र स्ट्रिङ तालिकाले यसको व्यवहारलाई स्पष्ट रूपमा वर्णन गर्दछ। यसले समाधान गर्दछ डिबगरवर्तमानछ, रिमोटडिबगरवर्तमानजाँचगर्नुहोस्, र NtQueryजानकारीप्रक्रिया, र पढ्छ प्रणाली \ वर्तमान नियन्त्रण सेट \ सेवाहरू \ डिस्क \ एनम — एउटा रजिस्ट्री मार्ग जसको मानहरूले भर्चुअल डिस्क नियन्त्रकहरूलाई पहिचान गर्दछ। यसले कल गर्दछ गेटडिस्कफ्रीस्पेसएक्सडब्ल्यू र ग्लोबलमेमोरीस्टेटसएक्स, होस्टको स्रोतहरू छोटो अवधिको विश्लेषण उदाहरणसँग मेल खान्छ कि खाँदैन भनेर जाँच गर्नेसँग सुसंगत।
यसमा प्रयोगकर्ता नामहरूको सूची छ: हालको प्रयोगकर्ता, आईटी प्रशासन, हङ ली, टेस्टबक्स, हापब्स, माइलोज, टिमी, ., मालवेयर, नमूना, भाइरस, वातावरण। यी मध्ये धेरै सार्वजनिक रूपमा दस्तावेज गरिएका विश्लेषण वातावरणका कलाकृतिहरू हुन्।
यसले अन्तिम बिन्दु-सुरक्षा उत्पादनहरू र तिनीहरूको प्रक्रिया नामहरूको सूची पनि बोक्छ, जसको गणना निम्नानुसार गरिएको छ: Toolhelp32 स्न्यापसट सिर्जना गर्नुहोस् र प्रक्रिया३२प्रथमडब्लु/प्रक्रिया३२अर्कोडब्लु:
- क्राउडस्ट्राइक फाल्कन (
csfalconservice,CSFalconContainer) - कार्बन ब्ल्याक (
cb.exe) - साइलेन्स (
cylancesvc.exe) - बिटडेफेंडर (
bdagent.exe) - Kaspersky (
avp.exe,kavfs.exe) - ट्रेन्ड माइक्रो र गहिरो सुरक्षा (
coreServiceShell,ds_agent.exe) - फायरआइ/ट्रेलिक्स (
xagt.exe) - टानियम (
taniumclient.exe) - हितमानप्रो (
hmpalert.exe) - लोचदार (
elastic-agent.exe,elastic-endpoint,filebeat.exe,winlogbeat.exe) - वाजुह र ओएसएसईसी (
wazuh-agent.exe,ossec-agent.exe) - चेक प्वाइन्ट
- विन्डोज डिफेंडर
दुई थप प्रतीकहरू उपस्थित छन्: एम्सीस्क्यानबफर, इन-मेमोरी सामग्री स्क्यानिङको लागि विन्डोजले एक्सपोज गर्ने प्रविष्टि बिन्दु, र EtwEventWrite का थप वस्तुहरू, विन्डोजको लागि घटना ट्रेसिङले घटनाहरू रेकर्ड गर्ने प्रकार्य। दुवै प्रक्रियामा परिमार्जनका लागि सामान्य लक्ष्यहरू हुन् जसले ती इन्टरफेसहरूले अन्यथा उत्पादन गर्ने टेलिमेट्रीलाई दबाउँछ।
विन्डोजमा पर्सिस्टन्स दुई पटक देखिन्छ। बाइनरीलाई यसमा प्रतिलिपि गरिएको छ % APPDATA% \ माइक्रोसफ्ट \ विन्डोज \ थीम्स \ सिस्टमसाउन्ड्ससर्भिस.एक्सई, र दुई संयन्त्रहरूले यसलाई सन्दर्भ गर्दछ: तलको मान सफ्टवेयर\माइक्रोसफ्ट\विन्डोज\करेन्टभर्सन\रन, र एक निर्धारित कार्यको रूपमा दर्ता गरिएको छ
schtasks /Create /F /SC ONLOGON
/TN "\Microsoft\Windows\Multimedia\SystemSoundsService"
/TR "\"%s\""
/RL HIGHESTकार्य मार्ग, कार्य नाम, र कार्यान्वयन योग्य नाम सबैले वास्तविक विन्डोज अडियो कम्पोनेन्टलाई प्रतिबिम्बित गर्छन्। /RL उच्चतम उच्चतम उपलब्ध विशेषाधिकार स्तर अनुरोध गर्दछ।
macOS बिल्डले प्लेटफर्म-उपयुक्त नामहरूको साथ उही ढाँचा पछ्याउँछ: यसले गुण सूची लेख्छ ~/लाइब्रेरी/लन्चएजेन्ट्स/com.apple.windowserver.helper.plist र यसलाई कार्यान्वयनयोग्य राख्छ ~/.local/share/runtime/com.apple.runtime। यसले जाँच गर्छ /एप्लिकेशनहरू/VMware फ्युजन.एप र /पुस्तकालय/एप्लिकेशन समर्थन/VMware उपकरणहरू.
नेटवर्क क्षमताले तीनवटा परिवहनहरू समावेश गर्दछ: WININET.dll ले HTTPS को लागि a सँग https://%s:%d%s ढाँचा स्ट्रिङ, WS2_32.dll ले निर्दिष्टीकरण गर्दछ। सकेटहरू, र DNSAPI.dll ले तपाईंलाई संग DnsQuery_A ले तपाईंलाई सँगसँगै ग.%s.%s ढाँचा स्ट्रिङ — पहिलो चरणले प्रयोग गर्ने उही चङ्क-काउन्ट क्वेरी आकार।
माथिको विवरण भनेको बाइनरीको आयात, स्ट्रिङ, र रजिस्ट्री मार्गहरूले निरीक्षणमा देखाएको कुरा हो। उही विन्डोज नमूनाको सार्वजनिक बहु-इन्जिन विश्लेषणले विवरण थप्छ जुन आयात तालिकाको स्थिर पठनले आफैंमा स्थापित गर्न सक्दैन, र यहाँ पहिलो-हात अवलोकनको रूपमा पुन: प्रस्तुत गर्नुको सट्टा श्रेय दिइएको छ। त्यो विश्लेषणले रिपोर्ट गर्छ कि AMSI र ETW सन्दर्भहरू केवल समाधान गरिएका छैनन् तर प्याच गरिएका छन् — एम्सीस्क्यानबफर in amsi.dll प्रयोग गर्न सजिलो र EtwEventWrite का थप वस्तुहरू in ntdll.dll फाइल — जसले प्रक्रियाको लागि इन-मेमोरी सामग्री स्क्यानिङ र घटना ट्रेसिङलाई दबाउँछ। यसले एन्टी-विश्लेषण जाँचहरूलाई समय-आधारितको रूपमा रिपोर्ट गर्दछ साथै रिमोटडिबगरवर्तमानजाँचगर्नुहोस्, र पहिचान गर्दछ थ्रेडसन्दर्भप्राप्तगर्नुहोस् डिबग दर्ताहरू पढ्ने हार्डवेयर-ब्रेकपोइन्ट जाँचको रूपमा कल गर्नुहोस्। यसले एकल-उदाहरण म्युटेक्स पनि रिपोर्ट गर्दछ, Global\{7A3B9E1F-C2D4-4F8A-B5E6-D7A1F0C3E2B9}, र नामहरू प्रणालीध्वनिसेवा रन-की मानको रूपमा। त्यो म्युटेक्स मान यहाँ पुन: प्राप्त गरिएका स्ट्रिङहरू मध्ये थिएन - निकासी फिल्टरले ब्रेस्ड अपरकेस-हेक्स टोकनहरू बहिष्कृत प्रयोग गर्यो - र यो प्रत्यक्ष अवलोकनको सट्टा त्यो सार्वजनिक विश्लेषणको बलमा सूचक तालिकामा रेकर्ड गरिएको छ।
स्टेज 3
लोडरले उही होस्टहरूमा थप मार्गहरूको सेटलाई सन्दर्भ गर्दछ। विश्लेषणको क्रममा सबै पहुँचयोग्य थिए: बीकन_लिनक्स.बिन १३.३ एमबीमा, बीकन_म्याक.बिन १३.३ एमबीमा, अपडेट_विन.एक्सई १०.३ एमबीमा, र आर्म.बिन ४.३ MB मा। यी पुन: प्राप्त भएनन्, र तिनीहरूको व्यवहार अज्ञात छ।
विन्डोज मार्गको लागि, लोडरको सार्वजनिक विश्लेषणले तेस्रो चरण कसरी ह्यान्डल गरिन्छ भनेर वर्णन गर्दछ: यो WinINet मार्फत प्राप्त गरिन्छ, इन्क्रिप्टेड आइपुग्छ, र मेमोरीमा डिक्रिप्ट गरिन्छ र प्रतिबिम्बित रूपमा कार्यान्वयन गरिन्छ — मेमोरी आवंटित गरिन्छ, आयातहरू समाधान गरिन्छ, स्थानान्तरणहरू प्रशोधन गरिन्छ, र नियन्त्रण नयाँ थ्रेडमा पास गरिन्छ। थ्रेड सिर्जना गर्नुहोस्। त्यसकारण तेस्रो चरण कहिल्यै फाइल प्रणालीमा लेखिएको हुँदैन, त्यसैले फाइल-आधारित पत्ता लगाउने र घटनापछिको डिस्क फोरेन्सिकसँग यसबाट पुन: प्राप्ति गर्न केही हुँदैन। यसको अर्थ डेलिभरी होस्टबाट बाइटहरू पुन: प्राप्त गर्नाले साइफरटेक्स्ट प्राप्त हुनेछ, विश्लेषणयोग्य कार्यान्वयनयोग्य होइन।
समय रेखा
सबै टाइमस्ट्याम्पहरू UTC हुन् र npm रजिस्ट्री मेटाडेटाबाट आउँछन्, जसले कुनै पनि पर्यवेक्षकबाट स्वतन्त्र रूपमा प्याकेज सिर्जना र अप्रकाशन रेकर्ड गर्दछ।
| जब | के |
|---|---|
| 2026-07-31 09:25:05 → 09:29:56 | दस नामहरू सिर्जना गरियो, प्रत्येक संस्करणबाट सुरु हुँदै 0.0.1, लगभग तेह्र सेकेन्डको फरकमा। |
| 2026-08-01 09:38 → 11:29 | अवस्थित नामहरू बढाइचढाइ गरिएका संस्करण संख्याहरू मार्फत माथि उठ्छन्, 6.1.9 मार्फत 6.1.12, 9.9.9 मार्फत 9.9.12, 8.9.3 मार्फत 8.9.6, 5.4.6 मार्फत 5.4.9. |
| 2026-08-01 13:04:14 → 13:04:18 | नौ थप beaver-ui-* चार-सेकेन्डको बर्स्टमा सिर्जना गरिएका नामहरू, प्रत्येक नाम कुनै पूर्व इतिहास बिना नै १२.x संस्करणमा सिधै प्रकाशित गरियो। |
| 2026-08-01 ~13:00–14:30 | म्यानुअल समीक्षामा दुर्भावनापूर्णको रूपमा वर्गीकृत गरिएका संस्करणहरू। |
| 2026-08-01 17:39:49 → 17:40:14 | पच्चीस सेकेन्डमा क्रमशः, लगभग १.२ सेकेन्डको फरकमा प्रकाशित नभएका बीस मध्ये उन्नाइस नामहरू। |
| 2026-08-02 18:58:41 | a.poltoradnev-package-c फरक मर्मतकर्ता खाता, संस्करण अन्तर्गत फेरि सिर्जना गरियो 0.0.2. |
| 2026-08-02 19:20:28 | संस्करण 33.9.5 सोही नाममा प्रकाशित। |
| 2026-08-02 20:14 | चरण दुई र तेस्रोमा सेवा दिने तीनैवटा डेलिभरी होस्टहरू; भाग गणना सहित DNS फलब्याक जवाफ दिँदै। |
यी मध्ये दुई प्रविष्टिहरू विचार गर्न लायक छन्।
१३:०४ बजेको बर्स्टले चार सेकेन्डमा रजिस्ट्रीमा नौ प्याकेजहरू राख्यो, प्रत्येकको बाह्रौं संस्करणमा एउटा संस्करण थियो र कुनै पनि थिएन। 0.0.1 यसको मुनि। यस स्केलमा संस्करण संख्याहरू, एक दिन पुरानो नामहरूमा, रिलीज इतिहास वर्णन गर्दैनन्।
प्रकाशन अप्रकाशन अनुक्रम उत्तिकै यान्त्रिक छ: उन्नाइस नामहरू, पच्चीस सेकेन्ड, स्पेसिङ पनि। npm ले यी घटनाहरूलाई रजिस्ट्री-प्रारम्भ गरिएको हटाउने प्लेसहोल्डरको सट्टा सामान्य अप्रकाशन घटनाहरूको रूपमा रेकर्ड गर्दछ, जसले कार्यलाई रजिस्ट्रीको सट्टा प्रकाशन खातामा राख्छ।
सम्झौताका सूचकहरू
होस्ट र पथहरू डिफ्याङ्ग गरिएका छन्। उत्पादन प्रणालीबाट तिनीहरूलाई समाधान वा पुन: प्राप्त नगर्नुहोस्।
| प्रकार | मूल्य |
|---|---|
| डेलिभरी होस्ट | oob-worker[.]cf99-9b3[.]workers[.]dev |
| डेलिभरी होस्ट | oob-worker[.]cf102-baf[.]workers[.]dev |
| डेलिभरी होस्ट | oob-worker[.]cf103-070[.]workers[.]dev |
| DNS ट्रान्सपोर्ट | tin[.]dl[.]well1[.]site (लिनक्स x64), tina[.] (आर्म६४), ldr[.] (म्याकोस), win[.] (विन्डोज) — भाग गणना मा c.<domain>, डेटा मा <n>.<domain> |
| चरण-३ मार्गहरू | /pkg/package, /pkg/package-arm64, /pkg/loader_mac, /pkg/package.exe |
| चरण-३ मार्गहरू | /pkg/beacon_linux.bin, /pkg/beacon_mac.bin, /pkg/update_win.exe, /pkg/arm.bin |
| ड्रप पाथ (युनिक्स) | /var/tmp/.cache_<8-hex> |
| ड्रप पाथ (विन्डोज) | %TEMP%\dotnet_diag_<8-hex>.exe |
| दृढता (विन्डोज) | %APPDATA%\Microsoft\Windows\Themes\SystemSoundsService.exe; कार्य \Microsoft\Windows\Multimedia\SystemSoundsService; रन-कुञ्जी मान SOFTWARE\Microsoft\Windows\CurrentVersion\Run\SystemSoundsService |
| म्युटेक्स (विन्डोज) | Global\{7A3B9E1F-C2D4-4F8A-B5E6-D7A1F0C3E2B9} |
| दृढता (macOS) | ~/Library/LaunchAgents/com.apple.windowserver.helper.plist; बाइनरीमा ~/.local/share/runtime/com.apple.runtime |
| एक पटक चल्ने स्ट्याम्प | /tmp/.analytics_state, %TEMP%\analytics_state (२०,३५७ सेकेन्डको विन्डो) |
| हस्ताक्षर अनुरोध गर्नुहोस् | HTTPS GET, IPv4-पिन गरिएको, प्रयोगकर्ता-एजेन्ट: node-fetch/2.6 |
| चरण-१ फाइल | _polyfill.js, SHA-२५६ 392dc9ec85042ce1796bfa9b8c7bf6e05c7710579aab8b7b1eb73788683883af |
| सन्दर्भ नगरिएको फाइल | lib/telemetry.js, SHA-२५६ 2266c9b8e199daebe31a9afcb61d9b0d76706b63c92312fc8223d22de42e63c7 |
| चरण २ (लिनक्स x64) | SHA-256 7e486657f30594afda379b97030252a09a19fe8055e25c9e371544f59bd8e9e3 |
| चरण २ (लिनक्स आर्म६४) | SHA-256 aafc37589c0d21fb729761a1579ca3b278b95bce152aacfa29243ffd27f5eeb7 |
| चरण २ (म्याकोस) | SHA-256 c214746c74cae8ece8bdaf69aa05da4db6ce013f9e77452d1eed1a002fd9ba00 |
| चरण २ (विन्डोज) | SHA-256 d632c2c0c7801c3da57cf849fe4b4ca8351d9a7fe73c31050bf5dbcc96a16791 |
प्याकेज नामहरू
विशेषता र अवलोकन गरिएको व्यवहार
दुई एनपीएम खाताहरू संलग्न छन्। उन्नाइस अप्रकाशित नामहरू एउटै खाताद्वारा प्रकाशित गरिएका थिए; a.poltoradnev-प्याकेज-c २ अगस्टमा फरक खाता नाम र फरक इमेल डोमेन अन्तर्गत पुन: दर्ता गरिएको थियो। कोड दुवैमा उही वंश हो, र दोस्रो दर्तामा उही डेलिभरी होस्टहरू, उही DNS फलब्याक डोमेनहरू, उही ड्रप-पथ निर्माण, र उही रन-ओन्स स्ट्याम्प हुन्छ।
पुन: प्रकाशित जोडीले यो कसरी भेला गरिएको थियो भनेर पनि देखाउँछ। संस्करणहरू 0.0.2 र 33.9.5 संस्करण स्ट्रिङ बाहेक बाइट-समान छन् package.jsonर index.js को रूपमा पठाइएको 0.0.2 घोषणा गर्दछ स्थिर संस्करण = “३३.९.५”। दुवै कलाकृतिहरू एउटै स्रोत रूखबाट काटिएका थिए र पछि नम्बर गरिएको थियो। त्यहाँ कुनै छैन 0.0.2 विकासको इतिहास 0.0.2 प्रतिनिधित्व गर्न जारी गर्नुहोस्।
सम्पूर्ण सेटमा संस्करण नम्बरिङले उही तर्क पछ्याउँछ। यस अभियानमा प्याकेज नामहरू सार्वजनिक रजिस्ट्रीमा नभई संस्था भित्र अवस्थित हुने चीजहरूको रूपमा पढिन्छन्: UI कम्पोनेन्ट सेट, ESLint कन्फिगरेसन, SLA प्रोबर, व्यक्तिको नाममा राखिएको प्याकेज। जब कुनै निर्माणले नामद्वारा निर्भरता समाधान गर्छ र निजीको साथसाथै सार्वजनिक रजिस्ट्रीसँग परामर्श गर्छ, उच्च संस्करण नम्बरले जित्छ। मा सिर्जना गरिएको नाम 0.0.1 सोमबार र बोकेर 12.9.6 मंगलबारको समय त्यो तुलनाको लागि राखिएको छ।
दुई प्रकाशन तरंगहरू पुनरावृत्ति सुझाव दिने तरिकामा पनि फरक छन्। पहिलेको कोडले यसको पेलोड फाइल नाम दिएको थियो। सेटअप.जेएस र पाँच डेलिभरी होस्टहरू सूचीबद्ध गरियो; हालको फाइलको नामकरण गरिएको छ _पोलिफिल.जेएस र तीन सूचीबद्ध गर्दछ। पहिलेको संस्करणले सुरुवात भएको पाँच सेकेन्ड पछि छोडिएको फाइल हटायो, मेटाइएको इनोडबाट प्रक्रिया चलिरहेको छोडेर; हालको संस्करणले गर्दैन। सन्दर्भ नगरिएको lib/telemetry.js दुबैतिर टार्बलमा बाँकी छ, अझै पठाइएको छ, अब तार जडान गरिएको छैन।
किल स्विचहरूको बारेमा एउटा अवलोकन पहिले भन्न लायक छcisely, किनकि यसले सामान्य पठनको विरुद्धमा काट्छ। टेलिमेट्री अक्षम पार्नुहोस्, विश्लेषण_अप्ट_आउट, र ट्र्याक नगर्नुहोस् सम्मान गरिन्छ, र अरू केहि हुनु अघि तिनीहरूको जाँच गरिन्छ। एक अनुसन्धानकर्ता जसको विश्लेषण वातावरणले तिनीहरू मध्ये कुनै पनि सेट गर्छ, उसले एउटा प्याकेज अवलोकन गर्छ जसले केही पनि गर्दैन।
प्रभाव र रक्षकहरूले के गर्न सक्छन्
आयात-समय ट्रिगरको व्यावहारिक परिणाम साँघुरो छ र आफैंमा भन्न लायक छ। npm स्थापना गर्नुहोस् - बेवास्ता-स्क्रिप्टहरू जीवनचक्र स्क्रिप्टहरू चल्नबाट रोक्छ, र यो राम्रो सल्लाह हो। यहाँ यसको कुनै प्रभाव पर्दैन, किनकि यो कोडले जीवनचक्र स्क्रिप्ट प्रयोग गर्दैन। एप्लिकेसन कोड, परीक्षण रन, बन्डलर, वा लाइन्टरले पहिले मोड्युल आयात गर्दा पेलोड चल्छ। स्थापना गर्ने र त्यसपछि तुरुन्तै निर्माण गर्ने CI रनरमा, दुई सेकेन्डको दूरीमा हुन्छन्।
शिकारको लागि, टिकाउ संकेतहरू शाब्दिक भन्दा संरचनात्मक हुन्छन्। होस्टहरू, फाइल नाम, र ड्रप मार्गहरू परिवर्तन हुनेछन्; यी आकारहरू फरक पार्न गाह्रो छ:
- एउटा मोड्युल प्रविष्टि बिन्दु जसको अन्तिम कथन a हो प्रयास गर्नुहोस् { आवश्यक छ(“./x”); } समात्नुहोस् (_) {} निर्यात गरिएको API को भाग नभएको फाइल वरिपरि। वास्तविक पोलिफिल भएको प्याकेजले यसलाई माथि आयात गर्छ र यसको नतिजा प्रयोग गर्छ। फाइलको तलको आयातबाट प्रत्येक त्रुटि निल्नु त्रुटि ह्यान्डलिङ होइन।
- होस्ट स्ट्रिङहरू द्वारा भेला गरिएको .join(“”) टुक्राहरूको श्रृंखलाबाट। वैध कोडले एरे तत्वहरूमा होस्टनाम विभाजित गर्ने कुनै कारण छैन।
- एउटा प्याकेज जसको घोषित निर्भरताहरू खाली छन् तर जुन पुग्छ https, dns, र बच्चा_प्रक्रिया आयातको समयमा। UI कम्पोनेन्टको विज्ञापन गर्ने प्याकेजमा पुन: प्राप्ति र कार्यान्वयन नै सम्पूर्ण खोज हो।
- प्याकेजको उमेरसँग असंगत संस्करण संख्याहरू। केही दिन अघि पहिलो पटक दोहोरो अंकको प्रमुख संस्करणमा प्रकाशित भएको नाम, जसमा कुनै पनि हस्तक्षेपकारी रिलीजहरू छैनन्, यसको विकास बाहेक अरू केहि वर्णन गरिरहेको छ।
- लेख्छ / var / tmp or % TEMP% पछि ए chmod ०७५५ सम्म र एउटा छुट्टिएको स्पोन। यो क्रम छोटो, व्यवस्थित छ, र विरलै एकसाथ मिल्छ।
विन्डोज होस्टहरूमा दुई सस्तो, उच्च-विश्वास जाँचहरू छन्। दृढता कलाकृतिहरू निश्चित स्ट्रिङहरू हुन् र तिनीहरूमध्ये कुनै पनि सफा प्रणालीमा पर्दैन: मा एक निर्धारित कार्य \ माइक्रोसफ्ट \ विन्डोज \ मल्टिमिडिया \ सिस्टम साउन्ड्स सेवा, नाम दिइएको रन-कि मान प्रणालीध्वनिसेवा, र त्यस नामको कार्यान्वयनयोग्य %APPDATA%\माइक्रोसफ्ट\विन्डोज\विषयवस्तुहरू\। वास्तविक विन्डोज अडियो सेवा ती कुनै पनि ठाउँमा बस्दैन। दोस्रो, लोडरले निश्चित एकल-इन्स्ट्यान्स म्युटेक्स प्रयोग गर्दछ, Global\{7A3B9E1F-C2D4-4F8A-B5E6-D7A1F0C3E2B9}; होस्टमा यसको उपस्थिति एक सूचक हो, र लोडरले अवस्थित म्युटेक्सलाई "पहिले नै चलिरहेको" को रूपमा व्यवहार गर्ने भएकोले, उपचार तालिकाबद्ध हुँदा यसलाई पूर्व-सिर्जना गर्नु एक व्यवहार्य छोटो अवधिको टीकाकरण हो।
तेस्रो चरणमा पत्ता लगाउनु गाह्रो समस्या हो र यसको बारेमा स्पष्ट हुनु लायक छ। सार्वजनिक विश्लेषणद्वारा दिइएको खातामा यो डिस्कमा लेख्नुको सट्टा मेमोरीमा डिक्रिप्ट र म्याप गरिएको छ, त्यसैले फाइल-स्क्यानिङ र डिस्क फोरेन्सिकले यसलाई देख्ने छैन। अवलोकनयोग्य कुरा लोडरको आफ्नै पदचिह्न हो - डेलिभरी होस्टहरू वा DNS-TXT डोमेनहरूमा पर्सिस्टन्स प्रविष्टिहरू, म्युटेक्स, र आउटबाउन्ड अनुरोधहरू।
निजी रजिस्ट्री र सार्वजनिक दुवैबाट निर्भरताहरू समाधान गर्ने वातावरणहरूको लागि, यहाँ कुनै पनि कुराले न्यूनीकरण अपरिवर्तित हुन्छ: स्कोप आन्तरिक नामहरू ताकि सार्वजनिक नामले तिनीहरूलाई सन्तुष्ट पार्न सक्दैन, र ती स्कोपहरूको लागि आन्तरिक रजिस्ट्रीमा रिजोल्युसन पिन गर्नुहोस्। माथि वर्णन गरिएको संस्करण-मुद्रास्फीति व्यवहारले केवल त्यहाँ काम गर्छ जहाँ उच्च सार्वजनिक संस्करणले नाम जित्न सक्छ।
अन्तमा, अप्रकाशनलाई अन्त्यको रूपमा नभई ध्यानपूर्वक पढ्न लायक छ। उन्नाइस नामहरू पच्चीस सेकेन्डमा रजिस्ट्रीबाट बाहिरिए र एउटा एक दिन पछि नयाँ खाता अन्तर्गत फर्कियो, डेलिभरी पूर्वाधारलाई अछुतो राखेर। प्याकेजहरू हटाउनु भनेको सञ्चालन हटाउनु होइन; यो लेखिएको बेला होस्टहरूले प्रत्येक चरणमा सेवा जारी राखे। ३१ जुलाई र १ अगस्टको बीचमा यी नामहरू मध्ये एक समाधान गर्ने कुनै पनि निर्भरता रूखलाई चरण एक कार्यान्वयन गर्ने अवसर पाएको रूपमा व्यवहार गरिनु पर्छ, चाहे नाम अझै अवस्थित छ वा छैन।
सन्दर्भ
- विन्डोज लोडरको बहु-इन्जिन विश्लेषण — माथि उल्लेख गरिएको AMSI/ETW प्याचिङ, रिफ्लेक्टिव्ह इन-मेमोरी एक्जिक्युसन, र म्युटेक्स विवरणको स्रोत।
- npm स्क्रिप्ट कागजातहरू — यस अभियानले प्रयोग नगर्ने जीवनचक्र घटनाहरू।
- npm स्थापना कागजात — कभरहरू -स्क्रिप्टहरूलाई बेवास्ता गर्नुहोस् र यसको क्षेत्र।







