ការដំឡើង npm របស់ Ectoplasm Hooks ដែលលួចយកព័ត៌មានសម្គាល់ AWS

អេកូប្លាស្មា៖ ការដំឡើង npm hooks ដែលប្រមូលព័ត៌មានបញ្ជាក់អត្តសញ្ញាណ AWS នៅពីក្រោយកេះបង្កកកុងតឺន័រតែប៉ុណ្ណោះ

TL; កុង

ចង្កោមមួយនៃ កញ្ចប់ npm ប្រាំបានបោះពុម្ពផ្សាយនៅទូទាំងចំណុចទាញគណនីពីរ បានដឹកជញ្ជូន postinstall hook ដែលអានព័ត៌មានសម្ងាត់លើ cloud ពីម៉ាស៊ីន ហើយបញ្ជូនវាចេញពីប្រអប់។ កញ្ចប់ទាំងនេះមានឈ្មោះ ghost-and-pirate — coral-wraith, ecto-corsair-whisper-6f3b9, ecto-corsair-flag-x9m4, ecto-rust-read-f3a9c1, ecto-nightly-spirit — ហើយ​ធ្វើ​ស៊េរី​អ្វី​ដែល​ពួកគេ​ប្រមូល​បាន​ទៅ​ជា​របស់​ក្លែងក្លាយ ecto_module: YAML បង្ហាញ​មុន​ពេល​បញ្ជូន​វា។ យើង​តាមដាន​ចង្កោម​ជា អេកូផ្លាស្មា.

payload ដំណើរការតែនៅពេលដែលវារកឃើញបរិស្ថានជាក់លាក់មួយ៖ ម៉ាស៊ីនដែលឈ្មោះរបស់វាជា ខ្សែអក្សរ​គោល​ដប់​ប្រាំមួយ​ចំនួន ១២ តួអក្សរ និងថតឯកសារការងារនៅក្រោម /app/node_modules — រូបរាងរបស់កម្មករសំណង់កុងតឺន័រ ឬកម្មករ CI។ នៅពេលដែលច្រកទ្វារនោះឆ្លងកាត់ ទំពក់នឹងសួរ សេវាកម្មទិន្នន័យមេតាឧទាហរណ៍ AWS (IMDSv2) សម្រាប់លិខិតសម្គាល់តួនាទី IAM សូមរាប់បញ្ចូល អ្នកគ្រប់គ្រងអាថ៌កំបាំងអេ។ អេស។ អេ ឆ្លងកាត់តំបន់ទាំងបី បោះចោលអថេរបរិស្ថាន អានឯកសារនៅក្រោម /appនិង​ការ​កោស​សម្រាប់​ខ្សែអក្សរ​ចាប់យក​ទង់ជាតិ។ បន្ទាប់មកវា​ច្រោះ​លទ្ធផល​តាម​វិធី​ពីរយ៉ាង៖ ពី​សញ្ញា​ទៅកាន់ webhook.site collector និង manifest PUT ទៅកាន់ចំណុចបញ្ចប់ raw-IP ជាមួយនឹងបញ្ជីនៃ fallbacks localhost-first។

ការពិពណ៌នាអំពីកញ្ចប់នៅពេលក្រោយអានថា "CTF payload សម្រាប់ការធ្វើតេស្តខ្សែសង្វាក់ផ្គត់ផ្គង់ verdaccio"។ យើងរាយការណ៍ពីការពិពណ៌នាខ្លួនឯងថាជាការពិតដែលអាចសង្កេតឃើញ។ ឥរិយាបថខ្លួនវាផ្ទាល់ — ការចេញទៅក្រៅផ្ទាល់ទៅកាន់ IP សាធារណៈ ការអានព័ត៌មានសម្គាល់ IMDS ពិតប្រាកដ ការហៅ Secrets Manager ពិតប្រាកដ — គឺជាអ្វីដែលវាមានដោយមិនគិតពីស្លាកនោះទេ ហើយវាជាហេតុផលដែលកំណែទាំងនេះត្រូវបានចាត់ថ្នាក់ថាជាមេរោគព្យាបាទ។

ឈ្មោះមួយនៅក្នុងចង្កោម, coral-wraithមិនបានឈប់ត្រឹមការចេញផ្សាយតែមួយទេ។ វាត្រូវបានបោះពុម្ពផ្សាយឡើងវិញជាបន្តបន្ទាប់តាមរយៈកំណែរាប់សិបក្នុងរយៈពេលតែប៉ុន្មានម៉ោងប៉ុណ្ណោះ — 1.0.0 ឡើងដល់ 6.0.0 — ហើយ​ការ​រត់​មុន​ដែល​មាន​ឈ្មោះ​ដូច​គ្នា​បាន​ប្រើ inflated 9999.0.x លេខកំណែ រូបរាងបុរាណរបស់ ការប៉ុនប៉ងច្រឡំភាពអាស្រ័យឆ្លងកាត់​ការ​ផ្លាស់ប្ដូរ​នោះ បន្ទុក​ទិន្នន័យ​បាន​ចាស់ទុំ​យ៉ាង​ច្បាស់៖ ពី​ឧបករណ៍​បញ្ជូន​ទិន្នន័យ​ដែល​មាន​តែ​មួយ​ដង​ប៉ុណ្ណោះ​ទៅ​ជា​ចំណុច​ប្រសព្វ​ពេញលេញ​នៃ​វិញ្ញាបនបត្រ AWS ដែល​រុំ​ដោយ​ការ​ត្រួតពិនិត្យ​បរិស្ថាន​ដែល​រក្សា​វា​ឲ្យ​នៅ​ស្ងៀម​នៅ​ក្រៅ​គោលដៅ​ដែល​វា​បាន​គ្រោងទុក។

