இந்த வாரம் ஒரு போலி வாடிக்கையாளர் எனது மின்னஞ்சலுக்கு ஒரு தீங்கிழைக்கும் GitHub repository-ஐ அனுப்பினார், அதில் அந்த starter script-ஐ இயக்கியதுடன் எனது இரண்டு நாள் வேலையும் அழிந்து போனதுடன், எனது உலாவியில் (browser) சேமித்து வைத்துள்ள அனைத்து கடவுச்சொற்களும் திருடப்பட்டன.

அந்த "வாடிக்கையாளர்" அதிக ஊதியம் வழங்கும் ஒரு senior-engineer பணியைப் பற்றிப் பதிவிட்டு, விரைவாகத் தொடர்பு கொண்டு, பார்ப்பதற்கு நேர்த்தியாகத் தெரிந்த ஒரு repo-வை அனுப்பினார். அவரது கோரிக்கை எளிமையானது: clone செய்யவும், npm run dev என்பதை இயக்கவும், மற்றும் டெமோ வேலை செய்கிறது என்பதை நிரூபிக்க ஒரு screenshot அனுப்பவும்—எந்த ஒப்பந்தமும் இல்லை, பின்னணிச் சரிபார்ப்பும் இல்லை. dev server தொடங்கிய அடுத்த கணமே, ஒரு configuration file-இல் மறைந்திருந்த குறியீடு (code), ஒரு command-and-control (C2) server-ஐத் தொடர்பு கொண்டு, இரண்டாவது கட்ட payload-ஐப் பெற்று, உள்ளூர் கணினியிலிருந்து (local machine) கடவுச்சொற்களைத் திருடத் தொடங்கியது.

தாக்குதல் எவ்வாறு நடந்தது

அந்தத் தீங்கிழைக்கும் payload postcss.config.js என்ற கோப்பில் இருந்தது. பெரும்பாலான டெவலப்பர்கள் இந்த கோப்பைத் தூக்கிப் பார்க்காமல் கடந்துவிடுவார்கள், ஏனெனில் இதில் வழக்கமாகச் சில எளிய CSS processing விதிகள் மட்டுமே இருக்கும். இந்தச் சூழலில், தாக்குதல் நடத்தியவர் ஒரு முறையான வரியின் வலதுபுறம் வெகு தொலைவில், இடைவெளிகளுடன் (spaces) மறைத்து வைக்கப்பட்ட ஒரு obfuscated JavaScript வரியைச் சேர்த்திருந்தார். npm run dev கட்டளை PostCSS pipeline-ஐ இயக்கியபோது, அந்த மறைக்கப்பட்ட வரி கவனிக்கப்படாமலேயே இயங்கியது.

அந்த malware மூன்று படிகளைத் தொடர்ச்சியாகச் செய்தது:

  • C2 contact – இது தாக்குதல் நடத்தியவர் கட்டுப்படுத்தும் ஒரு server-க்கு நெட்வொர்க் இணைப்பைத் தொடங்கி, பாதிக்கப்பட்ட கணினியை (host) அறிவித்தது.
  • Second-stage download – தரவுகளைத் திருடுவதற்கான (data-exfiltration) உண்மையான தர்க்கத்தைக் (logic) கொண்ட கூடுதல் குறியீட்டை இது பதிவிறக்கியது.
  • Browser credential theft – macOS-இல், இது system keychain-இல் சேமிக்கப்பட்டுள்ள Chrome Safe Storage key-ஐக் கேட்டது. பயனர் keychain அனுமதி வழங்கினால், Chrome-இல் சேமிக்கப்பட்ட அனைத்து கடவுச்சொற்களையும் தாக்குதல் நடத்தியவர் திருடினார்.

உடனடித் திருட்டிற்கு அப்பால், அந்த payload VS Code, npm, Discord போன்ற பல பொதுவான டெவலப்பர் கருவிகளிலேயே தன்னைத் தானே எழுதிக் கொண்டது—இதனால் அந்தப் பயன்பாடுகளைத் தொடரும் போதெல்லாம் அந்தத் தீங்கிழைக்கும் குறியீடு மீண்டும் உயிர்பெறும். ஒரு சாதாரண reboot மூலம் இந்தத் தொற்றை நீக்க முடியாது; அடுத்த முறை npm install செய்யும்போதோ அல்லது editor-ஐத் திறக்கும்போதோ அந்த backdoor மீண்டும் செயல்படும்.

