ఈ వారం ఒక నకిలీ క్లయింట్ నా ఇన్బాక్స్లోకి ఒక హానికరమైన GitHub రిపోజిటరీని పంపాడు, కేవలం ఆ స్టార్టర్ స్క్రిప్ట్ను రన్ చేయడమే నా రెండు రోజుల పనిని తుడిచిపెట్టడమే కాకుండా, నా బ్రౌజర్లో ఉన్న ప్రతి పాస్వర్డ్ను బహిర్గతం చేసింది.
ఆ "క్లయింట్" అధిక వేతనం ఇచ్చే సీనియర్-ఇంజనీర్ ఉద్యోగం కోసం పోస్ట్ చేసి, వేగంగా మెసేజ్ చేస్తూ, చూడటానికి చాలా ప్రొఫెషనల్గా అనిపించే ఒక రిపోజిటరీని పంపాడు. వారి అభ్యర్థన చాలా సరళంగా ఉంది: క్లోన్ చేయండి, npm run dev రన్ చేయండి, మరియు డెమో పనిచేస్తుందని నిరూపించడానికి ఒక స్క్రీన్షాట్ పంపండి—ఎటువంటి కాంట్రాక్ట్ లేదు, బ్యాక్గ్రౌండ్ చెక్ లేదు. డెవ్ సర్వర్ ప్రారంభమైన వెంటనే, ఒక కాన్ఫిగరేషన్ ఫైల్లో ఉన్న దాగి ఉన్న కోడ్, కమాండ్-అండ్-కంట్రోల్ (C2) సర్వర్ను సంప్రదించి, సెకండ్-స్టేజ్ పేలోడ్ను పొంది, లోకల్ మెషీన్ నుండి క్రెడెన్షియల్స్ను దొంగిలించడం ప్రారంభించింది.
దాడి ఎలా జరిగింది
ఆ హానికరమైన పేలోడ్ postcss.config.js ఫైల్లో ఉంది. సాధారణంగా ఈ ఫైల్లో కొన్ని సాధారణ CSS ప్రాసెసింగ్ రూల్స్ మాత్రమే ఉంటాయి కాబట్టి చాలా మంది డెవలపర్లు దీనిని పట్టించుకోరు. ఈ సందర్భంలో, దాడి చేసిన వ్యక్తి ఒక అసలైన స్టేట్మెంట్ కు చాలా దూరంగా, కుడి వైపున స్పేస్లతో కలిపి ఒక అస్పష్టమైన (obfuscated) JavaScript లైన్ను చేర్చాడు, తద్వారా అది ఎవరికీ అనుమానం రాకుండా కలిసిపోయింది. npm run dev కమాండ్ PostCSS పైప్లైన్ను అమలు చేసినప్పుడు, ఆ దాగి ఉన్న లైన్ ఎవరికీ తెలియకుండానే రన్ అయింది.
ఆ మాల్వేర్ వేగంగా మూడు దశలను అనుసరించింది:
- C2 contact – ఇది దాడి చేసిన వ్యక్తి నియంత్రణలో ఉన్న సర్వర్కు నెట్వర్క్ కనెక్షన్ను తెరిచి, ప్రభావితమైన హోస్ట్ను తెలియజేసింది.
- Second-stage download – ఇది అసలైన డేటా-ఎక్స్ఫిల్ట్రేషన్ (data-exfiltration) లాజిక్ను కలిగి ఉన్న అదనపు కోడ్ను డౌన్లోడ్ చేసుకుంది.
- Browser credential theft – macOSలో, ఇది సిస్టమ్ కీచైన్లో నిక్షిప్తమై ఉన్న Chrome Safe Storage కీని అడిగి తెలుసుకుంది. ఒకవేళ యూజర్ కీచైన్ ప్రాంప్ట్ను అనుమతిస్తే, దాడి చేసిన వ్యక్తి Chromeలో సేవ్ చేయబడిన ప్రతి పాస్వర్డ్ను దొంగిలించాడు.
కేవలం డేటా దొంగతనం మాత్రమే కాకుండా, ఆ పేలోడ్ VS Code, npm, Discord వంటి సాధారణ డెవలపర్ టూల్స్లోకి తనను తాను రాసుకుంది, తద్వారా ఆ అప్లికేషన్లను భవిష్యత్తులో ఎప్పుడు ఓపెన్ చేసినా ఆ హానికరమైన కోడ్ మళ్ళీ రన్ అవుతుంది. కేవలం రీబూట్ చేయడం వల్ల ఇన్ఫెక్షన్ పోలేదు; తదుపరి npm install లేదా ఎడిటర్ను ఓపెన్ చేసినప్పుడు ఆ బ్యాక్డోర్ మళ్ళీ యాక్టివేట్ అయింది.
తరచుగా గమనించని ప్రమాద సంకేతాలు (Red flags)
- ఎటువంటి కాంట్రాక్ట్ సంతకం చేయకముందే కోడ్ను రన్ చేయమని అడగడం. సరైన నియామక ప్రక్రియలో, ఏదైనా ప్రాప్రైటరీ పనిని పంచుకునే ముందు సాధారణంగా అధికారిక ఒప్పందం ఉంటుంది.
- “project briefs” పేరుతో పంపే కంప్రెస్డ్ ఫైల్స్. Zip లేదా RAR ఆర్కైవ్లలో ఎగ్జిక్యూటబుల్ స్క్రిప్ట్లు లేదా హానికరమైన బైనరీలను దాచవచ్చు.
- “ప్లాట్ఫారమ్ ఫిల్టర్లను దాటవేయడానికి” వ్యక్తిగత ఈమెయిల్ అడ్రస్లను అడగడం. దుర్వినియోగాన్ని నివేదించగల సురక్షితమైన ప్లాట్ఫారమ్ నుండి సంభాషణను బయటకు తీసుకురావడానికి ఈ పద్ధతిని ఉపయోగిస్తారు.
- క్యాండిడేట్ క్రిప్టో వాలెట్కు నిధులు సమకూర్చాలని లేదా టెస్ట్ టోకెన్లను కొనుగోలు చేయాలని కోరే జాబ్ డిస్క్రిప్షన్లు. ఇటువంటి డిమాండ్లు నిజమైన డెవలప్మెంట్ పనులకు సంబంధం లేనివి.
సురక్షితంగా ఉండటానికి ఆచరణాత్మక దశలు
- పరిశీలించకుండా ఎప్పుడూ తెలియని వ్యక్తి యొక్క కోడ్ను రన్ చేయవద్దు. రిపోజిటరీని రీడ్-ఓన్లీ వ్యూలో (ఉదాహరణకు, GitHubలో raw file view ద్వారా) ఓపెన్ చేసి, ప్రతి స్క్రిప్ట్ను, ముఖ్యంగా కాన్ఫిగరేషన్ ఫైల్స్ మరియు
package.jsonscriptsఎంట్రీలను స్కాన్ చేయండి. - అన్ని అటాచ్మెంట్లను ప్లెయిన్ టెక్స్ట్గా పరిగణించండి. ఒకవేళ జిప్ ఫైల్ పంపబడితే, దానిని ఒక సాండ్బాక్స్డ్ ఎన్విరాన్మెంట్లో (sandboxed environment) ఎక్స్ట్రాక్ట్ చేసి, దేనినీ ఓపెన్ చేసే ముందు దానిలోని కంటెంట్ను పరిశీలించండి.
- బ్రౌజర్ స్టోరేజ్ బదులు ప్రత్యేకమైన పాస్వర్డ్ మేనేజర్ను ఉపయోగించండి. బ్రౌజర్ కీచైన్ హ్యాక్ అయినప్పటికీ, మేనేజర్ వాల్ట్ (vault) సురక్షితంగా ఉంటుంది.
- నెట్వర్క్ యాక్సెస్ లేని ఐసోలేటెడ్ వర్చువల్ మెషీన్ లేదా కంటైనర్లో నమ్మకం లేని కోడ్ను రన్ చేయండి. ఇది దాడి చేసిన వ్యక్తి C2 సర్వర్ను చేరుకోకుండా అడ్డుకుంటుంది.
- అన్ని ఖాతాలపై టూ-ఫ్యాక్టర్ అథెంటికేషన్ (2FA)ను ఎనేబుల్ చేయండి. ఒకవేళ పాస్వర్డ్ దొంగిలించబడినా, సెకండ్ ఫ్యాక్టర్ అనధికారిక లాగిన్లను అడ్డుకుంటుంది.
- డెవలపర్ టూల్స్ను ఎప్పటికప్పుడు అప్డేట్గా ఉంచుకోండి మరియు వీలైన చోట ఆటోమేటిక్ ఇంటిగ్రిటీ చెక్లను ఎనేబుల్ చేయండి. కొన్ని ఎడిటర్లు కోర్ ఫైల్స్ అకస్మాత్తుగా మార్చబడినప్పుడు హెచ్చరిస్తాయి.
మీరు హానికరమైన కోడ్ను రన్ చేశారని అనుమానిస్తే, మీ సిస్టమ్ హ్యాక్ అయిందని భావించండి. ముఖ్యమైన డేటాను బ్యాకప్ తీసుకోండి, డ్రైవ్ను వైప్ చేసి, ఆపరేటింగ్ సిస్టమ్ను మళ్ళీ ఇన్స్టాల్ చేయండి. సాధారణ యాప్లలో ఫైల్లను మళ్ళీ రాసే పర్సిస్టెన్స్ మెకానిజం (persistence mechanism)ను కేవలం రీబూట్ చేయడం ద్వారా తొలగించలేరు.
ముగింపు: ఒకే ఒక్క దాగి ఉన్న JavaScript లైన్ సాధారణ డెమోను పూర్తి స్థాయి క్రెడెన్షియల్ దొంగతనం ఆపరేషన్గా మార్చగలదు. మీరు వెరిఫై చేసే వరకు ప్రతి రిపోజిటరీని నమ్మకూడదని భావించండి మరియు ఐసోలేషన్ను మీ వర్క్ఫ్లోలో ఒక భాగంగా మార్చుకోండి. ఒక ఫైల్ను రెండుసార్లు తనిఖీ చేయడానికి పెట్టే శ్రమ కంటే, తొందరపాటు వల్ల కలిగే నష్టం చాలా ఎక్కువ.