កញ្ចប់៥ ឈ្មោះ; coral-wraith បានបោះពុម្ពឡើងវិញតែម្នាក់ឯងនៅទូទាំងកំណែរាប់សិប
ប្រព័ន្ធអេកូម៉ោងងង
ដំឡើងវ៉ិចទ័រpostinstall ស្គ្រីបវដ្តជីវិត
គោលដៅចម្បងលិខិតសម្គាល់តួនាទី AWS IAM + តម្លៃសម្ងាត់របស់ Secrets Manager, អថេរបរិស្ថាន, /app ឯកសារ
អ៊ិចហ្វីលwebhook.site beacon + raw-IP C2 PUT
ច្រកទ្វារបង្កឈ្មោះ​ម៉ាស៊ីន 12-hex + /app/node_modules cwd បូករួមទាំងការត្រួតពិនិត្យបរិស្ថានដែលទប់ស្កាត់ payload នៅខាងក្រៅបរិបទនោះ
ភាពធ្ងន់ធ្ងរខ្ពស់ — អត្តសញ្ញាណប័ណ្ណលើពពក និងការបង្ហាញព័ត៌មានសម្ងាត់ដែលបានគ្រប់គ្រងពី បរិស្ថានសាងសង់ និងពេលដំណើរការដែលមានកុងតឺន័រ

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

កញ្ចប់នីមួយៗនៅក្នុងចង្កោមត្រូវបានបង្កើតឡើងតាមរបៀបដូចគ្នា៖ ស្ទើរតែទទេ index.js ។ (ម៉ូឌុល.នាំចេញ = {}), មួយជួរ កញ្ចប់ ស្គ្រីប — “postinstall”: “ណូត postinstall.js” - និងបន្ទុកនៅក្នុង ក្រោយការដំឡើង.jsការដំឡើងកញ្ចប់គឺគ្រប់គ្រាន់ដើម្បីដំណើរការ hook; មិនចាំបាច់នាំចូល ឬហៅទេ។

ច្រកទ្វារគោលដៅ។ មុន​ពេល​ធ្វើ​អ្វី​មួយ ecto-family payload ពិនិត្យ​មើល​បរិស្ថាន​ជុំវិញ​របស់​វា៖

function isAppWorker():
  host = os.hostname()
  if host does NOT match /^[0-9a-f]{12}$/  -> exit
  if cwd does NOT contain "/app/node_modules" -> exit
  if cwd contains "/tmp/npm-safe"            -> exit
  otherwise -> proceed

ឈ្មោះម៉ាស៊ីន 12-hex គឺជារូបរាងលំនាំដើមដែល Docker កំណត់ទៅកុងតឺន័រ ហើយ /app/node_modules គឺជាផ្លូវដំឡើងក្នុងកុងតឺន័រធម្មតា។ ឃ្លាទីបីនឹងការពារប្រសិនបើផ្លូវមើលទៅដូចជាថតស្រង់ចេញដែលដាក់ក្នុងប្រអប់ខ្សាច់។ ផលប៉ះពាល់សុទ្ធគឺថា payload នៅតែអសកម្មនៅលើកុំព្យូទ័រយួរដៃអ្នកអភិវឌ្ឍន៍ ឬប្រអប់ខ្សាច់វិភាគ ហើយធ្វើឱ្យសកម្មតែនៅក្នុង build ឬ runtime worker ដែលដាក់ក្នុងកុងតឺន័រប៉ុណ្ណោះ — ប្រភេទបរិស្ថានដែលទំនងជាផ្ទុកព័ត៌មានសម្ងាត់ cloud ផ្ទាល់។ កញ្ចប់ដំបូងបំផុតនៅក្នុងចង្កោម ខ្មោច​ផ្កាថ្ម, មិនមានច្រកទ្វារបែបនេះទេ ហើយដំណើរការការប្រមូល (សាមញ្ញជាង) របស់វាដោយគ្មានលក្ខខណ្ឌ។

