TL؛ ڈاکٹر
جولائی کے آخر اور اگست 2026 کے اوائل میں دو دنوں میں شائع ہونے والے 20 npm پیکجز خود کو اندرونی UI اجزاء کی لائبریریوں اور مشترکہ بیک اینڈ یوٹیلیٹیز کے طور پر پیش کرتے ہیں۔ ان میں سے کوئی بھی اس فعالیت کو نافذ نہیں کرتا جس کی وہ تشہیر کرتے ہیں۔ ہر ایک سٹب کلاس بھیجتا ہے، ایک README جو پیکیج کو اندرونی طور پر بیان کرتا ہے، اور ایک فائل _polyfill.js.
دلچسپ بات یہ ہے کہ اس فائل کو کہاں سے منگوایا گیا ہے۔ یہ انسٹال ہک نہیں ہے۔ - مینی فیسٹ کسی بھی پری انسٹال، انسٹال یا پوسٹ انسٹال کا اعلان نہیں کرتے ہیں۔ اس کے بجائے، کی آخری لائن index.js پڑھتا ہے: try { require("./_polyfill"); } catch (_) {}. پے لوڈ پہلی بار ایپلیکیشن کوڈ کے پیکج کو درآمد کرنے پر چلتا ہے۔ کے ساتھ انسٹال کرنا --ignore-scripts، standard تنصیب کے وقت سپلائی چین کی نمائش کو کم کرنے کے لیے مشورہ، اس کی روک تھام نہیں کرتا.
کیا _polyfill.js Cloudflare ورکرز کے تین میزبانوں میں سے ایک پلیٹ فارم کے لیے مخصوص ایگزیکیوٹیبل بازیافت کرتا ہے، اسے بے ترتیب نام کے تحت ایک عارضی ڈائریکٹری میں لکھتا ہے، اسے قابل عمل نشان زد کرتا ہے، اور اسے پیرنٹ پروسیس سے الگ کرکے لانچ کرتا ہے۔ وہ ایگزیکیوٹیبل بذات خود ایک لوڈر ہے: یہ پروسیس کے نام سے اینڈ پوائنٹ سیکیورٹی پروڈکٹس کی گنتی کرتا ہے، معلوم تجزیہ-ماحولیات اکاؤنٹس کے خلاف موجودہ صارف نام کی جانچ کرتا ہے، میموری میں AMSI اور ETW ٹیلی میٹری انٹرفیس کو پیچ کرتا ہے، ونڈوز آڈیو جزو کے نام کے تحت استقامت کو انسٹال کرتا ہے، اور متعدد بائنری سائز میں تیسری بائنری کی بازیافت کرتا ہے۔ تیسرا مرحلہ انکرپٹڈ آتا ہے اور ہے۔ ڈسک پر لکھنے کی بجائے میموری میں ڈکرپٹ اور عمل میں لایا گیا۔.
یکم اگست کو، دستی جائزے پر پیکجوں کے بدنیتی پر مبنی ہونے کی تصدیق ہونے کے تقریباً چار گھنٹے بعد، بیس میں سے انیس ناموں کو ان کے اپنے پبلشر نے پچیس سیکنڈ کی ترتیب میں npm سے ہٹا دیا تھا۔ 2 اگست کو ان ناموں میں سے ایک کو دوبارہ رجسٹر کیا گیا — ایک مختلف اکاؤنٹ سے، ایک ہی کوڈ کے ساتھ۔ جب یہ لکھا گیا تو ترسیل کا بنیادی ڈھانچہ تینوں مراحل پر کام کر رہا تھا۔
| پیکجوں کے | 20 npm نام، ~ 74 شائع شدہ ورژن |
| تھیمز کا نام دینا | beaver-ui-* (13) accounts-* (3)، جمع 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, 4–13 MB; انکرپٹڈ ڈیلیور کیا گیا، میموری میں عمل میں لایا گیا۔ |
| پلیٹ فارم | لینکس ایکس 64 اور آرم 64، میک او ایس یونیورسل، ونڈوز ایکس 64 |
| پبلشرز | دو اکاؤنٹس، ایک کوڈ بیس |
| درجہ | 20 میں سے 19 نام غیر مطبوعہ آپریٹر کی طرف سے؛ 1 دوبارہ شائع اور لائیو؛ ڈیلیوری انفراسٹرکچر لائیو |
حملہ اناٹومی
مرحلہ 1 - پیکیج
ہر رکن ایک ہی تین فائل کی شکل بھیجتا ہے۔ index.js ایک کے ساتھ ایک کلاس برآمد کرتا ہے۔ اس میں() جو بولین سیٹ کرتا ہے، a ورژن()، اور ایک ترتیب دیں() جو آپشن آبجیکٹ کو ضم کرتا ہے۔ اور کچھ نہیں۔ README.md ایک انسٹال لائن دیتا ہے، a کی ضرورت لائن، اور جملہ "اندرونی پیکیج۔ رہنما خطوط کے لیے CONTRIBUTING.md دیکھیں" — CONTRIBUTING.md ٹربال میں نہیں ہے۔
_polyfill.js 5 KB سے تھوڑا کم ہے اور عام انفراسٹرکچر کوڈ کے طور پر پڑھتا ہے۔ یہ تین ماحولیاتی جانچ کے ساتھ کھلتا ہے:
if (process.env.DISABLE_TELEMETRY ||
process.env.ANALYTICS_OPT_OUT ||
process.env.DO_NOT_TRACK)
return; وہ متغیرات روایتی رازداری کے کنٹرولز ہیں۔ یہاں وہ گیٹ کرتے ہیں کہ آیا کوئی بائنری ڈاؤن لوڈ اور عمل میں لایا گیا ہے۔ سیٹ کرنے والی مشین DO_NOT_TRACK کریں۔ مکمل طور پر چھوڑ دیا جاتا ہے.
اس کے بعد رن ونس سٹیمپ آتا ہے: ایک فائل پر /tmp/.analytics_state، یا analytics_state کے تحت ٪ ٹیمپ٪ ونڈوز پر، جس کے ترمیمی وقت کا موازنہ 20,357 سیکنڈ کی ونڈو سے کیا جاتا ہے۔ اس ونڈو کے اندر ماڈیول فوری طور پر واپس آجاتا ہے، لہذا تعمیر کے دوران بار بار درآمدات درجنوں کی بجائے ایک بازیافت کی کوشش پیدا کرتی ہیں۔
منزل کے میزبان لفظی طور پر موجود نہیں ہیں۔ وہ رن ٹائم پر ٹکڑوں سے جمع ہوتے ہیں:
["oob-worker.cf102-","baf.workers.d","ev"].join("") تین میزبانوں کو اس طرح بنایا گیا ہے اور استعمال سے پہلے بدل دیا گیا ہے، لہذا ترتیب ہر عمل میں مختلف ہوتی ہے۔ بازیافت ایک HTTPS GET ہے جس کو IPv4 پر a کے ساتھ پن کیا گیا ہے۔ صارف ایجنٹ of node-fetch/2.6 - نوڈ کے اخراج کے عمل کے لیے قابل قدر قدر۔ 1,000 بائٹس سے کم جواب کو مسترد کر دیا جاتا ہے اور اگلے میزبان کو آزمایا جاتا ہے۔
اگر تینوں ناکام ہو جاتے ہیں تو ماڈیول واپس DNS پر آ جاتا ہے۔ یہ اس کے لیے TXT استفسار جاری کرتا ہے۔ c ایک حصہ شمار حاصل کرنے کے لئے، پھر درخواستیں 0۔ کے ذریعے n. دس کے بیچوں میں، جوابات کو جوڑتا ہے، اور نتیجہ کو بیس 64-ڈی کوڈ کرتا ہے۔ یہ راستہ DNS TXT ریکارڈز پر وہی قابل عمل ہوتا ہے، جو ایسے ماحول میں زندہ رہتا ہے جہاں آؤٹ باؤنڈ HTTP فلٹر ہوتا ہے لیکن DNS ریزولوشن نہیں ہوتا ہے۔
بازیافت شدہ بائٹس کو لکھا جاتا ہے۔ /var/tmp/.cache_<8-hex> یونکس پر، یا %TEMP%\dotnet_diag_<8-hex>.exe ونڈوز پر — ایک فائل کا نام جو .NET تشخیصی نمونے کے طور پر پڑھتا ہے۔ یونکس پر فائل کو موڈ 0755 دیا گیا ہے۔ لانچ ہے۔ انڈے ساتھ detached : سچا ۔, stdio: "نظر انداز کریں"، اور unref()، لہذا بچہ نوڈ کے عمل سے باہر رہتا ہے جس نے اسے شروع کیا تھا۔ ونڈوز پر درخواست میں اضافہ ہوتا ہے۔ windowsHide: سچ.
دو تفصیلات تصویر کو مکمل کرتی ہیں۔ ایک مددگار کے طور پر بیان کیا گیا ہے۔ const _l = (…a) => process.stderr.write("") بازیافت کے ہر مرحلے پر کہا جاتا ہے — یہ ایک خالی تار لکھتا ہے اور اس کے دلائل کو مسترد کرتا ہے، اس پوزیشن پر قبضہ کرتا ہے جہاں لاگنگ بیٹھ جاتی ہے۔ اور ہر پیکج 81 KB کی فائل بھیجتا ہے۔ lib/telemetry.js جس کا ہیڈر تبصرہ ایک "Analytics SDK" کے ساتھ "HTTPS ٹرانسپورٹ کے ساتھ اختتامی نقطہ گردش اور دوبارہ کوشش" اور "فیل اوور کے لیے DNS پر مبنی سروس دریافت" کی وضاحت کرتا ہے۔ موجودہ تعمیر میں کسی بھی چیز کی ضرورت نہیں ہے۔
مرحلہ 2 - لوڈر
لینکس x64 بائنری ایک مستحکم طور پر منسلک ELF ہے جسے UPX 3.96 کے ساتھ کمپریس کیا گیا ہے۔ macOS کی تعمیر ایک عالمگیر بائنری ہے جس میں x86_64 اور arm64؛ ونڈوز بلڈ ایک سٹریپڈ PE32+ کنسول ہے جو قابل عمل ہے۔ چاروں کو بازیافت کیا گیا اور مستحکم طور پر جانچ پڑتال کی گئی۔ کسی کو پھانسی نہیں دی گئی.
ونڈوز بلڈ کی درآمدات اور سٹرنگ ٹیبل اس کے رویے کو واضح طور پر بیان کرتی ہے۔ یہ حل کرتا ہے۔ IsDebuggerPresent, RemoteDebuggerPresent چیک کریں۔، اور NtQueryInformationProcess، اور پڑھتا ہے۔ SYSTEM\CurrentControlSet\Services\Disk\Enum - ایک رجسٹری پاتھ جس کی اقدار ورچوئل ڈسک کنٹرولرز کی شناخت کرتی ہیں۔ یہ پکارتا ہے۔ GetDiskFreeSpaceExW اور GlobalMemoryStatusEx، یہ جانچنے کے ساتھ مطابقت رکھتا ہے کہ آیا میزبان کے وسائل مختصر مدت کے تجزیہ مثال سے میل کھاتے ہیں۔
اس میں صارف ناموں کی فہرست ہے: موجودہ صارف, آئی ٹی ایڈمن, ہانگ لی, TESTBOX, hapubws, میلوز, ٹمی, منتظم, میلویئر, نمونہ, وائرس, ماحول. ان میں سے کئی عوامی طور پر دستاویزی تجزیہ کے ماحول کے نمونے ہیں۔
اس میں اینڈ پوائنٹ-سیکیورٹی پروڈکٹس اور ان کے عمل کے ناموں کی فہرست بھی ہوتی ہے، جس کے ذریعے شمار کیا جاتا ہے۔ ٹول ہیلپ 32 اسنیپ شاٹ بنائیں اور Process32FirstW/پراسیس32NextW:
- کراؤڈ اسٹرائیک فالکن (
csfalconservice,CSFalconContainer) - کاربن بلیک (
cb.exe) - سیلنس (
cylancesvc.exe) - Bitdefender (
bdagent.exe) - Kaspersky (
avp.exe,kavfs.exe) - ٹرینڈ مائیکرو اور ڈیپ سیکیورٹی (
coreServiceShell,ds_agent.exe) - فائر آئی/ٹریلکس (
xagt.exe) - ٹینیم (
taniumclient.exe) - HitmanPro (
hmpalert.exe) - لچکدار (
elastic-agent.exe,elastic-endpoint,filebeat.exe,winlogbeat.exe) - وضو اور OSSEC (
wazuh-agent.exe,ossec-agent.exe) - پوائنٹ چیک کریں
- ونڈوز دفاع
دو مزید علامتیں موجود ہیں: AmsiScanBuffer, اندراج پوائنٹ ونڈوز ان میموری مواد سکیننگ کے لیے ظاہر کرتا ہے، اور EtwEventWrite, وہ فنکشن جس کے ذریعے Windows کے لیے Event Tracing واقعات کو ریکارڈ کرتا ہے۔ دونوں عمل میں ترمیم کے لیے مشترکہ اہداف ہیں جو ٹیلی میٹری کو دبا دیتے ہیں وہ انٹرفیس دوسری صورت میں پیدا کریں گے۔
تسلسل ونڈوز پر دو بار ظاہر ہوتا ہے۔ بائنری کو کاپی کیا گیا ہے۔ %APPDATA%\Microsoft\Windows\Themes\SystemSoundsService.exe، اور دو میکانزم اس کا حوالہ دیتے ہیں: ایک قدر کے تحت سافٹ ویئر\مائیکروسافٹ\Windows\CurrentVersion\Run، اور ایک طے شدہ کام کے بطور رجسٹرڈ
schtasks /Create /F /SC ONLOGON
/TN "\Microsoft\Windows\Multimedia\SystemSoundsService"
/TR "\"%s\""
/RL HIGHEST ٹاسک پاتھ، ٹاسک کا نام، اور ایگزیکیوٹیبل نام سبھی ونڈوز کے حقیقی آڈیو جزو کی آئینہ دار ہیں۔ /RL سب سے زیادہ اعلیٰ ترین دستیاب استحقاق کی سطح کی درخواست کرتا ہے۔
macOS کی تعمیر پلیٹ فارم کے لیے موزوں ناموں کے ساتھ اسی طرز کی پیروی کرتی ہے: یہ پراپرٹی کی فہرست لکھتی ہے۔ ~/Library/LaunchAgents/com.apple.windowserver.helper.plist اور اسے قابل عمل جگہ پر رکھتا ہے۔ ~/.local/share/runtime/com.apple.runtime. یہ چیک کرتا ہے۔ /Applications/VMware Fusion.app اور /لائبریری/ایپلی کیشن سپورٹ/VMware ٹولز.
نیٹ ورک کی صلاحیت تین نقل و حمل پر محیط ہے: WININET.dll ایک کے ساتھ HTTPS کے لیے https://%s:%d%s فارمیٹ سٹرنگ، WS2_32.dll ساکٹ، اور DNSAPI.dll ساتھ DnsQuery_A ایک ساتھ ساتھ c.%s.%s فارمیٹ سٹرنگ - وہی حصہ گنتی کے سوال کی شکل جو پہلے مرحلے میں استعمال ہوتی ہے۔
اوپر کی تفصیل وہی ہے جو بائنری کی درآمدات، سٹرنگز، اور رجسٹری کے راستے معائنہ پر دکھاتے ہیں۔ ونڈوز کے اسی نمونے کا عوامی ملٹی انجن تجزیہ اس تفصیل کا اضافہ کرتا ہے کہ درآمدی جدول کا جامد پڑھنا خود سے قائم نہیں ہو سکتا، اور اسے پہلے ہاتھ کے مشاہدے کے طور پر دوبارہ بیان کرنے کے بجائے یہاں منسوب کیا گیا ہے۔ اس تجزیے سے پتہ چلتا ہے کہ AMSI اور ETW حوالہ جات محض حل نہیں کیے گئے بلکہ پیچ کیے گئے ہیں۔ AmsiScanBuffer in amsi.dll اور EtwEventWrite in ntdll.dll - جو اس عمل کے لیے میموری میں موجود مواد کی اسکیننگ اور ایونٹ ٹریسنگ کو دباتا ہے۔ اس کے علاوہ یہ اینٹی اینالیسس چیکس کو ٹائمنگ پر مبنی رپورٹ کرتا ہے۔ RemoteDebuggerPresent چیک کریں۔، اور شناخت کرتا ہے۔ GetThreadContext ڈیبگ رجسٹر پڑھتے ہوئے ہارڈویئر بریک پوائنٹ چیک کے طور پر کال کریں۔ یہ ایک واحد مثال کے mutex کی بھی اطلاع دیتا ہے، Global\{7A3B9E1F-C2D4-4F8A-B5E6-D7A1F0C3E2B9}، اور نام سسٹم ساؤنڈسروس رن کلید کی قدر کے طور پر۔ وہ میوٹیکس ویلیو یہاں سے برآمد ہونے والے تاروں میں شامل نہیں تھی — نکالنے والا فلٹر استعمال کیا گیا بریسیڈ اپر کیس-ہیکس ٹوکنز — اور اسے اشارے ٹیبل میں براہ راست مشاہدے کی بجائے اس عوامی تجزیہ کی طاقت پر ریکارڈ کیا جاتا ہے۔
اسٹیج 3
لوڈر ایک ہی میزبان پر راستوں کے مزید سیٹ کا حوالہ دیتا ہے۔ تجزیہ کے دوران سبھی قابل رسائی تھے: beacon_linux.bin 5.3 MB پر، beacon_mac.bin 13.3 MB پر، update_win.exe 10.3 MB پر، اور arm.bin 4.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-* چار سیکنڈ برسٹ میں بنائے گئے نام، جن میں سے ہر ایک براہ راست 12.x ورژن پر شائع ہوا جس کی کوئی سابقہ تاریخ نہیں ہے۔ |
| 2026-08-01 ~13:00–14:30 | دستی جائزے پر نقصان دہ کے طور پر درجہ بند ورژن۔ |
| 2026-08-01 17:39:49 → 17:40:14 | بیس میں سے انیس نام پچیس سیکنڈ میں غیر مطبوعہ، ترتیب وار، تقریباً 1.2 سیکنڈ کے فاصلے پر۔ |
| 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 فال بیک تعداد کے ساتھ جواب دینا۔ |
ان میں سے دو اندراجات قابل غور ہیں۔
13:04 برسٹ نے چار سیکنڈ میں رجسٹری پر نو پیکجز ڈالے، ہر ایک کا ایک ورژن بارہ میں ہے اور نہیں 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[.] (بازو 64) ldr[.] (macOS)، win[.] (ونڈوز) - حصہ شمار پر c.<domain>پر ڈیٹا <n>.<domain> |
| اسٹیج 2 راستے | /pkg/package, /pkg/package-arm64, /pkg/loader_mac, /pkg/package.exe |
| اسٹیج 3 راستے | /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 |
| Mutex (ونڈوز) | 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 (20,357 s ونڈو) |
| دستخط کی درخواست کریں۔ | HTTPS GET، IPv4-pinned، User-Agent: node-fetch/2.6 |
| اسٹیج 1 فائل | _polyfill.js، SHA-256 392dc9ec85042ce1796bfa9b8c7bf6e05c7710579aab8b7b1eb73788683883af |
| غیر حوالہ فائل | lib/telemetry.js، SHA-256 2266c9b8e199daebe31a9afcb61d9b0d76706b63c92312fc8223d22de42e63c7 |
| مرحلہ 2 (Linux x64) | ان شاء 256 7e486657f30594afda379b97030252a09a19fe8055e25c9e371544f59bd8e9e3 |
| مرحلہ 2 (Linux arm64) | ان شاء 256 aafc37589c0d21fb729761a1579ca3b278b95bce152aacfa29243ffd27f5eeb7 |
| مرحلہ 2 (macOS) | ان شاء 256 c214746c74cae8ece8bdaf69aa05da4db6ce013f9e77452d1eed1a002fd9ba00 |
| مرحلہ 2 (ونڈوز) | ان شاء 256 d632c2c0c7801c3da57cf849fe4b4ca8351d9a7fe73c31050bf5dbcc96a16791 |
پیکیج کے نام
انتساب اور مشاہدہ سلوک
دو این پی ایم اکاؤنٹس ملوث ہیں۔ انیس غیر مطبوعہ نام ایک اکاؤنٹ سے شائع کیے گئے تھے۔ a.poltoradnev-package-c 2 اگست کو ایک مختلف اکاؤنٹ کے نام اور ایک مختلف ای میل ڈومین کے تحت دوبارہ رجسٹر کیا گیا تھا۔ کوڈ دونوں میں ایک جیسا نسب ہے، اور دوسری رجسٹریشن میں ایک جیسے ڈیلیوری ہوسٹ، وہی DNS فال بیک ڈومینز، وہی ڈراپ پاتھ کنسٹرکشن، اور ایک ہی رن ونس سٹیمپ ہوتا ہے۔
دوبارہ شائع شدہ جوڑا یہ بھی ظاہر کرتا ہے کہ اسے کیسے جمع کیا گیا تھا۔ ورژنز 0.0.2 اور 33.9.5 ورژن سٹرنگ ان کے علاوہ بائٹ ایک جیسے ہیں۔ package.json، اور index.js کے طور پر بھیج دیا 0.0.2 اعلان کرتا ہے const VERSION = "33.9.5". دونوں نمونے ایک ماخذ کے درخت سے کاٹے گئے اور بعد میں شمار کیے گئے۔ نہیں ہے 0.0.2 کے لئے ترقی کی تاریخ 0.0.2 نمائندگی کے لیے رہائی۔
پورے سیٹ میں ورژن نمبر ایک ہی منطق کی پیروی کرتا ہے۔ اس مہم میں پیکیج کے نام ایسی چیزوں کے طور پر پڑھے جاتے ہیں جو عوامی رجسٹری کے بجائے کسی تنظیم کے اندر موجود ہوں گی: ایک UI جزو سیٹ، ایک ESLint کنفیگریشن، ایک SLA prober، ایک پیکیج جس کا نام کسی شخص کے نام پر رکھا گیا ہے۔ جب کوئی تعمیر نام کے لحاظ سے انحصار کو حل کرتی ہے اور نجی رجسٹری کے ساتھ عوامی رجسٹری سے مشورہ کرتی ہے، تو اعلی ورژن نمبر وہی ہوتا ہے جو جیتتا ہے۔ پر ایک نام بنایا گیا۔ 0.0.1 پیر کو اور لے کر 12.9.6 منگل کو اس مقابلے کے لیے رکھا گیا ہے۔
اشاعت کی دو لہریں بھی اس طرح سے مختلف ہیں جو تکرار کا مشورہ دیتی ہیں۔ پہلے کوڈ نے اپنی پے لوڈ فائل کا نام دیا تھا۔ setup.js اور پانچ ڈیلیوری میزبانوں کو درج کیا؛ موجودہ فائل کا نام ہے۔ _polyfill.js اور فہرست تین۔ پہلے ورژن نے لانچ کے پانچ سیکنڈ بعد گرائی ہوئی فائل کو ہٹا دیا، جس سے یہ عمل حذف شدہ انوڈ سے چل رہا تھا۔ موجودہ ورژن نہیں کرتا. غیر حوالہ شدہ lib/telemetry.js دونوں کے پار ٹربال میں رہتا ہے، اب بھی بھیج دیا جاتا ہے، اب وائرڈ نہیں ہوتا ہے۔
کِل سوئچز کے بارے میں ایک مشاہدہ پہلے بیان کرنے کے قابل ہے۔cisely، کیونکہ یہ ایک عام پڑھنے کے خلاف ہے. DISABLE_TELEMETRY, ANALYTICS_OPT_OUT، اور DO_NOT_TRACK کریں۔ عزت دی جاتی ہے، اور کچھ اور ہونے سے پہلے ان کی جانچ پڑتال کی جاتی ہے۔ ایک محقق جس کا تجزیہ ماحول ان میں سے کسی کو ترتیب دیتا ہے ایک ایسے پیکیج کا مشاہدہ کرتا ہے جو کچھ بھی نہیں کرتا ہے۔
اثر اور محافظ کیا کر سکتے ہیں۔
درآمدی وقت کے محرک کا عملی نتیجہ تنگ اور اپنے طور پر بیان کرنے کے قابل ہے۔ این پی ایم انسٹال - نظر انداز - اسکرپٹس لائف سائیکل اسکرپٹس کو چلنے سے روکتا ہے، اور یہ صحیح مشورہ ہے۔ اس کا یہاں کوئی اثر نہیں ہے، کیونکہ یہ کوڈ لائف سائیکل اسکرپٹ استعمال نہیں کرتا ہے۔ پے لوڈ چلتا ہے جب ایپلیکیشن کوڈ، ٹیسٹ رن، بنڈلر، یا لنٹر پہلے ماڈیول درآمد کرتا ہے۔ ایک CI رنر پر جو انسٹال کرتا ہے اور پھر فوراً بناتا ہے، دونوں سیکنڈوں کے فاصلے پر ہیں۔
شکار کے لیے، پائیدار سگنل لفظی کے بجائے ساختی ہوتے ہیں۔ میزبان، فائل کا نام، اور ڈراپ پاتھ بدل جائیں گے۔ یہ شکلیں مختلف کرنا مشکل ہیں:
- ایک ماڈیول انٹری پوائنٹ جس کا حتمی بیان a ہے۔ کوشش کریں { require(“./x”)؛ } پکڑو (_) {} ایک فائل کے ارد گرد جو برآمد شدہ API کا حصہ نہیں ہے۔ ایک حقیقی پولی فل والا پیکج اسے سب سے اوپر درآمد کرتا ہے اور اس کا نتیجہ استعمال کرتا ہے۔ فائل کے نیچے کی درآمد سے ہر غلطی کو نگلنا غلطی سے نمٹنے نہیں ہے۔
- میزبان سٹرنگز کی طرف سے جمع شامل ہوں("") ٹکڑوں کی ایک صف سے۔ قانونی کوڈ کے پاس میزبان نام کو صف کے عناصر میں تقسیم کرنے کی کوئی وجہ نہیں ہے۔
- ایک پیکیج جس کا اعلان کردہ انحصار خالی ہے لیکن جس تک پہنچتا ہے۔ HTTPS, DNS، اور بچہ_عمل درآمد کے وقت. UI جزو کی تشہیر کرنے والے پیکیج میں بازیافت کے علاوہ عملدرآمد پوری تلاش ہے۔
- ورژن نمبرز پیکیج کی عمر سے مطابقت نہیں رکھتے۔ دوہرے ہندسوں کے بڑے ورژن میں پہلے دن پہلے شائع ہونے والا ایک نام، جس میں کوئی مداخلت نہیں کی گئی ہے، اس کی ترقی کے علاوہ کچھ اور بیان کر رہا ہے۔
- کو لکھتا ہے۔ / var / tmp or ٪ ٹیمپ٪ ایک کے بعد chmod 0755 تک اور ایک علیحدہ سپون۔ ترتیب مختصر، ترتیب دی گئی، اور شاذ و نادر ہی ایک ساتھ سومی ہے۔
ونڈوز ہوسٹس پر دو سستے، زیادہ اعتماد والے چیک ہوتے ہیں۔ استقامت کے نمونے طے شدہ تار ہیں اور ان میں سے کوئی بھی کلین سسٹم پر نہیں ہے: ایک طے شدہ کام \Microsoft\Windows\Multimedia\SystemSoundsService، ایک رن کلید کی قدر جس کا نام ہے۔ سسٹم ساؤنڈسروس، اور اس نام کے تحت ایک قابل عمل %APPDATA%\Microsoft\Windows\Themes\. حقیقی ونڈوز آڈیو سروس ان جگہوں میں سے کسی میں نہیں رہتی ہے۔ دوسرا، لوڈر ایک فکسڈ سنگل انسٹینس میوٹیکس استعمال کرتا ہے، Global\{7A3B9E1F-C2D4-4F8A-B5E6-D7A1F0C3E2B9}; میزبان پر اس کی موجودگی ایک اشارے ہے، اور چونکہ لوڈر موجودہ mutex کو "پہلے سے چل رہا ہے" کے طور پر مانتا ہے، اس لیے اسے پہلے سے بنانا ایک قابل عمل قلیل مدتی ٹیکہ ہے جب کہ تدارک طے شدہ ہے۔
تیسرے مرحلے پر پتہ لگانا ایک مشکل مسئلہ ہے اور اس کے بارے میں واضح ہونے کے قابل ہے۔ عوامی تجزیہ کے ذریعہ دیئے گئے اکاؤنٹ پر اسے ڈسک پر لکھنے کے بجائے میموری میں ڈکرپٹ اور میپ کیا جاتا ہے، لہذا فائل اسکیننگ اور ڈسک فرانزک اسے نہیں دیکھ پائیں گے۔ جو چیز قابل مشاہدہ رہتی ہے وہ لوڈر کا اپنا نقشہ ہے — مستقل اندراجات، mutex، اور ترسیل کے میزبانوں یا DNS-TXT ڈومینز کو آؤٹ باؤنڈ درخواستیں۔
ایسے ماحول کے لیے جو نجی رجسٹری اور عوامی دونوں سے انحصار کو حل کرتے ہیں، تخفیف یہاں کسی بھی چیز سے تبدیل نہیں ہوتی ہے: دائرہ کار داخلی نام تاکہ عوامی نام ان کو مطمئن نہ کر سکے، اور ان دائرہ کاروں کے لیے اندرونی رجسٹری میں ریزولیوشن پن کریں۔ اوپر بیان کردہ ورژن افراط زر کا رویہ صرف اس صورت میں کام کرتا ہے جہاں ایک اعلیٰ عوامی ورژن نام جیت سکتا ہے۔
آخر میں، اشاعت ختم ہونے کے بجائے غور سے پڑھنے کے قابل ہے۔ انیس ناموں نے پچیس سیکنڈ میں رجسٹری چھوڑ دی اور ایک ایک دن بعد ایک نئے اکاؤنٹ کے تحت واپس آیا، جس میں ڈلیوری انفراسٹرکچر پوری طرح سے اچھوتا نہیں تھا۔ پیکجوں کو ہٹانا آپریشن کو ہٹانا نہیں ہے۔ یہ تحریر لکھے جانے تک میزبان ہر مرحلے پر خدمات سرانجام دیتے رہے۔ کوئی بھی انحصار درخت جس نے 31 جولائی اور 1 اگست کے درمیان ان ناموں میں سے کسی ایک کو حل کیا ہو اسے سمجھا جائے کہ اسے پہلے مرحلے پر عمل کرنے کا موقع ملا، چاہے نام ابھی موجود ہو یا نہ ہو۔
حوالہ جات
- ونڈوز لوڈر کا ملٹی انجن تجزیہ - AMSI/ETW پیچنگ، عکاس ان-میموری ایگزیکیوشن، اور اوپر منسوب mutex تفصیل کے لیے ذریعہ۔
- این پی ایم اسکرپٹ دستاویزات - لائف سائیکل کے واقعات جو یہ مہم استعمال نہیں کرتی ہے۔
- npm انسٹال دستاویزات - احاطہ کرتا ہے -اسکرپٹس کو نظر انداز کریں۔ اور اس کا دائرہ کار.




