ഒരു ആധുനിക ജാവാസ്ക്രിപ്റ്റ് പ്രോജക്ടിന് ആയിരത്തിലധികം ആശ്രിതത്വങ്ങളുണ്ട്, അവയിൽ മിക്കതും പരോക്ഷമാണ്. പൈത്തൺ, ഗോ, റസ്റ്റ്, ജാവ പ്രോജക്ടുകൾക്കും പിന്നിലല്ല. ഓരോ പാക്കേജും നിങ്ങള് കണ്ടിട്ടില്ലാത്ത ഒരാളുടെ കോഡാണ്, നിങ്ങളുടെ ലാപ്ടോപ്പിലും നിങ്ങളുടെ രഹസ്യാന്വേഷണത്തിലുമുള്ള നിങ്ങളുടെ രഹസ്യങ്ങളിലേക്ക് പ്രവേശനമുള്ള നിങ്ങളുടെ ഐ. സി. യിലും പ്രവർത്തിക്കുന്നു.
വർഷങ്ങളോളം ആ വിശ്വാസം മിക്കവാറും പ്രവർത്തിച്ചു. അടുത്തിടെ, ആക്രമണകാരികൾ അത് എത്രത്തോളം ദുർബലമാണെന്ന് കാണിച്ചു.
സമീപകാല ആക്രമണങ്ങൾ
എല്ലാ സംഭവങ്ങളെയും കുറിച്ച് പറയാതെ, കഴിഞ്ഞ രണ്ടു വർഷത്തെ പ്രവണത വ്യക്തമാണ്:
- പരിപാലകരുടെ അക്കൌണ്ടുകൾ കവർന്നു. സെപ്റ്റംബറിൽ, ആക്രമണകാരികൾ വളരെ പ്രശസ്തമായ npm പാക്കേജുകളുടെ പരിപാലകരെ ഫിഷിംഗ് ചെയ്തു, ആഴ്ചയിൽ കോടിക്കണക്കിന് തവണ ഡൌൺലോഡ് ചെയ്ത ലൈബ്രറികളുടെ ക്ഷുദ്രകരമായ പതിപ്പുകൾ പ്രസിദ്ധീകരിച്ചു. ഉപയോക്താക്കളിൽ നിന്നും ക്രിപ്റ്റോകറൻസി മോഷ്ടിക്കാനാണ് കോഡ് ശ്രമിച്ചത്.
- സ്വയം വ്യാപിക്കുന്ന പുഴുക്കൾ. 2025 ൽ, ഒരു പുഴുവിന് ഷൈ ഹുലുദ് npm വഴി പ്രചരിച്ചു: ഒരിക്കൽ ഇൻസ്റ്റാൾ ചെയ്തുകഴിഞ്ഞാൽ, അത് ഡെവലപ്പറുടെ മെഷീനിൽ നിന്നോ CI യിൽ നിന്നോ ടോക്കണുകൾ മോഷ്ടിക്കുകയും ആ വ്യക്തി പരിപാലിക്കുന്ന മറ്റ് പാക്കേജുകളുടെ രോഗബാധിത പതിപ്പുകൾ പ്രസിദ്ധീകരിക്കാൻ അവ ഉപയോഗിക്കുകയും ചെയ്തു. നൂറുകണക്കിന് പാക്കേജുകൾക്ക് ആഘാതം ഉണ്ടായി.
- കെട്ടിട നിർമാണ ഉപകരണങ്ങള് ക്ക് കേടുപാടുകള് പറ്റിയിട്ടുണ്ട്. ആക്രമണകാരികൾ രഹസ്യങ്ങൾക്കായി ഡവലപ്പർമാരുടെ മെഷീനുകൾ തിരഞ്ഞു, അവ കണ്ടെത്താൻ സഹായിക്കുന്നതിന് പ്രാദേശികമായി ഇൻസ്റ്റാൾ ചെയ്ത AI കമാൻഡ് ലൈൻ ടൂളുകൾ പോലും ഉപയോഗിച്ചു.
- ടൈപ്പ് ക്വാട്ടിങ്ങും സ്ലാപ്പ് ക്വാറ്റിംഗും. പേരിന് ഒരു അക്ഷരം മാത്രം അകലെയുള്ള പാക്കേജുകൾ, അല്ലെങ്കിൽ ഐ. ഐ. അസിസ്റ്റന്റുമാർ കണ്ടുപിടിക്കുന്ന പേരുകൾ.
- നീണ്ട കളി ആക്രമണങ്ങൾ എക്സ്. സി. യൂട്ടിലിസിന്റെ പിൻവാതിൽ പോലെ, ഒരു ആക്രമണകാരിക്ക് വർഷങ്ങളോളം ഒരു പരിപാലകന്റെ വിശ്വാസം നേടാനായി.
ഇവയ്ക്ക് പൊതുവായുള്ള ഒരു കാര്യം ഇവ നിങ്ങളുടെ കോഡിലെ ഒരു ബഗ് ഉപയോഗിക്കാറില്ല എന്നതാണ് നിങ്ങളുടെ ആശ്രിതരെ വിശ്വസിക്കുന്നതിനെ അവർ ചൂഷണം ചെയ്യുന്നു.
ഒരു പാക്കേജ് ഇൻസ്റ്റാൾ ചെയ്യുന്നത് നിങ്ങളുടെ ക്രെഡൻഷ്യലുകളുമായി അപരിചിതരുടെ കോഡ് പ്രവർത്തിപ്പിക്കുന്നതാണ്. നമ്മൾ അതിനെക്കുറിച്ച് ആ രീതിയിൽ ചിന്തിക്കുന്നത് നിർത്തി.
ലോക്ക് ഫയലുകളും സ്വകാര്യ രജിസ്റ്ററുകളും
അടിസ്ഥാനകാര്യങ്ങളാണ് പ്രധാനം:
- ലോക്ക് ഫയലുകൾ സമർപ്പിക്കുക (
package-lock.json, pnpm-lock.yaml, poetry.lock, uv.lock, go.sum) അവരുമായി കർശനമായി ഇൻസ്റ്റാൾ ചെയ്യുക: npm ci പകരം npm install ഐ. സി. യിൽ. അങ്ങനെ, ഒരു പുതിയ ക്ഷുദ്രവസ്തുവിന് ബിൽഡ് ചെയ്യുമ്പോള് കടത്തിവിടാന് കഴിയില്ല.
- ഒരു സ്വകാര്യ രജിസ്ട്രി അല്ലെങ്കിൽ പ്രോക്സി ഉപയോഗിക്കുക (ആർട്ടിഫാക്ടറി, നെക്സസ്, ഗിറ്റ്ഹബ് പാക്കേജുകൾ, എഡബ്ല്യുഎസ് കോഡ്ആർട്ടി ഫാക്ട്, ഗൂഗിൾ ആർട്ടിഫാക്ട് രജിസ്ട്രി) അംഗീകൃത പാക്കേജുകൾ കാഷെ ചെയ്യുന്നു, അറിയപ്പെടുന്ന മോശം പാക്കേജ് ബ്ലോക്ക് ചെയ്യാം, ഒപ്പം വരുന്നവയെ നിയന്ത്രിക്കാൻ ഒരൊറ്റ സ്ഥലം നിങ്ങൾക്ക് നൽകുന്നു.
- പരിധി ആന്തരിക പാക്കേജുകൾ (പോലുള്ളവ)
@acme/...) നിങ്ങളുടെ പാക്കേജ് മാനേജർ ക്രമീകരിക്കുക അങ്ങനെ ആന്തരിക പേരുകൾ നിങ്ങളുടെ രജിസ്ട്രിയിൽ നിന്ന് മാത്രമേ വരൂ. അത് തടയുന്നു ആശ്രിതത്വം, ഒരു ആക്രമണകാരി നിങ്ങളുടെ ആന്തരിക പാക്കേജിന്റെ അതേ പേരിലുള്ള ഒരു പൊതു പാക്കേജ് പ്രസിദ്ധീകരിക്കുന്നു.
പുതിയ പതിപ്പുകൾ ഇൻസ്റ്റോൾ ചെയ്യുന്നതിനു മുമ്പ് കാത്തിരിക്കുക
മിക്ക ക്ഷുദ്ര പാക്കേജുകളും മണിക്കൂറുകൾക്കുള്ളിൽ അല്ലെങ്കിൽ ദിവസങ്ങൾക്കുള്ളിൽ കണ്ടെത്തി നീക്കംചെയ്യുന്നു. അതുകൊണ്ട് ലളിതവും ശക്തവുമായ പ്രതിരോധം: പുതിയ പതിപ്പുകൾ ഉടനെ ഇൻസ്റ്റാൾ ചെയ്യരുത്.
- നവീകരിക്കുക
minimumReleaseAge ഒരു അപ്ഡേറ്റ് നിർദ്ദേശിക്കുന്നതിന് മുമ്പ് ഒരു ക്രമീകരിക്കാവുന്ന സമയം (ഉദാഹരണത്തിന് മൂന്നു ദിവസം) കാത്തിരിക്കുന്നു.
- പിഎൻപിഎം കുറഞ്ഞ റിലീസ് പ്രായം സജ്ജമാക്കുന്നതിനെ പിന്തുണയ്ക്കുന്നു, അതിനാൽ അത് ഈ പരിധിക്ക് താഴെയുള്ള പതിപ്പുകളെ പരിഹരിക്കില്ല.
- ചില രജിസ്ട്രികളും പ്രോക്സികളും സമാനമായ ക്വാറന്റീൻ കാലയളവുകളെ പിന്തുണയ്ക്കുന്നു.
പുതിയ ഫീച്ചറുകളില് കുറച്ച് ദിവസം നഷ്ടപ്പെടും. മിക്ക "പ്രസിദ്ധീകരിക്കുക, പ്രതീക്ഷിക്കുക" ആക്രമണങ്ങളോടും നിങ്ങൾക്ക് സംരക്ഷണം ലഭിക്കും.
ഇൻസ്റ്റോൾ സ്ക്രിപ്റ്റുകൾക്ക് ചെയ്യാൻ കഴിയുന്ന പരിമിതി
പല ആക്രമണങ്ങളും ഇൻസ്റ്റലേഷന് സമയത്ത്, postinstall തിരക്കഥകൾ.
- സ്ഥിരസ്ഥിതിയായി ഇൻസ്റ്റോൾ സ്ക്രിപ്റ്റുകൾ പ്രവർത്തനരഹിതമാക്കുക സാധ്യമായിടത്തോളം (
npm config set ignore-scripts true, dependency build scripts- യ്ക്കുള്ള pnpm- ന്റെ കൂടുതൽ കർശനമായ സ്ഥിരസ്ഥിതികൾ) അവയെ യഥാർത്ഥത്തിൽ ആവശ്യമുള്ള പാക്കേജുകൾക്ക് മാത്രം അനുവദിക്കുക.
- ഒറ്റപ്പെട്ടതും അപ്രത്യക്ഷവുമായ അന്തരീക്ഷങ്ങളില് റൺ കെട്ടിടങ്ങള്: ഒരു പുതിയ കണ്ടെയ്നർ അല്ലെങ്കിൽ ഐ. സി. റണ്ണർ ഓരോ ജോലിക്കും, ദീർഘകാലാടിസ്ഥാനത്തിലുള്ള യോഗ്യതാ രേഖകളില്ലാതെ.
- നെറ്റ്വർക്ക് പുറത്തുകടക്കൽ പരിമിതപ്പെടുത്തുക കഴിയുന്നിടത്തെല്ലാം വിവരമറിയിച്ചാൽ മതി. ഒരു ബിൽഡിന് ഒരു അജ്ഞാത സെർവറിലേക്ക് എത്താൻ കഴിയില്ല. നിങ്ങളുടെ രഹസ്യങ്ങൾ അവിടെ അയയ്ക്കാൻ കഴിയില്ല.
- ഡെവലപ്പർ മെഷീനുകളിൽ ഒരിക്കലും ടോക്കണുകൾ പ്രസിദ്ധീകരിക്കരുത് അത് ഒഴിവാക്കാൻ പറ്റുമെങ്കിൽ. ഉപയോഗം വിശ്വസനീയമായ പ്രസിദ്ധീകരണം CI-യിൽ നിന്നും (npm-ഉം PyPI-യും ഒഐഡിസി അടിസ്ഥാനമാക്കിയുള്ള പ്രസിദ്ധീകരണത്തെ പിന്തുണയ്ക്കുന്നു), ഒപ്പം പരിപാലകർക്കായി 2FA ആവശ്യപ്പെടുന്നു.
എന്നെ മുന്നറിയിപ്പ് നൽകുന്ന ഉപകരണങ്ങൾ
- സോക്കറ്റ്: സംശയകരമായ പെരുമാറ്റത്തിനായി പാക്കേജുകൾ വിശകലനം ചെയ്യുന്നു (ഇൻസ്റ്റാൾ സ്ക്രിപ്റ്റുകൾ, നെറ്റ്വർക്ക് ആക്സസ്, മറച്ച കോഡ്, പുതിയ പരിപാലകർ), അറിയപ്പെടുന്ന ദുർബലതകൾ മാത്രമല്ല.
- ഒ. എസ്. വി സ്കാനർ, ട്രിവി, ഗ്രിപ്പ്, npm ഓഡിറ്റ്: അറിയപ്പെടുന്ന ദുർബലതകളും അറിയപ്പെടുന്ന ക്ഷുദ്ര പാക്കേജുകളും.
- ഓപ്പൺ എസ് എസ് എഫ് സ്കോർകാർഡ്: ഒരു പ്രോജക്ട് നിങ്ങൾ സ്വീകരിക്കുന്നതിനു മുമ്പ് സുരക്ഷാ രീതികൾ എത്രത്തോളം പാലിക്കുന്നുവെന്ന് വിലയിരുത്തുന്നു.
- ഗിറ്റ്ഹബ് ആശ്രിതത്വ അവലോകനം പുതിയ ആശ്രയത്വങ്ങളും അവയുടെ അപകടസാധ്യതകളും കണ്ടെത്താന് ശ്രമിക്കുക.
ഒരു ഉപകരണം അല്ലാത്തതും: പുതിയ ആശ്രിതത്വങ്ങളെ ചോദ്യം ചെയ്യുക. ഈ പ്രോജക്ടിന് ശരിക്കും ഒരു സ്ട്രിംഗ് ഇടത് പാഡുചെയ്യാനുള്ള ഒരു പാക്കേജ് ആവശ്യമുണ്ടോ? നിങ്ങള് കൂട്ടിച്ചേര് ക്കാത്ത ഓരോ ആശ്രയവും നിങ്ങള് ക്ക് വിഷമിക്കേണ്ട കാര്യമല്ല.
നിങ്ങള് ക്ക് രോഗം ബാധിച്ചിട്ടുണ്ടെങ്കില്
ഒരു അപഹരിച്ച പാക്കേജ് നിങ്ങളുടെ സ്റ്റാക്കിൽ എത്തുമ്പോൾ:
- അത് എവിടെയാണ് ഇൻസ്റ്റോൾ ചെയ്തിരിക്കുന്നതെന്ന് കണ്ടെത്തുക (SBOM- കളും ലോക്ക് ഫയലുകളും ഇത് വേഗത്തിലാക്കുന്നു).
- ഇൻസ്റ്റലേഷന് സമയത്ത് ലഭ്യമായ രഹസ്യങ്ങള് അപഹരിക്കപ്പെട്ടതായി കരുതുക: അവയെ തിരിക്കുക..
- ദോഷകരമായ പെരുമാറ്റത്തിന്റെ ലക്ഷണങ്ങളുണ്ടോ എന്ന് ഐ. സി. ലോഗുകളും മെഷീനുകളും പരിശോധിക്കുക.
- ഒരു നല്ല പതിപ്പിലേക്ക് അറ്റാച്ചുചെയ്ത് പുനർനിർമ്മിക്കുക.
എവിടെ നിന്നാണ് ഞാൻ തുടങ്ങേണ്ടത്?
CI യില് കർശനമായ ലോക്ക് ഫയല് ഇൻസ്റ്റാളേഷന് , അപ്ഡേറ്റുകള് ക്ക് കുറഞ്ഞ റിലീസ് പ്രായം, ഒരു സ്വകാര്യ പ്രോക്സി രജിസ്ട്രി, ദീർഘകാലം ജീവിക്കുന്ന പ്രസിദ്ധീകരണ ടോക്കണുകളില്ല. ഈ നാലു നടപടികള് അടുത്തിടെയുണ്ടായ മിക്ക ആക്രമണങ്ങളെയും തടയുമായിരുന്നു.
എന്റെ അഭിപ്രായം: ആശ്രിതത്വം എന്നത് ഓപ്പൺ സോഴ്സ് ലോകത്തിന്റെ ഒരു സമ്മാനമാണ്. നന്ദിയോടെ സ്വീകരിക്കുക, പക്ഷേ ഉല്പാദനത്തിനായി തുറക്കുന്നതിനു മുമ്പ് ഉള്ളത് പരിശോധിക്കുക.
ഡെസ്ലി