ការប្រមូលនៅពេលដែលច្រកទ្វារឆ្លងកាត់ ទំពក់នឹងលបចេញតាម execFileSync(“/bin/sh”, [“-c”, …]) ហើយដំណើរការពាក្យបញ្ជាផ្សំតែមួយដែលតាមលំដាប់លំដោយ៖

1. PUT /latest/api/token to 169.254.169.254          (IMDSv2 token request)
2. GET .../iam/security-credentials/                  (IAM role name)
3. GET .../iam/security-credentials/<role>            (temporary credentials)
4. dump env | sort                                    (environment variables)
5. list /app (excl. node_modules) + cat first 15      (application files)
6. aws secretsmanager list-secrets                    (us-east-1, eu-west-1, eu-central-1)
7. scrape readable files for HTB{...}                 (capture-the-flag strings)

ជំហានទី 1–3 គឺជាការទាញយកសៀវភៅសិក្សា IMDSv2៖ ស្នើសុំថូខឹនវគ្គ បន្ទាប់មកភ្ជាប់វាជា ថូខឹនទិន្នន័យមេតា X-aws-ec2 បឋមកថា ដើម្បីទាញយកតួនាទី IAM របស់ instance និងកូនសោចូលប្រើបណ្ដោះអាសន្នរបស់តួនាទីនោះ។ ជម្រើសក្នុងការអនុវត្ត IMDSv2 ជាជាង IMDSv1 ដែលមិនបានផ្ទៀងផ្ទាត់ភាពត្រឹមត្រូវសាមញ្ញជាង។ ទទួលបាន គួរកត់សម្គាល់ — វាមានន័យថា payload ដំណើរការសូម្បីតែលើ instances ដែលត្រូវបានកំណត់រចនាសម្ព័ន្ធដើម្បីទាមទារការចូលប្រើ metadata ដែលមានមូលដ្ឋានលើ token ដែលជាការពង្រឹងដែល AWS បានណែនាំ។ លិខិតសម្គាល់ដែលបានប្រគល់មកវិញដោយជំហានទី 3 គឺមានអាយុកាលខ្លី។ AccessKeyId/សោសម្ងាត់/ថូខឹន ដែនកំណត់បីដងត្រូវបានកំណត់ទៅតាមតួនាទីរបស់ instance; អ្វីក៏ដោយដែលតួនាទីនោះអាចធ្វើបាន អ្នកកាន់សោទាំងនោះអាចធ្វើបានសម្រាប់អាយុកាលរបស់លិខិតសម្គាល់។

ជំហានទី ៤-៦ ពង្រីកវិសាលភាពនៃការយល់ដឹង។ env dump ចាប់យកអ្វីៗគ្រប់យ៉ាងដែលដំណើរការ build ឬ runtime បានទទួលមរតក — នៅក្នុងការអនុវត្ត នេះគឺជាកន្លែងដែលថូខឹនចុះបញ្ជី ខ្សែអក្សរតភ្ជាប់មូលដ្ឋានទិន្នន័យ និងកូនសោ API ភាគច្រើនរស់នៅ។ / កម្មវិធី ការដើរឯកសារអានឯកសារកម្មវិធីរហូតដល់ដប់ប្រាំនៅខាងក្រៅ ម៉ូឌុលថ្នាំងដែលអាចកំណត់រចនាសម្ព័ន្ធលើផ្ទៃ .NS ឯកសារ ឬប្រភព។ ជំហានទី 6 ការហៅ បញ្ជីអាថ៌កំបាំងរបស់ aws secretsmanager នៅក្នុងតំបន់បី; ព័ត៌មានបញ្ជាក់អត្តសញ្ញាណដែលទាញចេញពីជំហានទី 1–3 គឺជាអ្វីដែលផ្ទៀងផ្ទាត់ការហៅទូរស័ព្ទទាំងនោះ ដូច្នេះ IMDS អាន និងខ្សែសង្វាក់រាប់បញ្ចូល Secrets Manager រួមគ្នាទៅជាការកើនឡើងតែមួយ៖ តួនាទីឧទាហរណ៍ → សារពើភ័ណ្ឌសម្ងាត់ដែលគ្រប់គ្រង។ ជំហានទី 7 គឺជាការងក់ក្បាលទៅនឹងការកំណត់រចនាសម្ព័ន្ធ capture-the-flag — នៅពេលដែល ហតប៊ី{…} ទង់ជាតិត្រូវបានរកឃើញថាវាត្រូវបានផ្ញើដោយខ្លួនឯង បើមិនដូច្នោះទេ ដុំដែលប្រមូលបានឆៅត្រូវបានបែងចែកជាបួនបំណែក ហើយផ្ញើ។

