QuietPolyfill ដែលជាដំណក់ទឹក NPM ដែលបានរស់ឡើងវិញ

QuietPolyfill៖ ឧបករណ៍​ទម្លាក់​ NPM ដែល​បាន​រស់​ឡើង​វិញ

TL; កុង

កញ្ចប់ npm ចំនួនម្ភៃដែលបានបោះពុម្ពផ្សាយក្នុងរយៈពេលពីរថ្ងៃនៅចុងខែកក្កដា និងដើមខែសីហា ឆ្នាំ២០២៦ បង្ហាញខ្លួនឯងថាជាបណ្ណាល័យសមាសធាតុ UI ខាងក្នុង និងឧបករណ៍ប្រើប្រាស់ backend ដែលបានចែករំលែក។ គ្មាននរណាម្នាក់ក្នុងចំណោមពួកវាអនុវត្តមុខងារដែលពួកគេផ្សព្វផ្សាយនោះទេ។ កញ្ចប់នីមួយៗបញ្ជូនថ្នាក់ stub README ដែលពិពណ៌នាអំពីកញ្ចប់ថាជាផ្ទៃក្នុង និងឯកសារមួយដែលមានឈ្មោះថា _polyfill.js.

ចំណុចគួរឱ្យចាប់អារម្មណ៍គឺកន្លែងដែលឯកសារនោះត្រូវបានហៅមកពី។ វាមិនមែនជាទំពក់ដំឡើងទេ — បញ្ជីឯកសារប្រកាសថាមិនមានការដំឡើងជាមុន ការដំឡើង ឬការដំឡើងក្រោយការដំឡើងទាល់តែសោះ។ ផ្ទុយទៅវិញ បន្ទាត់ចុងក្រោយនៃ index.js អាន: try { require("./_polyfill"); } catch (_) {}payload ដំណើរការជាលើកដំបូងនៅពេលដែលកូដកម្មវិធីនាំចូលកញ្ចប់។ ការដំឡើងជាមួយ --ignore-scriptsនេះ standard ដំបូន្មានសម្រាប់កាត់បន្ថយការប៉ះពាល់នឹងខ្សែសង្វាក់ផ្គត់ផ្គង់នៅពេលដំឡើង មិនរារាំងវា។.

អ្វី​ _polyfill.js តើ​វា​ទាញ​យក​ឯកសារ​ប្រតិបត្តិ​ជាក់លាក់​សម្រាប់​វេទិកា​ពី​ម៉ាស៊ីន​បម្រើ Cloudflare Workers មួយក្នុងចំណោមបី សរសេរវាទៅក្នុងថតឯកសារបណ្ដោះអាសន្នក្រោមឈ្មោះចៃដន្យ សម្គាល់វាថាជាឯកសារដែលអាចប្រតិបត្តិបាន ហើយបើកដំណើរការវាដោយផ្ដាច់ចេញពីដំណើរការមេ។ ឯកសារដែលអាចប្រតិបត្តិបាននោះគឺជាកម្មវិធីផ្ទុកទិន្នន័យ៖ វារាយបញ្ជីផលិតផលសុវត្ថិភាពចំណុចបញ្ចប់តាមឈ្មោះដំណើរការ ពិនិត្យឈ្មោះអ្នកប្រើប្រាស់បច្ចុប្បន្នប្រឆាំងនឹងគណនីបរិស្ថានវិភាគដែលគេស្គាល់ បិទភ្ជាប់ចំណុចប្រទាក់ទូរលេខ AMSI និង ETW នៅក្នុងអង្គចងចាំ ដំឡើងភាពស្ថិតស្ថេរក្រោមឈ្មោះនៃសមាសធាតុអូឌីយ៉ូ Windows និងទាញយកឯកសារគោលពីរទីបីដែលមានទំហំមេកាបៃច្រើនមេកាបៃ។ ដំណាក់កាលទីបីមកដល់ដែលត្រូវបានអ៊ិនគ្រីប ហើយត្រូវបាន... បានឌិគ្រីប និងប្រតិបត្តិក្នុងអង្គចងចាំ ជាជាងសរសេរទៅឌីស.

នៅថ្ងៃទី 1 ខែសីហា ប្រហែលបួនម៉ោងបន្ទាប់ពីកញ្ចប់ទាំងនោះត្រូវបានបញ្ជាក់ថាមានមេរោគនៅក្នុងការពិនិត្យដោយដៃ ឈ្មោះចំនួន 19 ក្នុងចំណោមឈ្មោះទាំងម្ភៃត្រូវបានដកចេញពី npm ដោយអ្នកបោះពុម្ពផ្សាយរបស់ពួកគេក្នុងរយៈពេល 25 វិនាទី។ នៅថ្ងៃទី 2 ខែសីហា ឈ្មោះមួយក្នុងចំណោមឈ្មោះទាំងនោះត្រូវបានចុះឈ្មោះម្តងទៀត — ដោយគណនីផ្សេង ដែលមានលេខកូដដូចគ្នា។ ហេដ្ឋារចនាសម្ព័ន្ធដឹកជញ្ជូនកំពុងបម្រើដំណាក់កាលទាំងបីនៅពេលដែលរឿងនេះត្រូវបានសរសេរ។

