ഈ ആഴ്ച ഒരു വ്യാജ ക്ലയന്റ് എന്റെ ഇൻബോക്സിലേക്ക് ഒരു മാലീഷ്യസ് (malicious) GitHub റെപ്പോസിറ്ററി അയച്ചുതന്നു. അതിന്റെ സ്റ്റാർട്ടർ സ്ക്രിപ്റ്റ് റൺ ചെയ്തതുകൊണ്ട് മാത്രം എന്റെ രണ്ടു ദിവസത്തെ ജോലിയും നഷ്ടപ്പെടുകയും ബ്രൗസറിൽ സൂക്ഷിച്ചിരുന്ന എല്ലാ പാസ്‌വേഡുകളും ചോരാൻ ഇടയാകുകയും ചെയ്തു.

ഉയർന്ന ശമ്പളമുള്ള ഒരു സീനിയർ എഞ്ചിനീയർ തസ്തികയ്ക്കായി ഈ "ക്ലയന്റ്" പരസ്യം നൽകി, വേഗത്തിൽ സന്ദേശങ്ങൾ അയച്ചു, വളരെ മികച്ച രീതിയിൽ തയ്യാറാക്കിയ ഒരു റെപ്പോസിറ്ററിയും അയച്ചുതന്നു. അവരുടെ ആവശ്യം ലളിതമായിരുന്നു: റെപ്പോസിറ്ററി ക്ലോൺ ചെയ്യുക, npm run dev റൺ ചെയ്യുക, ഡെമോ പ്രവർത്തിക്കുന്നുണ്ടെന്ന് തെളിയിക്കാൻ ഒരു സ്ക്രീൻഷോട്ട് അയക്കുക—കരാറുകളോ ബാക്ക്ഗ്രൗണ്ട് ചെക്കുകളോ ഒന്നുമില്ലാതെ. ഡെവലപ്‌മെന്റ് സെർവർ ആരംഭിച്ച നിമിഷം തന്നെ, ഒരു കോൺഫിഗറേഷൻ ഫയലിലെ ഒളിഞ്ഞിരിക്കുന്ന കോഡ് ഒരു കമാൻഡ്-ആൻഡ്-കൺട്രോൾ (C2) സെർവറുമായി ബന്ധപ്പെടുകയും, രണ്ടാമത്തെ ഘട്ടത്തിലുള്ള പേലോഡ് (payload) ഡൗൺലോഡ് ചെയ്യുകയും, ലോക്കൽ മെഷീനിൽ നിന്ന് ക്രെഡൻഷ്യലുകൾ ചോർത്താൻ തുടങ്ങുകയും ചെയ്തു.

ആക്രമണം നടന്ന രീതി

മാലീഷ്യസ് പേലോഡ് postcss.config.js എന്ന ഫയലിലായിരുന്നു ഒളിഞ്ഞിരുന്നത്. സാധാരണയായി ലളിതമായ ചില CSS പ്രോസസ്സിംഗ് നിയമങ്ങൾ മാത്രമാണ് ഈ ഫയലിൽ ഉണ്ടാകാറുള്ളത് എന്നതുകൊണ്ട് മിക്ക ഡെവലപ്പർമാരും ഇത് ശ്രദ്ധിക്കാറില്ല. ഈ സാഹചര്യത്തിൽ, അറ്റാക്കർ ഒരു നിയമപരമായ സ്റ്റേറ്റ്‌മെന്റിന് വളരെ വലതുവശത്തായി, സ്പേസുകൾ ഉപയോഗിച്ച് ഒളിപ്പിച്ചു വെച്ച ഒരു ഒബ്ഫസ്കേറ്റഡ് (obfuscated) JavaScript വരി ചേർത്തിരുന്നു. npm run dev കമാൻഡ് ഉപയോഗിച്ച് PostCSS പൈപ്പ്‌ലൈൻ പ്രവർത്തിപ്പിച്ചപ്പോൾ, ഈ ഒളിഞ്ഞിരിക്കുന്ന വരി ആരും ശ്രദ്ധിക്കാതെ പ്രവർത്തിച്ചു.