កំណែក្រោយៗទៀតនៅក្នុងចង្កោមអនុវត្តការកើនឡើងបន្ថែមទៀត។ ជំនួសឱ្យការឈប់នៅសារពើភ័ណ្ឌ ពួកគេវិភាគការឆ្លើយតប IMDS នាំចេញសោបណ្ដោះអាសន្នជា AWS_ACCESS_KEY_ID / AWS_SECRET_ACCESS_KEY / AWS_SESSION_TOKEN អថេរបរិស្ថាន បញ្ជាក់អត្តសញ្ញាណជាមួយ aws sts get-caller-identityហើយបន្ទាប់មក ធ្វើការ​ត្រួតពិនិត្យ​រាល់​អាថ៌កំបាំង​ដែល​បាន​ប្រគល់​មកវិញ​ដោយ បញ្ជីអាថ៌កំបាំង ការហៅទូរស័ព្ទ aws secretsmanager ទទួលបានតម្លៃសម្ងាត់ នៅលើឯកសារនីមួយៗ — កំពុងទាញយកខ្លឹមសារសម្ងាត់ មិនមែនគ្រាន់តែឈ្មោះរបស់វានោះទេ។ កំណែដូចគ្នានេះក៏អានឯកសារគោលពីរដែលជំនួសដោយដំណើរការផងដែរ (/សញ្ញាសម្គាល់អាន និងមិត្តភក្តិ) ហើយព្យាយាម ដំណើរការគិតថ្លៃ ប្រឆាំងនឹងគម្រោង Rust ណាមួយដែលត្រូវបានរកឃើញនៅក្រោម / កម្មវិធីដោយពង្រីកការប្រមូលផលលើសពីលក្ខណៈសម្បត្តិពពកទៅជាអ្វីដែលបរិស្ថានសាងសង់បង្ហាញ។

កំណែក្រោយៗទៀតទាំងនេះក៏បិទទ្វារខ្លួនឯងយ៉ាងសកម្មជាងមុនផងដែរ។ បន្ថែមពីលើឈ្មោះម៉ាស៊ីន 12-hex និង /app/node_modules នៅពេលត្រួតពិនិត្យ payload ត្រួតពិនិត្យការកំណត់រចនាសម្ព័ន្ធ package-registry សកម្ម និងផ្លូវថតឯកសារការងារ ហើយចេញដោយស្ងៀមស្ងាត់នៅពេលដែលពួកវាបង្ហាញពីការវិភាគ ឬបរិបទឆ្លុះបញ្ចាំងជាជាងគោលដៅផ្ទាល់។ ឥទ្ធិពលរួមបញ្ចូលគ្នាគឺជា payload ដែលមិនធ្វើអ្វីដែលអាចសង្កេតឃើញនៅក្នុងបរិស្ថានត្រួតពិនិត្យភាគច្រើន ហើយដំណើរការការប្រមូលពេញលេញរបស់វាតែកន្លែងដែលវាវិនិច្ឆ័យខ្លួនឯងថានៅលើម៉ាស៊ីនកុងតឺន័រពិតប្រាកដ។

ការបណ្តេញចេញទិន្នន័យដែលប្រមូលបានទុកម៉ាស៊ីននៅលើឆានែលពីរ។ ទីមួយ ប៊ីខុន POST ទៅថេរមួយ។ គេហទំព័រ webhook អ្នកប្រមូល ដែលមានផ្ទុកឈ្មោះម៉ាស៊ីន លេខ UID ថតឯកសារការងារ និងទិន្នន័យដែលប្រមូលបានរហូតដល់ 120 KB។ ទីពីរ ទិន្នន័យត្រូវបានបញ្ចូលទៅក្នុង "បញ្ជីម៉ូឌុល" YAML ក្លែងក្លាយ ហើយ PUT ទៅ /api/ម៉ូឌុល/ នៅលើម៉ាស៊ីនបម្រើគោលដៅ៖

ecto_module:
  name: "<flag-or-chunk-0>"
  version: "1.0.0"
  power_level: "<chunk-1>"
  ship_deck: "<chunk-2>"
  cargo_hold: "<chunk-3>"

ឈ្មោះវាល manifest (កម្រិតថាមពល, នាវា, ទំនិញ) គឺជាការតុបតែង — ទិន្នន័យដែលត្រូវបានគេលួចជិះនៅខាងក្នុងតម្លៃខ្សែអក្សរ ដែលជាមូលហេតុដែលម៉ូនីទ័របណ្តាញមើលឃើញអ្វីដែលមើលទៅដូចជាការផ្ទុកឡើងនូវបញ្ជីឈ្មោះកញ្ចប់ដែលមិនបង្កគ្រោះថ្នាក់ ជាជាងការចាក់ទិន្នន័យជាក់ស្តែង។ ឆានែល beacon ផ្ទុកច្រើនជាង៖ POST រាងកាយទៅ គេហទំព័រ webhook រួមបញ្ចូលឈ្មោះម៉ាស៊ីន លេខ UID ថតឯកសារការងារ និងរហូតដល់ 120 KB នៃ blob ដែលប្រមូលបាន ដូច្នេះសូម្បីតែ beacon ជោគជ័យតែមួយក៏ផ្តល់នូវការទទួលយកពេញលេញដែរ។ គេហទំព័រ webhook គឺជាសេវាកម្មត្រួតពិនិត្យសំណើដោយឥតគិតថ្លៃ។ ការប្រើប្រាស់វាជាឧបករណ៍ប្រមូលមានន័យថា ប្រតិបត្តិករមិនចាំបាច់ក្រោកឈរទទួលហេដ្ឋារចនាសម្ព័ន្ធផ្ទាល់ខ្លួនសម្រាប់ឆានែលនោះទេ ហើយសំណើដែលបានកត់ត្រាទុកនៅតែមាននៅក្នុងធុងសំរាមរបស់សេវាកម្ម។