កញ្ចប់ឈ្មោះ npm ចំនួន 20, កំណែដែលបានបោះពុម្ពផ្សាយចំនួន ~74
ការដាក់ឈ្មោះប្រធានបទ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 នៅលើ Linux; ការរាប់បញ្ចូលសុវត្ថិភាពចំណុចបញ្ចប់ ការបិទភ្ជាប់ AMSI/ETW ការតស៊ូ
ដំណាក់កាល 3beacon_linux.bin / beacon_mac.bin / update_win.exe, ៤–១៣ មេកាបៃ; បានបញ្ជូនដែលបានអ៊ិនគ្រីប ត្រូវបានប្រតិបត្តិក្នុងអង្គចងចាំ
វេទិកាLinux x64 និង arm64, macOS ជាសកល, Windows x64
អ្នកបោះពុម្ពគណនីពីរ មូលដ្ឋានកូដតែមួយ
ស្ថានភាពឈ្មោះ ១៩ ក្នុងចំណោម ២០ ដែលមិនទាន់បានបោះពុម្ពផ្សាយ ដោយប្រតិបត្តិករ; 1 បានបោះពុម្ពផ្សាយឡើងវិញ និងផ្សាយផ្ទាល់; ហេដ្ឋារចនាសម្ព័ន្ធដឹកជញ្ជូនផ្សាយផ្ទាល់

កាយវិភាគសាស្ត្រវាយប្រហារ

ដំណាក់កាលទី 1 - កញ្ចប់

សមាជិកនីមួយៗបញ្ជូនរូបរាងឯកសារបីដូចគ្នា។ index.js ។ នាំចេញថ្នាក់មួយដែលមាន នៅ​ក្នុង​វា() ដែលកំណត់ប៊ូលីនមួយ, a កំណែ (), និងក កំណត់រចនាសម្ព័ន្ធ() ដែល​បញ្ចូល​វត្ថុ​ជម្រើស​ចូល​គ្នា។ គ្មាន​អ្វី​ផ្សេង​ទៀត​ទេ។ README.md ផ្តល់នូវបន្ទាត់ដំឡើងមួយ, មួយ តម្រូវឱ្យមាន បន្ទាត់ និងប្រយោគ “កញ្ចប់ខាងក្នុង។ សូមមើល CONTRIBUTING.md សម្រាប់គោលការណ៍ណែនាំ” — CONTRIBUTING.md មិន​មាន​នៅ​ក្នុង tarball ទេ។

_polyfill.js មានទំហំតិចជាង 5 KB បន្តិច ហើយអានជាកូដហេដ្ឋារចនាសម្ព័ន្ធធម្មតា។ វាបើកជាមួយនឹងការត្រួតពិនិត្យបរិស្ថានចំនួនបី៖

if (process.env.DISABLE_TELEMETRY ||
    process.env.ANALYTICS_OPT_OUT ||
    process.env.DO_NOT_TRACK)
  return;

អថេរទាំងនោះគឺជាការគ្រប់គ្រងភាពឯកជនធម្មតា។ នៅទីនេះពួកវាកំណត់ថាតើប្រព័ន្ធគោលពីរត្រូវបានទាញយក និងប្រតិបត្តិឬអត់។ ម៉ាស៊ីនដែលកំណត់ កុំតាមដាន ត្រូវបានរំលងទាំងស្រុង។

បន្ទាប់មកមានត្រារត់ម្តង៖ ឯកសារមួយនៅ /tmp/.analytics_stateស្ថានភាពវិភាគ ក្រោមការ % TEMP% នៅលើ Windows ដែលពេលវេលាកែប្រែរបស់វាត្រូវបានប្រៀបធៀបទៅនឹងបង្អួចរយៈពេល 20,357 វិនាទី។ នៅក្នុងបង្អួចនោះ ម៉ូឌុលនឹងត្រឡប់មកវិញភ្លាមៗ ដូច្នេះការនាំចូលម្តងហើយម្តងទៀតក្នុងអំឡុងពេលសាងសង់បង្កើតការប៉ុនប៉ងទាញយកម្តងជាជាងរាប់សិបដង។

ម៉ាស៊ីនគោលដៅមិនមានវត្តមានជាអក្សរទេ។ ពួកវាត្រូវបានផ្គុំនៅពេលដំណើរការពីបំណែកៗ៖

["oob-worker.cf102-","baf.workers.d","ev"].join("") 

ម៉ាស៊ីនមេចំនួនបីត្រូវបានបង្កើតឡើងតាមរបៀបនេះ ហើយត្រូវបានសាប់មុនពេលប្រើប្រាស់ ដូច្នេះលំដាប់ខុសគ្នាក្នុងមួយការប្រតិបត្តិ។ ការទាញយកគឺជា HTTPS GET ដែលខ្ទាស់ទៅ IPv4 ជាមួយ ភ្នាក់ងារអ្នកប្រើប្រាស់។ of node-fetch/2.6 — តម្លៃដែលអាចទុកចិត្តបានសម្រាប់ដំណើរការ Node ដើម្បីបញ្ចេញ។ ការឆ្លើយតបក្រោម 1,000 បៃត្រូវបានលុបចោល ហើយម៉ាស៊ីនបន្ទាប់ត្រូវបានសាកល្បង។

