احتمالا اگه اخبار امنیت سایبری رو دنبال کرده باشید، در جریانید که ،با آغاز سال جدید میلادی، بازیگران تهدید، یسری از اکانتهای معروف توییتر رو هک کردن و ازشون برای انتشار لینکهایی برای سرقت ارزهای دیجیتال استفاده کردن.
کلا قصه ی این هک ها، با هک شدن اکانت توییتر شرکت امنیتی Mandiant در 3 ژانویه شروع شد. بازیگر تهدید، اکانت این شرکت رو هک کرده بود و توش لینک صفحه ی فیشینگ یه Drainer رو منتشر و در ادامه هم که این شرکت رو ترول کرده بود.
هر برنامه ی مخرب یا فعالیتی که منجر به خالی کردن کیف های ارزهای دیجیتال بشه، بهش Drainer میگن. عمدتا بازیگران تهدید با روش های مختلف ، کاربران رو فریب میدن تا یسری تراکنش رو تایید کنن که تایید این تراکنش ها منجر به خالی شدن کیفشون میشه.
بعد از این هک، Mandiant با همکاری X ، دوباره کنترل اکانتشون رو بدست آورد و شروع به بررسی این رخداد کرد ، اما هیچ نشانه ای از هک شدن سیسمتهاشون در Mandiant یا Google Cloud که منجر به هک اکانتشون بشه ، پیدا نکرد.
احتمال میدن این هکها از طریق حملات Brute Force روی پسوردها انجام شده. نشت داده ها و استخراج پسوردهای مختلف که این سالها زیاد باهاشون روبرو شدیم ، امکان ایجاد الگو برای حمله ی بهینه رو به مهاجم میده . یکی از راهکارهایی که جلوی این حملات رو میگیره، استفاده از 2FA هستش. تایید دو مرحله ای باعث میشه ، اگه بازیگر تهدید پسورد یه اکانتی رو هم بدست آورد، نتونه وارد اون اکانت بشه. اما چیزی که جالب بوده، این هستش که 2FA روی اکانت توییتر Mandiant فعال نبوده. این شرکت علت عدم فعال بودن 2FA رو تغییرات تیمی و سیاست های توییتر عنوان کرده و گفته که تغییراتی دادن تا در آینده شاهد چنین مشکلاتی نباشن.
علاوه بر هک اکانت Mandiant ، که خیلی سر و صدا کرده بود، و البته بیشتر به دلیل فعالیت این شرکت در حوزه ی امنیت سایبری و زیرمجموعه بودن گوگل بود، هک اکانت مرتبط با کمیسیون بورس و اوراق بهادار آمریکا (SECGov) هم خیلی سر و صدا داشت. بازیگر تهدید بعد از هک این اکانت یه خبر جعلی مبنی بر پذیرش صندوق های قابل معامله ارزهای دیجتال (Bitcoin ETF) منتشر کرده بود که منجر به افزایش قیمت بیت کوین برای یه مدت کوتاهی هم شد. (صندوق قابل معامله نوعی سبد هستن که به سرمایهگذار اجازه میده روی داراییهای مختلف شرط ببنده، بدون اینکه لازم باشه خودش چیزی از اون داراییها رو بخره.)
توییتر علت این هک رو ، جعل شماره تلفن این اکانت از طریق حمله ی SIM-swapping عنوان و اعلام کرد که روی این اکانت هم 2FA فعال نبوده.
SIM swapping حملاتی هستن که در اون مهاجم با رشوه دادن یا فریب شرکت مخابراتی ، باعث انتقال شماره قربانی به سیم کارت جدید میشه. عمدتا هم برای دور زدن احراز هویت دو مرحله ای مورد استفاده قرار میگیره.
علاوه بر این دو اکانت ، اکانتهای توییتری Netgear ، Hyundai MEA ، CertiK هم ، برای تبلیغ سایتهای کلاهبرداری ارزهای دیجیتال ، هک شدن.
نکته مهم این ماجرا این هستش که هکرها روی اکانتهای توییتری که تیک آبی یا تیک طلایی یا تیک خاکستری دارن، متمرکزن تا بتونن به کلاهبرداری های خودشون اعتبار بدن.
بعد از هک Mandiant ، این شرکت امنیتی روی این کمپین کار کرده و متوجه شده که بازیگران تهدید از یه بدافزاری بنام CLINKSINK برای خالی کردن کیف پول ارزهای دیجیتال استفاده میکنن. این بدافزار از نوع Drainer-As-A-Service (DaaS) هستش.
طبق گفته ی این محققا ، بازیگران تهدید زیادی از دسامبر ، از این بدافزار برای سرقت دارایی ها و توکن های Solana (SOL) دارن استفاده میکنن. یکی از عللی که بازیگرا روی Solana متمرکز هستن، رشد قیمت اون در این ماههای اخیر بوده.
نگاه کلی به کمپین اخیر CLINKSINK Drainer :
در کمپین های اخیر، بازیگران تهدید عمدتا از شبکه های اجتماعی مانند توییتر و دیسکورد ، برای توزیع صفحات فیشینگ با موضوع ارزهای دیجیتال استفاده میکنن که در نهایت منجر به ارائه بدافزار CLINKSINK میشه. دامنه ها و صفحات فیشینگ مشاهده شده، عمدتا از جعل طرحهای ایردراپ ،منابع قانونی ارزهای دیجیتال مانند پلتفرم های Phantom ، DappRadar و BONK استفاده میکنن. در شکل های زیر نمونه هایی از این صفحات فیشینگ رو مشاهده میکنید. این صفحات حاوی کد جاوااسکریپت بدافراز CLINKSINK هستن که امکان اتصال به کیف پول قربانی و سرقت ارزهای اونو فراهم میکنه.
قربانی بعد از اینکه از طریق لینکهای توزیع شده در شبکه های اجتماعی، وارد این سایتهای فیشینگ میشه، کیف پولش رو برای بدست آوردن توکن به این سایتها متصل میکنه. بعد از اتصال ، از قربانی خواسته میشه تا یه تراکنشی رو امضاء و تایید کنه ، که این کار منجر به سرقت ارزهای دیجیتال از کیف قربانی میشه.
آنالیز اولیه CLINKSINK :
فایل CLINKSINK از طریق یه JavaScript obfuscator ناشناخته مبهم شده. نمونه ای که محققا بررسی کردن (8650e83da50bd726f77311b729905c0d)، موقع لوود صفحه بررسی میکنه که آیا Phantom Desktop Wallet روی سیستم قربانی نصب شده یا نه. برخی از نمونه ها، چندین کیف پول ارز دیجیتال رو هدف قرار میدن، این نمونه که محققا بررسی کردن فقط کیف پول فانتوم رو هدف قرار میده. اگه تایید درست باشه، یه درخواست POST به یه URL در دامنه ی ontopothers[.]com ارسال میکنه. چیزی هم که ارسال میکنه به گفته ی محققا حاوی کلمات رکیک هستش.
درخواست POST ارسال شده ، بصورت زیر هستش که محققا بدلیل بدآموزی محتوای اونو حذف کردن :
1 |
<REDACTED>: null696969 |
کلید رمزگذاری که برای رمز کردن درخواست استفاده میشه بصورت هاردکد شده هستش :
1 |
3i4gthiwkeoqgjnhkiq3owrjgowejrgkomjwekiorfgmjikoewqrjmgij3ritgjfhi3qwrenjgikerdfg |
سرور با پیکربندی و شناسه گروه تلگرامی که با AES رمزشده، پاسخ میده. اگه پاسخ رو رمزگشایی بکنیم، یه متغیر cool داریم که شناسه گروه تلگرامی هستش، متغیر دوم که باز از الفاظ رکیک استفاده شده، حاوی پیکربندی هستش. این پیکربندی حاوی کیف پول Solana شریک (affiliate) و اپراتور ، درصد تقسیم وجوه سرقتی و یسری پیکربندی برای کنترل رفتار بدافزار هستش:
1 2 3 4 5 6 7 8 9 10 |
cool: -1002032238930 <REDACTED>: {"receiver":"B4y9s5E8rb79RH4BoQRTqQBPKxpEFxdkL1y3E5A9XYCK","min_value_assets":10,"min_v alue_connect":10,"button":{"connect":"Sign Up / Sign In with Phantom.","desktop_required":"Desktop required","connecting":"Connecting...","connected":"Claim Now","claiming":"Claiming...","no_funds":"Wallet has no funds to pay the transaction Fees","error":"Something wen't wrong...","rejected":"Claim failed! Try again?","change_button":false},"alerts":{"enabled":true,"no_funds":"The wallet you've connected is not eligible. Please try again with another wallet."},"split":0.2,"show_full_url":true,"instant_popup_if_installed":false,"redirect_if_not_installed" :true,"solana_price":100.9,"split_address":"B8Y1dERnVNoUUXeXA4NaCHiB9htcukMSkfHrFsTMHA7h"} |
از قربانی خواسته میشه که کیف پول Solana خودش رو متصل کنه، بعد از اتصال ، یه درخواست به URL دوم در دامنه ی ontopothers[.]com ارسال میشه که حاوی آدرس کیف پول های متصل شده هستش. سرور یه جستجویی روی کیف پول متصل شده انجام میده و یسری جزییات از جمله میزان موجودی اونو بدست میاره و در پاسخ ارسال میکنه. سرور همچنین آدرس های کیف پول ارسال شده رو بررسی میکنه و اگه بیش از یکبار متصل شده باشن، پیام null رو برمیگردونه.
اگه سرور جزییات معتبری از کیف پول ارسال کنه، یعنی کیف پوله تکراری نباشه، بدافزار یه درخواست جدید به URL سوم در دامنه ی ontopothers[.]com ارسال میکنه که حاوی جزییات بیشتر از کیف پول و وب سایت شریک CLINKSINK هستش. بعدش از قربانی میخواد تا یه تراکنش جعلی رو امضا و تایید کنه . اگه قربانی این کار نکنه، سرقت شکست میخوره.
تقسیم ارزهای سرقت شده :
محققای Mandiant تونستن، 35 شناسه شریک و 42 آدرس منحصر به فرد کیف پولهای Solana رو در کمپین اخیر CLINKSINK شناسایی کنن. محققا براساس همپوشانی زیرساخت و آدرس های Solana ، معتقدند که در این کمپین از یه DaaS مشترک استفاده شده.
وجوه سرقت شده بین شریک و اپراتور، براساس درصدی که در سرویس Drainer ، براساس شناسه شریک مشخص شده، تقسیم میشه. در این کمپین بخشی از وجوه به این آدرس Solana ارسال شدن که محققا معتقدن مربوط به اپراتور بدافزار هستش :
1 |
B8Y1dERnVNoUUXeXA4NaCHiB9htcukMSkfHrFsTMHA7h |
برخی از کمپین های مرتبط با این بدافزار ، وجوه رو به یه آدرس دیگه ارسال میکنن، که اونم احتمالا مربوطه به آدرس اپراتور هستش :
1 |
MszS2N8CT1MV9byX8FKFnrUpkmASSeR5Fmji19ushw1 |
طبق بررسی مشخص شده که 80 درصد وجوه سرقت شده، برای شرکاء و 20 درصد سهم اپراتوره. البته مواردی هم مشاهده شده که سهم اپراتورها 5 تا 25 درصد بوده. علت این تنوع درصد مشخص نیست اما ممکنه بدلیل مشارکت های خاص یا تخفیف برای شرکایی که موفقیت زیادی داشتن ،باشه.
از 31 دسامبر ، حداقل 1491 SOL و یسری توکن مرتبط با اون، که در مجموع ارزششون 180 هزار دلار بوده به آدرس اول (B8Y1d) منتقل شده. اگه درصد اپراتور رو 20 درصد ثابت در نظر بگیریم، این کمپین تونسته 900 هزار دلار ارز از قربانی ها بدزده. البته این رو هم باید در نظر بگیریم که درصدها متغییر بودن.
جدول زیر شناسه شریک، گروه تلگرامی و آدرس والت رو نمایش میده :
Affiliate ID |
Chat ID |
Affiliate Solana Addresses |
aa1731a |
-4030258954 |
3RH44Pfx9GtN8ZWoSdWHoxH7HqXAC7V3YcqkX3kDf8J4 |
analosdev |
-4028862671 |
AVvCiPrjR3es4NHnA4HrUXVsYFbyeasDBzWhywH7pCtC |
anxiety |
-4054962814 |
GmCYGAzMHhsNgoSK8JKHNRpdXC4xsbmFy9fknMioAmEK |
asdasdgasdgf |
-4073970957 |
EHPGHGnFVYMZhc9xHF597yHC19odPHP6Kn2nmvkkWCWk |
biggynow |
-4051835630 |
7tCSWUZYKRvx1obdFB6hwFJRN7gFEadE3dFX4fsJ1nPz |
cheetah |
-4020925688 |
218JtpiEn5ZUvMoLwPmZtXf7ZM6PvMXvrmYuw6ZaoeB1 |
cheetah2 |
-4027040769 |
8qezdtS9eP3GvSuFdYd11cLB84pD8siwjBvTqyBxfxKk |
<REDACTED> |
-4046400426 |
4qzye6MmnyFkLKGq2yM64QpUgv3TyefwwR9zHrS6LThb |
example29020208 |
-4057427992 |
Fxm4yyVLSuWGhKNyJtr93VA6feJkjTjirTca78vpUVFe |
exeFill |
-4070048107 |
5C9EHpAdSNBFWboWs9HHGy2kZ4CJCkxCHW8fFRhVcZLx |
fatyyban |
-4011012791 |
3Xoki5GPu2t4h7b2x2jAARARwcFLZ1CCxyPv43ePm3nS
GvKQzXo9RDcZowAXvAxxB9XHWo9EAXYUY6af5NoFms1r |
gangster |
-4065676267 |
D9HYCccL2TcmiWhyoXqTHgbFtWvfQG8a5ZfHYieAWyLa
HFgFGQS9NmvFzG7dSH8sMRTEeKi793uB8fzgmaoDxBei |
GateDev |
-4027583711 |
FJLztLtZfjYAtwJYjg3ZNsqMHAJwtHc1xYS5AZwLu9PN |
gostxast |
-4044368928 |
HpTvuyVxwy7nK8AXCZqMHV1wiup3yvvsjpB5L2AHTGMc |
hahahahahahahaha |
-4009406471 |
FF1iEduHrvJChE7anZbxDn7gSKefT46xBaBcuuiqMxo9 |
kndawd |
-4083710813 |
DYFKcauBDmbj29x9jucNsAYxmWv423GjCN4ZbjvDWX9e |
lgbtq_monkey |
-4016357572 |
bkfS3Mo8surQ3RKSm55GHjouHyqGPgFZebQJASDdFWf |
lick |
-4025906156 |
5NM4zTiCqHCtF88qxUw4CSTUEb1yA5P4Q1icStXyXdoX
HVR8U9zaPES2Zb7hFGVsqt2HLpxFc2jpZxnk3d1km4kY |
<REDACTED> |
-4013615549 |
T3KNsTzkiyW2gxfbqkbHxfGr7ciFzBpDTkV2UAJgd3x |
milahRyuk |
-4095448132 |
Aidf4FyS42q6TeMtSmJmB3goGLmNuVrhgr4LCyb8HceM |
mistake |
-4047899971 |
Bw1ktx1MjzQjWEEinJGQ1kHK8CjCZ2ZLnS3hYmfN5yBE |
mr_jord |
-4069120494 |
8nnMe1cGJpr2wUaVH4LbAut6Zka7vewZs9oQkc5H4JN7 |
nftkhufu2 |
-4012397060 |
Fte4wZgKApNbsbzbKpyJyjnautjrr6diovgzVHwX2PFE
EjfTahgtoRxzeaPsWuMwouZbqAw3tZAXyQeyGwUVN9hw |
null_fed |
-4044764748 |
FDLuQRg6yYENo4Q75HJ4RdF6wZhNeSW9HjUGD1eoDGG1 |
null696969 |
-1002032238930 |
B4y9s5E8rb79RH4BoQRTqQBPKxpEFxdkL1y3E5A9XYCK |
orgifox |
-4002904582 |
CuWXwbstHKkhFLbGDAWpF7rbiRvfQpPSo4uFMnYyhDSx |
outsmart |
-4053485172 |
8Vc4R5gHEZs6PxA3uRmYVyqFRZgSmRV866UTvfeyc4VA |
pitbull |
-4075714106 |
HVHAGvL8HCByevnep9jgSYdr5Eq1wFFBwbq2jFVqoxNh |
pitbull_idk |
-4038907100 |
7XAgCsWMwfuzi1LLvXmpFMaXLQSoc4D6QJ5YyKhCUaSu |
randomized9992342324 |
-4015596192 |
13XC9hfTu2f2e7wzrfVugbCqnWcG27XJwyhrBFff3GAr |
shudsidj |
-4075817071 |
5pKrMXARbv6iNbtp2uEsZhyyTpR85jRrEny5fSCydvbW |
sleepzzz35 |
-4016460137 |
EhunAZL5v7r14Di9DGjW55dHLKzKJjHutpWKHZ9yDNbs |
stuntin1121 |
-4090537428 |
BYQsPKfFznw1kyTysBX9GAYCUpsStFiwQbCBS2AMeJd7
5ubbRtLvoVmbN6LVthcmMGTB8nxShE5dRZtuZTgFVLNs |
suki6969 |
-4071634475 |
4gRHwBUz9VKGgRWL9UAjFEAdR63D5GHA3z6A9ny2ww8V |
willetproject |
-4010977735 |
CgvT6j6pmQJYk2EKuWMbGmpu2f5pjaysrDUR6fgWBuxj |
برندهای مختلف DaaS که از CLINKSINK استفاده میکنن:
محققای Mandiant چندین برند DaaS رو شناسایی کردن که از CLINKSINK یا نمونه هایی از اون استفاده میکنن مانند Chick Drainer که الان با عنوان Rainbow Drainer فعالیت میکنه. در حالیکه ممکنه همه ی اینا توسط یه بازیگر تهدید کنترل بشن ، شواهدی وجود داره که سورس کد CLINKSINK در اختیار چندین بازیگر تهدید هستش که امکان DasS یا سرقت مستقل رو به اونا میده. نکته جالب ماجرا اینجاست که سرویس Rainbow Drainer براساس تاریخ ایجاد کانال تلگرامیش، که برای ارائه جزییات در خصوص بروزرسانی و جزییات سرویس ایجاد شده، ممکنه از دسامبر 2021 در حال فعالیت باشه.
بین نمونه های CLINKSINK و کدهای جاوااسکریپت آپلود شده به pastebin.pl که حاوی رشته ی @ChickDrainer هستن، همپوشانی وجود داره که نشون میده CLINKSINK یه نمونه از Chick Drainer هستش.
در 23 دسامبر 2023 ، پیامی در کانال chickdrainer ارسال شد، مبنی بر انتقال کانال به Rainbow .
محققا کانال تلگرامی ChickDrainerLeaked رو مشاهده کردن که در 23 دسامبر 2023 ایجاد شده و توش پستهایی هست در خصوص سورس کدهای لیک شده Chick Drainer که برای تهیه باید با بازیگر تماس بگیرید. این پست حاوی شاخص ها و ارجاعاتی به عملکرد CLINKSINK داره.
کانال ChickDrainerLeaked همچنین شامل چندین پست فوروارد شده از RainbowDrainer هستش که نشون میده توسط یه بازیگر کنترل میشه.
قوانین YARA برای CLINKSINK :
رولهای زیر صرفا بعنوان یه نقطه شروع برای شناسایی فعالیتهای CLINKSINK هستش و برای کامل شدن نیاز به زمان داره.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 |
rule M_Utility_CLINKSINK_1 { strings: $crypto1 = "solanaWeb3.Connection" $crypto2 = "solanaWeb3.LAMPORTS_PER_SOL" $crypto3 = "solanaWeb3.PublicKey.findProgramAddress" $crypto4 = "solanaWeb3.SystemProgram.transfer" $crypto5 = "solanaWeb3.Transaction" $func1 = "async function info(" $func2 = "async function updateConnectText(" $func3 = "async function updateMintText(" $func4 = "async function start(" $func5 = "async function connect(" $func6 = "async function waitForWalletConnection(" $func7 = "async function connectSolana(" $func8 = "async function getTokenBalance(" $func9 = "async function createTxs(" $func10 = "async function createPrizeTxs(" $func11 = "async function claim(" $func12 = "async function createTokenTxs(" $func13 = "async function claimSolana(" $phantom1 = ".phantom" $phantom2 = ".isphantom" nocase $phantom3 = "phantom.app" $transaction1 = ".AccountLayout." $transaction2 = ".TOKEN_PROGRAM_ID." $transaction3 = ".Token.createAssociatedTokenAccountInstruction(" $transaction4 = ".Token.createTransferInstruction(" condition: 5 of ($func*) or (3 of ($crypto*) and any of ($phantom*) and 3 of ($transaction*)) } |
منبع :