ការបង្ហាញ PUT ដើរបញ្ជីបម្រុងដែលចាប់ផ្តើមដោយបញ្ជីជាច្រើន 127.0.0.1/localhost ច្រក ហើយបន្ទាប់មកធ្លាក់ចូលទៅក្នុងអាសយដ្ឋានសាធារណៈចំនួនបីនៅក្នុង `១៥៤.៥៧.១៦៤.០/២៤` ជួរ ដោយឈប់នៅចំណុចបញ្ចប់ដំបូងដែលឆ្លើយតបជាមួយស្ថានភាព 2xx។ ការរៀបចំ localhost-first គឺស្របនឹងការពិពណ៌នាដោយខ្លួនឯង "verdaccio testing" (បញ្ជីឈ្មោះក្នុងស្រុកនៅលើ loopback) ប៉ុន្តែ public-IP fallbacks មានន័យថាទិន្នន័យចាកចេញពី host នៅពេលណាដែល loopback មិនស្តាប់ — ដែលមានន័យថា នៅលើម៉ាស៊ីនណាមួយដែលមិនមែនជាឧបករណ៍សាកល្បងផ្ទាល់ខ្លួនរបស់អ្នកនិពន្ធ។

ការកំណត់ពេលវេលា

ចង្កោមបង្ហាញពីកំណើនសមត្ថភាពបន្តិចម្តងៗ ជាជាងការធ្លាក់ចុះតែមួយ។ យើងរៀបចំវាតាមឥរិយាបថដែលសង្កេតឃើញ មិនមែនតាមនាឡិកាជញ្ជាំងដែលបោះពុម្ពផ្សាយទេ៖

ដំណាក់កាលកញ្ចប់ / កំណែឥរិយាបថ
ការរត់ដំបូងcoral-wraith 9999.0.xលេខកំណែដែលបានបំប៉ោងស្របនឹងការប៉ុនប៉ងច្រឡំភាពអាស្រ័យ; ការរាប់ពេលវេលាដំឡើង និង exfil
ពូជcoral-wraith 1.0.0ក្រោយការដំឡើងប្រមូលឯកសារ id/env/flag; ដាក់តែមួយទៅ 154[.]57[.]164[.]71:30782, សញ្ញាសម្គាល់ ECT-472839
ការធ្វើម្តងទៀតយ៉ាងឆាប់រហ័សcoral-wraith 1.0.1 → 6.0.0ការចេញផ្សាយរាប់សិបក្នុងរយៈពេលប៉ុន្មានម៉ោង; បន្ទុកទទួលបាន isAppWorker() ច្រកទ្វារ, ការទាញយកព័ត៌មានបញ្ជាក់អត្តសញ្ញាណ IMDSv2, ពេញលេញ get-secret-value pivot, ការត្រួតពិនិត្យបរិស្ថាន registry/path និងសញ្ញាសម្គាល់ dual sink
ឈ្មោះស្របគ្នាecto-corsair-whisper-6f3b9 1.0.14–1.0.18បន្ទុកដែលបានកំណត់ដូចគ្នា; webhook.site បញ្ជីបម្រុង beacon និង multiendpoint
វ៉ារ្យ៉ង់ecto-rust-read-f3a9c1 1.0.1–1.0.2បន្ថែមសញ្ញាសម្គាល់អាងលិចបន្ថែម ECT-987654, ECT-654321, ECT-839201
វ៉ារ្យ៉ង់ecto-corsair-flag-x9m4 1.0.0, ecto-nightly-spirit 1.1.0បន្ទុកដែលបានកំណត់ដូចគ្នា C2 និង beacon ដូចគ្នា

