ফ্যান্টমসিঙ্ক: এনপিএম ক্রিপ্টো প্যাকেজ ওয়ালেট স্টিলারকে আড়াল করে

ফ্যান্টমসিঙ্ক: ক্রিপ্টো-ডেভেলপারদের জন্য আটটি এনপিএম প্যাকেজ একটি বিলম্বিত, স্ব-স্থায়ী ড্রপারকে গোপন করে।

সুচিপত্র

অবশ্যই পঠনীয় পোস্ট

TL; ডিআর

একজন এনপিএম পাবলিশার আটটি ছোট প্যাকেজ প্রকাশ করেছেন, যেগুলোর নামগুলো ব্লকচেইন এবং ওয়ালেট তৈরির দৈনন্দিন বিল্ডিং ব্লকের মতো শোনায়। base58-utils, abi-encode, eth-dev, arb-kit, layer2-sdk, solana-key-utils, eth-wallet-helpers, এবং crypto-validate-libপ্রত্যেকটিতেই একটি কার্যকরী ইউটিলিটি রয়েছে। তবে, সেই ইউটিলিটির পরে একটি স্ব-আহ্বানকারী কোড ব্লক যুক্ত করা থাকে, যা মডিউলটি ইম্পোর্ট করার মুহূর্তেই রান করে।

আমদানির প্রায় ৩৭ সেকেন্ড পরেঐ ব্লকটি প্যাকেজের ভেতরে একটি টেস্ট ফিক্সচার হিসেবে ছদ্মবেশে থাকা পেলোডকে ডিকোড করে, সেটিকে ব্যবহারকারীর হোম ডিরেক্টরির অধীনে একটি লুকানো ফাইলে লেখে এবং প্রতিবার রিস্টার্ট হওয়ার জন্য নিজেকে রেজিস্টার করে। login উইন্ডোজ, ম্যাকওএস এবং লিনাক্স জুড়ে, এটি ডিকোড করা স্ক্রিপ্টটিকে একটি স্বতন্ত্র প্রসেস হিসেবে চালু করে। npm install চলাকালীন এর কোনো কিছুই চালু হয় না; এটি কোড ইম্পোর্ট এবং রান হওয়ার জন্য অপেক্ষা করে, যা ইনস্টলেশনের চেয়ে একটি শান্ত মুহূর্ত।

পেলোডটি অস্বচ্ছ নয়। এটি সাধারণ বেস৬৪ ফরম্যাটে পাঠানো হয়, তাই "টেস্ট ফিক্সচার" ডিকোড করলে দ্বিতীয় পর্যায়টি সম্পূর্ণরূপে পুনরুদ্ধার করা যায়: একটি ক্রিপ্টো-ওয়ালেট এবং গোপনীয়তা চোর যেটি মেশিনটি নিষ্ক্রিয় থাকার জন্য অপেক্ষা করে, প্রাইভেট কী এবং সিড ফ্রেজ সংগ্রহ করে, প্রতিটি প্রাপ্ত তথ্যকে একটি হার্ডকোডেড RSA-4096 কী দিয়ে এনক্রিপ্ট করে, এবং পাবলিক IPFS স্টোরেজে পিন করে তা পাচার করে, এবং প্রতি ১২ ঘণ্টা পর পর বিকনিং করে ফেরত পাঠায়।

আমরা ক্লাস্টারটিকে ট্র্যাক করি যেমন ফ্যান্টমসিঙ্কবিশ্লেষণের সময় আটটি প্যাকেজই এনপিএম রেজিস্ট্রি-তে সক্রিয় ছিল এবং একটিমাত্র অ্যাকাউন্টের অধীনে প্রকাশিত হয়েছিল।

ইকোসিস্টেমnpm
প্যাকেজbase58-utils, abi-encode, eth-dev, arb-kit, layer2-sdk, solana-key-utils, eth-wallet-helpers, crypto-validate-lib
লক্ষ্য করা প্ল্যাটফর্মগুলিউইন্ডোজ, ম্যাকোস, লিনাক্স
মূল আচরণবিলম্বিত, ইম্পোর্ট-টাইম ড্রপারটি একটি টেস্ট ফিক্সচার হিসেবে লুকানো থাকে; এটি ক্রস-প্ল্যাটফর্ম পার্সিস্টেন্স ইনস্টল করে।
পেলোডক্রিপ্টো-ওয়ালেট ও ​​গোপন তথ্য চোর, RSA-4096 এনক্রিপশন, পাবলিক IPFS পিনিংয়ের মাধ্যমে তথ্য পাচার

শারীরস্থান আক্রমণ করুন

