هکرها از آسیب پذیری CVE-2022-41328 در FortiOS که در بولتن امنیتی فورتی نت در هفت مارس اصلاح شده، سوء استفاده کردن و یسری سازمان رو باهاش زدن که منجر به خرابی و از دست رفتن داده هاشون شده. در این پست به بررسی این آسیب پذیری و این رخداد پرداختیم.
آسیب پذیری CVE-2022-41328 :
آسیب پذیری از نوع Path traversal و در FortiOS رخ میده. دارای شدت متوسط و امتیاز 6.5 هستش. یه مهاجم با دسترسی بالا میتونه از طریق دستورات CLI مخرب، فایلهای دلخواه رو بخونه و بنویسه.
نسخه های تحت تاثیر:
FortiOS version 7.2.0 through 7.2.3
FortiOS version 7.0.0 through 7.0.9
FortiOS version 6.4.0 through 6.4.11
FortiOS 6.2 all versions
FortiOS 6.0 all versions
نسخه های اصلاح شده:
FortiOS version 7.2.4 or above
FortiOS version 7.0.10 or above
FortiOS version 6.4.12 or above
بررسی رخداد امنیتی :
کلا قصه از اونجایی شروع شده که یسری از دستگاههای FortiGate در شبکه قربانی ، پیام زیر رو دادن و دیگه بوت نشدن:
System enters error-mode due to FIPS error: Firmware Integrity self-test failed
این پیام برای دستگاههایی که FIPS شون فعاله طبیعیه و در جهت یکپارچگی اجزای سیستم هستش. یعنی اگه دستگاه متوجه یه دستکاری در سیستم خودش بشه، برای حفظ امنیت این پیام میده.
با توجه به اینکه فایروالهای فورتی گیت توسط دستگاههای FortiManager مدیریت میشن و همچنین تاکتیک و نوع اکسپلویت در این حمله ،برای همه دستگاههای فورتی گیت و FortiManager یکی بوده، شروع به تحقیق روی فورتی گیت و FortiManager کردن.
بررسی فورتی گیت:
در بررسی فورتی گیت، متوجه شدن که فریمور دستگاه در /sbin/init دستکاری شده و یه فایل جدید بنام /bin/fgfm هم بهش اضافه شده. هدف از دستکاری در /sbin/init در حقیقت پرسیست کردن /bin/fgfm بوده.
در این بررسی متوجه شدن که دستگاههای فورتی گیت به دلایل زیر از طریق دسترسی با FortiManager آلوده شدن:
- یکی اینکه همه دستگاههای فورتی گیت حمله رو شناسایی کردن و همه در یه زمان مشخص متوقف شدن.
- همه اونا به یه شکل هک شدن
- براساس یسری شواهد یه اکسپلویت path traversal روی فورتی گیت انجام شده. اجرای این اسکریپتها از طریق FortiManager بوده.
بررسی FortiManager :
برای بررسی FortiManager ، اومدن فریمور دستگاه آلوده رو با دستگاه سالم مقایسه کردن. فایلهای زیر در rootfs.gz با نسخه سالم تفاوت داشته :
همونطور که مشاهده میکنید ، سه فایل اضافه شده و سه فایل دستکاری شدن که یکیش اسکریپت استارتآپ FortiManager هستش که با هدف پرسیست دستکاری شده و دو تا فایل دیگه مرتبط با بخش های جنگو FortiManager هستن که با هدف کنترل و دسترسی ،دستکاری شدن.
با بررسی لاگها متوجه شدن که یسری اسکریپت در فورتی گیت اجرا شدن که توسط FortiManager ارائه شدن. از جمله همونطور که در شکل زیر قابل مشاهده هستش دستورات upload-icon و run script از طریق FortiManager ارائه شدن
لاگها همچنین نشون دهنده اسکریپتهایی هستن که در دستگاههای فورتی گیت مختلف از طریق ویژگی آپلود اسکریپت FortiManager اجرا شدن.
در لاگها همونطور که مشاهده میکنید، Command failed ثبت شده که نشون دهنده تلاش برای اکسپلویت path traversal هستش. (../../) . این اکسپلویت امکان آپلود فایلهای دلخواه رو از طریق یه سرور tftp به مسیر مشخص شده روی فورتی گیت فراهم میکنه. مثلا در شکل بالا مهاجم میخواد فایل /bin/lspci رو با فایل خودش جایگزین کنه.
با این یافته ها شناسه CVE-2022-41328 رو به این آسیب پذیری اختصاص دادن و اونو اصلاح کردن.
آنالیز بدافزار :
در ادامه گزارش به بررسی بدافزارهای موجود در دستگاههای فورتی گیت و FortiManager پرداختن.
بدافزارهای فورتی گیت:
بدافزار Fgfm :
این بدافزار پکتهای ICMP رو بررسی میکنه و اگه موردی باشه که توش رشته “;7(Zu9YTsA7qQ#vm” باشه، یعنی این پینگ از طرف مهاجم هستش و باید IP داخل اون رو استخراج کنه که آدرس C2 هستش. در ادامه بسته به دستوراتی که از C2 میگیره میتونه ریموت شل بده، آپلود و دانلود انجام بده، داده ها رو استخراج کنه و یا اجرا رو متوقف کنه.
بدافزارهای FortiManager :
بدافزار Auth :
هدف از این بدافزار دستکاری iptables در دستگاه هستش. برای کار با iptables در FortiManager کاربر باید امتیاز ROOT داشته باشه. شکل زیر نشون دهنده دستورات مرتبط با iptables نشون میده:
این دستور ترافیکی یه IP خاص رو به پورت 541 ، که پورت مدیریت FortiGuard هستش، ریدایرکت میکنه. البته این بدافزار قبل از این کارها، اینترفیس های دستگاه رو میگرده و به دنبال IP هستش که با 127 شروع نشه.
سایر اصلاحات :
Klogd:
Klogd با بدافزار fgfm شباهتهایی رو در ریموت شل و قابلیت خواندن و نوشتن فایل و استفاده از کتابخونه های SSL و رشته “;7(Zu9YTsA7qQ#vm” داره. قابلیت های شبکه اون بطور کامل بررسی نشده اما قابلیت های سوکت شبکه اش میشه موارد زیر بیان کرد :
- یه سوکت AF_INET و SOCK_RAW با protocol 8 ایجاد میکنه. ایندکس اینترفیس port1 که پورت پیش فرض مدیریت دستگاه هستش رو بدست میاره و سوکت به اون متصل میکنه. در کل داده ها رو از طریق این سوکت میخونه.
- یه سوکت AF_NETLINK برای ارتباطات فضای kernel-user ایجاد میکنه.
- یه سوکت AF_INET و SOCK_STREAM و protocol 0 ایجاد میکنه و به اون گوش میده. این قسمت از کد به ریموت شل و خواندن و نوشتن فایل ختم میشه.
Support :
یه bash اسکریپت هستش که فایلهای /bin/klogd و /bin/auth اجرا میکنه و فایلهای /bin/klogd و /nohup.out و /bin/support رو حذف میکنه.
Smit:
برای غیرفعال کردن firmware verification هنگام بوت استفاده میشد.
Localnet:
یه اسکریپت استارت آپ برای FortiManager هستش که دو خط بهش اضافه شده. در خط اول فایل /bin/smit رو اصلاح میکنه تا firmware verification در حال بوت فعال کنه. این امر هیچ تاثیری برای دستگاه در حال اجرا نداره و احتمالا برای این اضافه شده که دستکاری smit رو پنهون کنه. خط دوم هم /bin/support اجرا میکنه.
Urls.py و Views.py :
این دو فایل در مولفه جنگو FortiManager دستکاری شدن. به فایل urls نقطه پایانی show_device_info/ اضافه شده که با اجرای اون تابع get_device_info اضافه شده در view اجرا میشه. این تابع امکان کنترل دستگاه از راه دور رو به مهاجم میده. دستورات و داده ها رو از طریق کوکی های FGMGTOKEN و DEVICEID دریافت میکنه. داده های ورودی و خروجی هم با RC4 رمز میشن. در کل امکان اجرای دستورات شل و آپلود و دانلود فایل رو میده.
شناسایی بازیگر تهدید :
پیچیدگی های اکسپلویت نشون دهنده اینه که یه بازیگر تهدید پیشرفته، پشت ماجراست چون:
- اکسپلویت نیاز به درک عمیقی از FortiOS و سخت افزار زیرین اون داره.
- بدافزارهای کشف شده نشون دهنده قابلیت مهندسی معکوس این بازیگر در بخش های مختلف FortiOS داره.
این حمله با احتمال بالایی مرتبط با یه دولت و یه حمله هدفمند هستش.
IoCهای گزارش:
بررسی System/Logs برای وجود رشته های زیر:
1 2 |
execute wireless-controller hs20-icon upload-icon User FortiManager_Access via fgfmd upload and run script |
Network
- 47.252.20.90
File Hashes
- Auth – b6e92149efaf78e9ce7552297505b9d5
- Klogd – 53a69adac914808eced2bf8155a7512d
- Support – 9ce2459168cf4b5af494776a70e0feda
- Smit – e3f342c212bb8a0a56f63490bf00ca0c
- Localnet – 88711ebc99e1390f1ce2f42a6de0654d
- Urls.py – 64bdf7a631bc76b01b985f1d46b35ea6
- Views.py – 3e43511c4f7f551290292394c4e21de7
- Fgfm – e2d2884869f48f40b32fb27cc3bdefff