മാൽവെയർ ഷിപ്പ് ചെയ്ത ഒരു ഒറ്റ-പ്രതീക പിഴവ്
ഒരു അക്ഷരത്തെറ്റോടെയാണ് അത് തുടങ്ങിയത്. ഫീച്ചർ പുഷുകളുടെയും പിആർ ലയനങ്ങളുടെയും വലിയ തിരക്കിനിടയിൽ എവിടെയോ, ആരോ ടൈപ്പ് ചെയ്തു @utils_core_live @utils_core #📱 മൊബൈൽ ഫോൺ കോളുകൾ ഇതിനുപകരമായി @utils-കോർ കടന്നു package.json. ആ ഒറ്റ പ്രതീക സ്ലിപ്പ് ഒരു പിശകും വരുത്തിയില്ല. പകരം, അത് നിശബ്ദമായി ഒരു അടുത്ത തവണ ക്ഷുദ്രകരമായ രൂപസാദൃശ്യമുള്ള പാക്കേജ് CI/CD റൺ, പിൻ ചെയ്ത പതിപ്പുകളിലും ഓട്ടോമേഷനിലുമുള്ള വിശ്വാസം പ്രയോജനപ്പെടുത്തുന്നു. ഓപ്പൺ സോഴ്സിലെ ടൈപ്പോസ്ക്വാട്ടിംഗിന്റെ ലോകത്തേക്ക് സ്വാഗതം.
ടൈപ്പോസ്ക്വാട്ടിംഗ്: മനുഷ്യ പിഴവുകളെ ആശ്രയിക്കുന്ന ആക്രമണകാരി
ടൈപ്പോസ്ക്വാട്ടിംഗ് എന്നത് കൃത്യമായി തോന്നുന്നത് പോലെയാണ്: നിയമാനുസൃതമായ പേരുകൾക്ക് സമാനമായ പേരുകളുള്ള പാക്കേജുകൾ രജിസ്റ്റർ ചെയ്യുന്ന ക്ഷുദ്രക്കാർ. വേഗതയേറിയ പരിതസ്ഥിതികളിൽ, ഇത് പ്രവർത്തിക്കുന്നത് ഡെവലപ്പർമാർ വിശ്വസിക്കുന്നതിനാലാണ് അവരുടെ package.json ഒപ്പം പാക്കേജ്-lock.json അവർ പ്രതീക്ഷിക്കുന്നത് പ്രതിഫലിപ്പിക്കുന്നു. ഒരു കഥാപാത്രത്തിന്റെ വ്യത്യാസമോ? പിആർ വ്യത്യാസത്തിൽ അത് അദൃശ്യമായേക്കാം.
NPM അക്ഷരത്തെറ്റുകളിലൂടെ ചൂഷണം ചെയ്യപ്പെട്ട ചരിത്രമുണ്ട്. പോലുള്ള പാക്കേജുകൾ ക്രോസ്എൻവി ഇതിനുപകരമായി ക്രോസ്-എൻവി or ഇവന്റ്സ്ട്രീം ഈ സാദൃശ്യമുള്ളവ എത്രത്തോളം ഫലപ്രദമാണെന്ന് ബാക്ക്ഡോറുകൾ ഇതിനകം തെളിയിച്ചിട്ടുണ്ട്. ഈ വ്യാജ പാക്കേജുകൾ പലപ്പോഴും അവലോകനങ്ങൾ പാസാക്കുന്നത് അവ ശരിയായി കാണപ്പെടുന്നതിനാലും ഉടനടി റൺടൈം പിശകുകൾ വരുത്താത്തതിനാലുമാണ്.
സാധാരണ കെണികളിൽ ഇവ ഉൾപ്പെടുന്നു:
- ഹൈഫൻ vs അണ്ടർസ്കോർ: lഒഡാഷ്-കോർ vs ലോഡാഷ്_കോർ
- ബഹുവചനങ്ങൾ: അഭ്യർത്ഥന vs അഭ്യർത്ഥനകൾ
- പകരം വച്ച പ്രതീകങ്ങൾ: എക്സ്പ്രസ് ഇതിനുപകരമായി പ്രകടിപ്പിക്കാൻ
package-lock.json ഒരു ബ്ലൈൻഡ് സ്പോട്ടായി മാറുന്നിടത്ത്
ഡെവലപ്പർ അവരുടെ അക്ഷരത്തെറ്റ് തിരുത്തുന്നു. അല്ലെങ്കിൽ അവർ അങ്ങനെ കരുതുന്നു. പക്ഷേ ഇപ്പോൾ, പാക്കേജ്-lock.json ആക്രമണകാരിയുടെ പാക്കേജ് ഇതിനകം തന്നെ ലോക്ക് ചെയ്തിട്ടുണ്ട്. ഇവിടെയാണ് യഥാർത്ഥ അപകടസാധ്യത ഒളിഞ്ഞിരിക്കുന്നത്.
വ്യത്യസ്തമായി package.json, ഇത് സ്വമേധയാ എഡിറ്റ് ചെയ്യുകയും കൂടുതൽ സൂക്ഷ്മപരിശോധനയ്ക്ക് വിധേയമാക്കുകയും ചെയ്യുന്നു, പാക്കേജ്-lock.json സ്വയം സൃഷ്ടിക്കുന്നത് NPM. തൽഫലമായി, ഇത് പലപ്പോഴും ഒരു ഔപചാരികതയായി കണക്കാക്കപ്പെടുന്നു, ഒഴിവാക്കപ്പെടുന്നു, അല്ലെങ്കിൽ ഒഴിവാക്കപ്പെടുന്നു pull request അവലോകനങ്ങൾ. ടീമുകൾ അതിനെ "വളരെ ശബ്ദായമാനമായത്" എന്ന് അടയാളപ്പെടുത്തുകയോ ആഴത്തിലുള്ള ഒരു നോട്ടം കൂടാതെ അതിനെ പരോക്ഷമായി വിശ്വസിക്കുകയോ ചെയ്യുന്നത് അസാധാരണമല്ല.
ആക്രമണകാരികൾക്ക് ഇത് അറിയാം. അവർ ഇതിനെയാണ് ആശ്രയിക്കുന്നത്. ഒരിക്കൽ ദോഷകരമായ പാക്കേജ് ഒരു അക്ഷരത്തെറ്റ് കാരണം, പരാമർശിച്ചിരിക്കുന്നു പാക്കേജ്.ജെസൺ, പാക്കേജ്-ലോക്ക്.ജെസൺ പരിഹരിച്ച പതിപ്പ് രേഖപ്പെടുത്തുന്നു. അക്ഷരത്തെറ്റ് പിന്നീട് തിരുത്തിയാലും, ലോക്ക്ഫയൽ വ്യക്തമായി പുനഃസൃഷ്ടിച്ചില്ലെങ്കിൽ ക്ഷുദ്ര എൻട്രി നിലനിൽക്കും.
കാര്യങ്ങൾ കൂടുതൽ വഷളാക്കാൻ, സ്ഥിരത ഉറപ്പാക്കേണ്ട പതിപ്പ് പിന്നിംഗ് വിപരീതഫലം ഉണ്ടാക്കിയേക്കാം. ആക്രമണകാരികൾക്ക് അവരുടെ വ്യാജ പാക്കേജ് നിയമാനുസൃതമായതിന് സമാനമായി പതിപ്പ് ചെയ്യാൻ കഴിയും. CI/CD പിൻ ചെയ്ത പതിപ്പുകളെ സിസ്റ്റം അന്ധമായി വിശ്വസിക്കുന്നുവെങ്കിൽ, അറിയപ്പെടുന്ന നല്ല പതിപ്പ് നമ്പറുള്ള ഒരു പാക്കേജ് ഇൻസ്റ്റാൾ ചെയ്യുന്നുണ്ടെന്നും എന്നാൽ വ്യത്യസ്തമായ ഒരു ക്ഷുദ്ര ഉറവിടത്തിൽ നിന്നാണെന്നും അത് കണ്ടെത്തുകയില്ല.
ഈ നിശബ്ദ സ്ഥിരോത്സാഹമാണ് പാക്കേജ്-lock.json വളരെ അപകടകരമാണ്. ഇത് നിർണായകമായ ബിൽഡുകൾ ഉറപ്പാക്കുന്നു, അതെ, എന്നാൽ ഒരു മോശം പാക്കേജ് പിടിച്ചെടുക്കുകയും സ്വമേധയാ വൃത്തിയാക്കുകയും ചെയ്തില്ലെങ്കിൽ അത് നിലനിൽക്കുമെന്ന് ഇത് ഉറപ്പുനൽകുന്നു.
CI/CD: മാൽവെയർ ബാധിക്കുന്നിടം – package.json
ഒരു സാധാരണയിൽ CI/CD pipeline, ക്ഷുദ്ര പാക്കേജ് റൺടൈം വരെ കാത്തിരിക്കേണ്ടതില്ല. ഇത് ഫ്ലോയിൽ വളരെ നേരത്തെ തന്നെ പരിഹരിക്കപ്പെടുകയും ട്രിഗർ ചെയ്യപ്പെടുകയും ചെയ്യുന്നു:
ആശ്രിതത്വ പരിഹാരം
ദി pipeline p യിൽ നിന്ന് കൃത്യമായ ആശ്രിത പതിപ്പുകൾ പുറത്തെടുക്കുന്നു.ആക്കേജ്-ലോക്ക്.ജെസൺ, ഇതിൽ ഇപ്പോൾ ഉൾപ്പെടുന്നു അക്ഷരത്തെറ്റ് കാരണം പാക്കേജ് ടൈപ്പോസ്ക്വാട്ട് ചെയ്തു പാക്കേജ്.ജെസൺ.
ഘട്ടം ഇൻസ്റ്റാൾ ചെയ്യുക
npm ci സമയത്ത്, എല്ലാ ഡിപൻഡൻസികളും ഇൻസ്റ്റാൾ ചെയ്യപ്പെടും, അതിൽ മാലിഷ്യസ് ആയതും ഉൾപ്പെടുന്നു. മുന്നറിയിപ്പുകളില്ല, പ്രോംപ്റ്റുകളില്ല, നിശബ്ദ ഇൻസ്റ്റാളേഷൻ മാത്രം.
പോസ്റ്റ്-ഇൻസ്റ്റാൾ സ്ക്രിപ്റ്റ് എക്സിക്യൂഷൻ
ലുക്കലൈക്ക് പാക്കേജിൽ ഇൻസ്റ്റലേഷൻ പൂർത്തിയാകുമ്പോൾ യാന്ത്രികമായി പ്രവർത്തിക്കുന്ന ഒരു പോസ്റ്റ്-ഇൻസ്റ്റാൾ സ്ക്രിപ്റ്റ് ഉൾപ്പെടുന്നു. ഇവിടെയാണ് വിട്ടുവീഴ്ച സംഭവിക്കുന്നത്.
സ്യൂഡോകോഡ് ഉദാഹരണം:
if (installation_phase_active) {
runHiddenPayload()
}
സ്യൂഡോകോഡ് വിവരണം:
ഇൻസ്റ്റലേഷൻ ഘട്ടത്തിൽ, പോസ്റ്റ്-ഇൻസ്റ്റൽ ലൈഫ് സൈക്കിൾ ഹുക്ക് ഉണ്ടെങ്കിൽ, വ്യാജ പാക്കേജ് അതിന്റെ മറഞ്ഞിരിക്കുന്ന ലോജിക്ക് പ്രവർത്തനക്ഷമമാക്കുന്നു - പലപ്പോഴും ബിൽഡുകളോ ടെസ്റ്റുകളോ പ്രവർത്തിക്കുന്നതിന് മുമ്പുതന്നെ. ഇതിൽ ബാഹ്യ അഭ്യർത്ഥനകൾ നടത്തുക, ബാക്ക്ഡോറുകൾ കുത്തിവയ്ക്കുക, അല്ലെങ്കിൽ മറ്റ് അനധികൃത പ്രവർത്തനങ്ങൾ എന്നിവ ഉൾപ്പെട്ടേക്കാം.
⚠️ മുന്നറിയിപ്പ്: ഈ സ്യൂഡോകോഡ് പ്രകടന ആവശ്യങ്ങൾക്ക് മാത്രമുള്ളതാണ്, യഥാർത്ഥ പരിതസ്ഥിതികളിൽ ഇത് ഉപയോഗിക്കാൻ പാടില്ല.
അലേർട്ടുകളൊന്നും ട്രിഗർ ചെയ്തിട്ടില്ല. ഒന്നും പരാജയപ്പെടുന്നില്ല. പരിസ്ഥിതി ഇതിനകം തന്നെ അപകടത്തിലാണ്, നിങ്ങളുടെ pipeline പരീക്ഷണ ഘട്ടത്തിൽ പോലും എത്തുന്നു.
വളരെ വൈകുന്നതിന് മുമ്പ് വ്യത്യാസം കണ്ടെത്തുക
ഒരു സാധാരണ തെറ്റ്: അനുമാനിക്കുന്നത് package.json കഥ മുഴുവൻ പറയുന്നു. അങ്ങനെയല്ല. യഥാർത്ഥ ശക്തി ഇവയുടെ കോമ്പോയിലാണ് പാക്കേജ്.ജെസൺ + പാക്കേജ്-ലോക്ക്.ജെസൺ.
ശ്രദ്ധിക്കേണ്ട കാര്യങ്ങൾ ഇതാ:
- എസ് പാക്കേജ്-lock.json അപ്രതീക്ഷിത പാക്കേജുകൾ ഉൾപ്പെടുമോ?
- ഏതെങ്കിലും ഡിപൻഡൻസികൾ അജ്ഞാത രജിസ്ട്രികളിൽ നിന്ന് ഉത്ഭവിച്ചതാണോ അതോ വിചിത്രമായ സ്കോപ്പുകളുണ്ടോ?
- പതിപ്പ് നമ്പറുകൾ അമിതമായി നിർദ്ദിഷ്ടമാണോ അതോ തെറ്റായി ക്രമീകരിച്ചിട്ടുണ്ടോ?
ഇനിപ്പറയുന്നതുപോലുള്ള CLI ഉപകരണങ്ങൾ ഉപയോഗിക്കുക:
- npm ഓഡിറ്റ് അറിയപ്പെടുന്ന പ്രശ്നങ്ങൾ ഫ്ലാഗ് ചെയ്യാൻ
- എൻപിഎം ഐഎസ്എസ് പൂർണ്ണ ആശ്രിതത്വ വൃക്ഷം കാണുന്നതിന്
- ഡിഫ്എഫ് പതിപ്പുകൾ താരതമ്യം ചെയ്യാൻ package.json ഒപ്പം പാക്കേജ്-lock.json
കഠിനമാക്കുക നിങ്ങളുടെ Pipeline: പ്രവർത്തിക്കുന്ന പ്രതിരോധങ്ങൾ
അക്ഷരത്തെറ്റുകളെ പ്രതിരോധിക്കാൻ:
- സ്കോപ്പ് നിയന്ത്രണങ്ങൾ നടപ്പിലാക്കുക പാക്കേജ്.ജെസൺ.
- പ്രീ-മെർജ് ചേർക്കുക hooks ആശ്രിതത്വങ്ങൾ ലിന്റ് ചെയ്യാനും സാധൂകരിക്കാനും.
- ഉപയോഗം എൻപിഎം സിഐ മനഃപൂർവമല്ലാത്ത പതിപ്പ് ഡ്രിഫ്റ്റ് ഒഴിവാക്കാൻ.
- പതിവായി സ്കാൻ ചെയ്യുക പാക്കേജ്-lock.json അപാകതകൾക്ക്.
ഏറ്റവും പ്രധാനമായി: പരിശോധിക്കാത്ത എൻട്രികൾ കൈകാര്യം ചെയ്യുക പാക്കേജ്-lock.json സാധ്യതയുള്ള അപകടസാധ്യതകളായി. ഓരോന്നും commit ഒരു സപ്ലൈ ചെയിൻ ചെക്ക്പോയിന്റായി കണക്കാക്കണം.
ഓട്ടോമേറ്റഡ് ഡിറ്റക്ഷൻ: സൈജെനി പോലുള്ള ഉപകരണങ്ങൾ എങ്ങനെ സഹായിക്കുന്നു
അത്ര നല്ലതല്ലെങ്കിലും, ഓട്ടോമേറ്റഡ് ഉപകരണങ്ങൾ പോലുള്ളവ സൈജെനി ടൈപ്പോസ്ക്വാട്ടിംഗ് വളരുന്ന മനുഷ്യ പിശക് ഘടകം കുറയ്ക്കുന്നതിൽ നിർണായക പങ്ക് വഹിക്കുന്നു. Xygeni നിങ്ങളുടെ DevOps വർക്ക്ഫ്ലോയിലേക്ക് നേരിട്ട് സംയോജിപ്പിച്ച്, ആശ്രിതത്വ ഹൈജാക്കിംഗിനെതിരെ എക്സിക്യൂഷനിൽ എത്തുന്നതിനുമുമ്പ് ഒരു തത്സമയ പരിരക്ഷ നൽകുന്നു.
Xygeni എങ്ങനെ സഹായിക്കുന്നുവെന്ന് ഇതാ:
- സംശയാസ്പദമായ പാക്കേജ് നാമം കണ്ടെത്തൽ:
ടൈപ്പോസ്ക്വാട്ടിംഗ് പാറ്റേണുകൾ കണ്ടെത്തുന്നതിന് സ്മാർട്ട് ഹ്യൂറിസ്റ്റിക്സ് ഉപയോഗിക്കുന്നു package.json, അറിയപ്പെടുന്ന പാക്കേജ് നാമങ്ങളിൽ (ചേർത്ത അണ്ടർസ്കോറുകൾ, ട്രാൻസ്പോസിഷനുകൾ അല്ലെങ്കിൽ ലെറ്റർ സ്വാപ്പുകൾ പോലുള്ളവ) ചെറിയ വ്യത്യാസങ്ങൾക്കായി തിരയുന്നു. - അജ്ഞാത ഹാഷ് പരിശോധന:
ഓരോ ആശ്രിതത്വത്തിന്റെയും ഹാഷ് താരതമ്യം ചെയ്യുന്നു പാക്കേജ്-lock.json വിശ്വസനീയമായ രജിസ്ട്രികളിൽ നിന്നുള്ള അറിയപ്പെടുന്ന-നല്ല ആർട്ടിഫാക്റ്റുകളുടെ ഒരു ഡാറ്റാബേസിനെതിരെ. ഒരു പാക്കേജ് പേരും പതിപ്പും നന്നായി തോന്നിയാലും, ഒരു ഹാഷ് പൊരുത്തക്കേട് ഒരു ചുവന്ന പതാക ഉയർത്തുന്നു. - നിർമ്മാണത്തിന് മുമ്പ് തടയൽ:
ഇൻസ്റ്റോൾ അല്ലെങ്കിൽ പോസ്റ്റ്ഇൻസ്റ്റോൾ ഘട്ടങ്ങളിൽ എത്തുന്നതിനുമുമ്പ്, സ്ഥിരീകരിക്കാത്തതോ സംശയാസ്പദമായതോ ആയ പാക്കേജുകളുടെ ഇൻസ്റ്റാളേഷൻ തടയുകയും തടയുകയും ചെയ്യുന്നു. CI/CD pipeline. - ആശ്രിതത്വ ഗ്രാഫ് വിശകലനം:
പരോക്ഷമായ ടൈപ്പോസ്ക്വാട്ടിംഗ് ശ്രമങ്ങൾക്കോ ക്ഷുദ്രകരമായ ട്രാൻസിറ്റീവ് ഡിപൻഡൻസികൾക്കോ വേണ്ടി പൂർണ്ണ ഡിപൻഡൻസി ട്രീ തുടർച്ചയായി പരിശോധിക്കുന്നു. - അലേർട്ടുകളും റിപ്പോർട്ടിംഗും:
ആശ്രിതത്വ ശൃംഖലയിൽ എന്താണ് ഫ്ലാഗ് ചെയ്തത്, എന്തുകൊണ്ട്, എവിടെ നിന്നാണ് വന്നതെന്ന് കാണിക്കുന്ന വിശദമായ, പ്രവർത്തനക്ഷമമായ അലേർട്ടുകൾ നൽകുന്നു.
പാക്കേജ് ആവാസവ്യവസ്ഥ കൂടുതൽ സങ്കീർണ്ണമാകുമ്പോൾ, സൈജെനി പോലുള്ള ഉപകരണങ്ങൾ അത്യാവശ്യമായിത്തീരുന്നു. ആശ്രിതത്വ വ്യാപനമോ ദ്രുത ആവർത്തനമോ ഉപയോഗിച്ച് മാനുവൽ അവലോകനം സ്കെയിൽ ചെയ്യുന്നില്ല. ആധുനിക നിർണായക പരിശോധനകൾ ഓട്ടോമേറ്റ് ചെയ്യാൻ സൈജെനി ചുവടുവെക്കുന്നു. pipelineവിശ്വാസത്തിനും സ്ഥിരീകരണത്തിനും ഇടയിലുള്ള വിടവ് നികത്തിക്കൊണ്ട്, ആവശ്യം.
ഒരു കഥാപാത്രം. യഥാർത്ഥ പരിണതഫലങ്ങൾ.
ഇത് ഒരു വിചിത്രവസ്തു ആയിരുന്നില്ല സീറോ-ദിവസം. അതൊരു അക്ഷരത്തെറ്റായിരുന്നു. ഒരു അക്ഷരം തെറ്റായി സ്ഥാനം മാറി package.json, നിശബ്ദമായി ശക്തിപ്പെടുത്തിയത് പാക്കേജ്-lock.json, കൂടാതെ ഒരു ദിനചര്യയ്ക്കിടെ മാൽവെയർ സ്വയമേവ ഷിപ്പ് ചെയ്യപ്പെട്ടു CI/CD റൺ.
അതാണ് ടൈപ്പോസ്ക്വാട്ടിംഗിന്റെ യഥാർത്ഥ അപകടം: ഇതിന് സങ്കീർണ്ണത ആവശ്യമില്ല. വേഗത, വിശ്വാസ്യത, ഓട്ടോമേഷൻ എന്നിവ ഇത് ചൂഷണം ചെയ്യുന്നു. ശരിയായ നിയന്ത്രണങ്ങൾ ഏർപ്പെടുത്തിയിരുന്നെങ്കിൽ ഈ വിട്ടുവീഴ്ച തടയാമായിരുന്നു:
- ഓട്ടോമേറ്റഡ് സ്കാനിംഗ് ഇൻസ്റ്റാൾ ചെയ്യുന്നതിന് മുമ്പ് സംശയാസ്പദമായ പാക്കേജ് നാമങ്ങളും പതിപ്പുകളും കണ്ടെത്തുന്നതിന്.
- ലോക്ക്ഫയൽ ഓഡിറ്റിംഗ് അവലോകനം ചെയ്യാത്തതോ അപ്രതീക്ഷിതമോ ആയ എൻട്രികൾ കണ്ടെത്തുന്നതിന് പാക്കേജ്-lock.json.
- പേര് സ്ഥിരീകരണ ഹ്യൂറിസ്റ്റിക്സ് വിശ്വസനീയ പാക്കേജുകളിലേക്ക് അടുത്ത പൊരുത്തങ്ങൾ ഫ്ലാഗ് ചെയ്യാൻ.
ഒരു കഥാപാത്രം മാത്രമേ വേണ്ടിയിരുന്നുള്ളൂ. ശരിയായ പരിശോധനകൾ അത് നിങ്ങളുടെ കൈയിൽ തൊടുന്നതിനു മുമ്പ് തന്നെ നിർത്തുമായിരുന്നു. pipeline. വിശ്വാസം മാത്രം പോരാ. ആധുനിക DevSecOps-ൽ, നിങ്ങൾ എല്ലാം സ്ഥിരീകരിക്കുന്നു, അല്ലെങ്കിൽ എല്ലാം അപകടത്തിലാക്കുന്നു.