প্রথম নজরে প্রতিটি প্যাকেজকে সাধারণ মনে হয়। বেস৫৮-ইউটিলসউদাহরণস্বরূপ, এটি কয়েক কিলোবাইটের একটি নির্ভরতাহীন Base58 / Bitcoin-WIF সহায়ক কোড — নামটি যেমনটা প্রতিশ্রুতি দেয় ঠিক তেমনই। প্রাসঙ্গিক কোডটি রয়েছে পরে মডিউলটির মডিউল.এক্সপোর্টসযেখানে ফাইলের উপরিভাগ দ্রুত চোখ বুলানো কোনো পাঠকের চোখে পড়ার সম্ভাবনা কম: একটি স্বয়ংক্রিয় ফাংশন যা একটি টাইমারের সাহায্যে নিজেকেই সময়সূচিবদ্ধ করে।

প্যাকেজ সোর্স থেকে পুনর্গঠিত অপারেশনগুলোর ক্রমটি নিম্নরূপ:

1. Package is required() by the host project
2. A self-invoking function schedules a callback ~37,000 ms later (setTimeout)
3. On fire, the callback reads test/fixtures/keypairs.dat (a base64 blob)
4. It base64-decodes that blob into a Node.js script
5. It writes the script to ~/.cache-db/.node-sync/syncd.js (mode 0o700)
6. It installs login-persistence for that script (see below)
7. It spawns "node syncd.js" as a detached process

দুটি নকশার পছন্দ বিশেষভাবে চোখে পড়ে।

পেলোডটি একটি পরীক্ষামূলক সরঞ্জাম হিসেবে ভ্রমণ করে। দ্বিতীয় পর্যায়টি সুস্পষ্ট কোড হিসেবে লেখা হয় না। এটি থাকে test/fixtures/keypairs.datএটি একটি বেস৬৪ ফাইল, যার নামটি এমন একটি প্যাকেজের সাথে মিশে যায় যা কী-পেয়ার পরিচালনা করার দাবি করে। কোনো মানুষ টারবলটি দ্রুত চোখ বুলালে এটিকে নমুনা ডেটা বলে মনে হবে; কিন্তু এর সাথে যুক্ত কোডের কাছে এটি ডিকোড ও রান করার জন্য একটি স্ক্রিপ্ট। ড্রপারটিতে নিজে কোনো নেটওয়ার্ক অ্যাড্রেস নেই — সেগুলো দ্বিতীয় ধাপে থাকে — তবে এখানে অতিরিক্ত কোনো দুর্বোধ্যতা নেই: ফিক্সচারটি বেস৬৪-এর একটি একক স্তর, তাই এটি ডিকোড করা (base64 -d) সম্পূর্ণ পুনরুদ্ধার করে syncd.js এবং এর নেটওয়ার্ক আচরণ। পরবর্তী বিভাগে আলোচনা করা হয়েছে যে পুনরুদ্ধারকৃত পর্যায়টি কী করে।

বিস্ফোরণ বিলম্বিত হয় এবং এটি ইনস্টলের সাথে নয়, বরং ইম্পোর্টের সাথে যুক্ত। কারণ ট্রিগারটি হলো প্রয়োজন() ইনস্টল হুকের পরিবর্তে প্রায় ৩৭-সেকেন্ডের একটি টাইমার যুক্ত করার ফলে, এই আচরণটি সেইসব চেককে এড়িয়ে যায় যেগুলো শুধুমাত্র পর্যবেক্ষণ করে। npm ইনস্টল করুন এই ধাপে, বিলম্বটি অনেক স্বল্পস্থায়ী স্যান্ডবক্স এবং সিআই রানের চেয়েও দীর্ঘস্থায়ী হয়। কোনো কিছু কার্যকর হওয়ার আগেই, যে ইনস্টল প্রক্রিয়াটি প্যাকেজটি নিয়ে এসেছিল, তা অনেক আগেই শেষ হয়ে যায়।

ডিকোড করা স্ক্রিপ্টটি ডিস্কে একবার থাকলে ~/.cache-db/.node-sync/syncd.js — একটি পথ যা সাধারণ ক্যাশ ডিরেক্টরির মতো পড়ার জন্য বেছে নেওয়া হয়েছে — ড্রপারটি এটিকে তিনটি প্রধান প্ল্যাটফর্মেই রিবুটের পরেও টিকে থাকতে সাহায্য করে:

  • লিনাক্স: একটি ক্রন এন্ট্রি যা স্ক্রিপ্টটি পুনরায় চালু করে। বিদ্যমান ক্রনট্যাবকে ফিল্টার করার মাধ্যমে এন্ট্রিটি ইনস্টল করা হয়। grep -v syncdযার একটি পার্শ্বপ্রতিক্রিয়া হলো, যখন কোনো সাধারণ তালিকা থেকে একই নামের জন্য গ্রেপ করা হয়, তখন নতুন এন্ট্রিটি বাদ পড়ে যায়।
  • উইন্ডোজ: একটি নির্ধারিত কাজ যার নাম উইননোডসিঙ্ক, যা ১২ মিনিটের বিরতিতে পুনরায় চলার জন্য সেট করা হয়েছে।
  • ম্যাক অপারেটিং সিস্টেম: একটি লঞ্চড জব লেবেলযুক্ত com.apple.syncdবেশ কয়েকটি প্যাকেজে উপস্থিত — একটি লেবেল যা অ্যাপলের একটি বৈধ সিস্টেম পরিষেবার অনুকরণ করে।