ប្រសិនបើទាំងបីបរាជ័យ ម៉ូឌុលនឹងត្រលប់ទៅ DNS វិញ។ វាចេញសំណួរ TXT សម្រាប់ គ. ដើម្បីទទួលបានចំនួនដុំ បន្ទាប់មកស្នើសុំ ០. តាមរយៈការ ន. ជាបាច់ចំនួនដប់ ភ្ជាប់ចម្លើយជាមួយគ្នា ហើយ base64 ឌិកូដលទ្ធផល។ ផ្លូវនេះផ្ទុកឯកសារដែលអាចប្រតិបត្តិបានដូចគ្នាលើកំណត់ត្រា DNS TXT ដែលអាចរស់រានមានជីវិតនៅក្នុងបរិស្ថានដែល HTTP ចេញត្រូវបានត្រង ប៉ុន្តែគុណភាពបង្ហាញ DNS មិនត្រូវបានត្រងទេ។

បៃត៍ដែលបានទាញយកត្រូវបានសរសេរទៅ /var/tmp/.cache_<8-hex> នៅលើយូនីក ឬ %TEMP%\dotnet_diag_<8-hex>.exe នៅលើ Windows — ឈ្មោះឯកសារដែលអានថាជាវត្ថុបុរាណវិនិច្ឆ័យ .NET។ នៅលើ Unix ឯកសារត្រូវបានផ្តល់របៀប 0755។ ការបើកដំណើរការគឺ ពង ជាមួយ ដាច់ដោយឡែក៖ ពិត, stdio: "មិនអើពើ"និង មិន​យោង()ដូច្នេះកូនមានអាយុកាលយូរជាងដំណើរការ Node ដែលបានចាប់ផ្តើមវា។ នៅលើ Windows ការហៅបន្ថែម បង្អួចលាក់៖ ពិត.

ព័ត៌មានលម្អិតពីរបំពេញរូបភាព។ ជំនួយការមួយត្រូវបានកំណត់ថាជា const _l = (…a) => process.stderr.write(“”) ត្រូវបានហៅនៅជំហាននីមួយៗនៃការទាញយក — វាសរសេរខ្សែអក្សរទទេមួយ ហើយបោះបង់ចោលអាគុយម៉ង់របស់វា ដោយកាន់កាប់ទីតាំងដែលការកត់ត្រានឹងស្ថិតនៅ។ ហើយកញ្ចប់នីមួយៗផ្ញើឯកសារទំហំ 81 KB នៅ lib/telemetry.js ដែលមតិយោបល់បឋមកថារបស់វាពិពណ៌នាអំពី "Analytics SDK" ជាមួយ "ការដឹកជញ្ជូន HTTPS ជាមួយនឹងការបង្វិលចំណុចបញ្ចប់ និងការព្យាយាមម្តងទៀត" និង "ការរកឃើញសេវាកម្មផ្អែកលើ DNS សម្រាប់ការបំលែងប្រព័ន្ធ"។ នៅក្នុងការបង្កើតបច្ចុប្បន្ន គ្មានអ្វីតម្រូវឱ្យមានវាទេ។

ដំណាក់កាលទី 2 - ឧបករណ៍ផ្ទុក

ឯកសារគោលពីរ Linux x64 គឺជា ELF ដែលមានតំណភ្ជាប់ឋិតិវន្ត ដែលបានបង្ហាប់ជាមួយ UPX 3.96។ ការបង្កើត macOS គឺជាឯកសារគោលពីរសកលដែលគ្របដណ្តប់លើ x86_64 និង arm64; ការបង្កើត Windows គឺជាឯកសារដែលអាចប្រតិបត្តិបានរបស់កុងសូល PE32+ ដែលត្រូវបានដកចេញ។ ឯកសារទាំងបួនត្រូវបានទាញយក និងពិនិត្យឋិតិវន្ត; គ្មានអ្វីត្រូវបានប្រតិបត្តិទេ។

ការនាំចូល និងតារាងខ្សែអក្សរនៃការបង្កើតវីនដូពិពណ៌នាអំពីឥរិយាបថរបស់វាយ៉ាងច្បាស់។ វាដោះស្រាយ IsDebuggerPresent, CheckRemoteDebuggerPresentនិង ដំណើរការព័ត៌មាន NtQuery, និងអាន ប្រព័ន្ធ\CurrentControlSet\Services\Disk\Enum — ផ្លូវចុះបញ្ជីដែលតម្លៃរបស់វាកំណត់អត្តសញ្ញាណឧបករណ៍បញ្ជាថាសនិម្មិត។ វាហៅ GetDiskFreeSpaceExW និង GlobalMemoryStatusExស្របនឹងការត្រួតពិនិត្យថាតើធនធានរបស់ម៉ាស៊ីនត្រូវគ្នានឹងឧទាហរណ៍វិភាគរយៈពេលខ្លីឬអត់។

វាមានបញ្ជីឈ្មោះអ្នកប្រើប្រាស់៖ អ្នកប្រើប្រាស់បច្ចុប្បន្ន, រដ្ឋបាល IT, ហុង លី, ប្រអប់សាកល្បង, ហាបប៊ូស, មីឡូស, ពេលវេលា, គ្រប់គ្រង, មេរោគ, គំរូ, មេរោគ, បរិស្ថានក្នុងចំណោមទាំងនេះ មួយចំនួនគឺជាវត្ថុបុរាណនៃបរិយាកាសវិភាគដែលបានចងក្រងជាឯកសារសាធារណៈ។