മാൽവെയർ മൂന്ന് ഘട്ടങ്ങളിലായാണ് വേഗത്തിൽ പ്രവർത്തിച്ചത്:

  • C2 കോൺടാക്റ്റ് – ഇത് അറ്റാക്കർ നിയന്ത്രിക്കുന്ന ഒരു സെർവറുമായി നെറ്റ്‌വർക്ക് കണക്ഷൻ സ്ഥാപിക്കുകയും ബാധിക്കപ്പെട്ട ഹോസ്റ്റിനെ അറിയിക്കുകയും ചെയ്തു.
  • രണ്ടാം ഘട്ട ഡൗൺലോഡ് – യഥാർത്ഥ ഡാറ്റ ചോർത്താനുള്ള ലോജിക് അടങ്ങിയ കൂടുതൽ കോഡുകൾ ഇത് ഡൗൺലോഡ് ചെയ്തു.
  • ബ്രൗസർ ക്രെഡൻഷ്യൽ മോഷണം – macOS-ൽ സിസ്റ്റം കീചെയിനിൽ (keychain) സൂക്ഷിച്ചിരിക്കുന്ന Chrome Safe Storage കീ ഇത് തിരഞ്ഞു. ഉപയോക്താവ് കീചെയിൻ പ്രോംപ്റ്റ് അംഗീകരിച്ചാൽ, Chrome-ൽ സേവ് ചെയ്തിട്ടുള്ള എല്ലാ പാസ്‌വേഡുകളും അറ്റാക്കർ ചോർത്തുന്നു.

വിവരങ്ങൾ ചോർത്തുന്നതിലുപരി, ഈ പേലോഡ് VS Code, npm, Discord തുടങ്ങിയ സാധാരണ ഡെവലപ്പർ ടൂളുകളിലേക്ക് സ്വയം എഴുതിച്ചേർക്കപ്പെട്ടു. അതിനാൽ ഭാവിയിൽ ഈ ആപ്ലിക്കേഷനുകൾ തുറക്കുമ്പോഴെല്ലാം മാലീഷ്യസ് കോഡ് വീണ്ടും സജീവമാകും. വെറുമൊരു റീബൂട്ട് കൊണ്ട് ഈ ഇൻഫെക്ഷൻ മാറില്ല; അടുത്ത തവണ npm install ചെയ്യുമ്പോഴോ എഡിറ്റർ തുറക്കുമ്പോഴോ ബാക്ക്‌ഡോർ വീണ്ടും പ്രവർത്തിക്കും.

പലപ്പോഴും ശ്രദ്ധിക്കപ്പെടാതെ പോകുന്ന അപകട സൂചനകൾ (Red flags)

  • കരാർ ഒപ്പിടുന്നതിന് മുമ്പ് കോഡ് റൺ ചെയ്യാൻ ആവശ്യപ്പെടുന്നത്. സാധാരണയായി ഔദ്യോഗികമായ ഒരു കരാർ ഉണ്ടാക്കിയതിന് ശേഷം മാത്രമേ യഥാർത്ഥ കമ്പനികൾ പ്രോപ്രൈറ്ററി വർക്കുകൾ പങ്കുവെക്കാറുള്ളൂ.
  • "പ്രോജക്റ്റ് ബ്രീഫ്" എന്ന് വ്യാജേന അയക്കുന്ന കംപ്രസ്ഡ് ഫയലുകൾ. Zip അല്ലെങ്കിൽ RAR ഫയലുകളിൽ എക്സിക്യൂട്ടബിൾ സ്ക്രിപ്റ്റുകളോ മാലീഷ്യസ് ബൈനറികളോ ഒളിപ്പിച്ചു വെക്കാൻ സാധിക്കും.
  • "പ്ലാറ്റ്‌ഫോം ഫിൽട്ടറുകൾ ഒഴിവാക്കാൻ" വ്യക്തിഗത ഇമെയിൽ വിലാസങ്ങൾ ചോദിക്കുന്നത്. പ്ലാറ്റ്‌ഫോമിലെ സുരക്ഷാ സംവിധാനങ്ങളിൽ നിന്ന് മാറി സംഭാഷണം കൊണ്ടുപോകാനാണ് ഇത്തരത്തിലുള്ള തന്ത്രങ്ങൾ ഉപയോഗിക്കുന്നത്.
  • ക്രിപ്റ്റോ വാലറ്റിലേക്ക് പണം നിക്ഷേപിക്കാനോ ടെസ്റ്റ് ടോക്കണുകൾ വാങ്ങാനോ ആവശ്യപ്പെടുന്ന ജോബ് ഡിസ്ക്രിപ്ഷനുകൾ. യഥാർത്ഥ ഡെവലപ്‌മെന്റ് ജോലികളിൽ ഇത്തരം ആവശ്യങ്ങൾ ഉണ്ടാകാറില്ല.