এরপর স্ক্রিপ্টটি অবিলম্বে একটি বিচ্ছিন্ন প্রসেস হিসেবে চালু হয়, ফলে ইম্পোর্টিং প্রোগ্রামটি বন্ধ হয়ে যাওয়ার পরেও এটি চলতে থাকে।

দ্বিতীয় পর্যায় যা করে

যেহেতু ফিক্সচারটি একটি একক বেস৬৪ লেয়ার, তাই দ্বিতীয় পর্যায়টি পরিষ্কারভাবে ডিকোড হয় এবং সম্পূর্ণরূপে পড়া যায়। আটটি প্যাকেজের প্রতিটিতে একই স্ক্রিপ্টের তিনটি রূপের মধ্যে একটি থাকে, যা একটি হেডার কমেন্টে নিজেকে এভাবে চিহ্নিত করে: ফ্যান্টম সিঙ্ক v3 — টপো ডুরমিন্টে (“সুপ্ত গুপ্তচর”)। এর কাজ হলো ক্রিপ্টোকারেন্সি-ওয়ালেটের উপাদান ও ডেভেলপারদের গোপনীয় তথ্য চুরি করে মেশিন থেকে বাইরে পাঠিয়ে দেওয়া। এটি নিম্নলিখিত ধাপে কাজ করে:

  • 1. মেশিনটি নিষ্ক্রিয় হওয়া পর্যন্ত অপেক্ষা করুন। কিছু করার আগে, syncd.js ব্যবহারকারী কতক্ষণ ধরে নিষ্ক্রিয় আছেন তা যাচাই করে এবং একটি নির্দিষ্ট সীমা (প্রায় ১৫ মিনিট) অতিক্রম করার পরেই কেবল অগ্রসর হয়। এক্সপ্রিন্টআইডল লিনাক্সে, আইওরেগ macOS-এ HIDIdleTime এবং Windows-এ PowerShell-এর একটি আইডল-টাইম কোয়েরি। তাই, ডেটা সংগ্রহের কাজটি সাধারণত তখনই ঘটে যখন কিবোর্ডে কেউ থাকে না।
  • ২. একটি রিমোট-নিয়ন্ত্রিত অ্যাক্টিভেশন সুইচ নিয়ে আসুন।স্ক্রিপ্টটি কাজ শুরু করার আগে একটি ডেড-ড্রপ থেকে অল্প কিছু কনফিগারেশন ফাইল সংগ্রহ করে। এর প্রধান উৎস হলো একটি গিটহাব জিস্ট র' ইউআরএল (gist.githubusercontent.com/juang55/…/cfg.txtস্ক্রিপ্টটি কেবল তখনই সক্রিয় হয় যদি সেই কনফিগারেশনটি পড়ে সক্রিয়=১যদি মূল বিষয়বস্তু (gist) অনুপলব্ধ থাকে, তবে এটি পাবলিক গেটওয়ের মাধ্যমে সংগৃহীত তিনটি হার্ডকোডেড IPFS কন্টেন্ট আইডেন্টিফায়ার ব্যবহার করে। gateway.pinata.cloud, ipfs.io, এবং cloudflare-ipfs.comএটি অপারেটরকে ঘটনার পরবর্তী সময়ে অস্ত্র সক্রিয় বা নিষ্ক্রিয় করার নিয়ন্ত্রণ এবং আক্রমণ-প্রতিরোধী একটি বিকল্প ব্যবস্থা প্রদান করে। (সবচেয়ে ছোট সংস্করণটি, যা পাঠানো হয় ক্রিপ্টো-ভ্যালিডেট-লিব, ইথ-ওয়ালেট-হেল্পার, এবং সোলানা-কী-ইউটিলস(এর থেকে গিস্ট লেয়ারটি সরিয়ে দেওয়া হয়েছে এবং এটি শুধুমাত্র আইপিএফএস আইডেন্টিফায়ারগুলোর ওপর নির্ভর করে।)
  • ৩. ওয়ালেটের উপাদান ও গোপন তথ্য সংগ্রহ করুন। স্ক্রিপ্টটি ব্যবহারকারীর হোম ডিরেক্টরিতে প্রবেশ করে — ~/.config/solana, ~/.ethereum/keystore, ~/.ফাউন্ড্রি, ~/.হার্ডহ্যাট, ~ / .ssh, এবং ডেস্কটপ/কাগজপত্র/ডাউনলোড (স্প্যানিশ ভাষার ফোল্ডারের নাম সহ), এছাড়াও ~/.env এবং শেল আরসি ফাইল, এবং এর সমতুল্য অ্যাপ্লিকেশন তথ্য উইন্ডোজের অবস্থানগুলিতে। এটি ইথেরিয়াম প্রাইভেট কী, বিটকয়েন WIF কী, BIP-39 সিড ফ্রেজ, সোলানা কীপেয়ার, ইথেরিয়াম কীস্টোর JSON, SSH কী এবং গোপনীয় তথ্য বহনকারী এনভায়রনমেন্ট ভেরিয়েবলকে টার্গেট করে। এর বৃহত্তর সংস্করণটি (ইন উইন্ডোজ) abi-encode, বেস৫৮-ইউটিলস, ইথ-ডেভ) সম্পূর্ণ ২০৪৮-শব্দের BIP-39 অভিধান বহন করে এবং রেগুলার এক্সপ্রেশন ব্যবহার করে নির্যাস এটি যে কোনো টেক্সট থেকে স্বতন্ত্র কী এবং যাচাইকৃত সীড ফ্রেজ শনাক্ত করে; এর পরিবর্তে দুটি ছোট সংস্করণ কীওয়ার্ড দ্বারা ফাইল ম্যাচ করে (বীজ, স্মৃতিচারণ, মানিব্যাগ, metamask, ভূত, খতিয়ান, trezor, …) এবং সম্পূর্ণ ফাইলগুলো আপলোড করুন।
  • ৪. একটি পাবলিক পিনিং সার্ভিসের মাধ্যমে এনক্রিপ্ট করে পাচার করুন। প্রতিটি ফাইন্ডিং একটি হোস্ট ফিঙ্গারপ্রিন্টের সাথে বান্ডিল করা থাকে (ব্যবহারকারীর নাম@হোস্টনেমপ্ল্যাটফর্ম, টাইমস্ট্যাম্প) এবং স্ক্রিপ্টে এমবেড করা একটি হার্ডকোডেড RSA-4096 পাবলিক কী দিয়ে এনক্রিপ্ট করা হয়। এরপর এনক্রিপ্ট করা রেকর্ডটি IPFS-এ পিন করার মাধ্যমে আপলোড করা হয়। api.pinata.cloud/pinning/pinJSONToIPFSহার্ডকোডেড পিনাটা এপিআই ক্রেডেনশিয়াল দিয়ে প্রমাণীকৃত। বাজেয়াপ্ত করার জন্য কোনো বিশেষ সি২ সার্ভার নেই: চুরি করা ডেটা পাবলিক বিকেন্দ্রীভূত স্টোরেজে রাখা হয়, যা অপারেটর প্রাপ্ত কন্টেন্ট হ্যাশ ব্যবহার করে পুনরুদ্ধার করতে পারে। আপলোডগুলোর মধ্যে কয়েক সেকেন্ডের র‍্যান্ডম জিটার থাকে এবং একটি স্থানীয় লগ তৈরি হয়। টাইমস্ট্যাম্প | কী-টাইপ | ফেরত-হ্যাশ রাখা হয় ~/.cache-db/.node-sync/.sl.
  • ৫. ১২-ঘণ্টার চক্রে অবিচল থাকুন এবং সংকেত প্রেরণ করুন। দ্বিতীয় পর্যায়টি এর নিজস্ব স্থায়িত্ব পুনঃপ্রতিষ্ঠা করে — লিনাক্সে একটি ক্রন এন্ট্রি, একটি com.apple.syncd macOS-এ launchd জব, এবং একটি নির্ধারিত টাস্ক যার নাম উইন্ডোজনোডসিঙ্ক উইন্ডোজে — প্রতি ১২ ঘণ্টা পর পর পুনরায় চালানোর জন্য সেট করা আছে। উল্লেখ্য, এটি একটি বিভিন্ন ড্রপার দ্বারা ইনস্টল করা উইন্ডোজ টাস্কের নাম (উইননোডসিঙ্কউভয়ই খুঁজে বের করার মতো।

Timeline

আটটি প্যাকেজ ২০২৬-০৭-১৩ এবং ২০২৬-০৭-১৪ তারিখে অল্প সময়ের ব্যবধানে প্রকাশ করা হয়েছিল। এগুলোর মধ্যে কয়েকটির একাধিক সংস্করণ রয়েছে; ড্রপারটি সব সংস্করণেই অভিন্ন, কেবল এর উপরের নিরীহ ইউটিলিটি কোডের আকার পরিবর্তনের সাথে সাথে লাইন অফসেটগুলো স্থানান্তরিত হয়।

তারিখঘটনা
2026-07-13ক্লাস্টারের প্রথম প্যাকেজগুলি একটি প্রকাশকের অধীনে প্রদর্শিত হয় (solana-key-utils, eth-wallet-helpers, crypto-validate-lib এবং বাকিগুলোর প্রাথমিক সংস্করণ)
2026-07-13 → 07-14বাকি নাম এবং পরবর্তী সংস্করণগুলো প্রকাশিত হয়েছে; প্রতিটিতে একই সংযুক্ত ড্রপার পাঠানো হয়।
2026-07-14আটটিই চিহ্নিত ও বিশ্লেষণ করা হয়েছে; প্রতিটি প্যাকেজ এখনও রেজিস্ট্রি থেকে ইনস্টলযোগ্য।

এই আকস্মিক আক্রমণের সময়, শনাক্তকরণ জমা হওয়ার সাথে সাথে প্রকাশকের রেজিস্ট্রি খ্যাতি ক্লাস্টারের শুরুতে মোটামুটি নিরপেক্ষ অবস্থা থেকে তীব্রভাবে নেতিবাচক হয়ে ওঠে — এটি প্যাকেজগুলোকে ফ্ল্যাগ করার একটি পর্যবেক্ষণযোগ্য পার্শ্বপ্রতিক্রিয়া, কোনো পরিকল্পিত বৈশিষ্ট্য নয়।

সমঝোতার সূচক

বিশ্লেষণের সময় নীচের সমস্ত সূচকের উপস্থিতি নিশ্চিত করা হয়েছিল — যেগুলো ডিকোডিংয়ের মাধ্যমে “দ্বিতীয়-পর্যায়ের” সারণিতে রয়েছে। test/fixtures/keypairs.dat এবং পুনরুদ্ধারকৃতদের পড়া syncd.js.

ফাইল এবং পাথ

ইনডিকেটরভূমিকা
~/.cache-db/.node-sync/syncd.jsদ্বিতীয় পর্যায় ডিকোড করা হয়েছে, 0o700 মোডে লেখা হয়েছে।
~/.cache-db/.node-sync/.slস্থানীয় বহির্গমন লগ (টাইমস্ট্যাম্প | কী-টাইপ | আইপিএফএস হ্যাশ)
test/fixtures/keypairs.datটারবলের ভিতরে একটি 'টেস্ট ফিক্সচার' হিসেবে Base64-এনকোডেড পেলোড স্টেজ করা হয়েছে।

দ্বিতীয় পর্যায়ের নেটওয়ার্ক অবকাঠামো (syncd.js থেকে পুনরুদ্ধার করা)

ইনডিকেটরভূমিকা
gist.githubusercontent.com/juang55/b298754cb72942b1cdcf02ccd45cde2f/raw/cfg.txtঅ্যাক্টিভেশন ডেড-ড্রপ; স্ক্রিপ্টটি কেবল তখনই চলে যদি কনফিগারেশনটি রিড করে। active=1
Qmcqz3w8j4qFQXDAXAxnrdc2oSX3nzBT4NqtpTqL8mr1gaIPFS কনফিগারেশন ফলব্যাক (CID)
QmdTXoqVmTHY1i4ZWLdLkoQ9YChp5TXPh5cWXwnAYZt5iFIPFS কনফিগারেশন ফলব্যাক (CID)
QmfJkLU5gdCpqbbqEjWYC2anXW9FmuEeSLLeLiHVJKYUjpIPFS কনফিগারেশন ফলব্যাক (CID)
gateway.pinata.cloud, ipfs.io, cloudflare-ipfs.comকনফিগারেশন ফলব্যাক আনার জন্য ব্যবহৃত আইপিএফএস গেটওয়ে
api.pinata.cloud/pinning/pinJSONToIPFSডেটা পাচারের শেষবিন্দু, চুরি করা ডেটা পাবলিক আইপিএফএস-এ পিন করা হয়েছে
পিনাটা এপিআই কী13c766575b9270a9825dহার্ডকোডেড বহির্গমন প্রমাণপত্র

দ্বিতীয় পর্যায়ের সংগ্রহের লক্ষ্যমাত্রা (syncd.js থেকে পুনরুদ্ধার করা)

ইনডিকেটরভূমিকা
~/.config/solana, ~/.ethereum/keystore, ~/.foundry, ~/.hardhat, ~/.ssh, ~/.envশেল আরসি ফাইলকী এবং সিক্রেট খোঁজার জন্য ডিরেক্টরি/ফাইলগুলো অনুসন্ধান করা হয়েছে
AppData\Roaming\Solana, AppData\Local\ethereum\keystoreউইন্ডোজ সমতুল্য অনুসন্ধান করা হয়েছে
সংগৃহীত প্রত্নবস্তুর প্রকারভেদETH প্রাইভেট কী, বিটকয়েন WIF, BIP-39 সীড ফ্রেজ, সোলানা কীপেয়ার, ইথেরিয়াম কীস্টোর JSON, SSH কী, গোপন এনভায়রনমেন্ট ভেরিয়েবল

স্থায়িত্ব নিদর্শন

প্ল্যাটফর্মইনডিকেটর
লিনাক্সক্রন এন্ট্রি চালু করা syncd.jsক্রনট্যাবের মাধ্যমে ইনস্টল করা এবং ফিল্টার করা হয়েছে grep -v syncd
উইন্ডোজনির্ধারিত কাজ WinNodeSync (ড্রপার) এবং WindowsNodeSync (দ্বিতীয় পর্যায়)
MacOSলঞ্চড লেবেল com.apple.syncd
সবদ্বিতীয় পর্যায়টি ১২-ঘণ্টার চক্রে পুনরায় শুরু হয়।

ব্যবহারিক

  • স্ব-আহ্বানকারী ফাংশন পরে যুক্ত করা হয়েছে মডিউল.এক্সপোর্টসএকটি সময়সূচী নির্ধারণ করা সেট টাইমআউট আমদানিতে প্রায় ৩৭,০০০ মিলিসেকেন্ড সময় লাগে।
  • শিশু_প্রক্রিয়া স্পন("নোড", ) বিচ্ছিন্ন বিকল্পটি সেট করা থাকলে।
  • দ্বিতীয় পর্যায়ে নিষ্ক্রিয়-গেটেড সক্রিয়করণ (এক্সপ্রিন্টআইডল / আইওরেগ HIDIdleTime / PowerShell নিষ্ক্রিয় থাকার সময়; ~১৫ মিনিটের সীমা)।
  • প্রথমে RSA-4096 এনক্রিপশন, তারপর HTTPS পোস্ট একটি পাবলিক আইপিএফএস পিনিং এপিআই-তে।

প্যাকেজ এবং সংস্করণ (npm, publisher solbuilder_io)

প্যাকেজসংস্করণ
base58-utils1.0.0, 1.0.1, 1.0.3
abi-encode1.0.0, 1.0.1, 1.0.2
eth-dev1.0.0, 1.0.1, 1.0.2
arb-kit1.0.0, 1.0.1
layer2-sdk1.0.0, 1.0.1
solana-key-utils1.0.0
eth-wallet-helpers1.0.0
crypto-validate-lib1.0.0

প্রকাশক

  • সোলবিল্ডার_আইও - angel_lopez89[@]proton[.]meইমেল যাচাই করা হয়নি, কোনো যাচাইকৃত সোর্স-কন্ট্রোল অ্যাকাউন্ট নেই, কোনো লিঙ্ক করা রিপোজিটরি নেই।

আরোপণ এবং পর্যবেক্ষণকৃত আচরণ

আটটি প্যাকেজ একটিই পাবলিশার অ্যাকাউন্ট এবং একটিই পেলোড শেয়ার করে। প্রতিটিই একটি সাধারণ প্যাকেজ — কয়েক কিলোবাইটের আসল ইউটিলিটি কোড, যার সাথে একই ড্রপার যুক্ত করা হয়েছে — যা কোনো লিঙ্ক করা রিপোজিটরি ছাড়াই এবং একটি যাচাইবিহীন ডিসপোজেবল-স্টাইলের ইমেলের অধীনে প্রকাশিত। এই অভিন্নতা, শেয়ার করা ড্রপ পাথ, শেয়ার করা পার্সিস্টেন্স লেবেল, এবং শেয়ার করা keypairs.dat স্টেজিং ফাইলগুলোই ক্লাস্টারকে একত্রিত করে রাখে।

প্যাকেজগুলো নিজেদের আচরণ সম্পর্কে অস্বাভাবিকভাবে অকপট। সোলানা-কী-ইউটিলস এতে ইনলাইন মন্তব্য রয়েছে যা সংযুক্ত ব্লকটিকে সহজ ভাষায় বর্ণনা করে — একটিতে একে লেবেল করা হয়েছে ফ্যান্টম: অদৃশ্য স্থায়িত্ব, অন্য একটিতে (স্প্যানিশ ভাষায়) লেখা আছে Ejecutar topo en background, “ব্যাকগ্রাউন্ডে মোলটি চালাও।” কোডটি কী করে, এগুলো তারই নিজস্ব ব্যাখ্যা; এই পোস্টের ক্যাম্পেইনের নামটি প্রথম লেবেলটি এবং “সিঙ্ক ডেমন” নামক নকল নোডটি থেকে নেওয়া হয়েছে (সিঙ্কডযেটিকে পারসিস্টেন্স মেকানিজম অনুকরণ করে।

আমরা কেবল কোডটি দৃশ্যত যা করে, তাই বর্ণনা করি। প্যাকেজগুলোর নামকরণ—যার সবগুলোই ক্রিপ্টো, ওয়ালেট এবং ব্লকচেইন-টুলিং সম্পর্কিত পরিভাষা—সেই ডেভেলপারদের ইঙ্গিত দেয় যারা সম্ভবত নাম দেখেই এগুলো ব্যবহার করবে; কিন্তু এটি নিজে থেকে প্রকাশক কে, তা প্রতিষ্ঠা করে না। বেস৬৪ ফিক্সচারটি ডিকোড করার মাধ্যমে দ্বিতীয় পর্যায়টি সম্পূর্ণরূপে পুনরুদ্ধারযোগ্য ছিল, এবং এর আচরণ উপরে বর্ণিত হয়েছে: এটি ওয়ালেট কী, সিড ফ্রেজ এবং সিক্রেট সংগ্রহ করে এবং পিনাটার মাধ্যমে সেগুলোকে আরএসএ-এনক্রিপ্ট করে পাবলিক আইপিএফএস স্টোরেজে পাচার করে। একটি উল্লেখযোগ্য ডিজাইনগত সিদ্ধান্ত হলো কোনো প্রাইভেট সি২ সার্ভারের অনুপস্থিতি—কনফিগারেশন আসে একটি গিটহাব জিস্ট এবং আইপিএফএস থেকে, এবং চুরি করা ডেটা কন্টেন্ট হ্যাশ দ্বারা কী করা পাবলিক বিকেন্দ্রীভূত স্টোরেজে রাখা হয়, যার উভয়ই একজন আক্রমণকারীর দ্বারা নিয়ন্ত্রিত একটি হোস্টের চেয়ে দখল করা কঠিন। এই প্রতিবেদন লেখার সময় পর্যন্ত এই ক্লাস্টারের সাথে মেলে এমন কোনো পূর্ববর্তী পাবলিক রিপোর্টিং খুঁজে পাওয়া যায়নি।

ডিফেন্ডারদের জন্য প্রভাব, প্রবণতা এবং নির্দেশিকা

কে উন্মোচিত হয়। যে কেউ একটি নোড প্রজেক্টে এই প্যাকেজগুলোর একটি যোগ করে এবং তারপরে এটি ইম্পোর্ট করে এমন কোড চালায়। যেহেতু ডিটোনেশন ইনস্টল-টাইমের পরিবর্তে ইম্পোর্ট-টাইমে ঘটে, তাই শুধুমাত্র প্যাকেজটি উপস্থিত থাকাই যথেষ্ট নয় — বরং মডিউলটি লোড করে এমন যেকোনো সাধারণ ব্যবহারই পেলোড পর্যন্ত পৌঁছে যায়। এই প্রলোভনমূলক নামগুলো ইথেরিয়াম, সোলানা, আর্বিট্রাম, লেয়ার-২, এবং সাধারণ ওয়ালেট/এনকোডিং টুলিং-এর উপর ভিত্তি করে কাজ করা ডেভেলপারদের লক্ষ্য করে — এই জনগোষ্ঠীর কাছেই দ্বিতীয় পর্যায়ের কাঙ্ক্ষিত অ্যাসেটগুলো থাকার সম্ভাবনা সবচেয়ে বেশি। যে কেউ ওয়ালেট কী, সিড ফ্রেজ, কীস্টোর, এসএসএইচ কী, বা অন্য কোনো রিসোর্স ধারণকারী মেশিনে এই মডিউলগুলোর একটি চালালেও এটি ঘটতে পারে। .env গোপনীয়তা রক্ষাকারী বিভাগকে ওই ক্রেডেনশিয়ালগুলোকে আপোসকৃত হিসেবে বিবেচনা করে সেগুলোর স্থান পরিবর্তন করা উচিত।

দুটি অভ্যাস যা আত্মস্থ করার যোগ্য। প্রথমত, পেলোড-অ্যাজ-ফিক্সচার: দ্বিতীয় পর্যায়টিকে একটি বিশ্বাসযোগ্য নামের ডেটা ফাইলের ভিতরে base64 হিসেবে পাঠানো (test/fixtures/keypairs.datপ্যাকেজের দৃশ্যমান উৎসকে পরিষ্কার দেখায় এবং ক্ষতিকারক বিষয়বস্তুকে এমন একটি ফাইলে ঠেলে দেয়, যেটিকে পর্যালোচনা সরঞ্জাম এবং মানুষের দ্রুত পর্যবেক্ষণ প্রায়শই নিষ্ক্রিয় ডেটা হিসাবে গণ্য করে। দ্বিতীয়ত, ক্রস-প্ল্যাটফর্ম স্থায়িত্ব সহ আমদানি-সময় বিলম্বিত নির্বাহইনস্টল হুক থেকে ট্রিগারটি সরিয়ে, একটি টাইমার যোগ করে এবং তারপর ক্রন, শিডিউলড টাস্ক ও লঞ্চডি জুড়ে এটিকে স্থায়ী রাখা হলো সেইসব কোলাহলপূর্ণ ইনস্টল-স্ক্রিপ্ট কৌশল থেকে সচেতনভাবে সরে আসার একটি পদক্ষেপ, যেগুলোকে স্বয়ংক্রিয় রেজিস্ট্রি স্ক্যানিং সবচেয়ে নিবিড়ভাবে পর্যবেক্ষণ করে।

রক্ষক ও রক্ষণাবেক্ষণকারীদের জন্য নির্দেশিকা:

  • সংযুক্ত কোডের পরে বিবেচনা করুন মডিউল.এক্সপোর্টস পর্যালোচনার অগ্রাধিকার হিসাবে — ড্রপার লজিক প্রায়শই "আসল" মডিউলের আড়ালে লুকিয়ে থাকে।
  • ডেটা ফাইলগুলি নিষ্ক্রিয় বলে ধরে নেবেন না। একটি base64 ব্লব এর অধীনে পরীক্ষা/ফিক্সচার/ যা রানটাইমে পঠিত এবং ডিকোড করা হয় তা এক্সিকিউটেবল-সংলগ্ন; ফিক্সচার ফাইলগুলির রানটাইম রিডকে ফ্ল্যাগ করুন যা একটিতে ফিড করে ক্রিয়া/স্পষ্ট/লিখুন-তারপর-স্প্যান শৃঙ্খল।
  • ড্রপ পাথটি খুঁজুন ~/.cache-db/.node-sync/ এবং স্থায়িত্ব ইউনিটগুলির জন্য উইননোডসিঙ্ক (নির্ধারিত কাজ) এবং com.apple.syncd ডেভেলপার মেশিনগুলিতে (launchd) এই নামগুলি টেনে এনেছে।
  • যেসব নোড প্রসেস cron এন্ট্রি, শিডিউলড টাস্ক বা launchd জব তৈরি করে, সেগুলোর ব্যাপারে অ্যালার্ট দিন — বৈধ লাইব্রেরিগুলো ইম্পোর্ট করার সময় খুব কমই এমনটা করে থাকে।
  • লকফাইল এবং পিন করা সংস্করণ ব্যবহার করুন, এবং যেকোনো নতুন ছোট “ইউটিলিটি” ডিপেন্ডেন্সির ডিফারেন্স পর্যালোচনা করুন, বিশেষ করে শূন্য-নির্ভরতা প্যাকেজ প্রকাশিত যাচাইবিহীন অ্যাকাউন্ট দ্বারা, যেগুলোর কোনো সংযুক্ত রিপোজিটরি নেই।

রেজিস্ট্রি ডিফেন্ডারদের জন্য মূল কথা হলো, ইনস্টল-হুক মনিটরিং প্রয়োজনীয় হলেও যথেষ্ট নয়: একটি ডেটা ফাইলের ভেতরে স্টেজ করা ইম্পোর্ট-টাইম ও টাইমার-ডিলেড ড্রপার শুধুমাত্র ইনস্টল-টাইমের চেক পাস করে যাবে, এবং পার্সিস্টেন্স ধাপটিই প্রায়শই ধরার জন্য বাকি থাকা সবচেয়ে জোরালো পর্যবেক্ষণযোগ্য সংকেত হয়ে থাকে।

sca-tools-software-composition-analysis-tools
আপনার সফটওয়্যারের ঝুঁকিগুলোকে অগ্রাধিকার দিন, প্রতিকার করুন এবং সুরক্ষিত করুন।
আপনার বিনামূল্যে অ্যাকাউন্টটি নিন।
কোন ক্রেডিট কার্ড প্রয়োজন নেই

আপনার সফটওয়্যার উন্নয়ন ও বিতরণ সুরক্ষিত করুন

Xygeni প্রোডাক্ট স্যুটের সাথে