
فحص واكتشاف زرع Cisco IOS XE (CVE-2023-20198, CVE-2023-20273)
اكتشاف شبكات استغلال CVE-2023-20198 والبصمات الخاصة بمرحلة ما بعد الاستغلال لأجهزة Cisco IOS XE.
يحتوي مجلد suricata/ على قواعد كشف Suricata لاستغلال CVE-2023-20198. تراقب هذه القواعد وجود علامة النسبة المئوية المشفرة (percent-encoded-percent) التي يمكن استخدامها لتجاوز المصادقة على أجهزة Cisco IOS XE غير المصححة ضد CVE-2023-20198.
يحتوي هذا الدليل أيضًا على ملفات PCAP مرجعية بناءً على حركة الاستغلال التي لوحظت في البرية:
يحتوي هذا المستودع أيضًا على معلومات حول أنشطة ما بعد الاستغلال المرتبطة بالاستغلال الجماعي لواجهة إدارة الويب لبرنامج Cisco IOS XE. نشرت شركة Cisco Talos 1 بصمة يمكن التحقق من وجود الاختراق على أجهزة Cisco IOS XE. كمرجع:
curl -k -X POST "https://DEVICEIP/webui/logoutconfirm.html?logon_hash=1"
إذا كان استجابة HTTP تتكون من سلسلة سداسية عشرية، فهذا دليل عالي الثقة على أن الجهاز مخترق. ومع ذلك، كما ذكرت مصادر متعددة 2 3، انخفض عدد الاختراقات التي يمكن اكتشافها باستخدام هذه الطريقة بشكل كبير.
أظهرت حركة الشبكة التي تم فحصها إلى جهاز مخترق أن المهاجم قام بتطوير الاختراق لإجراء فحص إضافي للرأس (header check). وبالتالي، بالنسبة للعديد من الأجهزة، لا يزال الاختراق نشطًا، لكنه يستجيب الآن فقط إذا تم تعيين رأس Authorization HTTP الصحيح.
قمنا بإلقاء نظرة أخرى على المقال الأولي من Cisco Talos ولاحظنا وجود فحص موقع إضافي في كود الاختراق:

استنادًا إلى لقطة الشاشة أعلاه من كود الاختراق الذي شاركته Cisco Talos، وجدنا طريقة أخرى يمكن استخدامها للكشف عن وجود الاختراق.
curl -k "https://DEVICEIP/%25"
باستخدام %25 (علامة النسبة المئوية المشفرة)، نلبي الشروط المحددة في فحص الموقع الإضافي. سيؤدي ذلك إلى استجابة الخادم باستجابة HTTP مختلفة عما سيحدث عادةً عندما لا يكون الاختراق قيد التشغيل.
يوجد حاليًا ثلاثة إصدارات معروفة من الاختراق. اعتبارًا من 1 نوفمبر 2023، أطلقت عليه Cisco Talos اسم BadCandy 1.
من العلامات الدالة على تشغيل الاختراق وجود <head><title>404 Not Found</title></head> في جسم الاستجابة. مثال لجسم استجابة HTTP كما يلي:
$ curl -k 'https://DEVICEIP/%25'
<html>
<head><title>404 Not Found</title></head>
<body bgcolor="white">
<center><h1>404 Not Found</h1></center>
<hr><center>nginx</center>
</body>
</html>
الإصدار الثالث يعيد صفحة تسجيل الدخول بدلاً من 404. نظرًا لأنه من المتوقع عادةً إعادة توجيه JavaScript بدلاً من صفحة تسجيل الدخول هذه، فلا يزال بإمكاننا تحديد وجود الاختراق عن طريق التحقق مما إذا كانت صفحة تسجيل الدخول قد تم إرجاعها:
curl -k 'https://DEVICEIP/%25'
<!DOCTYPE html>
<html>
<!--
Copyright (c) 2015-2019 by Cisco Systems, Inc.
All rights reserved.
-->
<head lang="en">
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title id="loginTitle"></title>
وجدنا استجابات تسجيل دخول مختلفة في نتائج المسح، وانتهينا باستخدام السلسلة name="Username" كمعرف لتحديد ما إذا كانت صفحة تسجيل الدخول قد تم إرجاعها.
إذا لم يكن الاختراق موجودًا، فستحصل على استجابة مختلفة. على سبيل المثال:
$ curl -k 'https://DEVICEIP/%25'
<script>window.onload=function(){ url ='/webui';window.location.href=url;}</script>
قمنا بإنشاء سكريبت صغير يتحقق من الاختراق باستخدام طريقة البصمات المذكورة أعلاه. يمكن العثور على السكريبت هنا:
مثال على الاستخدام:
$ pip3 install requests
$ python3 iocisco.py 192.168.1.1
[!] Checking http://192.168.1.1/%25
WARNING: Possible implant found for 192.168.1.1 (impant v3)! Please perform a forensic investigation!
[!] Checking https://192.168.1.1/%25
WARNING: Possible implant found for 192.168.1.1 (implant v3)! Please perform a forensic investigation!
من الممكن أيضًا مسح قائمة من المضيفين، مفصولة بأسطر جديدة.
$ python3 iocisco.py --file cisco-ips.txt