វាក៏មានបញ្ជីផលិតផលសុវត្ថិភាពចំណុចបញ្ចប់ និងឈ្មោះដំណើរការរបស់វាផងដែរ ដែលត្រូវបានរាយបញ្ជីតាមរយៈ បង្កើតឧបករណ៍ជំនួយ32រូបថត និង ដំណើរការ 32 ដំបូង W/ដំណើរការ 32 បន្ទាប់ W:

  • CrowdStrike Falcon (csfalconservice, CSFalconContainer)
  • កាបូន​ពណ៌​ខ្មៅ (cb.exe)
  • ស៊ីឡាំង (cylancesvc.exe)
  • Bitdefender (bdagent.exe)
  • Kaspersky (avp.exe, kavfs.exe)
  • Trend Micro និង Deep Security (coreServiceShell, ds_agent.exe)
  • FireEye/Trelix (xagt.exe)
  • តានីញ៉ូម (taniumclient.exe)
  • ហ៊ីតម៉ាន (hmpalert.exe)
  • យឺត (elastic-agent.exe, elastic-endpoint, filebeat.exe, winlogbeat.exe)
  • វ៉ាហ្ស៊ូ និង OSSEC (wazuh-agent.exe, ossec-agent.exe)
  • ចំណុចពិនិត្យ
  • Windows Defender

មាននិមិត្តសញ្ញាពីរបន្ថែមទៀត៖ AmsiScanBufferចំណុចចូលដែល Windows បង្ហាញសម្រាប់ការស្កេនមាតិកាក្នុងអង្គចងចាំ និង EtwEventWriteអនុគមន៍ដែល Event Tracing សម្រាប់ Windows កត់ត្រាព្រឹត្តិការណ៍។ ទាំងពីរគឺជាគោលដៅទូទៅសម្រាប់ការកែប្រែក្នុងដំណើរការ ដែលទប់ស្កាត់ telemetry ដែលចំណុចប្រទាក់ទាំងនោះនឹងបង្កើតបើមិនដូច្នោះទេ។

ភាពស្ថិតស្ថេរលេចឡើងពីរដងនៅលើ Windows។ ឯកសារគោលពីរត្រូវបានចម្លងទៅ %APPDATA%\Microsoft\Windows\Themes\SystemSoundsService.exeនិងយន្តការពីរយោងទៅលើវា៖ តម្លៃមួយនៅក្រោម កម្មវិធី\Microsoft\Windows\CurrentVersion\Runនិងភារកិច្ចដែលបានកំណត់ពេលត្រូវបានចុះបញ្ជីជា

schtasks /Create /F /SC ONLOGON
  /TN "\Microsoft\Windows\Multimedia\SystemSoundsService"
  /TR "\"%s\""
  /RL HIGHEST

ផ្លូវភារកិច្ច ឈ្មោះភារកិច្ច និងឈ្មោះដែលអាចប្រតិបត្តិបាន សុទ្ធតែឆ្លុះបញ្ចាំងពីសមាសធាតុអូឌីយ៉ូ Windows ពិតប្រាកដ។ /RL ខ្ពស់បំផុត ស្នើសុំកម្រិតសិទ្ធិខ្ពស់បំផុតដែលអាចរកបាន។

ការបង្កើត macOS ធ្វើតាមគំរូដូចគ្នាជាមួយនឹងឈ្មោះដែលសមស្របនឹងវេទិកា៖ វាសរសេរបញ្ជីលក្ខណសម្បត្តិទៅ ~/បណ្ណាល័យ/LaunchAgents/com.apple.windowserver.helper.plist ហើយដាក់ឯកសារដែលអាចប្រតិបត្តិបានរបស់វានៅ ~/.local/share/runtime/com.apple.runtime. វាពិនិត្យសម្រាប់ /កម្មវិធី/VMware Fusion.app និង /បណ្ណាល័យ/ការគាំទ្រកម្មវិធី/ឧបករណ៍ VMware.

សមត្ថភាពបណ្តាញគ្របដណ្តប់លើការដឹកជញ្ជូនបីយ៉ាង៖ WININET.dll សម្រាប់ HTTPS ជាមួយ https://%s:%d%s ខ្សែអក្សរទម្រង់, WS2_32.dll រន្ធដោត និង DNSAPI.dll ជាមួយ DnsQuery_A រួមជាមួយមួយ គ.%s.%s format string — រូបរាងសំណួរ chunk-count ដូចគ្នាដែលដំណាក់កាលទីមួយប្រើ។