លក្ខណៈពិសេស​នៃ​ចង្កោម​គឺ​ចង្វាក់​នៃ​ការបោះពុម្ពផ្សាយ​របស់វា៖ ជំនួស​ឲ្យ​កញ្ចប់​មួយ និង​កំណែ​មួយ ឈ្មោះ​ដូចគ្នា​ត្រូវ​បាន​បោះពុម្ពផ្សាយ​ឡើងវិញ​ម្តងហើយម្តងទៀត​យ៉ាង​ឆាប់រហ័ស ដោយ​កញ្ចប់​នីមួយៗ​ចេញផ្សាយ​បំរែបំរួល​តិចតួច​លើ​កញ្ចប់​ចុងក្រោយ រួម​ជាមួយ​បងប្អូន​មួយ​ក្តាប់​តូច​ដែល​ផ្ទុក​បន្ទុក​ដូចគ្នា។ នៅក្នុង ខ្សឹប កូដ​បាន​បំបែក​ជា​ស្នាម​ម្រាមដៃ​ជិត​គ្នា​ពីរ — មួយ​សំណុំ​ធ្វើ​ឲ្យ​ការ​រក​ឃើញ​សំខាន់​ពីរ និង​បី​ទៀត (អាង​អាន​ឯកសារ​បន្ថែម) — ប៉ុន្តែ​ទាំង​ពីរ​ដោះស្រាយ​ទៅ​នឹង​បន្ទុក​ផ្ទុក​ដូចគ្នា។ ភាព​ខុស​គ្នា​គឺ​ការ​រសាត់​កូដ មិនមែន​ជា​សម​គំនិត​អាកប្បកិរិយា​ទេ។ កំណែ​នៃ ខ្សឹប លើសពីជួរដែលបានវិភាគ (រហូតដល់យ៉ាងហោចណាស់ 1.0.25 នៅពេលសរសេរ) ត្រូវបានគេសង្កេតឃើញផ្ទាល់នៅលើបញ្ជីឈ្មោះ ហើយ ខ្មោច​ផ្កាថ្ម ឈ្មោះបានបន្តឡើងជណ្ដើរកំណែផ្ទាល់ខ្លួនរបស់វាលើបង្អួចដដែល។

សូចនាករនៃការសម្របសម្រួល

សូចនាករទាំងអស់ខាងក្រោមត្រូវបានស្រង់ចេញពីប្រភពកញ្ចប់នៅលើថាស។ សូចនាករបណ្តាញត្រូវបានបិទ។

Network

ទ្រនិចបង្ហាញតួនាទី
hxxp://154[.]57[.]164[.]71:30782គោលដៅ C2 PUT (coral-wraith)
hxxp://154[.]57[.]164[.]80:30543C2 PUT ជំនួស (ecto-*)
hxxp://154[.]57[.]164[.]82:31250C2 PUT ជំនួស (ecto-*)
hxxp://154[.]57[.]164[.]71:31289C2 PUT ជំនួស (ecto-*)
hxxps://webhook[.]site/602a4c72-7033-4e28-92ea-dc66e59206e5ឧបករណ៍ប្រមូលសញ្ញា
169[.]254[.]169[.]254/latest/...ការអានព័ត៌មានសម្គាល់ IMDSv2 (ផ្នែកគោលដៅ ទិន្នន័យមេតា AWS)

អាកប្បកិរិយា/ឯកសារ

ទ្រនិចបង្ហាញតួនាទី
"postinstall": "node postinstall.js"ដំឡើងវ៉ិចទ័រ
ecto_module: YAML ជាមួយ power_level / ship_deck / cargo_hold គ្រាប់ចុចគ្រោងការណ៍​បង្ហាញ​ឯកសារ Exfil
សញ្ញាសម្គាល់លិច ECT-472839, ECT-987654, ECT-654321, ECT-839201ផ្នែកផ្លូវ C2 /api/modules/<marker>
isAppWorker() ច្រកទ្វារ៖ ម្ចាស់ផ្ទះ /^[0-9a-f]{12}$/, cwd មាន /app/node_modulesលក្ខខណ្ឌធ្វើឱ្យសកម្ម
aws secretsmanager list-secrets ជាង us-east-1, eu-west-1, eu-central-1ការរាប់បញ្ចូលអាថ៌កំបាំង
HTB{...} ការកោស regexការប្រមូលផលដោយចាប់យកទង់ជាតិ

ហាសឯកសារ (sha256 ចាប់យកនៅពេលវិភាគ)

ឯកសារsha256
coral-wraith/postinstall.jsce5ff035cfdfed1d0015446424b352c27b66bcb77e9fdb0a51e4245199146824
ecto-corsair-whisper-6f3b9 1.0.18/postinstall.jsb58432acba376aa6976f0490d9a1c04257ccdbc856d8390260c50322d63e31c3

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

ឈ្មោះកញ្ចប់ទាំងប្រាំត្រូវបានបោះពុម្ពផ្សាយក្រោមចំណុចទាញគណនី npm ពីរ ប៉ុន្តែពួកវាចែករំលែកហេដ្ឋារចនាសម្ព័ន្ធគ្រប់គ្រាន់ដើម្បីចាត់ទុកពួកវាជាចង្កោមតែមួយ៖ ដូចគ្នា ម៉ូឌុល_អេកតូ គ្រោងការណ៍បង្ហាញឱ្យឃើញ, ដូចគ្នា ECT-472839 សញ្ញាសម្គាល់លិចបឋម, ដូចគ្នា គេហទំព័រ webhook លេខសម្គាល់អ្នកប្រមូល និងចំណុចបញ្ចប់ C2 នៅក្នុងតែមួយ ប្លុក 154.57.164.0/24`។ កញ្ចប់គ្រាប់ពូជ (`coral-wraithសាមញ្ញជាង និងគ្មានព្រំដែន) ហើយក្រុមគ្រួសារ ecto ដែលមានព្រំដែនត្រូវបានអានថាជាការធ្វើម្តងទៀតនៅលើឧបករណ៍មួយជាជាងកិច្ចខិតខំប្រឹងប្រែងឯករាជ្យ។

