അച്ചു ഡി.ആർ.
ഒരു കൂട്ടം അഞ്ച് എൻപിഎം പാക്കേജുകൾരണ്ട് അക്കൗണ്ട് ഹാൻഡിലുകളിൽ പ്രസിദ്ധീകരിച്ച, ഷിപ്പ് ചെയ്ത postinstall ഹോസ്റ്റിൽ നിന്ന് ക്ലൗഡ് ക്രെഡൻഷ്യലുകൾ വായിച്ച് അവ ബോക്സിന് പുറത്ത് അയയ്ക്കുന്ന ഹുക്ക്. പാക്കേജുകളിൽ ഗോസ്റ്റ്-ആൻഡ്-പൈറേറ്റ് പേരുകൾ ഉണ്ട് — coral-wraith, ecto-corsair-whisper-6f3b9, ecto-corsair-flag-x9m4, ecto-rust-read-f3a9c1, ecto-nightly-spirit — അവർ ശേഖരിക്കുന്നതെല്ലാം വ്യാജമാക്കി സീരിയലാക്കി മാറ്റുക ecto_module: YAML മാനിഫെസ്റ്റ് ട്രാൻസ്മിറ്റ് ചെയ്യുന്നതിന് മുമ്പ്. ക്ലസ്റ്ററിനെ നമ്മൾ ട്രാക്ക് ചെയ്യുന്നത് ഇങ്ങനെയാണ് എക്ടോപ്ലാസം.
ഒരു പ്രത്യേക പരിതസ്ഥിതി കണ്ടെത്തുമ്പോൾ മാത്രമേ പേലോഡ് പ്രവർത്തിക്കൂ: പേര് a എന്നുള്ള ഒരു ഹോസ്റ്റ് 12 പ്രതീകങ്ങളുള്ള ഹെക്സ് സ്ട്രിംഗ് കൂടാതെ ഒരു പ്രവർത്തിക്കുന്ന ഡയറക്ടറിയും /app/node_modules — ഒരു കണ്ടെയ്നറൈസ്ഡ് ബിൽഡിന്റെയോ CI വർക്കറിന്റെയോ ആകൃതി. ആ ഗേറ്റ് കടന്നുപോകുമ്പോൾ, ഹുക്ക് അന്വേഷിക്കുന്നു AWS ഇൻസ്റ്റൻസ് മെറ്റാഡാറ്റ സേവനം (IMDSv2) IAM റോൾ ക്രെഡൻഷ്യലുകൾക്കായി, എണ്ണുന്നു AWS സീക്രട്ട്സ് മാനേജർ മൂന്ന് മേഖലകളിലുടനീളം, പരിസ്ഥിതി വേരിയബിളുകൾ ഉപേക്ഷിക്കുന്നു, ഫയലുകൾ വായിക്കുന്നു /app, കൂടാതെ ഫ്ലാഗ് സ്ട്രിങ്ങുകൾ പിടിച്ചെടുക്കുന്നതിനുള്ള സ്ക്രാപ്പുകൾ. പിന്നീട് അത് ഫലത്തെ രണ്ട് തരത്തിൽ പുറന്തള്ളുന്നു: ഒരു ബീക്കണിലേക്ക് webhook.site ലോക്കൽഹോസ്റ്റ്-ആദ്യ ഫാൾബാക്കുകളുടെ ഒരു ലിസ്റ്റ് ഉള്ള ഒരു റോ-ഐപി എൻഡ്പോയിന്റിലേക്ക് കളക്ടറും ഒരു മാനിഫെസ്റ്റ് PUT-യും.
പിന്നീടുള്ള പാക്കേജ് വിവരണങ്ങളിൽ "സിടിഎഫ് പേലോഡ് ഫോർ വെർഡാസിയോ സപ്ലൈ-ചെയിൻ ടെസ്റ്റിംഗ്" എന്ന് എഴുതിയിരുന്നു. ആ സ്വയം വിവരണം നിരീക്ഷിക്കാവുന്ന ഒരു വസ്തുതയായി ഞങ്ങൾ റിപ്പോർട്ട് ചെയ്യുന്നു. ഒരു പൊതു ഐപിയിലേക്കുള്ള തത്സമയ എക്സിറ്റ്, യഥാർത്ഥ ഐഎംഡിഎസ് ക്രെഡൻഷ്യൽ റീഡുകൾ, യഥാർത്ഥ സീക്രട്ട്സ് മാനേജർ കോളുകൾ - ലേബൽ പരിഗണിക്കാതെ തന്നെ അത് അങ്ങനെയാണ്, ഈ പതിപ്പുകളെ ക്ഷുദ്രകരമായി തരംതിരിച്ചതിന്റെ കാരണവും അതാണ്.
ക്ലസ്റ്ററിൽ ഒരു പേര്, coral-wraith, ഒരൊറ്റ റിലീസിൽ അവസാനിച്ചില്ല. മണിക്കൂറുകൾക്കുള്ളിൽ ഡസൻ കണക്കിന് പതിപ്പുകളിലൂടെ അത് അതിവേഗം പുനഃപ്രസിദ്ധീകരിച്ചു - 1.0.0 കയറുന്നു 6.0.0 — ഇതേ പേരിലുള്ള ഒരു മുൻ പതിപ്പിൽ ഊതിവീർപ്പിച്ചത് ഉപയോഗിച്ചിരുന്നു 9999.0.x പതിപ്പ് നമ്പറുകൾ, a യുടെ ക്ലാസിക് ആകൃതി ആശ്രിതത്വ-ആശയക്കുഴപ്പ ശ്രമം. അതിലൂടെ പേലോഡ് ദൃശ്യപരമായി പക്വത പ്രാപിച്ചു: ഒരു വൺ-ഷോട്ട് ഹോസ്റ്റ്-എനുമെറേഷൻ ബീക്കണിൽ നിന്ന് പരിസ്ഥിതി പരിശോധനകളിൽ പൊതിഞ്ഞ ഒരു പൂർണ്ണ AWS ക്രെഡൻഷ്യൽ പിവറ്റിലേക്ക്, അത് ഉദ്ദേശിച്ച ലക്ഷ്യത്തിന് പുറത്ത് നിശബ്ദമായി നിലനിർത്തുന്നു.
| പാക്കേജുകൾ | 5 പേരുകൾ; coral-wraith ഡസൻ കണക്കിന് പതിപ്പുകളിൽ പുനഃപ്രസിദ്ധീകരിച്ചു. |
| പരിസ്ഥിതി വ്യവസ്ഥ | npm |
| വെക്റ്റർ ഇൻസ്റ്റാൾ ചെയ്യുക | postinstall ലൈഫ് സൈക്കിൾ സ്ക്രിപ്റ്റ് |
| പ്രാഥമിക ലക്ഷ്യം | AWS IAM റോൾ ക്രെഡൻഷ്യലുകൾ + സീക്രട്ട്സ് മാനേജർ രഹസ്യ മൂല്യങ്ങൾ, പരിസ്ഥിതി വേരിയബിളുകൾ, /app ഫയലുകൾ |
| എക്സ്ഫിൽ | webhook.site ബീക്കൺ + റോ-ഐപി C2 പുട്ട് |
| ട്രിഗർ ഗേറ്റ് | 12-ഹെക്സ് ഹോസ്റ്റ്നെയിം + /app/node_modules cwd, കൂടാതെ ആ സന്ദർഭത്തിന് പുറത്തുള്ള പേലോഡിനെ അടിച്ചമർത്തുന്ന ഒരു പരിസ്ഥിതി പരിശോധനയും |
| തീവ്രത | ഉയര്ന്ന — ക്ലൗഡ് ക്രെഡൻഷ്യലും മാനേജ്ഡ്-രഹസ്യ വെളിപ്പെടുത്തലും കണ്ടെയ്നറൈസ്ഡ് ബിൽഡ്, റൺടൈം പരിതസ്ഥിതികൾ |
ആക്രമണ ശരീരഘടന
ക്ലസ്റ്ററിലെ എല്ലാ പാക്കേജുകളും ഒരേ രീതിയിലാണ് നിർമ്മിച്ചിരിക്കുന്നത്: ഏതാണ്ട് ശൂന്യമായ index.js (മൊഡ്യൂൾ.എക്സ്പോർട്ട്സ് = {}), ഒരു ഒറ്റവരി package.json സ്ക്രിപ്റ്റ് — “പോസ്റ്റ്ഇൻസ്റ്റാൾ”: “നോഡ് postinstall.js” — കൂടാതെ പേലോഡും പോസ്റ്റ്ഇൻസ്റ്റാൾ.ജെഎസ്. ഹുക്ക് പ്രവർത്തിപ്പിക്കാൻ പാക്കേജ് ഇൻസ്റ്റാൾ ചെയ്താൽ മതി; ഇറക്കുമതിയോ കോളോ ആവശ്യമില്ല.
ലക്ഷ്യസ്ഥാന ഗേറ്റ്. എന്തെങ്കിലും ചെയ്യുന്നതിന് മുമ്പ്, എക്ടോ-ഫാമിലി പേലോഡ് അതിന്റെ ചുറ്റുപാടുകൾ പരിശോധിക്കുന്നു:
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-ഹെക്സ് ഹോസ്റ്റ്നെയിം, കൂടാതെ /ആപ്പ്/നോഡ്_മൊഡ്യൂളുകൾ ഒരു പരമ്പരാഗത ഇൻ-കണ്ടെയ്നർ ഇൻസ്റ്റാൾ പാത്താണ്. പാത്ത് ഒരു സാൻഡ്ബോക്സ്ഡ് എക്സ്ട്രാക്ഷൻ ഡയറക്ടറി പോലെ കാണപ്പെടുന്നുണ്ടോ എന്ന് മൂന്നാമത്തെ ക്ലോസ് സഹായിക്കുന്നു. പേലോഡ് ഒരു ഡെവലപ്പർ ലാപ്ടോപ്പിലോ വിശകലന സാൻഡ്ബോക്സിലോ നിദ്രയിൽ തുടരുകയും കണ്ടെയ്നറൈസ്ഡ് ബിൽഡിലോ റൺടൈം വർക്കറിലോ മാത്രമേ സജീവമാകൂ എന്നതാണ് ഇതിന്റെ ആകെ ഫലം - ലൈവ് ക്ലൗഡ് ക്രെഡൻഷ്യലുകൾ വഹിക്കാൻ ഏറ്റവും സാധ്യതയുള്ള പരിസ്ഥിതി. ക്ലസ്റ്ററിലെ ആദ്യകാല പാക്കേജ്, പവിഴപ്പുറ്റ്, അത്തരമൊരു ഗേറ്റ് ഇല്ല, കൂടാതെ അതിന്റെ (ലളിതമായ) ശേഖരം നിരുപാധികമായി പ്രവർത്തിപ്പിക്കുന്നു.
ശേഖരണം. ഗേറ്റ് കടക്കുമ്പോൾ, ഹുക്ക് പുറത്തേക്ക് പോകുന്നു. എക്സിക് ഫയൽസിങ്ക്(“/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 റോളും ആ റോളിന്റെ താൽക്കാലിക ആക്സസ് കീകളും പിൻവലിക്കാനുള്ള ഹെഡർ. ലളിതമായ ആധികാരികമല്ലാത്ത IMDSv1-ന് പകരം IMDSv2 നടപ്പിലാക്കാനുള്ള തിരഞ്ഞെടുപ്പ്. നേടുക ശ്രദ്ധിക്കേണ്ടതാണ് — അതായത് ടോക്കൺ അധിഷ്ഠിത മെറ്റാഡാറ്റ ആക്സസ് ആവശ്യമുള്ള രീതിയിൽ കോൺഫിഗർ ചെയ്തിരിക്കുന്ന ഇൻസ്റ്റൻസുകളിൽ പോലും പേലോഡ് പ്രവർത്തിക്കുന്നു, ഇത് AWS- ശുപാർശ ചെയ്യുന്ന ഹാർഡനിംഗ് ആണ്. ഘട്ടം 3 വഴി തിരികെ നൽകുന്ന ക്രെഡൻഷ്യലുകൾ ഹ്രസ്വകാലമാണ്. ആക്സസ്കീഐഡി/രഹസ്യ ആക്സസ് കീ/ടോക്കൺ സംഭവത്തിന്റെ റോളിലേക്ക് മൂന്നിരട്ടി സ്കോപ്പ് ചെയ്തിട്ടുണ്ട്; ആ റോളിന് ചെയ്യാൻ കഴിയുന്നതെല്ലാം, ആ കീകൾ കൈവശമുള്ളയാൾക്ക് ക്രെഡൻഷ്യലിന്റെ ജീവിതകാലം മുഴുവൻ ചെയ്യാൻ കഴിയും.
4–6 ഘട്ടങ്ങൾ ഏറ്റെടുക്കൽ വിശാലമാക്കുന്നു. അയക്കുക ബിൽഡ് അല്ലെങ്കിൽ റൺടൈം പ്രോസസ്സ് പാരമ്പര്യമായി ലഭിച്ച എന്തും ഡമ്പ് പിടിച്ചെടുക്കുന്നു - പ്രായോഗികമായി രജിസ്ട്രി ടോക്കണുകൾ, ഡാറ്റാബേസ് കണക്ഷൻ സ്ട്രിംഗുകൾ, API കീകൾ എന്നിവ മിക്കപ്പോഴും ഇവിടെയാണ് താമസിക്കുന്നത്. / ആപ്പ് ഫയൽ വാക്ക് പതിനഞ്ച് ആപ്ലിക്കേഷൻ ഫയലുകൾ വരെ പുറത്ത് വായിക്കുന്നു. node_modules, ഇതിന് ഉപരിതല കോൺഫിഗറേഷൻ ചെയ്യാൻ കഴിയും, .എംവ് ഫയലുകൾ, അല്ലെങ്കിൽ ഉറവിടം. ഘട്ടം 6 കോളുകൾ aws രഹസ്യ മാനേജർ ലിസ്റ്റ്-രഹസ്യങ്ങൾ മൂന്ന് മേഖലകളിൽ; 1–3 ഘട്ടങ്ങളിൽ എടുത്ത ക്രെഡൻഷ്യലുകളാണ് ആ കോളുകളെ കൃത്യമായി ആധികാരികമാക്കുന്നത്, അതിനാൽ IMDS റീഡ് ചെയ്യുകയും സീക്രട്ട്സ് മാനേജർ എണ്ണൽ ശൃംഖലയും ഒരുമിച്ച് ഒരൊറ്റ എസ്കലേഷനിലേക്ക് മാറ്റുകയും ചെയ്യുന്നു: ഇൻസ്റ്റൻസ് റോൾ → മാനേജ്ഡ്-സീക്രട്ട് ഇൻവെന്ററി. ഘട്ടം 7 ക്യാപ്ചർ-ദി-ഫ്ലാഗ് ഫ്രെയിമിംഗിനുള്ള ഒരു അംഗീകാരമാണ് - ഒരു എച്ച്ടിബി{…} പതാക കണ്ടെത്തിയാൽ അത് സ്വന്തമായി അയയ്ക്കും, അല്ലാത്തപക്ഷം ശേഖരിച്ച അസംസ്കൃതമായ ബ്ലോബ് നാല് കഷണങ്ങളായി മുറിച്ച് അയയ്ക്കും.
ക്ലസ്റ്ററിലെ പിന്നീടുള്ള പതിപ്പുകൾ എസ്കലേഷൻ കൂടുതൽ മുന്നോട്ട് കൊണ്ടുപോകുന്നു. ഒരു ഇൻവെന്ററിയിൽ നിർത്തുന്നതിനുപകരം, അവർ IMDS പ്രതികരണം പാഴ്സ് ചെയ്യുകയും താൽക്കാലിക കീകൾ ഇങ്ങനെ കയറ്റുമതി ചെയ്യുകയും ചെയ്യുന്നു. AWS_ACCESS_KEY_ID / AWS_SECRET_ACCESS_KEY / AWS_സെഷൻ_ടോക്കൺ പരിസ്ഥിതി വേരിയബിളുകൾ, ഐഡന്റിറ്റി സ്ഥിരീകരിക്കുക ഉപയോഗിച്ച് aws sts കോളർ ഐഡന്റിറ്റി നേടുക, തുടർന്ന് തിരികെ നൽകുന്ന എല്ലാ രഹസ്യങ്ങളും ലൂപ്പ് ചെയ്യുക രഹസ്യ പട്ടിക വിളിക്കുന്നു aws സീക്രട്ട്സ്മാനേജർ get-secret-value ഓരോന്നിലും — രഹസ്യ ഉള്ളടക്കങ്ങൾ വീണ്ടെടുക്കുന്നു, അവയുടെ പേരുകൾ മാത്രമല്ല. അതേ പതിപ്പുകൾ പ്രോസസ്സ്-സബ്സ്റ്റിറ്റ്യൂട്ടഡ് ഫ്ലാഗ് ബൈനറികളും വായിക്കുന്നു (/വായിക്കുകഫ്ലാഗ് (സുഹൃത്തുക്കളും) ഒരു ശ്രമം നടത്തി നോക്കൂ. കാർഗോ റൺ കണ്ടെത്തിയ ഏതെങ്കിലും റസ്റ്റ് പ്രോജക്റ്റിനെതിരെ / ആപ്പ്, ക്ലൗഡ് ക്രെഡൻഷ്യലുകൾക്കപ്പുറം ബിൽഡ് പരിസ്ഥിതി തുറന്നുകാട്ടുന്ന എന്തിലേക്കും വിളവെടുപ്പ് വിശാലമാക്കുന്നു.
ഈ പിന്നീടുള്ള പതിപ്പുകളും കൂടുതൽ ആക്രമണാത്മകമായി സ്വയം ഗേറ്റ് ചെയ്യുന്നു. 12-ഹെക്സ്-ഹോസ്റ്റ്നാമത്തിന് പുറമേ /ആപ്പ്/നോഡ്_മൊഡ്യൂളുകൾ പരിശോധിക്കുമ്പോൾ, പേലോഡ് സജീവമായ പാക്കേജ്-രജിസ്ട്രി കോൺഫിഗറേഷനും വർക്കിംഗ്-ഡയറക്ടറി പാത്തും പരിശോധിക്കുന്നു, കൂടാതെ ഒരു തത്സമയ ലക്ഷ്യത്തേക്കാൾ ഒരു വിശകലനം അല്ലെങ്കിൽ മിറർ സന്ദർഭം സൂചിപ്പിക്കുമ്പോൾ നിശബ്ദമായി പുറത്തുകടക്കുന്നു. സംയോജിത പ്രഭാവം മിക്ക പരിശോധനാ പരിതസ്ഥിതികളിലും നിരീക്ഷിക്കാവുന്ന ഒന്നും ചെയ്യുന്നില്ല, കൂടാതെ ഒരു യഥാർത്ഥ കണ്ടെയ്നറൈസ്ഡ് ഹോസ്റ്റിലാണെന്ന് സ്വയം വിലയിരുത്തുന്നിടത്ത് മാത്രം അതിന്റെ പൂർണ്ണ ശേഖരം പ്രവർത്തിപ്പിക്കുന്ന ഒരു പേലോഡാണ്.
പുറംതള്ളൽ. ശേഖരിച്ച ഡാറ്റ ഹോസ്റ്റിനെ രണ്ട് ചാനലുകളിലേക്ക് വിടുന്നു. ആദ്യം, ഒരു ബീക്കൺ പോസ്റ്റ് ഒരു നിശ്ചിതത്തിലേക്ക് വെബ്ഹുക്ക്.സൈറ്റ് ഹോസ്റ്റ്നാമം, സംഖ്യാ UID, വർക്കിംഗ് ഡയറക്ടറി, ശേഖരിച്ച 120 KB വരെയുള്ള ഡാറ്റ എന്നിവ വഹിക്കുന്ന കളക്ടർ. രണ്ടാമതായി, ഡാറ്റ ഒരു വ്യാജ YAML "മൊഡ്യൂൾ മാനിഫെസ്റ്റിലേക്ക്" മടക്കിക്കളയുന്നു, കൂടാതെ പുട്ട് ലേക്ക് /എപിഐ/മൊഡ്യൂളുകൾ/ ഒരു ലക്ഷ്യ സെർവറിൽ:
ecto_module: name: "<flag-or-chunk-0>" version: "1.0.0" power_level: "<chunk-1>" ship_deck: "<chunk-2>" cargo_hold: "<chunk-3>" മാനിഫെസ്റ്റ് ഫീൽഡ് നാമങ്ങൾ (പവർ_ലെവൽ, കപ്പൽ_ഡെക്ക്, കാർഗോ_ഹോൾഡ്) അലങ്കാരങ്ങളാണ് — മോഷ്ടിച്ച ഡാറ്റ സ്ട്രിംഗ് മൂല്യങ്ങൾക്കുള്ളിലാണ് പ്രവർത്തിക്കുന്നത്, അതുകൊണ്ടാണ് ഒരു നെറ്റ്വർക്ക് മോണിറ്റർ ഒരു വ്യക്തമായ ഡാറ്റ ഡമ്പിന് പകരം ഒരു നല്ല പാക്കേജ്-രജിസ്ട്രി മാനിഫെസ്റ്റ് അപ്ലോഡ് പോലെ കാണപ്പെടുന്നത് കാണുന്നത്. ബീക്കൺ ചാനൽ കൂടുതൽ വഹിക്കുന്നു: പോസ്റ്റ് ബോഡി ടു വെബ്ഹുക്ക്.സൈറ്റ് ഹോസ്റ്റ്നാമം, സംഖ്യാ UID, വർക്കിംഗ് ഡയറക്ടറി, ശേഖരിച്ച ബ്ലോബിന്റെ 120 KB വരെ എന്നിവ ഉൾപ്പെടുന്നു, അതിനാൽ വിജയകരമായ ഒരു ബീക്കൺ പോലും പൂർണ്ണ ടേക്ക് നൽകുന്നു. വെബ്ഹുക്ക്.സൈറ്റ് ഒരു സൗജന്യ അഭ്യർത്ഥന-പരിശോധന സേവനമാണ്; ഒരു കളക്ടറായി ഇത് ഉപയോഗിക്കുന്നത് അർത്ഥമാക്കുന്നത് ആ ചാനലിനായി സ്വന്തമായി അടിസ്ഥാന സൗകര്യങ്ങൾ ലഭിക്കാൻ ഓപ്പറേറ്റർക്ക് ഒരിക്കലും എഴുന്നേൽക്കേണ്ടി വരില്ല എന്നാണ്, കൂടാതെ റെക്കോർഡ് ചെയ്ത അഭ്യർത്ഥനകൾ സേവനത്തിന്റെ ബിന്നിൽ തന്നെ നിലനിൽക്കും.
മാനിഫെസ്റ്റ് പുട്ട് പലതിൽ തുടങ്ങുന്ന ഒരു ഫോൾബാക്ക് ലിസ്റ്റ് നടക്കുന്നു 127.0.0.1/ലോക്കൽഹോസ്റ്റിൽ പോർട്ടുകൾ, തുടർന്ന് `ലെ മൂന്ന് പൊതു വിലാസങ്ങളിലേക്ക് വരുന്നു154.57.164.0/24` ശ്രേണി, 2xx സ്റ്റാറ്റസുള്ള ഉത്തരം നൽകുന്ന ആദ്യ എൻഡ്പോയിന്റിൽ നിർത്തുന്നു. ലോക്കൽഹോസ്റ്റ്-ഫസ്റ്റ് ഓർഡറിംഗ് “verdaccio ടെസ്റ്റിംഗ്” സ്വയം വിവരണവുമായി (ലൂപ്പ്ബാക്കിലെ ഒരു ലോക്കൽ രജിസ്ട്രി) പൊരുത്തപ്പെടുന്നു, എന്നാൽ പബ്ലിക്-ഐപി ഫാൾബാക്കുകൾ അർത്ഥമാക്കുന്നത് ലൂപ്പ്ബാക്ക് കേൾക്കാത്തപ്പോഴെല്ലാം ഡാറ്റ ഹോസ്റ്റിൽ നിന്ന് പുറത്തുപോകുന്നു എന്നാണ് - അതായത്, രചയിതാവിന്റെ സ്വന്തം ടെസ്റ്റ് റിഗ് അല്ലാത്ത ഏതൊരു മെഷീനിലും.
ടൈംലൈൻ
ക്ലസ്റ്റർ ഒരു തുള്ളി എന്നതിലുപരി വർദ്ധിച്ചുവരുന്ന ശേഷി വളർച്ച കാണിക്കുന്നു. വാൾ-ക്ലോക്ക് പ്രസിദ്ധീകരിക്കുന്നതിലൂടെയല്ല, നിരീക്ഷിച്ച പെരുമാറ്റത്തിലൂടെയാണ് ഞങ്ങൾ ഇത് ക്രമീകരിക്കുന്നത്:
| സ്റ്റേജ് | പാക്കേജുകൾ / പതിപ്പുകൾ | പെരുമാറ്റം |
|---|---|---|
| നേരത്തെയുള്ള ഓട്ടം | coral-wraith 9999.0.x | ഒരു ആശ്രിതത്വ-ആശയക്കുഴപ്പ ശ്രമവുമായി പൊരുത്തപ്പെടുന്ന ഊതിവീർപ്പിച്ച പതിപ്പ് നമ്പറുകൾ; ഇൻസ്റ്റാൾ-സമയ എണ്ണലും എക്സ്ഫിലും |
| വിത്ത് | coral-wraith 1.0.0 | പോസ്റ്റ്ഇൻസ്റ്റാൾ ഐഡി/എൻവി/ഫ്ലാഗ് ഫയലുകൾ ശേഖരിക്കുന്നു; സിംഗിൾ പുട്ട് ടു 154[.]57[.]164[.]71:30782, മാർക്കർ ECT-472839 |
| ദ്രുത ആവർത്തനം | coral-wraith 1.0.1 → 6.0.0 | മണിക്കൂറുകൾക്കുള്ളിൽ ഡസൻ കണക്കിന് റിലീസുകൾ; പേലോഡ് നേട്ടം കൈവരിക്കുന്നു isAppWorker() ഗേറ്റ്, IMDSv2 ക്രെഡൻഷ്യൽ പുൾ, പൂർണ്ണം get-secret-value പിവറ്റ്, രജിസ്ട്രി/പാത്ത് എൻവയോൺമെന്റ് പരിശോധന, ഡ്യുവൽ സിങ്ക് മാർക്കറുകൾ |
| സമാന്തര നാമങ്ങൾ | ecto-corsair-whisper-6f3b9 1.0.14–1.0.18 | അതേ ഗേറ്റഡ് പേലോഡ്; webhook.site ബീക്കണും മൾട്ടി-എൻഡ്പോയിന്റ് ഫാൾബാക്ക് ലിസ്റ്റും |
| ഭേദങ്ങൾ | 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, ബീക്കൺ |
ഒരു പാക്കേജിനും ഒരു പതിപ്പിനും പകരം, ഒരേ പേര് തന്നെ വീണ്ടും വീണ്ടും പ്രസിദ്ധീകരിക്കുന്നു, ഓരോന്നും അവസാനത്തേതിൽ നിന്ന് ഒരു ചെറിയ വ്യതിയാനം പുറത്തിറക്കുന്നു, അതേ പേലോഡ് വഹിക്കുന്ന വ്യത്യസ്ത പേരുകളുള്ള ഒരുപിടി സഹോദരങ്ങളോടൊപ്പം. വിരസത കോഡ് രണ്ട് ക്ലോസ് ഫിംഗർപ്രിന്റുകളായി വിഭജിക്കപ്പെട്ടു - ഒരു സെറ്റ് രണ്ട് ക്രിട്ടിക്കൽ ഡിറ്റക്ഷനുകളെ ട്രിപ്പുചെയ്യുന്നു, മറ്റൊന്ന് മൂന്ന് (ഒരു അധിക ഫയൽ-റീഡ് സിങ്ക്) - എന്നാൽ രണ്ടും ഒരേ പേലോഡിലേക്ക് ദൃഢീകരിക്കുന്നു; വ്യത്യാസം കോഡ് ഡ്രിഫ്റ്റാണ്, ഒരു ബിഹേവിയറൽ ഫോർക്കല്ല. പതിപ്പുകൾ വിരസത വിശകലനം ചെയ്ത പരിധിക്കപ്പുറം (എഴുതുമ്പോൾ കുറഞ്ഞത് 1.0.25 വരെ) രജിസ്ട്രിയിൽ തത്സമയം നിരീക്ഷിക്കപ്പെട്ടു, കൂടാതെ പവിഴപ്പുറ്റ് പേര് അതേ ജാലകത്തിലൂടെ സ്വന്തം പതിപ്പ് ഗോവണി കയറുന്നത് തുടർന്നു.
വിട്ടുവീഴ്ചയുടെ സൂചകങ്ങൾ
താഴെയുള്ള എല്ലാ സൂചകങ്ങളും ഡിസ്കിലെ പാക്കേജ് ഉറവിടത്തിൽ നിന്ന് വേർതിരിച്ചെടുത്തതാണ്. നെറ്റ്വർക്ക് സൂചകങ്ങൾ ഡീഫാഞ്ച് ചെയ്തിരിക്കുന്നു.
നെറ്റ്വർക്ക്
| സൂചകം | പങ്ക് |
|---|---|
hxxp://154[.]57[.]164[.]71:30782 | C2 PUT ലക്ഷ്യം (coral-wraith) |
hxxp://154[.]57[.]164[.]80:30543 | C2 PUT ഫോൾബാക്ക് (ecto-*) |
hxxp://154[.]57[.]164[.]82:31250 | C2 PUT ഫോൾബാക്ക് (ecto-*) |
hxxp://154[.]57[.]164[.]71:31289 | C2 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 കീകൾ | എക്സ്ഫിൽ മാനിഫെസ്റ്റ് സ്കീമ |
സിങ്ക് മാർക്കറുകൾ 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{...} റെജക്സ് സ്ക്രാപ്പ് | ക്യാപ്ചർ-ദി-ഫ്ലാഗ് കൊയ്ത്ത് |
ഫയൽ ഹാഷുകൾ (sha256, വിശകലന സമയത്ത് പകർത്തിയത്)
| ഫയല് | sha256 |
|---|---|
coral-wraith/postinstall.js | ce5ff035cfdfed1d0015446424b352c27b66bcb77e9fdb0a51e4245199146824 |
ecto-corsair-whisper-6f3b9 1.0.18/postinstall.js | b58432acba376aa6976f0490d9a1c04257ccdbc856d8390260c50322d63e31c3 |
ആട്രിബ്യൂഷനും നിരീക്ഷിച്ച പെരുമാറ്റവും
അഞ്ച് പാക്കേജ് പേരുകൾ രണ്ട് npm അക്കൗണ്ട് ഹാൻഡിലുകൾക്ക് കീഴിലാണ് പ്രസിദ്ധീകരിച്ചത്, പക്ഷേ അവയെ ഒരു ക്ലസ്റ്ററായി കണക്കാക്കാൻ ആവശ്യമായ അടിസ്ഥാന സൗകര്യങ്ങൾ അവ പങ്കിടുന്നു: അതേ എക്ടോ_മൊഡ്യൂൾ മാനിഫെസ്റ്റ് സ്കീമ, അതേ പോലെ തന്നെ ഇ.സി.ടി-472839 പ്രൈമറി സിങ്ക് മാർക്കർ, അതേപോലെ തന്നെ വെബ്ഹുക്ക്.സൈറ്റ് കളക്ടർ ഐഡി, കൂടാതെ ഒരേ സ്ഥലത്തുള്ള C2 എൻഡ്പോയിന്റുകൾ 154.57.164.0/24` ബ്ലോക്ക്. വിത്ത് പാക്കേജ് (`കോറൽ-വെയ്ത്ത്, ലളിതവും അൺഗേറ്റഡ്) ഗേറ്റഡ് എക്ടോ-ഫാമിലിയും അങ്ങനെ സ്വതന്ത്ര ശ്രമങ്ങളേക്കാൾ ഒരു ടൂൾകിറ്റിലെ ആവർത്തനങ്ങളായി വായിക്കപ്പെടുന്നു.
പിന്നീടുള്ള പതിപ്പുകളിൽ പാക്കേജുകൾ സ്വയം വിവരിക്കുന്നത് ഇങ്ങനെയാണ് "വെർഡാസിയോ സപ്ലൈ-ചെയിൻ പരിശോധനയ്ക്കുള്ള സിടിഎഫ് പേലോഡ്." ആ ലേബലിനെ നിരീക്ഷിക്കാവുന്ന ഒരു വസ്തുതയായി ഞങ്ങൾ അവതരിപ്പിക്കുന്നു, ഉദ്ദേശ്യത്തെക്കുറിച്ചുള്ള ഒരു കണ്ടെത്തലായി ഞങ്ങൾ അത് പുനഃസ്ഥാപിക്കുന്നില്ല. കോഡ് ചെയ്യുന്നത് അത് എങ്ങനെ ലേബൽ ചെയ്തിരിക്കുന്നു എന്നതിനെ ആശ്രയിക്കാതെ വ്യക്തവും സ്വതന്ത്രവുമാണ്: ഇത് ഇൻസ്റ്റൻസ് മെറ്റാഡാറ്റ സേവനത്തിൽ നിന്ന് IAM റോൾ ക്രെഡൻഷ്യലുകൾ വായിക്കുന്നു, മൂന്ന് AWS മേഖലകളിലുടനീളം കൈകാര്യം ചെയ്യുന്ന രഹസ്യങ്ങൾ എണ്ണുന്നു, കൂടാതെ ഫലങ്ങൾ ഒരു പൊതു IPയിലേക്കും ഒരു മൂന്നാം കക്ഷി വെബ്ഹുക്ക് കളക്ടറിലേക്കും കൈമാറുന്നു. ഒരു യഥാർത്ഥ ലൂപ്പ്ബാക്ക്-ഒൺലി ടെസ്റ്റ് ഹാർനെസിന് പബ്ലിക്-IP ഫാൾബാക്ക് ലിസ്റ്റ്, IMDS ക്രെഡൻഷ്യൽ റീഡുകൾ അല്ലെങ്കിൽ ക്രോസ്-റീജിയൻ സീക്രട്ട്സ് മാനേജർ കോളുകൾ ആവശ്യമില്ല. എഗ്രസും ക്രെഡൻഷ്യൽ റീച്ചും യഥാർത്ഥമായതിനാൽ, ഗേറ്റഡ് പതിപ്പുകളെ ക്ഷുദ്രകരമായി തരംതിരിച്ചു.
കണ്ടെയ്നർ-ഒൺലി ഗേറ്റ് ആണ് ഏറ്റവും പ്രവർത്തനപരമായി ശ്രദ്ധേയമായ സവിശേഷത. ലാപ്ടോപ്പുകളിലും വിശകലന സാൻഡ്ബോക്സുകളിലും നിശബ്ദത പാലിക്കുന്നത് ഒഴിവാക്കുന്നതിനുള്ള ഒരു നടപടിയും, ഒരു യഥാർത്ഥ IAM റോളും തത്സമയ രഹസ്യങ്ങളും ഉണ്ടാകാൻ സാധ്യതയുള്ളിടത്ത് മാത്രം ഫയറിംഗ് നടത്തുന്ന ഒരു ടാർഗെറ്റിംഗ് നടപടിയുമാണ് ഇത്. ഒരു സാധാരണ സാൻഡ്ബോക്സിൽ ഈ പാക്കേജുകൾ പ്രവർത്തിപ്പിക്കുന്ന വിശകലന വിദഗ്ധർ ഒന്നും നിരീക്ഷിക്കില്ല; ഡോക്കർ-സ്റ്റൈൽ ഹോസ്റ്റ്നാമത്തിനും ഇൻ-കണ്ടെയ്നർ ഇൻസ്റ്റാൾ പാതയ്ക്കും കീഴിൽ മാത്രമേ പെരുമാറ്റം പ്രകടമാകൂ.
പ്രതിരോധക്കാർക്കുള്ള സ്വാധീനം, പ്രവണതകൾ, മാർഗ്ഗനിർദ്ദേശം
ഇവിടെ എക്സ്പോഷർ എന്നത് ബിൽഡ്, റൺടൈം കണ്ടെയ്നറുകൾക്കുള്ളിലെ ക്ലൗഡ്-ക്രെഡൻഷ്യലും രഹസ്യ വെളിപ്പെടുത്തലുമാണ്. IMDS-ൽ നിന്ന് എടുത്ത ഒരു IAM റോൾ ക്രെഡൻഷ്യലിൽ ആ റോൾ കൈവശം വച്ചിരിക്കുന്ന എല്ലാ അനുമതികളും അടങ്ങിയിരിക്കുന്നു; രഹസ്യ മാനേജർ: ലിസ്റ്റ് സീക്രട്ട്സ് (കൂടാതെ ഏതെങ്കിലും തുടർനടപടികൾ സീക്രട്ട് വാല്യൂ നേടുക) സംഭരിച്ചിരിക്കുന്ന ആപ്ലിക്കേഷൻ രഹസ്യങ്ങളിലേക്ക് അത് വിശാലമാക്കുന്നു. പരിസ്ഥിതി-വേരിയബിൾ ഡമ്പുകൾ പലപ്പോഴും രജിസ്ട്രി ടോക്കണുകൾ, ഡാറ്റാബേസ് URL-കൾ, API കീകൾ എന്നിവ വഹിക്കുന്നു. ഒരു CI അല്ലെങ്കിൽ കണ്ടെയ്നർ സന്ദർഭത്തിൽ - ഗേറ്റ് കൃത്യമായി എന്തിനുവേണ്ടിയാണ് തിരഞ്ഞെടുക്കുന്നത് - ഈ പാക്കേജുകളിൽ ഒന്നിന്റെ ഒരൊറ്റ ട്രാൻസിറ്റീവ് ഇൻസ്റ്റാളേഷൻ ആ മെറ്റീരിയൽ ചോർത്താൻ പര്യാപ്തമാണ്.
എക്ടോപ്ലാസം നമ്മൾ തുടർന്നും കാണുന്ന ഒരു പാറ്റേണിന് അനുയോജ്യമാണ്: ലോക്കൽ ഫയലുകളേക്കാൾ ക്ലൗഡ് മെറ്റാഡാറ്റയിലേക്കും മാനേജ്ഡ് രഹസ്യങ്ങളിലേക്കും എത്തുന്ന ഇൻസ്റ്റാൾ-ടൈം പേലോഡുകൾ, ഉയർന്ന മൂല്യമുള്ള പരിതസ്ഥിതികളിൽ മാത്രം വെടിവയ്ക്കാൻ സ്വയം ഗേറ്റ് ചെയ്യുന്നു. രണ്ട് പ്രതിരോധ നിരീക്ഷണങ്ങൾ പിന്തുടരുന്നു.
- ആകൃതി തിരിച്ചറിയാൻ കഴിയും.. ഒരു npm/PyPI ഇൻസ്റ്റോൾ ഹുക്കിന്റെ കോൾ ഗ്രാഫ് ഒരു ക്ലൗഡ് സീക്രട്ട്സ് API രണ്ടിലും എത്തുന്നു (ഓ.എസ്.എസ്. സീക്രട്ട്സ് മാനേജർ, ജിക്ലൗഡ് രഹസ്യങ്ങൾ, അസ് കീവാൾട്ട്) അല്ലെങ്കിൽ IMDS വിലാസവും ഒരു നെറ്റ്വർക്ക് എഗ്രസ് സിങ്കും ഒരു ഇടുങ്ങിയതും ഉയർന്ന സിഗ്നൽ പാറ്റേണുമാണ് - ഇത് ഒരു നിയമാനുസൃത ലൈഫ് സൈക്കിൾ സ്ക്രിപ്റ്റിൽ ഒരിക്കലും സംഭവിക്കുന്നില്ല. സ്റ്റാറ്റിക് ഫ്ലോ വിശകലനം ഏതെങ്കിലും പ്രത്യേക ഡൊമെയ്നെയോ ഐപിയെയോ ആശ്രയിക്കാതെ തന്നെ അത് ഫ്ലാഗ് ചെയ്യാൻ കഴിയും.
- പരിസ്ഥിതി കാഠിന്യം അതിനെ മങ്ങിക്കുന്നു. 1 എന്ന ഹോപ്പ് പരിധിയോടെ IMDSv2 നടപ്പിലാക്കുന്നത് കണ്ടെയ്നർ വർക്ക്ലോഡുകൾ ഇൻസ്റ്റൻസ് മെറ്റാഡാറ്റയിൽ എത്തുന്നത് തടയുന്നു; IAM റോളുകളെ ഏറ്റവും കുറഞ്ഞ പ്രിവിലേജിലേക്ക് സ്കോപ്പ് ചെയ്യുന്നത് ചോർച്ചയുള്ള ഏതൊരു ക്രെഡൻഷ്യലിന്റെയും ബ്ലാസ്റ്റ് റേഡിയസിനെ പരിമിതപ്പെടുത്തുന്നു; കൂടാതെ --സ്ക്രിപ്റ്റുകൾ അവഗണിക്കുക CI-യിൽ ആവശ്യമില്ലാത്ത പാക്കേജുകൾക്കായി ഇൻസ്റ്റാൾ-ഹുക്ക് വെക്റ്റർ പൂർണ്ണമായും നീക്കം ചെയ്യുന്നു.
പ്രതിരോധക്കാർക്ക്, പ്രായോഗിക പരിശോധനകൾ ഇവയാണ്: ബിൽഡ്/CI കണ്ടെയ്നറുകളിൽ നിന്ന് അനുവാദമില്ലാത്ത പൊതു ഐപികളിലേക്കുള്ള ഔട്ട്ബൗണ്ട് കണക്ഷനുകളെക്കുറിച്ചുള്ള മുന്നറിയിപ്പ് npm ഇൻസ്റ്റാളുചെയ്യുക; പാക്കേജ് ലൈഫ് സൈക്കിൾ സ്ക്രിപ്റ്റുകളിൽ നിന്ന് ഉത്ഭവിക്കുന്ന IMDS ആക്സസ് നിരീക്ഷിക്കുക; കൂടാതെ ഒരു ക്ലൗഡ് CLI-യിലേക്ക് ഷെൽ ചെയ്യുന്ന ഏതൊരു ഇൻസ്റ്റാൾ ഹുക്കിനെയും സംശയാസ്പദമായി കണക്കാക്കുക, അതും തെളിയിക്കപ്പെടുന്നതുവരെ.
ഈ ക്ലസ്റ്ററിന് പ്രത്യേകമായ രണ്ട് കുറിപ്പുകൾ കൂടി. ഒന്നാമതായി, ആക്ടിവേഷൻ കണ്ടെയ്നറൈസ്ഡ് എൻവയോൺമെന്റുകളിലേക്ക് ഗേറ്റ് ചെയ്തിരിക്കുന്നതിനാൽ, ഒരു വർക്ക്സ്റ്റേഷനിൽ പരിശോധിച്ചപ്പോൾ നിഷ്ക്രിയമായി കാണപ്പെടുന്ന ഒരു പാക്കേജ് ഇപ്പോഴും ഉൽപ്പാദനത്തിൽ തന്നെ തുടരാം - "ഞാൻ അത് ഇൻസ്റ്റാൾ ചെയ്തു, ഒന്നും സംഭവിച്ചില്ല" എന്നതിനെ ആശ്രയിക്കുന്നതിനുപകരം, വെറ്റിംഗിന് കണ്ടെയ്നർ ഹോസ്റ്റ്നാമവും പാത്ത് അവസ്ഥകളും പുനർനിർമ്മിക്കേണ്ടതുണ്ട്, അല്ലെങ്കിൽ ഉറവിടം നേരിട്ട് വായിക്കേണ്ടതുണ്ട്. രണ്ടാമതായി, ഒരു ബീക്കൺ കളക്ടറായി ഒരു പൊതു അഭ്യർത്ഥന-പരിശോധന സേവനം ഉപയോഗിക്കുന്നത് അർത്ഥമാക്കുന്നത് ചില എക്സ്ഫിൽട്രേറ്റ് ചെയ്ത ഡാറ്റ സംഭവ പ്രതികരണത്തിനായി വീണ്ടെടുക്കാൻ കഴിയുമെന്നാണ്: ഈ പാക്കേജുകളിൽ ഒന്ന് അതിന്റെ ഡിപൻഡൻസി ട്രീയിൽ കണ്ടെത്തുന്ന ഒരു ഓർഗനൈസേഷന് പേലോഡിന്റെ ശേഖരണ ലോജിക്കിൽ നിന്ന് ഒരു വിജയകരമായ ബീക്കണിൽ എന്തായിരിക്കുമെന്ന് ന്യായവാദം ചെയ്യാൻ കഴിയും, കൂടാതെ ബാധിച്ച ബിൽഡ് അല്ലെങ്കിൽ റൺടൈം എൻവയോൺമെന്റിൽ നിന്ന് എത്തിച്ചേരാനാകുന്ന ഏതെങ്കിലും IAM റോൾ ക്രെഡൻഷ്യലുകൾ, രജിസ്ട്രി ടോക്കണുകൾ, കൈകാര്യം ചെയ്ത രഹസ്യങ്ങൾ എന്നിവ തിരിക്കണം. ക്രെഡൻഷ്യൽ റൊട്ടേഷൻഒരു ഇൻസ്റ്റാളേഷൻ റൺ ചെയ്തുകഴിഞ്ഞാൽ, പാക്കേജ് നീക്കം ചെയ്യൽ അല്ല, ഓപ്പറേറ്റീവ് റെമഡിയേഷൻ ആണ്.