ការពិពណ៌នាខាងលើគឺជាអ្វីដែលការនាំចូល ខ្សែអក្សរ និងផ្លូវចុះបញ្ជីរបស់ប្រព័ន្ធគោលពីរបង្ហាញនៅពេលត្រួតពិនិត្យ។ ការវិភាគពហុម៉ាស៊ីនសាធារណៈនៃគំរូ Windows ដូចគ្នាបន្ថែមព័ត៌មានលម្អិតដែលការអានឋិតិវន្តនៃតារាងនាំចូលមិនអាចបង្កើតដោយខ្លួនឯងបានទេ ហើយត្រូវបានសន្មតនៅទីនេះជាជាងការបញ្ជាក់ឡើងវិញថាជាការសង្កេតដោយផ្ទាល់។ ការវិភាគនោះរាយការណ៍ថាឯកសារយោង AMSI និង ETW មិនត្រឹមតែត្រូវបានដោះស្រាយប៉ុណ្ណោះទេ ប៉ុន្តែត្រូវបានជួសជុលផងដែរ — AmsiScanBuffer in amsi.dll និង EtwEventWrite in ntdll.dll — ដែលទប់ស្កាត់ការស្កេនខ្លឹមសារក្នុងអង្គចងចាំ និងការតាមដានព្រឹត្តិការណ៍សម្រាប់ដំណើរការ។ វារាយការណ៍ពីការត្រួតពិនិត្យប្រឆាំងការវិភាគថាផ្អែកលើពេលវេលា បន្ថែមពីលើ CheckRemoteDebuggerPresentនិងកំណត់អត្តសញ្ញាណ ទទួលបានបរិបទខ្សែស្រឡាយ ការហៅជាការត្រួតពិនិត្យចំណុចបំបែកផ្នែករឹង ដោយអានបញ្ជីការបំបាត់កំហុស។ វាក៏រាយការណ៍ពី mutex តែមួយផងដែរ។ Global\{7A3B9E1F-C2D4-4F8A-B5E6-D7A1F0C3E2B9}និងឈ្មោះ សេវាកម្មសំឡេងប្រព័ន្ធ ជាតម្លៃ Run-key។ តម្លៃ mutex នោះមិនមែនជាខ្សែអក្សរដែលបានរកឃើញនៅទីនេះទេ — តម្រងស្រង់ចេញបានប្រើថូខឹន hex ដែលមានអក្សរធំមិនរាប់បញ្ចូល — ហើយវាត្រូវបានកត់ត្រានៅក្នុងតារាងសូចនាករលើកម្លាំងនៃការវិភាគសាធារណៈនោះជាជាងការសង្កេតដោយផ្ទាល់។

ដំណាក់កាល 3

កម្មវិធីផ្ទុកឯកសារយោងទៅសំណុំផ្លូវបន្ថែមនៅលើម៉ាស៊ីនដូចគ្នា។ ទាំងអស់អាចទៅដល់បានក្នុងអំឡុងពេលវិភាគ៖ beacon_linux.bin នៅ 5.3 មេកាបៃ, beacon_mac.bin នៅ 13.3 មេកាបៃ, update_win.exe នៅ 10.3 MB និង arm.bin នៅ 4.3 MB។ ទាំងនេះមិនត្រូវបានទាញយកទេ ហើយឥរិយាបថរបស់ពួកវាក៏មិនដឹងដែរ។

សម្រាប់ផ្លូវ Windows ការវិភាគសាធារណៈនៃឧបករណ៍ផ្ទុកពិពណ៌នាអំពីរបៀបដែលដំណាក់កាលទីបីនោះត្រូវបានដោះស្រាយ៖ វាត្រូវបានទាញយកតាមរយៈ 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[.] (arm64), 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 វិនាទី)
ស្នើសុំហត្ថលេខា HTTPS GET, បានខ្ទាស់ IPv4, ភ្នាក់ងារអ្នកប្រើប្រាស់៖ node-fetch/2.6
ឯកសារដំណាក់កាលទី 1 _polyfill.js, SHA-256 392dc9ec85042ce1796bfa9b8c7bf6e05c7710579aab8b7b1eb73788683883af
ឯកសារដែលមិនបានយោង lib/telemetry.js, SHA-256 2266c9b8e199daebe31a9afcb61d9b0d76706b63c92312fc8223d22de42e63c7
ដំណាក់កាលទី 2 (លីនុច x64) SHA-256 7e486657f30594afda379b97030252a09a19fe8055e25c9e371544f59bd8e9e3
ដំណាក់កាលទី 2 (លីនុច arm64) SHA-256 aafc37589c0d21fb729761a1579ca3b278b95bce152aacfa29243ffd27f5eeb7
ដំណាក់កាលទី 2 (macOS) SHA-256 c214746c74cae8ece8bdaf69aa05da4db6ce013f9e77452d1eed1a002fd9ba00
ដំណាក់កាលទី 2 (វីនដូ) SHA-256 d632c2c0c7801c3da57cf849fe4b4ca8351d9a7fe73c31050bf5dbcc96a16791

ឈ្មោះកញ្ចប់

ថត beaver-ui ប៊ូតុងសកម្មភាព beaver-ui-actions កាត ui របស់ beaver ធំ ឧបករណ៍ជ្រើសរើសជួរកាលបរិច្ឆេទ beaver-ui-date-range-picker ទម្រង់ ui របស់ beaver beaver-ui-form-modal វត្ថុទម្រង់ ui របស់ beaver ក្រឡាចត្រង្គ beaver-ui ចំណងជើង ui របស់ beaver ប៊ីវើរ-អ៊ី-hooks សោររូបតំណាង beaver-ui ធាតុ-ui-របស់ beaver-ជាមួយ-ច្រើនទៀត ប្លង់ ui របស់ beaver ទម្រង់បែបបទចុងក្រោយនៃគណនី ស្ថានភាពផ្ទុកគណនី តារាងពេលវេលានៃគណនី សៀវភៅរឿង afisha-លំនាំដើម bcore-bravo-eslint-config arbocrate-sla-prober-arbocrate-sla-prober-core a.poltoradnev-package-c