സുരക്ഷിതരായിരിക്കാൻ പ്രായോഗികമായ നടപടികൾ

  1. പരിശോധിക്കാതെ അപരിചിതരുടെ കോഡ് ഒരിക്കലും റൺ ചെയ്യരുത്. റെപ്പോസിറ്ററി ഒരു റീഡ്-ഒൺലി വ്യൂവിൽ (ഉദാഹരണത്തിന് GitHub-ലെ raw file view വഴി) തുറന്ന് എല്ലാ സ്ക്രിപ്റ്റുകളും, പ്രത്യേകിച്ച് കോൺഫിഗറേഷൻ ഫയലുകളും package.json-ലെ scripts എൻട്രികളും പരിശോധിക്കുക.
  2. എല്ലാ അറ്റാച്ച്‌മെന്റുകളെയും പ്ലെയിൻ ടെക്സ്റ്റ് ആയി പരിഗണിക്കുക. ഒരു സിപ്പ് (zip) ഫയൽ ലഭിച്ചാൽ, അത് ഒരു സാൻഡ്‌ബോക്സ് എൻവയോൺമെന്റിൽ (sandboxed environment) എക്സ്ട്രാക്റ്റ് ചെയ്ത് ഉള്ളടക്കം പരിശോധിച്ച ശേഷം മാത്രം തുറക്കുക.
  3. ബ്രൗസർ സ്റ്റോറേജിന് പകരം ഒരു ഡെഡിക്കേറ്റഡ് പാസ്‌വേഡ് മാനേജർ ഉപയോഗിക്കുക. ബ്രൗസറിലെ കീചെയിൻ ചോർത്തപ്പെട്ടാൽ പോലും, പാസ്‌വേഡ് മാനേജറിലെ വിവരങ്ങൾ സുരക്ഷിതമായിരിക്കും.
  4. വിശ്വസിക്കാൻ കഴിയാത്ത കോഡുകൾ നെറ്റ്‌വർക്ക് ആക്സസ് ഇല്ലാത്ത ഒരു ഐസൊലേറ്റഡ് വെർച്വൽ മെഷീനിലോ കണ്ടെയ്‌നറിലോ റൺ ചെയ്യുക. ഇത് അറ്റാക്കർക്ക് C2 സെർവറുമായി ബന്ധപ്പെടാനുള്ള ശ്രമം തടയും.
  5. എല്ലാ അക്കൗണ്ടുകളിലും ടു-ഫാക്ടർ ഓതന്റിക്കേഷൻ (2FA) പ്രവർത്തനക്ഷമമാക്കുക. പാസ്‌വേഡ് ചോർത്തപ്പെട്ടാലും, രണ്ടാമത്തെ ഘട്ടം അനധികൃത ലോഗിനുകളെ തടയും.
  6. ഡെവലപ്പർ ടൂളുകൾ എപ്പോഴും അപ്‌ഡേറ്റ് ചെയ്യുക, ലഭ്യമായ ഇടങ്ങളിൽ ഓട്ടോമാറ്റിക് ഇന്റഗ്രിറ്റി ചെക്കുകൾ (integrity checks) പ്രവർത്തനക്ഷമമാക്കുക. കോർ ഫയലുകളിൽ അപ്രതീക്ഷിത മാറ്റങ്ങൾ വരുത്തിയാൽ ചില എഡിറ്ററുകൾ ഇപ്പോൾ മുന്നറിയിപ്പ് നൽകുന്നുണ്ട്.

നിങ്ങൾ മാലീഷ്യസ് കോഡ് റൺ ചെയ്തു എന്ന് സംശയിക്കുന്നുണ്ടെങ്കിൽ, സിസ്റ്റം ഹാക്ക് ചെയ്യപ്പെട്ടതായി കരുതുക. പ്രധാനപ്പെട്ട ഡാറ്റ ബാക്കപ്പ് ചെയ്യുക, ഡ്രൈവ് വൈപ്പ് ചെയ്യുക, ഓപ്പറേറ്റിംഗ് സിസ്റ്റം വീണ്ടും ഇൻസ്റ്റാൾ ചെയ്യുക. സാധാരണ ആപ്പുകളിലെ ഫയലുകൾ വീണ്ടും എഴുതിച്ചേർക്കുന്ന തരത്തിലുള്ള ഒരു പെർസിസ്റ്റൻസ് മെക്കാനിസത്തെ (persistence mechanism) വെറുമൊരു റീബൂട്ട് കൊണ്ട് ഇല്ലാതാക്കാൻ കഴിയില്ല.

ചുരുക്കത്തിൽ: ഒളിഞ്ഞിരിക്കുന്ന ഒരു വരി JavaScript മതി ഒരു സാധാരണ ഡെമോയെ വലിയ തോതിലുള്ള ക്രെഡൻഷ്യൽ മോഷണമാക്കി മാറ്റാൻ. ഒരു റെപ്പോസിറ്ററിയും പരിശോധിക്കുന്നത് വരെ അത് വിശ്വസിക്കരുത്, ഐസൊലേഷൻ (isolation) നിങ്ങളുടെ പ്രവർത്തനരീതിയുടെ ഭാഗമാക്കുക. അശ്രദ്ധമായി പെട്ടെന്ന് പ്രവർത്തിക്കുന്നതിലൂടെ ഉണ്ടാകുന്ന നഷ്ടം, ഒരു ഫയൽ വീണ്ടും പരിശോധിക്കാൻ എടുക്കുന്ന പ്രയത്നത്തേക്കാൾ വളരെ വലുതാണ്.