កញ្ចប់ទាំងនេះពិពណ៌នាខ្លួនឯង នៅក្នុងកំណែក្រោយៗទៀតថា “បន្ទុក CTF សម្រាប់ការធ្វើតេស្តខ្សែសង្វាក់ផ្គត់ផ្គង់ verdaccio”។ យើងបង្ហាញស្លាកនោះថាជាការពិតដែលអាចសង្កេតឃើញ ហើយមិនបញ្ជាក់វាឡើងវិញជាការរកឃើញអំពីគោលបំណងនោះទេ។ អ្វីដែលកូដធ្វើគឺមិនមានភាពមិនច្បាស់លាស់ និងមិនអាស្រ័យលើរបៀបដែលវាត្រូវបានដាក់ស្លាក៖ វាអានព័ត៌មានបញ្ជាក់តួនាទី IAM ពីសេវាកម្មទិន្នន័យមេតាឧទាហរណ៍ រាប់បញ្ចូលអាថ៌កំបាំងដែលបានគ្រប់គ្រងនៅទូទាំងតំបន់ AWS ចំនួនបី និងបញ្ជូនលទ្ធផលទៅ IP សាធារណៈ និងអ្នកប្រមូល webhook ភាគីទីបី។ បណ្តាញសាកល្បង loopback តែប៉ុណ្ណោះពិតប្រាកដនឹងមិនត្រូវការបញ្ជីបម្រុង IP សាធារណៈ ការអានព័ត៌មានបញ្ជាក់ IMDS ឬការហៅ Secrets Manager ឆ្លងតំបន់នោះទេ។ ដោយសារតែការចាកចេញ និងការទៅដល់ព័ត៌មានបញ្ជាក់គឺពិតប្រាកដ កំណែដែលមាន gated ត្រូវបានចាត់ថ្នាក់ថាមានគ្រោះថ្នាក់។

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

ផលប៉ះពាល់ និន្នាការ និងការណែនាំសម្រាប់អ្នកការពារ

ការលាតត្រដាងនៅទីនេះគឺជាព័ត៌មានបញ្ជាក់អត្តសញ្ញាណលើពពក និងការបង្ហាញព័ត៌មានសម្ងាត់នៅខាងក្នុងកុងតឺន័រសាងសង់ និងកុងតឺន័រពេលដំណើរការ។ ព័ត៌មានបញ្ជាក់អត្តសញ្ញាណតួនាទី IAM ដែលទាញចេញពី IMDS មានការអនុញ្ញាតណាមួយដែលតួនាទីនោះមាន។ អ្នកគ្រប់គ្រងសម្ងាត់៖ បញ្ជីសម្ងាត់ (និង​ការ​តាមដាន​ណាមួយ GetSecretValue) ពង្រីក​វា​ទៅ​ជា​អាថ៌កំបាំង​កម្មវិធី​ដែល​បាន​រក្សាទុក។ គំនរ​អថេរ​បរិស្ថាន​ច្រើន​តែ​ផ្ទុក​ថូខឹន​ចុះបញ្ជី URL មូលដ្ឋាន​ទិន្នន័យ និង​កូនសោ API។ នៅ​ក្នុង​បរិបទ CI ឬ​កុងតឺន័រ — គឺ​ជា​អ្វី​ដែល​ច្រក​ទ្វារ​ជ្រើសរើស — ការ​ដំឡើង​អន្តរកាល​តែមួយ​នៃ​កញ្ចប់​មួយ​ក្នុង​ចំណោម​កញ្ចប់​ទាំងនេះ​គឺ​គ្រប់គ្រាន់​ដើម្បី​លេច​ធ្លាយ​សម្ភារៈ​នោះ។