ការសន្មត់ និងឥរិយាបថដែលសង្កេតឃើញ

មានគណនី npm ពីរពាក់ព័ន្ធ។ ឈ្មោះចំនួន ១៩ ដែលមិនទាន់បានបោះពុម្ពផ្សាយត្រូវបានបោះពុម្ពផ្សាយដោយគណនីមួយ។ a.poltoradnev-package-c ត្រូវបានចុះឈ្មោះឡើងវិញនៅថ្ងៃទី 2 ខែសីហា ក្រោមឈ្មោះគណនីផ្សេង និងដូមេនអ៊ីមែលផ្សេង។ កូដនេះគឺជាពូជដូចគ្នានៅក្នុងទាំងពីរ ហើយការចុះឈ្មោះលើកទីពីរមានម៉ាស៊ីនចែកចាយដូចគ្នា ដូមេនបម្រុង DNS ដូចគ្នា សំណង់ផ្លូវទម្លាក់ដូចគ្នា និងត្រាដំណើរការដូចគ្នា។

គូដែលបានបោះពុម្ពផ្សាយឡើងវិញក៏បង្ហាញពីរបៀបដែលវាត្រូវបានផ្គុំផងដែរ។ 0.0.2 និង 33.9.5 គឺដូចគ្នាបេះបិទទៅនឹងខ្សែអក្សរកំណែនៅក្នុង កញ្ចប់, និង index.js ។ បានដឹកជញ្ជូនជា 0.0.2 ប្រកាស កំណែថេរ = "៣៣.៩.៥"វត្ថុបុរាណទាំងពីរត្រូវបានកាត់ចេញពីដើមឈើប្រភពមួយ ហើយត្រូវបានដាក់លេខរៀងបន្ទាប់ពីនោះ។ មិនមាន 0.0.2 ប្រវត្តិនៃការអភិវឌ្ឍសម្រាប់ 0.0.2 ដោះលែងដើម្បីតំណាងឱ្យ។

លេខរៀងកំណែនៅទូទាំងសំណុំទាំងមូលធ្វើតាមតក្កវិជ្ជាដូចគ្នា។ ឈ្មោះកញ្ចប់នៅក្នុងយុទ្ធនាការនេះអានថាជារបស់របរដែលនឹងមាននៅក្នុងអង្គការមួយជាជាងនៅលើបញ្ជីឈ្មោះសាធារណៈ៖ សំណុំសមាសធាតុ UI ការកំណត់រចនាសម្ព័ន្ធ ESLint ឧបករណ៍សាកល្បង SLA កញ្ចប់ដែលដាក់ឈ្មោះតាមមនុស្សម្នាក់។ នៅពេលដែលការបង្កើតដោះស្រាយការពឹងផ្អែកតាមឈ្មោះ ហើយពិគ្រោះជាមួយបញ្ជីឈ្មោះសាធារណៈរួមជាមួយបញ្ជីឈ្មោះឯកជន លេខកំណែខ្ពស់ជាងគឺជាលេខដែលឈ្នះ។ ឈ្មោះដែលបង្កើតឡើងនៅ 0.0.1 នៅថ្ងៃច័ន្ទ និងដឹក 12.9.6 នៅថ្ងៃអង្គារ ត្រូវបានកំណត់សម្រាប់ការប្រៀបធៀបនោះ។

រលក​បោះពុម្ពផ្សាយ​ទាំងពីរ​ក៏ខុសគ្នា​ដែរ​ក្នុង​វិធី​ដែល​បង្ហាញ​ពី​ការ​ធ្វើ​ឡើង​វិញ​។ កូដ​មុន​នេះ​បាន​ដាក់​ឈ្មោះ​ឯកសារ​បន្ទុក​របស់​វា​ថា​ជា​ឯកសារ​បន្ទុក​។ setup.js និងរាយបញ្ជីម៉ាស៊ីនចែកចាយចំនួនប្រាំ; ឯកសារបច្ចុប្បន្នត្រូវបានដាក់ឈ្មោះ _polyfill.js និងរាយបញ្ជីបី។ កំណែមុនបានលុបឯកសារដែលបានទម្លាក់ចោលប្រាំវិនាទីបន្ទាប់ពីការបើកដំណើរការ ដោយទុកឱ្យដំណើរការដំណើរការពី inode ដែលបានលុប។ កំណែបច្ចុប្បន្នមិនមានទេ។ ឯកសារដែលមិនបានយោង lib/telemetry.js នៅតែស្ថិតនៅក្នុងបាល់ tarball នៅទូទាំងទាំងពីរ នៅតែដឹកជញ្ជូន លែងមានខ្សែភ្ជាប់ទៀតហើយ។

ការសង្កេតមួយអំពីកុងតាក់សម្លាប់គឺមានតម្លៃក្នុងការបញ្ជាក់ជាមុនcisely ពីព្រោះវាកាត់ទល់នឹងការអានធម្មតា។ DISABLE_TELEMETRY, ការវិភាគ_ជ្រើសរើស_ចេញនិង កុំតាមដាន ត្រូវបានផ្តល់កិត្តិយស ហើយពួកគេត្រូវបានត្រួតពិនិត្យមុនពេលមានអ្វីផ្សេងទៀតកើតឡើង។ អ្នកស្រាវជ្រាវដែលបរិយាកាសវិភាគរបស់ពួកគេកំណត់ណាមួយក្នុងចំណោមពួកគេ សង្កេតឃើញកញ្ចប់មួយដែលមិនធ្វើអ្វីទាំងអស់។