பெரும்பாலும் கவனிக்கப்படாமல் போகும் எச்சரிக்கை அறிகுறிகள் (Red flags)

  • எந்த ஒப்பந்தமும் கையெழுத்தாகும் முன் குறியீட்டை இயக்கக் கோருதல். முறையான வேலைவாய்ப்புச் செயல்முறைகளில், அறிவுசார் சொத்து சார்ந்த (proprietary) வேலைகளைப் பகிர்வதற்கு முன் ஒரு முறையான ஒப்பந்தம் இருக்கும்.
  • “project briefs” போலத் தோற்றமளிக்கும் சுருக்கப்பட்ட கோப்புகள் (Compressed files). Zip அல்லது RAR கோப்புகளுக்குள் இயங்கக்கூடிய ஸ்கிரிப்ட்கள் அல்லது தீங்கிழைக்கும் பைனரிகள் (binaries) மறைக்கப்பட்டிருக்கலாம்.
  • “platform filters-ஐத் தவிர்க்க” தனிப்பட்ட மின்னஞ்சல் முகவரிகளைக் கோருதல். இது முறைகேடுகளைப் புகாரளிக்கக்கூடிய பாதுகாக்கப்பட்ட தளத்திலிருந்து உரையாடலை வெளியே கொண்டு செல்லும் ஒரு தந்திரமாகும்.
  • வேட்பாளர் ஒரு crypto wallet-க்கு நிதி வழங்க வேண்டும் அல்லது test tokens வாங்க வேண்டும் என்று கேட்கும் வேலை விவரங்கள். இத்தகைய கோரிக்கைகள் உண்மையான டெவலப்மென்ட் பணிகளுக்கு வழக்கத்திற்கு மாறானவை.

பாதுகாப்பாக இருக்க நடைமுறைப் படிகள்

  1. ஆய்வு செய்யாமல் ஒரு அந்நியரின் குறியீட்டை ஒருபோதும் இயக்காதீர்கள். repository-ஐ read-only முறையில் (உதாரணமாக, GitHub-இல் உள்ள raw file view மூலம்) திறந்து, ஒவ்வொரு ஸ்கிரிப்ட்டையும், குறிப்பாக configuration files மற்றும் package.json scripts உள்ளீடுகளைச் சோதிக்கவும்.
  2. அனைத்து இணைப்புகளையும் (attachments) சாதாரண உரையாகவே (plain text) கருதுங்கள். ஒரு zip கோப்பு அனுப்பப்பட்டால், அதை ஒரு sandboxed environment-இல் பிரித்தெடுத்து (extract), எதையும் திறப்பதற்கு முன் அதன் உள்ளடக்கங்களைச் சோதிக்கவும்.
  3. உலாவியின் சேமிப்பிற்குப் பதிலாக ஒரு பிரத்யேக password manager-ஐப் பயன்படுத்துங்கள். உலாவியின் keychain திருடப்பட்டாலும், manager-இன் vault தனிமைப்படுத்தப்பட்டே இருக்கும்.
  4. நம்பகத்தன்மையற்ற குறியீட்டை நெட்வொர்க் அணுகல் இல்லாத ஒரு தனிமைப்படுத்தப்பட்ட virtual machine அல்லது container-இல் இயக்கவும். இது தாக்குதல் நடத்தியவர் C2 server-ஐத் தொடர்பு கொள்வதைத் தடுக்கும்.
  5. அனைத்து கணக்குகளிலும் இரண்டு காரணி அங்கீகாரத்தை (2FA) செயல்படுத்தவும். கடவுச்சொல் திருடப்பட்டால், இரண்டாவது காரணி அங்கீகரிக்கப்படாத உள்நுழைவுகளைத் தடுக்கும்.
  6. டெவலப்பர் கருவிகளைப் புதுப்பித்து வைத்திருக்கவும், எங்கெல்லாம் சாத்தியமோ அங்கெல்லாம் தானியங்கி ஒருமைப்பாட்டுச் சோதனைகளை (automatic integrity checks) செயல்படுத்தவும். சில editors இப்போது முக்கிய கோப்புகள் எதிர்பாராத விதமாக மாற்றப்படும்போது எச்சரிக்கை செய்கின்றன.

நீங்கள் தீங்கிழைக்கும் குறியீட்டை இயக்கிவிட்டதாகச் சந்தேகித்தால், உங்கள் கணினி ஊடுருவப்பட்டதாகக் கருதுங்கள். முக்கியமான தரவுகளைப் பேக்அப் (back up) எடுத்துவிட்டு, டிரைவை அழித்துவிட்டு (wipe), இயங்குதளத்தை (operating system) மீண்டும் நிறுவவும். பொதுவான செயலிகளில் கோப்புகளை மீண்டும் எழுதும் ஒரு persistence mechanism-ஐ ஒரு சாதாரண reboot மூலம் நீக்க முடியாது.

சுருக்கமாகச் சொன்னால்: ஒரு மறைக்கப்பட்ட JavaScript வரி, ஒரு சாதாரண டெமோவை முழுமையான கடவுச்சொல் திருட்டு நடவடிக்கையாக மாற்றக்கூடும். நீங்கள் சரிபார்க்கும் வரை ஒவ்வொரு repository-யையும் நம்பகமற்றதாகவே கருதுங்கள், மேலும் தனிமைப்படுத்துதலை (isolation) உங்கள் பணிப்பாய்வின் (workflow) இயல்பான பகுதியாக மாற்றிக்கொள்ளுங்கள். ஒரு நிமிடம் அவசரமாகச் செயல்படுவதால் ஏற்படும் இழப்பு, ஒரு கோப்பை இருமுறை சரிபார்க்க எடுக்கும் முயற்சியை விடப் பல மடங்கு அதிகமாக இருக்கும்.