TL; កុង
នៅថ្ងៃទី១៤ ខែកញ្ញា ឆ្នាំ២០២៥ អ្នកស្រាវជ្រាវបានកំណត់អត្តសញ្ញាណ សាយ ហ៊ុលុដដង្កូវដែលចម្លងដោយខ្លួនឯងដែលលាក់នៅខាងក្នុង កញ្ចប់ npmប្រែក្លាយការអាប់ដេតការពឹងផ្អែកជាប្រចាំទៅជាទ្រង់ទ្រាយពេញលេញ ការវាយប្រហារខ្សែសង្វាក់ផ្គត់ផ្គង់. ប្រទះឃើញជាលើកដំបូងនៅក្នុង @ctrl/tinycolor កញ្ចប់ដោយ Daniel dos Santos Pereira, Shai-Hulud ប្រមូលយកអាថ៌កំបាំង លួចយកវាតាមរយៈឃ្លាំងទិន្នន័យ និងលំហូរការងារ GitHub ហើយបោះពុម្ពផ្សាយខ្លួនឯងឡើងវិញនៅទូទាំងបញ្ជីឈ្មោះដោយប្រើព័ត៌មានសម្ងាត់ដែលត្រូវបានលួច។ ក្នុងរយៈពេលប៉ុន្មានថ្ងៃ ចំនួនកញ្ចប់ដែលឆ្លងមេរោគបានកើនឡើងពីរាប់សិបទៅរាប់រយ ដែលបញ្ជាក់ថា... សៃហ៊ូលុដ មិនមែនគ្រាន់តែជាមេរោគ Trojan មួយផ្សេងទៀតទេ ប៉ុន្តែវាជាមេរោគ Worm ដែលត្រូវបានរចនាឡើងដើម្បីរីករាលដាលដោយស្វ័យប្រវត្តិនៅទូទាំងប្រព័ន្ធអេកូឡូស៊ី npm។
ផលប៉ះពាល់: អ្នកអភិវឌ្ឍន៍ ឬអ្នករត់ CI ណាមួយដែលកំពុងដំឡើងកញ្ចប់ npm សាធារណៈគឺប្រឈមនឹងហានិភ័យ។
សកម្មភាពបន្ទាន់៖ រារាំងកំណែដែលគេស្គាល់ ប្តូរទៅការដំឡើង lockfile-only បង្វិល npm និងថូខឹន GitHub ត្រួតពិនិត្យលំហូរការងារ និងតាមដានសូចនាករនៃការសម្របសម្រួល (IoCs)។
តើមានអ្វីកើតឡើង?
ចំពោះ ការវាយប្រហារខ្សែសង្វាក់ផ្គត់ផ្គង់ Shai-Hulud នៅក្នុងកញ្ចប់ npm គឺជាឧប្បត្តិហេតុមួយក្នុងចំណោមឧប្បត្តិហេតុដែលបង្កការរំខានបំផុតនៅក្នុងការចងចាំថ្មីៗនេះ។ មិនដូចមេរោគ Trojan ដែលដាច់ដោយឡែកនោះទេ មេរោគ Worm នេះលាយឡំគ្នា ការលួចយកព័ត៌មានបញ្ជាក់អត្តសញ្ញាណ ការលួចយកទិន្នន័យដោយស្វ័យប្រវត្តិ និងការចម្លងដោយខ្លួនឯងជាលទ្ធផល រយៈពេលនៃការឆ្លងបានថយចុះពីច្រើនសប្តាហ៍មកត្រឹមត្រឹមតែប៉ុន្មានម៉ោងប៉ុណ្ណោះ។
សម្រាប់ក្រុម DevOps មេរៀនគឺច្បាស់ណាស់៖ ប្រសិនបើការដំឡើងនីមួយៗអាចប្រតិបត្តិកូដបាន នោះការអាប់ដេតភាពអាស្រ័យនីមួយៗគឺជាចំណុចរំលោភបំពានដែលអាចកើតមាន។
វ៉ិចទ័រដំបូងដែលអាចធ្វើទៅបាន និងលិខិតសម្គាល់គោលដៅ
ការវិភាគដំបូង បង្ហាញថាការវាយប្រហារទំនងជាបានចាប់ផ្តើមជាមួយ អត្តសញ្ញាណលួចឧទាហរណ៍ យុទ្ធនាការបន្លំបន្លំ npm login ឬការជំរុញឲ្យចូលប្រព័ន្ធ (MFA prompts) អាចបានចាប់យកថូខឹនអ្នកអភិវឌ្ឍន៍។ នៅពេលដែលអ្នកវាយប្រហារទទួលបានទីតាំងដំបូងនោះ ដង្កូវនោះបានរីករាលដាលដោយបង្កប់ខ្លួនវាទៅក្នុងកញ្ចប់ npm ហើយលួចយកអាថ៌កំបាំងបន្ថែមទៀតពី៖
- ឯកសារកំណត់រចនាសម្ព័ន្ធ npm ដូច
.npmrcជារឿយៗមានថូខឹនបោះពុម្ពផ្សាយ។ - អថេរបរិស្ថាន និងការកំណត់រចនាសម្ព័ន្ធជាមួយ GitHub PAT និង CI/CD អាថ៌កំបាំង។
- ចំណុចបញ្ចប់ទិន្នន័យមេតាលើពពក (AWS, GCP, Azure) ដែលផ្តល់សិទ្ធិសម្គាល់រយៈពេលខ្លីសម្រាប់ចលនាចំហៀង។
ដូច្នេះ ការលួចព័ត៌មានសម្ងាត់បានក្លាយជាចំណុចចាប់ផ្តើម។ ជាមួយនឹងថូខឹន npm ដែលមានសុពលភាព និងអាថ៌កំបាំង GitHub Shai-Hulud អាចចម្លងដោយខ្លួនឯងនៅទូទាំងកញ្ចប់ និងឃ្លាំងទិន្នន័យច្រើនដោយមិនចាំបាច់ប្រឹងប្រែងបន្ថែមពីមនុស្ស។
ផលប៉ះពាល់ប្រតិបត្តិនៃការវាយប្រហារខ្សែសង្វាក់ផ្គត់ផ្គង់ Shai-Hulud
Shai-Hulud នៅតែសកម្មរហូតមកដល់សព្វថ្ងៃនេះ។ ដង្កូវនេះបង្កើនល្បឿននៃផលប៉ះពាល់។ អ្វីដែលធ្លាប់ចំណាយពេលច្រើនសប្តាហ៍ជាមួយមេរោគ Trojan ឥឡូវនេះលាតត្រដាងក្នុងរយៈពេលប៉ុន្មានម៉ោង។ ជាលទ្ធផល ការរីករាលដាលកាន់តែលឿន និងពិបាកទប់ស្កាត់។ វារីកចម្រើនដោយ៖
- ការលួចថូខឹនបោះពុម្ពផ្សាយ npm និងអាថ៌កំបាំង GitHub ។
- បោះពុម្ពផ្សាយខ្លួនវាឡើងវិញទៅក្នុងកញ្ចប់ npm ផ្សេងទៀត។
- ការបន្ថែមលំហូរការងារ GitHub Actions ដែលមានគំនិតអាក្រក់សម្រាប់ការតស៊ូ។
អ្នកណាដែលរងផលប៉ះពាល់៖
ក្រុមណាមួយដែលដំឡើងកញ្ចប់ npm សាធារណៈត្រូវបានលាតត្រដាង។ លើសពីនេះ អ្នកអភិវឌ្ឍន៍ដែលមាន npm ឬ GitHub tokens ដែលរក្សាទុកក្នុងឃ្លាំងសម្ងាត់ប្រឈមនឹងហានិភ័យខ្ពស់។ អ្នករត់ CI ដែលប្រើអាថ៌កំបាំងដែលមានវិសាលភាពទូលំទូលាយក៏ងាយរងគ្រោះផងដែរ។
ហានិភ័យអាជីវកម្ម
ផលប៉ះពាល់អាជីវកម្មកើនឡើងយ៉ាងឆាប់រហ័ស។ ថូខឹនដែលត្រូវបានលួចអាចនាំឱ្យមានការកាន់កាប់គណនី ការលួចកញ្ចប់ និងសូម្បីតែការប្រើប្រាស់ខុសលើពពក។ លើសពីនេះ ការជាប់គាំងនៅក្នុងលំហូរការងារ GitHub ធ្វើឱ្យវាកាន់តែពិបាកក្នុងការសម្អាត។ ដូច្នេះក្រុមនានាត្រូវតែចាត់ទុក Shai-Hulud ជាឧប្បត្តិហេតុដែលកំពុងបន្ត មិនមែនជាឧប្បត្តិហេតុបិទទ្វារនោះទេ។
របៀបដែលការវាយប្រហារខ្សែសង្វាក់ផ្គត់ផ្គង់ Shai-Hulud ដំណើរការនៅក្នុងកញ្ចប់ npm
គោលបំណង និងហេតុផលរបស់អ្នកវាយប្រហារ
យុទ្ធនាការនេះធ្វើឱ្យប្រសើរឡើងសម្រាប់រឿងបីយ៉ាង៖
- គោលបំណងដំបូងគឺ លួចយកព័ត៌មានសម្ងាត់ក្នុងទ្រង់ទ្រាយធំ ពីកុំព្យូទ័រយួរដៃអ្នកអភិវឌ្ឍន៍ និងអ្នកដំណើរការ CI។ នេះរួមបញ្ចូលទាំង npm publish tokens, GitHub tokens និង cloud credentials។ តាមពិតទៅ ការវិភាគច្រើនបញ្ជាក់ពីការប្រមូលផលសម្ងាត់ជាប្រព័ន្ធ ដូចជាការដំណើរការ TruffleHog និងការសាកសួរចំណុចបញ្ចប់ metadata cloud។
- គោលបំណងទីពីរគឺដើម្បី រីករាលដាលដោយស្វ័យប្រវត្តិ ដោយរំលោភលើសិទ្ធិបោះពុម្ពផ្សាយរបស់អ្នកថែទាំដែលរងការសម្របសម្រួល។ ជាលទ្ធផល ជើងទម្រមួយពង្រីកយ៉ាងឆាប់រហ័សទៅជាជើងទម្រជាច្រើន ដោយសារកំណែឆ្លងមេរោគថ្មីនៃកញ្ចប់ផ្សេងទៀតលេចឡើងដោយមិនចាំបាច់ប្រឹងប្រែងបន្ថែមពីមនុស្ស។
- គោលបំណងទីបីគឺដើម្បី បន្ត និងច្រោះចេញដោយភាពជឿជាក់ តាមរយៈហេដ្ឋារចនាសម្ព័ន្ធ GitHub។ អ្នកវាយប្រហារបង្កើត repo សាធារណៈមួយដែលមានឈ្មោះថា "Shai-Hulud" ជាមួយនឹងមូលដ្ឋានពីរ data.jsonហើយលើសពីនេះទៀត ពួកគេបង្កើតលំហូរការងារដែលធ្វើស៊េរី ${{ toJSON(secrets) }} ហើយបង្ហោះវាទៅ static webhook។
ផលចំណេញដែលទំនងជារួមមានការចូលប្រើបញ្ជីឈ្មោះ និងកូដប្រភពរយៈពេលយូរ ការផ្លាស់ប្តូររហ័សទៅក្នុងគណនី cloud និងជម្រើសក្នុងការធ្វើឱ្យខ្សែសង្វាក់ផ្គត់ផ្គង់កាន់តែរឹងមាំ។ របាយការណ៍សាធារណៈបង្ហាញថា repos ឯកជនត្រូវបានប្តូរទៅជាសាធារណៈជាមួយ «-ការធ្វើចំណាកស្រុក» បច្ច័យ ដែលបង្កើនការប៉ះពាល់ទិន្នន័យ និងសន្ទុះ
នៅខាងក្នុងបន្ទុក Shai-Hulud៖ bundle.js នៅក្នុងកញ្ចប់ npm
នាវា Shai-Hulud ក្នុងនាមជា ធំ ភ្ជាប់ជាមួយ Webpack និងបង្រួមអប្បបរមា ឯកសារ JavaScript (bundle.js, ប្រហែល 3–3.7 មេកាបៃ) ដែលប្រតិបត្តិពី ក្រោយការដំឡើង ភ្ជាប់ចូល កញ្ចប់ជាលទ្ធផល, រាល់ការដំឡើងនឹងបង្កឱ្យ payload សកម្មដោយស្វ័យប្រវត្តិ។ ការរចនានេះលាក់ឧបករណ៍កំណត់អត្តសញ្ញាណ បង្រួមលំហូរត្រួតពិនិត្យ និងរុញតក្កវិជ្ជាទាំងអស់ទៅជា artifact តែមួយដែលប្រតិបត្តិកំឡុងពេលដំឡើង។ អ្នកវិភាគតែងតែបញ្ជាក់អំពីការចង Webpack ទំហំឯកសារមិនធម្មតា និងការប្រតិបត្តិពេលវេលាដំឡើង។
លក្ខណៈនៃការបិទបាំង និងប្រឆាំងការវិភាគ ដែលអ្នកនឹងឃើញនៅក្នុងគំរូ៖
- ក្រាហ្វម៉ូឌុលដែលបានបង្រួមអប្បបរមា ជាមួយនឹងលេខសម្គាល់ម៉ូឌុលជាលេខ មតិយោបល់មិនច្បាស់លាស់ និងលំហូរត្រួតពិនិត្យរាបស្មើ។ លើសពីនេះ, រចនាសម្ព័ន្ធនេះធ្វើឱ្យការពិនិត្យឡើងវិញដោយដៃពិបាកខ្លាំងណាស់។
- ការលាក់ខ្សែអក្សរ តាមរយៈស្រទាប់ base64 និងជំនួយសំណង់។ ឧទាហរណ៍, ការអ៊ិនកូដ និងឌិកូដ base64 ម្តងហើយម្តងទៀតជាធម្មតាលេចឡើងនៅជុំវិញនីតិវិធីនៃការច្រោះចេញ។
- ការបញ្ជូនថាមវន្ត តាមរយៈការ ការគេចចេញ-លំនាំរចនាប័ទ្ម និងបង្កើតតួមុខងារ ដូច្នេះអាចឱ្យកូដផ្លាស់ប្ដូរឥរិយាបថនៅពេលដំណើរការ។
- ការត្រងប្រព័ន្ធប្រតិបត្តិការ ដើម្បីពេញចិត្តនឹងការប្រតិបត្តិ Linux និង macOS ជាពិសេសលើអ្នករត់ CI និងកុំព្យូទ័រយួរដៃអ្នកអភិវឌ្ឍន៍។
ពីមុំមុខងារ បាច់នេះគឺជាម៉ូឌុល។ ការសរសេរពិពណ៌នាអំពីម៉ូឌុលសម្រាប់ការរកឃើញប្រព័ន្ធប្រតិបត្តិការ ប្រព័ន្ធឯកសារ និងការស្កេនសម្ងាត់ git ការចូលប្រើ cloud SDK ប្រតិបត្តិការ GitHub API និងម៉ាស៊ីនផ្សព្វផ្សាយដែលកែសម្រួលកញ្ចប់ផ្សេងទៀតដែលអ្នកថែទាំជាម្ចាស់។ តាមពិតទៅ StepSecurity និង ReversingLabs ទាំងពីរបង្ហាញពីមុខងារមួយដែលធ្វើបច្ចុប្បន្នភាពកញ្ចប់ដោយស្វ័យប្រវត្តិជាមួយនឹងទំពក់ព្យាបាទ។
ការប្រតិបត្តិពេលវេលាដំឡើងនៅក្នុង Shai-Hulud៖ របៀបដែលកញ្ចប់ npm បង្កមេរោគ Worm
ការវាយប្រហារចាប់ផ្តើមនៅពេល ក្រោយការដំឡើងដំណើរការ node bundle.js. នៅចំណុចនេះ ស្គ្រីបនឹងចាប់ផ្តើម និងស្រាយចេញនូវស្ថានភាពការងារនៅក្នុងអង្គចងចាំ ដោយកំណត់ដំណាក់កាលសម្រាប់ប្រតិបត្តិការពេញលេញរបស់ដង្កូវ។
ការរកឃើញ និងការប្រមូលផល
- payload បោះចោល process.env ហើយស្កេនឯកសារក្នុងស្រុកសម្រាប់អាថ៌កំបាំង entropy ខ្ពស់ និងបុព្វបទ token។ លើសពីនេះ វាពង្រីកការគ្របដណ្តប់ដោយដំណើរការ TruffleHog។
- វាសាកសួរចំណុចបញ្ចប់ទិន្នន័យមេតាលើពពក ដើម្បីប្រមូលព័ត៌មានបញ្ជាក់អត្តសញ្ញាណដែលមានអាយុកាលខ្លី។ ឧទាហរណ៍ ហៅទៅ
169.254.169.254នៅលើ AWS ឬmetadata.google.internalនៅលើ GCP ជារឿយៗលេចឡើងនៅក្នុងម៉ាស៊ីនដែលឆ្លងមេរោគ។ - ជាលទ្ធផល, លិខិតសម្គាល់ណាមួយដែលបានរកឃើញ នឹងអាចប្រើប្រាស់បានភ្លាមៗ ដើម្បីបោះពុម្ពផ្សាយកញ្ចប់ npm ថ្មី ឬជំរុញលំហូរការងារ GitHub។
ការបណ្តេញចេញ
- ដង្កូវនេះបង្កើតឃ្លាំង GitHub ថ្មីមួយដែលមានឈ្មោះថា សាយ ហ៊ុលុដ ហើយសរសេរកូដ double base64-encoded
data.jsonជាមួយនឹងព័ត៌មានលម្អិតអំពីវេទិកា ទិន្នន័យបរិស្ថាន និងអាថ៌កំបាំង។ ដូចដែលអាចមើលឃើញ ឥរិយាបថរំខាននេះងាយស្រួលកត់សម្គាល់ ប្រសិនបើអ្នកការពារដឹងពីកន្លែងដែលត្រូវមើល។ - វាក៏បង្កើតលំហូរការងារ GitHub Actions ជាញឹកញាប់នៅលើសាខាមួយដែលមានឈ្មោះថា សាយ-ហ៊ូលូដដែលធ្វើឱ្យស៊េរី
${{ toJSON(secrets) }}ហើយបង្ហោះទិន្នន័យទៅ static webhook។ លើសពីនេះ លំហូរការងារនេះនៅតែបន្តរហូតដល់មាននរណាម្នាក់លុបវាចេញយ៉ាងសកម្ម។
ការឃោសនា
- ជាមួយនឹងសញ្ញាសម្ងាត់ npm ណាមួយដែលត្រូវបានរកឃើញ payload នឹងរាប់បញ្ចូលកញ្ចប់ទាំងអស់ដែលជាកម្មសិទ្ធិរបស់អ្នកថែទាំដែលរងការសម្របសម្រួល។ បន្ទាប់មក វាទាញយក tarball នីមួយៗ ចាក់ bundle.js និងធាតុក្រោយការដំឡើង ហើយបោះពុម្ពផ្សាយកញ្ចប់ឡើងវិញ។
- ជាលទ្ធផល កញ្ចប់ឆ្លងមេរោគរាប់សិបអាចលេចឡើងក្នុងរយៈពេលតែប៉ុន្មានម៉ោងប៉ុណ្ណោះ ដែលបង្កើនកាំផ្ទុះនៅទូទាំងប្រព័ន្ធអេកូឡូស៊ី។
ភាពស្ថិតស្ថេរ និងការប៉ះពាល់
ដង្កូវនេះរក្សាដំណើរការការងារព្យាបាទឱ្យនៅរស់រវើក ហើយក្នុងករណីជាច្រើន វាប្តូរឃ្លាំងឯកជនទៅជាសាធារណៈជាមួយ «-ការធ្វើចំណាកស្រុក» បច្ច័យ។ ជារួម នេះធានាថាអ្នកវាយប្រហាររក្សាបាននូវទីតាំងឈរជើង និងបង្កើនការលេចធ្លាយទិន្នន័យឱ្យបានអតិបរមា។
កំណត់ចំណាំរកឃើញសោ
ការប្រើប្រាស់មិនធម្មតានេះ ${{ toJSON(secrets) }} នៅក្នុងលំហូរការងារសកម្មភាពគឺកម្រណាស់។ ដូច្នេះ ក្រុមនានាគួរតែចាត់ទុកវាជាសូចនាករសញ្ញាខ្ពស់ក្នុងអំឡុងពេលបរបាញ់។
គំរូដំណើរការការងារដែលបានសម្អាតរួចដែលអ្នកគួរស្វែងរក
ការប្រើប្រាស់មិនធម្មតានេះ ទៅ JSON (អាថ៌កំបាំង) នៅក្នុងសកម្មភាព គឺជាសូចនាករសញ្ញាខ្ពស់នៅក្នុងឧប្បត្តិហេតុនេះ។
កូដក្លែងក្លាយសម្រាប់ការសាយភាយកម្រិតខ្ពស់ (មានសុវត្ថិភាព ពិពណ៌នា)
អ្នកវិភាគបានសង្កេតឃើញរង្វិលជុំនេះក្នុងទ្រង់ទ្រាយធំ ដែលពន្យល់ពីការកើនឡើងយ៉ាងឆាប់រហ័សពីកញ្ចប់ដែលឆ្លងមេរោគរាប់សិបទៅរាប់រយ។
ហេតុអ្វីបានជានេះជាដង្កូវនៅក្នុងប្រព័ន្ធអេកូឡូស៊ីកញ្ចប់
ដង្កូវ (worm) គឺជាមេរោគដែលរីករាលដាលដោយខ្លួនឯងដោយមិនតម្រូវឱ្យមានជំហានប្រតិបត្តិករដោយដៃនៅគ្រប់ដំណាក់កាលឡើយ។ នៅក្នុងប្រព័ន្ធប្រតិបត្តិការ ដង្កូវជាធម្មតាទាញយកប្រយោជន៍ពីភាពងាយរងគ្រោះនៃបណ្តាញដើម្បីផ្លាស់ទីពីម៉ាស៊ីនមួយទៅម៉ាស៊ីនមួយទៀត។ ផ្ទុយទៅវិញ Shai-Hulud ដំណើរការនៅខាងក្នុងបញ្ជីឈ្មោះ npm។ ផ្លូវដ៏មានប្រសិទ្ធភាពរបស់វាគឺតាមរយៈ ការប្រើប្រាស់ឡើងវិញ.
ដង្កូវនេះទាញយកអត្ថប្រយោជន៍ពីថូខឹនបោះពុម្ពផ្សាយ npm ដែលត្រូវបានគេលួច។ ដរាបណាវាទទួលបានព័ត៌មានសម្ងាត់ដែលមានសុពលភាព វានឹងបោះពុម្ពផ្សាយឡើងវិញនូវកំណែដែលឆ្លងមេរោគក្រោមកញ្ចប់ផ្សេងទៀតដែលគ្រប់គ្រងដោយអ្នកថែទាំដូចគ្នា។ បន្ទាប់មក កញ្ចប់ទាំងនោះត្រូវបានដំឡើងដោយអ្នកអភិវឌ្ឍន៍ ឬអ្នកដំណើរការ CI ដែលមិនបានដឹងខ្លួន ហើយវដ្តនេះកើតឡើងម្តងទៀត។
ដោយហេតុផលនេះ អ្នកវិភាគសន្តិសុខ រួមទាំង ការអានងងឹតចាត់ថ្នាក់ Shai-Hulud ជា ដង្កូវចម្លងដោយខ្លួនឯង ជាជាងមេរោគ Trojan សាមញ្ញ ឬឧប្បត្តិហេតុវាយអក្សរខុស។ ភាពខុសគ្នាគឺសំខាន់៖ មេរោគ Trojan ជាធម្មតាធ្វើឱ្យប៉ះពាល់ដល់ម៉ាស៊ីនមួយ ប៉ុន្តែដង្កូវពង្រីកផលប៉ះពាល់របស់វាដោយស្វ័យប្រវត្តិនៅទូទាំងប្រព័ន្ធអេកូឡូស៊ី។
សន្លឹកបន្លំ "របៀបដែលវាដំណើរការ"
ដើម្បីសង្ខេបវដ្តជីវិតរបស់ Shai-Hulud នេះគឺជាចំណុចខ្វះខាតមួយcisការវិភាគជំហានសំខាន់ៗរបស់វា៖
- កញ្ចប់មួយដែលមាន ក្រោយការដំឡើង ត្រូវបានដំឡើង ហើយ
bundle.jsប្រតិបត្តិ។ - payload បោះចោលអថេរបរិស្ថាន ស្កេនឯកសារ និងប្រវត្តិ git ដំណើរការ ផ្សិត TruffleHogនិងសាកសួរសេវាកម្មទិន្នន័យមេតាលើពពក។ ជាលទ្ធផល អាថ៌កំបាំងណាមួយដែលត្រូវបានរកឃើញនឹងមានប្រយោជន៍ភ្លាមៗ។
- ការច្រោះចេញកើតឡើងតាមពីរវិធី៖ ទីមួយ ដោយបង្កើត repo សាធារណៈមួយដែលមានឈ្មោះថា សាយ ហ៊ុលុដ ជាមួយនឹងការអ៊ិនកូដមូលដ្ឋានទ្វេ 64
data.jsonទីពីរ ដោយការដាំដំណើរការការងារ GitHub Actions ដែលបង្ហោះ${{ toJSON(secrets) }}ទៅកាន់បណ្ដាញអ៊ីនធឺណិត។ - ដោយប្រើប្រាស់សញ្ញាសម្ងាត់ npm ណាមួយដែលត្រូវបានគេលួច ដង្កូវនេះបោះពុម្ពឡើងវិញនូវកញ្ចប់ផ្សេងទៀតទាំងអស់ដែលជាកម្មសិទ្ធិរបស់អ្នកថែទាំដែលរងការសម្របសម្រួលជាមួយនឹងទំពក់ព្យាបាទដូចគ្នា។ តាមរបៀបនេះ ការឆ្លងមេរោគកើនឡើងយ៉ាងឆាប់រហ័ស។
- ជាចុងក្រោយ អ្នកវាយប្រហារកាន់កាប់អាថ៌កំបាំងជាច្រើនទៀត កញ្ចប់ជាច្រើនទៀតដើម្បីផ្សព្វផ្សាយ និង ការតស៊ូ នៅខាងក្នុងគណនី និងឃ្លាំង GitHub។
របៀបជៀសវាងការវាយប្រហារប្រភេទនេះ តាមការអនុវត្តជាក់ស្តែង
Shai-Hulud គឺជាការដាស់តឿនមួយ។ ដង្កូវដែលលួចថូខឹន ហើយបោះពុម្ពផ្សាយឡើងវិញដោយខ្លួនឯង មិនមែនជាហានិភ័យនាពេលអនាគតទេ វាកំពុងរស់នៅក្នុង... ប្រព័ន្ធអេកូឡូស៊ីកញ្ចប់ npm ថ្ងៃនេះ ដើម្បីទប់ស្កាត់ប្រភេទនេះ ការវាយប្រហារខ្សែសង្វាក់ផ្គត់ផ្គង់ក្រុមនានាត្រូវការការគ្រប់គ្រងដែលអាចសរសេរកម្មវិធីបាន ដោយស្វ័យប្រវត្តិ និងអនុវត្តដោយផ្ទាល់នៅក្នុង CI/CD pipelineទ. ទាំងនេះគឺជាការការពារដូចគ្នាដែលអ្នកអាចអនុវត្តបានរួចហើយ ស៊ីហ្គេនី.
បញ្ឈប់វត្ថុបុរាណអាក្រក់នៅច្រកទ្វារ
អ្នកគួរតែស្កេនកញ្ចប់ npm និង tarballs មុនពេលពួកវាទៅដល់អ្នកអភិវឌ្ឍន៍ ឬការងារ CI។ bundle.js ឯកសារ, ក្រោយការដំឡើងគួរឱ្យសង្ស័យ hooksនិងសញ្ញាសម្គាល់ការបិទបាំងទាំងអស់បម្រើជាសញ្ញាព្រមានដំបូង។ លើសពីនេះ ការអនុវត្តរយៈពេលស្ងប់ស្ងាត់ និងកំណែដែលបានខ្ទាស់នៅក្នុង pipelines ការពារការបញ្ចេញថ្មីៗ ដែលមិនបានត្រួតពិនិត្យ ពីការប្រើប្រាស់ដោយស្វ័យប្រវត្តិ។
រឹង CI/CD តាមលំនាំដើម
Guardrails in CI/CD គឺចាំបាច់ណាស់។ ពួកគេបដិសេធការបញ្ចូលគ្នា ឬការដំឡើងដែលណែនាំស្គ្រីប ឬប្រព័ន្ធគោលពីរថ្មី។ ក្នុងពេលជាមួយគ្នានេះ ពួកគេរារាំងលំហូរការងារដែលធ្វើស៊េរីសម្ងាត់ ឬព្យាយាមបង្ហោះខាងក្រៅ។ ក្រុមក៏គួរតែតម្រូវឱ្យមានការដំឡើង lockfile-only (npm ci) ទូទាំង pipelineដូច្នេះសំណុំភាពអាស្រ័យនៅតែអាចបង្កើតឡើងវិញបាន និងមានសុវត្ថិភាព។
កាត់បន្ថយកាំនៃការផ្ទុះសញ្ញាសម្ងាត់
អាថ៌កំបាំងមិនត្រូវក្លាយជាចំណុចបរាជ័យតែមួយមុខនោះទេ។ ត្រូវស្កេនកូដ ការកំណត់រចនាសម្ព័ន្ធ និង pipeline ទិន្នផលសម្រាប់ ព័ត៌មានសម្ងាត់ដែលបានបង្ហាញថូខឹនគួរតែត្រូវបានកំណត់វិសាលភាពឱ្យតូចចង្អៀត ដោយផ្តល់អាយុកាលខ្លី និងបង្វិលដោយស្វ័យប្រវត្តិនៅពេលដែលការប៉ះពាល់ត្រូវបានរកឃើញ។ តាមក្បួនមួយ សូមចាត់ទុកថូខឹនណាមួយដែលប្រើលើម៉ាស៊ីនដែលបានអនុវត្តការដំឡើងក្រោយការសង្ស័យថាជាការគំរាមកំហែង។
មើលឥរិយាបថរបស់ដង្កូវឱ្យបានឆាប់
ការរកឃើញភាពមិនធម្មតា គឺជាគន្លឹះសំខាន់។ ឧទាហរណ៍ ការកើនឡើងភ្លាមៗនៃព្រឹត្តិការណ៍បោះពុម្ពផ្សាយ npm លំហូរការងារថ្មីដែលលេចឡើងដោយគ្មានហេតុផល ឬឃ្លាំងសាធារណៈថ្មីៗដែលពោរពេញទៅដោយឯកសារដែលបានអ៊ិនកូដចម្លែកៗ សុទ្ធតែអាចបង្ហាញពីសកម្មភាពរបស់មេរោគ Worm។ ដូច្នេះ ក្រុមគួរតែបង្កើនការជូនដំណឹងយ៉ាងឆាប់រហ័ស និងញែកអ្នកថែទាំ ឬអ្នកដំណើរការណាមួយដែលបង្ហាញសញ្ញាព្រមានទាំងនេះ។
ជួសជុលយ៉ាងរហ័សដោយមិនធ្វើឲ្យខូចសំណង់
ល្បឿន និងសុវត្ថិភាពត្រូវតែដើរទន្ទឹមគ្នា។ ស្វ័យប្រវត្តិ pull requests អាចជំនួសកញ្ចប់ npm ដែលរងការសម្របសម្រួលជាមួយនឹងកំណែដែលបានត្រួតពិនិត្យ។ លើសពីនេះ ការបង្កើនសមត្ថភាព និង ការកេងប្រវ័ញ្ច ការវិភាគធានាថាការធ្វើឱ្យប្រសើរឡើងនៅតែមានកម្រិតតិចតួចបំផុត និងមានស្ថេរភាព។ ជាចុងក្រោយ សាងសង់ឡើងវិញនូវកម្មវិធីដំណើរការ CI ដែលរងផលប៉ះពាល់ពីរូបភាពស្អាតនៅពេលដែលការប៉ះពាល់ត្រូវបានបញ្ជាក់ ដោយការពារការវាយប្រហារពីការរីករាលដាលបន្ថែមទៀត។
សូចនាករនៃការសម្របសម្រួល (IoCs)
នៅពេលវិភាគ Shai-Hulud ក្រុមនានាគួរតែតាមដានទាំងពីរ IoC ឋិតិវន្ត នៅក្នុងឯកសារ និង IoC អាកប្បកិរិយា in pipelineស. សញ្ញាទាំងនេះរួមគ្នាជួយរកឃើញការឆ្លងមេរោគឱ្យបានឆាប់ និងឆ្លើយតបមុនពេលដង្កូវរីករាលដាលបន្ថែមទៀត។
IoC ឋិតិវន្ត
ការផ្គូផ្គងនៃការរំលាយ SHA-256 ខាងក្រោមត្រូវបានសង្កេតឃើញ bundle.js គំរូ៖
- 46faab8ab153fae6e80e7cca38eab363075bb524edd79e42269217a083628f09
- 81d2a004a1bca6ef87a1caf7d0e0b355ad1764238e40ff6d1b1cb77ad4f595c3
- dc67467a39b70d1cd4c1f7f7a459b35058163592f4a9e8fb4dffcbba98ef210c
លើសពីនេះ សូមប្រយ័ត្នចំពោះលំនាំដដែលៗទាំងនេះ៖
- A
bundle.jsនៅ root កញ្ចប់។ "postinstall": "node bundle.js"នៅខាងក្នុងpackage.json.- ឃ្លាំងដែលមានឈ្មោះ សាយ ហ៊ុលុដ.
- លំហូរការងារ GitHub ដែលមាន
${{ toJSON(secrets) }}.
IoC ស្តីពីឥរិយាបថ
ក្រៅពីហត្ថលេខាឯកសារ សកម្មភាពរបស់មេរោគ Worm បង្ហាញឱ្យឃើញតាមរយៈឥរិយាបថ។ ឧទាហរណ៍៖
- ការផ្ទុះឡើងភ្លាមៗនៃព្រឹត្តិការណ៍ npm បោះពុម្ពផ្សាយពីអ្នកថែទាំម្នាក់។
- លំហូរការងារថ្មីដែលរុញទិន្នន័យទៅកាន់ចំណុចបញ្ចប់ខាងក្រៅ។
- សំណើ POST ចេញដែលបង្កឡើងពីអ្នកដំណើរការ CI។
- ឃ្លាំងសាធារណៈដែលទើបបង្កើតថ្មីៗជាមួយប្លុកដែលបានអ៊ិនកូដ។
ការបរបាញ់រហ័ស
សេចក្តីសន្និដ្ឋាន៖ មេរៀនពី Shai-Hulud
ចំពោះ ការវាយប្រហារខ្សែសង្វាក់ផ្គត់ផ្គង់ Shai-Hulud នៅក្នុងកញ្ចប់ npm បង្ហាញពីភាពផុយស្រួយនៃខ្សែសង្វាក់ផ្គត់ផ្គង់កម្មវិធីសព្វថ្ងៃនេះ។ ដង្កូវនេះបានធ្វើច្រើនជាងការបន្ថែមកូដព្យាបាទ។ វាបានលួចថូខឹន ផ្ញើទិន្នន័យចេញ ហើយបន្ទាប់មកបោះពុម្ពផ្សាយឡើងវិញដោយស្វ័យប្រវត្តិ។ ដោយសារតែបញ្ហានេះ ការវាយប្រហារបានរីករាលដាលក្នុងរយៈពេលប៉ុន្មានម៉ោងជំនួសឱ្យសប្តាហ៍។
សម្រាប់អ្នកអភិវឌ្ឍន៍ និងក្រុម DevOps មេរៀនគឺច្បាស់លាស់៖
- ការដំឡើងនីមួយៗដំណើរការកូដ។ សូម្បីតែកញ្ចប់ npm ទូទៅក៏អាចលាក់មេរោគ worm ក្រោយការដំឡើងបានដែរ។
- ថូខឹននីមួយៗមានតម្លៃខ្ពស់។ នៅពេលដែលត្រូវបានគេលួច វាអាចត្រូវបានប្រើដើម្បីផ្សព្វផ្សាយមេរោគបន្ថែមទៀត។
- ជារៀងរាល់ pipeline ត្រូវការការត្រួតពិនិត្យ។ ដោយគ្មាន guardrails លើភាពអាស្រ័យ លំហូរការងារ និងអាថ៌កំបាំង ការសម្របសម្រួលមួយអាចប៉ះពាល់ដល់ផលិតកម្មយ៉ាងឆាប់រហ័ស។
ដូច្នេះ ការបញ្ឈប់ការវាយប្រហារដូចជា Shai-Hulud តម្រូវឱ្យមានការគ្រប់គ្រងដោយស្វ័យប្រវត្តិ និងងាយស្រួលអនុវត្ត។ ក្រុមគួរតែស្កេនកញ្ចប់ npm មុនពេលដំឡើង ប្រើការបង្កើត lockfile រកឃើញសកម្មភាពបោះពុម្ពផ្សាយចម្លែក និងរក្សាថូខឹនឱ្យមានរយៈពេលខ្លី។ ជំហានទាំងនេះលែងជាជម្រើសទៀតហើយ។ ផ្ទុយទៅវិញ ពួកវាគឺជាមូលដ្ឋានគ្រឹះនៃភាពធន់នៅក្នុងសម័យទំនើប។ pipelines.
នៅ Xygeni យើងមើលឃើញការវាយប្រហារខ្សែសង្វាក់ផ្គត់ផ្គង់ Shai-Hulud ជាការព្រមានសម្រាប់ប្រព័ន្ធអេកូឡូស៊ីប្រភពបើកចំហទាំងមូល។ មធ្យោបាយប្រកបដោយចីរភាពឆ្ពោះទៅមុខគឺការនាំយកសុវត្ថិភាពខ្សែសង្វាក់ផ្គត់ផ្គង់ដោយផ្ទាល់ទៅក្នុងដំណើរការអភិវឌ្ឍន៍ នៅចំណុចដែលកូដ កញ្ចប់ npm និង pipelineភ្ជាប់។
ខាងក្រោមនេះគឺជាបញ្ជីពេញលេញនៃកញ្ចប់ npm និងកំណែដែលត្រូវបានរាយការណ៍ថាមានការលួចចូលនៅក្នុង Shai-Hulud។ ប្រើវាដើម្បីពិនិត្យមើលឯកសារចាក់សោ បញ្ជីឈ្មោះ និង CI របស់អ្នក។ pipelineសម្រាប់ការប៉ះពាល់។
បញ្ជីកញ្ចប់ដែលរងការគំរាមកំហែង
📦 ការមើលជាមុននៃកញ្ចប់ npm ដែលរងការសម្របសម្រួល
| ឈ្មោះកញ្ចប់។ | កំណែ | បោះពុម្ពផ្សាយកាលបរិច្ឆេទ |
|---|---|---|
| ម៉ាស៊ីនច្បាប់ json បានធ្វើឲ្យសាមញ្ញ | 0.2.1 | 2025-09-14T17:58:51.203Z |
| អ្នកបើកយន្តហោះ | 0.8.8 | 2025-09-14T18:35:07.600Z |
| ក្រាហ្វចំណេះដឹង mcp | 1.2.1 | 2025-09-14T18:35:09.494Z |
| ក្បាលយន្តហោះ | 0.3.1 | 2025-09-14T18:35:09.521Z |
| ច្រកទ្វារលោត | 0.0.2 | 2025-09-14T18:35:09.651Z |
| tvi-cli | 0.1.5 | 2025-09-14T18:35:10.996Z |
| @thangved/បង្អួចហៅត្រឡប់មកវិញ | 1.1.4 | 2025-09-14T20:31:38.479Z |
| @tnf-dev/api | 1.0.8 | 2025-09-14T20:31:39.547Z |
| @tnf-dev/js | 1.0.8 | 2025-09-14T20:31:41.251Z |
| @tnf-dev/mui | 1.0.8 | 2025-09-14T20:31:41.259Z |
| @tnf-dev/core | 1.0.8 | 2025-09-14T20:31:42.728Z |
| @teselagen/តារាងប្រតិកម្ម | 6.10.20 | 2025-09-14T20:37:08.597Z |
| @hestjs/demo | 0.1.2 | 2025-09-14T20:45:52.348Z |
| @nexe/eslint-config | 0.1.1 | 2025-09-14T20:45:53.625Z |
| @hestjs/eslint-config | 0.1.2 | 2025-09-14T20:45:55.044Z |
| @nexe/config-manager | 0.1.1 | 2025-09-14T20:45:55.066Z |
| @nexe/logger | 0.1.3 | 2025-09-14T20:45:55.170Z |
| @hestjs/logger | 0.1.6 | 2025-09-14T20:45:55.197Z |
| @hestjs/ការផ្ទៀងផ្ទាត់ | 0.1.6 | 2025-09-14T20:45:55.595Z |
| @hestjs/ស្នូល | 0.2.1 | 2025-09-14T20:45:55.888Z |
➡️ មើលបញ្ជីពេញលេញនៃកញ្ចប់ដែលរងការគំរាមកំហែង
| ឈ្មោះកញ្ចប់។ | កំណែ | បោះពុម្ពផ្សាយកាលបរិច្ឆេទ |
|---|---|---|
| ម៉ាស៊ីនច្បាប់ json បានធ្វើឲ្យសាមញ្ញ | 0.2.1 | 2025-09-14T17:58:51.203Z |
| អ្នកបើកយន្តហោះ | 0.8.8 | 2025-09-14T18:35:07.600Z |
| ក្រាហ្វចំណេះដឹង mcp | 1.2.1 | 2025-09-14T18:35:09.494Z |
| ក្បាលយន្តហោះ | 0.3.1 | 2025-09-14T18:35:09.521Z |
| ច្រកទ្វារលោត | 0.0.2 | 2025-09-14T18:35:09.651Z |
| tvi-cli | 0.1.5 | 2025-09-14T18:35:10.996Z |
| @thangved/បង្អួចហៅត្រឡប់មកវិញ | 1.1.4 | 2025-09-14T20:31:38.479Z |
| @tnf-dev/api | 1.0.8 | 2025-09-14T20:31:39.547Z |
| @tnf-dev/js | 1.0.8 | 2025-09-14T20:31:41.251Z |
| @tnf-dev/mui | 1.0.8 | 2025-09-14T20:31:41.259Z |
| @tnf-dev/core | 1.0.8 | 2025-09-14T20:31:42.728Z |
| @teselagen/តារាងប្រតិកម្ម | 6.10.20 | 2025-09-14T20:37:08.597Z |
| @hestjs/demo | 0.1.2 | 2025-09-14T20:45:52.348Z |
| @nexe/eslint-config | 0.1.1 | 2025-09-14T20:45:53.625Z |
| @hestjs/eslint-config | 0.1.2 | 2025-09-14T20:45:55.044Z |
| @nexe/config-manager | 0.1.1 | 2025-09-14T20:45:55.066Z |
| @nexe/logger | 0.1.3 | 2025-09-14T20:45:55.170Z |
| @hestjs/logger | 0.1.6 | 2025-09-14T20:45:55.197Z |
| @hestjs/ការផ្ទៀងផ្ទាត់ | 0.1.6 | 2025-09-14T20:45:55.595Z |
| @hestjs/ស្នូល | 0.2.1 | 2025-09-14T20:45:55.888Z |
| @hestjs/cqrs | 0.1.6 | 2025-09-14T20:45:55.966Z |
| @hestjs/ស្កាឡារ | 0.1.7 | 2025-09-14T20:45:56.386Z |
| ការផ្ទុកឡើងឯកសារ ng2 | 7.0.3 | 2025-09-15T02:44:29.555Z |
| ឧបករណ៍ដោះស្រាយការជូនដំណឹងរបស់ capacitor | 0.0.2 | 2025-09-15T04:54:48.431Z |
| ឧបករណ៍ជំនួយសម្រាប់បញ្ចូលឧបករណ៍ផ្ទុកអគ្គិសនី | 1.0.2 | 2025-09-15T04:54:48.501Z |
| កម្មវិធីជំនួយសម្រាប់សុខភាពរបស់ឧបករណ៍ផ្ទុកអគ្គិសនី | 0.0.2 | 2025-09-15T04:54:48.704Z |
| ការអនុញ្ញាតសម្រាប់ឧបករណ៍ផ្ទុកថាមពលអគ្គិសនីរបស់ប្រព័ន្ធប្រតិបត្តិការ Android | 0.0.4 | 2025-09-15T04:54:48.753Z |
| សំណុំហៅតាមអ៊ីនធឺណិត | 1.0.2 | 2025-09-15T04:54:49.223Z |
| កម្មវិធីជំនួយសម្រាប់ឧបករណ៍ផ្ទុកអគ្គិសនីក្នុងសុខភាព (Capacitor-plugin-ihealth) | 1.1.8 | 2025-09-15T04:55:08.113Z |
| @សិល្បៈ-ws/common | 2.0.22 | 2025-09-15T05:21:15.411Z |
| @art-ws/config-eslint | 2.0.4 | 2025-09-15T05:21:17.199Z |
| ngx-ws | 1.1.5 | 2025-09-15T05:21:17.514Z |
| @សិល្បៈ-ws/slf | 2.0.15 | 2025-09-15T05:21:17.524Z |
| @art-ws/http-server | 2.0.21 | 2025-09-15T05:21:17.745Z |
| pm2-gelf-json | 1.0.4 | 2025-09-15T05:21:18.413Z |
| @សិល្បៈ-ws/di | 2.0.28 | 2025-09-15T05:21:18.488Z |
| @art-ws/di-node | 2.0.13 | 2025-09-15T05:21:18.849Z |
| @art-ws/config-ts | 2.0.7 | 2025-09-15T05:21:19.408Z |
| @art-ws/db-context | 2.0.21 | 2025-09-15T05:21:19.814Z |
| @art-ws/openapi | 0.1.9 | 2025-09-15T05:21:19.969Z |
| @art-ws/កម្មវិធីបណ្ដាញ | 1.0.3 | 2025-09-15T05:21:20.383Z |
| @art-ws/ssl-info | 1.0.9 | 2025-09-15T05:21:20.927Z |