ផលប៉ះពាល់ និងអ្វីដែលអ្នកការពារអាចធ្វើបាន

ផលវិបាកជាក់ស្តែងនៃគន្លឹះពេលវេលានាំចូលគឺតូចចង្អៀត ហើយមានតម្លៃក្នុងការបញ្ជាក់ដោយខ្លួនឯង។ npm ដំឡើង - មិនអើពើស្គ្រីប រារាំងស្គ្រីបវដ្តជីវិតពីការដំណើរការ ហើយវាជាដំបូន្មានដ៏ល្អ។ វាមិនមានឥទ្ធិពលនៅទីនេះទេ ពីព្រោះកូដនេះមិនប្រើស្គ្រីបវដ្តជីវិតទេ។ payload ដំណើរការនៅពេលដែលកូដកម្មវិធី ការដំណើរការសាកល្បង ឧបករណ៍ចងក្រង ឬ linter នាំចូលម៉ូឌុលជាមុនសិន។ នៅលើឧបករណ៍រត់ CI ដែលដំឡើង ហើយបន្ទាប់មកបង្កើតភ្លាមៗ ទាំងពីរមានចម្ងាយឆ្ងាយពីគ្នា។

ចំពោះការបរបាញ់ សញ្ញាប្រើប្រាស់បានយូរគឺជារចនាសម្ព័ន្ធជាជាងត្រង់។ ម៉ាស៊ីន ឈ្មោះឯកសារ និងផ្លូវទម្លាក់នឹងផ្លាស់ប្តូរ។ រូបរាងទាំងនេះពិបាកផ្លាស់ប្តូរណាស់៖

  • ចំណុចចូលម៉ូឌុលដែលសេចក្តីថ្លែងការណ៍ចុងក្រោយរបស់វាជា សាកល្បង { ទាមទារ (“./x”); } ចាប់ (_) {} ជុំវិញឯកសារដែលមិនមែនជាផ្នែកមួយនៃ API ដែលបាននាំចេញ។ កញ្ចប់ដែលមាន polyfill ពិតប្រាកដនាំចូលវានៅផ្នែកខាងលើ ហើយប្រើប្រាស់លទ្ធផលរបស់វា។ ការលេបយករាល់កំហុសពីការនាំចូលនៅផ្នែកខាងក្រោមនៃឯកសារមិនមែនជាការដោះស្រាយកំហុសទេ។
  • ខ្សែអក្សរម៉ាស៊ីនដែលផ្គុំឡើងដោយ .join(“”) ពី​អារេ​នៃ​បំណែក​មួយ​ចំនួន។ កូដស្របច្បាប់គ្មានហេតុផលដើម្បីបំបែកឈ្មោះម៉ាស៊ីនឆ្លងកាត់ធាតុអារេទេ។
  • កញ្ចប់មួយដែលការពឹងផ្អែកដែលបានប្រកាសរបស់វាទទេ ប៉ុន្តែឈានដល់ HTTPS, DNSនិង ដំណើរការកុមារ នៅពេលនាំចូល។ ការទាញយក បូករួមទាំងការប្រតិបត្តិនៅក្នុងកញ្ចប់ដែលផ្សព្វផ្សាយសមាសធាតុ UI គឺជាការរកឃើញទាំងមូល។
  • លេខកំណែមិនស៊ីសង្វាក់គ្នានឹងអាយុរបស់កញ្ចប់។ ឈ្មោះមួយដែលបានចេញផ្សាយជាលើកដំបូងកាលពីប៉ុន្មានថ្ងៃមុននៅក្នុងកំណែសំខាន់ពីរខ្ទង់ ដោយគ្មានការចេញផ្សាយជាអន្តរការី កំពុងពិពណ៌នាអំពីអ្វីផ្សេងក្រៅពីការវិវត្តរបស់វា។
  • សរសេរទៅកាន់ / var / tmp or % TEMP% អមដោយក chmod ដល់ 0755 និងពងកូនដែលផ្ដាច់ចេញ។ លំដាប់លំដោយនៃរឿងនេះគឺខ្លី មានសណ្តាប់ធ្នាប់ ហើយកម្រនឹងមានលក្ខណៈស្រាលជាមួយគ្នាណាស់។