Ectoplasm សមនឹងគំរូដែលយើងបន្តឃើញ៖ បន្ទុកទិន្នន័យពេលដំឡើង ដែលទៅដល់ទិន្នន័យមេតាលើពពក និងអាថ៌កំបាំងដែលបានគ្រប់គ្រងជាជាងឯកសារក្នុងស្រុក ហើយវាបើកឱ្យដំណើរការតែនៅក្នុងបរិស្ថានដែលមានតម្លៃខ្ពស់ប៉ុណ្ណោះ។ ការសង្កេតការពារពីរត្រូវបានអនុវត្តតាម។

  • រូបរាងអាចសម្គាល់បានទំពក់ដំឡើង npm/PyPI ដែលក្រាហ្វការហៅរបស់វាទៅដល់ទាំង cloud secrets API (អ្នកគ្រប់គ្រងសម្ងាត់ aws, អាថ៌កំបាំង gcloud, សោរសោរ az) ឬអាសយដ្ឋាន IMDS និងកន្លែងលិចចេញបណ្តាញគឺជាគំរូសញ្ញាខ្ពស់តូចចង្អៀត - វាស្ទើរតែមិនដែលកើតឡើងនៅក្នុងស្គ្រីបវដ្តជីវិតស្របច្បាប់នោះទេ។ ការវិភាគលំហូរឋិតិវន្ត អាចដាក់ទង់ជាតិវាដោយមិនអាស្រ័យលើដែន ឬ IP ជាក់លាក់ណាមួយឡើយ។
  • ការរឹងប៉ឹងនៃបរិស្ថានធ្វើឱ្យវាទន់ខ្សោយ។ ការអនុវត្ត IMDSv2 ជាមួយនឹងដែនកំណត់ hop ចំនួន 1 ការពារបន្ទុកការងារកុងតឺន័រពីការទៅដល់ទិន្នន័យមេតាឧទាហរណ៍; ការកំណត់វិសាលភាពតួនាទី IAM ទៅសិទ្ធិតិចបំផុតកំណត់កាំផ្ទុះនៃព័ត៌មានសម្គាល់ណាមួយដែលលេចធ្លាយ; និងដំណើរការការដំឡើងជាមួយ – មិនអើពើស្គ្រីប នៅក្នុង CI លុបវ៉ិចទ័រ install-hook ចេញទាំងស្រុងសម្រាប់កញ្ចប់ដែលមិនត្រូវការវា។

សម្រាប់អ្នកការពារ ការត្រួតពិនិត្យជាក់ស្តែងគឺ៖ ការជូនដំណឹងអំពីការតភ្ជាប់ចេញពីកុងតឺន័រ build/CI ទៅកាន់ IP សាធារណៈដែលមិនត្រូវបានអនុញ្ញាតក្នុងអំឡុងពេល ល្ងាចដំឡើង; តាមដានការចូលប្រើ IMDS ដែលមានប្រភពមកពីស្គ្រីបវដ្តជីវិតកញ្ចប់; ហើយចាត់ទុកទំពក់ដំឡើងណាមួយដែលផ្ញើទៅ CLI លើពពកថាជាការសង្ស័យរហូតដល់មានការបញ្ជាក់ផ្សេងពីនេះ។

កំណត់ចំណាំពីរបន្ថែមទៀតជាក់លាក់ចំពោះចង្កោមនេះ។ ទីមួយ ដោយសារតែការធ្វើឱ្យសកម្មត្រូវបានកំណត់ចំពោះបរិស្ថានដែលមានកុងតឺន័រ កញ្ចប់ដែលលេចឡើងអសកម្មនៅពេលដែលត្រូវបានត្រួតពិនិត្យនៅលើស្ថានីយការងារអាចនៅតែអាចផ្សាយផ្ទាល់នៅក្នុងផលិតកម្មបាន — ការត្រួតពិនិត្យត្រូវការបង្កើតឡើងវិញនូវឈ្មោះម៉ាស៊ីនកុងតឺន័រ និងលក្ខខណ្ឌផ្លូវ ឬអានប្រភពដោយផ្ទាល់ ជាជាងពឹងផ្អែកលើ "ខ្ញុំបានដំឡើងវាហើយគ្មានអ្វីកើតឡើង"។ ទីពីរ ការប្រើប្រាស់សេវាកម្មត្រួតពិនិត្យសំណើសាធារណៈជាអ្នកប្រមូល beacon មានន័យថាទិន្នន័យមួយចំនួនដែលត្រូវបានច្រោះអាចសង្គ្រោះបានសម្រាប់ការឆ្លើយតបឧប្បត្តិហេតុ៖ អង្គការដែលរកឃើញកញ្ចប់មួយក្នុងចំណោមកញ្ចប់ទាំងនេះនៅក្នុងដើមឈើអាស្រ័យរបស់វាអាចវែកញែកអំពីអ្វីដែល beacon ដែលទទួលបានជោគជ័យនឹងមានពីតក្កវិជ្ជាប្រមូលរបស់ payload ហើយគួរតែបង្វិលលិខិតសម្គាល់តួនាទី IAM ណាមួយ ថូខឹនចុះបញ្ជី និងអាថ៌កំបាំងដែលបានគ្រប់គ្រងដែលអាចទៅដល់បានពីបរិស្ថានសាងសង់ ឬពេលដំណើរការដែលរងផលប៉ះពាល់។ ការបង្វិលលិខិតសម្គាល់មិនមែនជាការដកកញ្ចប់ចេញទេ គឺជាការកែតម្រូវប្រតិបត្តិការ នៅពេលដែលការដំឡើងបានដំណើរការ។

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

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

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