នៅលើម៉ាស៊ីនមេ Windows មានការត្រួតពិនិត្យតម្លៃថោក និងទំនុកចិត្តខ្ពស់ពីរ។ វត្ថុបុរាណនៃការបន្តគឺជាខ្សែអក្សរថេរ ហើយគ្មានមួយណាជាកម្មសិទ្ធិរបស់ប្រព័ន្ធស្អាតនោះទេ៖ ភារកិច្ចដែលបានកំណត់ពេលនៅ \Microsoft\Windows\Multimedia\SystemSoundsServiceតម្លៃ Run-key ដែលមានឈ្មោះថា សេវាកម្មសំឡេងប្រព័ន្ធនិងឯកសារដែលអាចប្រតិបត្តិបាននៃឈ្មោះនោះនៅក្រោម %APPDATA%\Microsoft\Windows\ស្បែក\សេវាកម្មអូឌីយ៉ូ Windows ពិតប្រាកដមិនមាននៅក្នុងកន្លែងណាមួយទាំងនោះទេ។ ទីពីរ កម្មវិធីផ្ទុកទិន្នន័យប្រើ mutex តែមួយដែលបានកំណត់។ Global\{7A3B9E1F-C2D4-4F8A-B5E6-D7A1F0C3E2B9}វត្តមានរបស់វានៅលើម៉ាស៊ីនគឺជាសូចនាករមួយ ហើយដោយសារតែកម្មវិធីផ្ទុកទិន្នន័យចាត់ទុក mutex ដែលមានស្រាប់ថា "កំពុងដំណើរការរួចហើយ" ការបង្កើតវាជាមុនគឺជាការចាក់ថ្នាំបង្ការរយៈពេលខ្លីដែលអាចអនុវត្តបាន ខណៈពេលដែលការស្តារឡើងវិញត្រូវបានកំណត់ពេល។

ការរកឃើញនៅដំណាក់កាលទីបីគឺជាបញ្ហាដ៏លំបាកជាង ហើយវាមានតម្លៃក្នុងការបញ្ជាក់ឲ្យច្បាស់។ ដោយសារតែការវិភាគសាធារណៈ វាត្រូវបានឌិគ្រីប និងដាក់ក្នុងអង្គចងចាំជាជាងសរសេរទៅឌីស ដូច្នេះការស្កេនឯកសារ និងកោសល្យវិច្ច័យឌីសនឹងមិនឃើញវាទេ។ អ្វីដែលនៅតែអាចសង្កេតឃើញគឺស្នាមជើងរបស់ឧបករណ៍ផ្ទុកទិន្នន័យផ្ទាល់ — ធាតុរក្សាទិន្នន័យ mutex និងសំណើចេញទៅម៉ាស៊ីនចែកចាយ ឬដែន DNS-TXT។

សម្រាប់បរិស្ថានដែលដោះស្រាយភាពអាស្រ័យពីទាំងបញ្ជីឈ្មោះឯកជន និងសាធារណៈ ការកាត់បន្ថយមិនមានការផ្លាស់ប្តូរដោយអ្វីទាំងអស់នៅទីនេះទេ៖ កំណត់វិសាលភាពឈ្មោះផ្ទៃក្នុង ដូច្នេះឈ្មោះសាធារណៈមិនអាចបំពេញតម្រូវការរបស់ពួកគេបានទេ ហើយភ្ជាប់ដំណោះស្រាយទៅបញ្ជីឈ្មោះផ្ទៃក្នុងសម្រាប់វិសាលភាពទាំងនោះ។ ឥរិយាបថបំប៉ោងកំណែដែលបានពិពណ៌នាខាងលើដំណើរការតែកន្លែងដែលកំណែសាធារណៈខ្ពស់ជាងអាចឈ្នះឈ្មោះប៉ុណ្ណោះ។

ជាចុងក្រោយ ការមិនបោះពុម្ពផ្សាយនេះមានតម្លៃក្នុងការអានដោយប្រុងប្រយ័ត្នជាជាងការបញ្ចប់។ ឈ្មោះចំនួនដប់ប្រាំបួនបានចាកចេញពីបញ្ជីឈ្មោះក្នុងរយៈពេលម្ភៃប្រាំវិនាទី ហើយឈ្មោះមួយបានត្រឡប់មកវិញមួយថ្ងៃក្រោយមកក្រោមគណនីថ្មីមួយ ដោយហេដ្ឋារចនាសម្ព័ន្ធចែកចាយមិនត្រូវបានប៉ះពាល់ពេញមួយដំណើរការ។ ការដកកញ្ចប់ចេញមិនមែនជាការដកប្រតិបត្តិការចេញទេ។ ម៉ាស៊ីនបានបន្តបម្រើគ្រប់ដំណាក់កាលទាំងអស់ ខណៈពេលដែលរឿងនេះត្រូវបានសរសេរ។ ដើមឈើអាស្រ័យណាមួយដែលបានដោះស្រាយឈ្មោះមួយក្នុងចំណោមឈ្មោះទាំងនេះរវាងថ្ងៃទី 31 ខែកក្កដា និងថ្ងៃទី 1 ខែសីហា គួរតែត្រូវបានចាត់ទុកថាមានឱកាសអនុវត្តដំណាក់កាលទីមួយ មិនថាឈ្មោះនៅតែមានឬអត់នោះទេ។

ឯកសារយោង

ឧបករណ៍វិភាគសមាសភាពកម្មវិធី sca
ផ្តល់អាទិភាព ដោះស្រាយ និងធានាសុវត្ថិភាពហានិភ័យផ្នែកទន់របស់អ្នក
ទទួលបានគណនីឥតគិតថ្លៃរបស់អ្នក។
មិនតម្រូវឱ្យមានកាតឥណទានទេ។

ធានាសុវត្ថិភាពនៃការអភិវឌ្ឍន៍ និងការដឹកជញ្ជូនកម្មវិធីរបស់អ្នក

ជាមួយឈុតផលិតផល Xygeni