
ماسح ضوئي مكتوب بلغة Go يكتشف أنظمة Cisco IOS XE المزروعة عبر إرسال طلبات HTTP مصممة لتحديد الأجهزة المخترقة والإصدارات المعرضة للخطر.
في 23 أكتوبر 2023، وبعد أن توقفت جميع البرمجيات المزروعة عن الاستجابة للطلبات الموجهة إلى /webui/logoutconfirm.html، طوّر Fox-IT طريقة جديدة لتحديد ما إذا كان النظام مخترقًا أم لا. على وجه الخصوص، بدلاً من الاستجابة للطلبات بإعادة توجيه إلى صفحة تسجيل الدخول، كانت برمجية المهاجم المزروعة تحتوي على منطق يُرجع 404 إذا احتوى URI المطلوب على %. لذا يرسل هذا الماسح الضوئي الآن طلب HTTP GET مثل /Fadf%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>
<!-- a padding to disable MSIE and Chrome friendly error page -->
<!-- a padding to disable MSIE and Chrome friendly error page -->
<!-- a padding to disable MSIE and Chrome friendly error page -->
<!-- a padding to disable MSIE and Chrome friendly error page -->
<!-- a padding to disable MSIE and Chrome friendly error page -->
<!-- a padding to disable MSIE and Chrome friendly error page -->
الاستخدام هو نفسه كما كان من قبل (راجع قسم "Old Docs" لمزيد من المعلومات حول الاستخدام) ولكن لم يعد بإمكاننا استعادة implant-id.
يمكنك استخدام ملف makefile لبناء حاوية docker:
make docker
أو، إذا كانت لديك بيئة بناء Go جاهزة، فاستخدم make فقط:
albinolobster@mournland:~/cisco-ios-xe-implant-scanner$ make
gofmt -d -w implant-scanner.go
golangci-lint run --fix implant-scanner.go
GOOS=linux GOARCH=arm64 go build -o build/implant-scanner_linux-arm64 implant-scanner.go
./build/implant-scanner -a -v -c -rhost 10.9.49.180
time=2023-10-23T14:33:07.581-04:00 level=STATUS msg="Starting target" index=0 host=10.9.49.180 port=80 ssl=false "ssl auto"=true
time=2023-10-23T14:33:08.782-04:00 level=STATUS msg="Validating IOS XE target" host=10.9.49.180 port=80
time=2023-10-23T14:33:10.115-04:00 level=SUCCESS msg="Target validation succeeded!" host=10.9.49.180 port=80
time=2023-10-23T14:33:10.115-04:00 level=STATUS msg="Running a version check on the remote target" host=10.9.49.180 port=80
time=2023-10-23T14:33:10.624-04:00 level=SUCCESS msg="The target appears to be a vulnerable version!" host=10.9.49.180 port=80
./build/implant-scanner -a -v -c -rhost 10.9.49.124
time=2023-10-23T14:34:31.207-04:00 level=STATUS msg="Starting target" index=0 host=10.9.49.124 port=80 ssl=false "ssl auto"=true
time=2023-10-23T14:34:31.340-04:00 level=STATUS msg="Validating IOS XE target" host=10.9.49.124 port=80
time=2023-10-23T14:34:31.363-04:00 level=SUCCESS msg="Target validation succeeded!" host=10.9.49.124 port=80
time=2023-10-23T14:34:31.363-04:00 level=STATUS msg="Running a version check on the remote target" host=10.9.49.124 port=80
time=2023-10-23T14:34:31.378-04:00 level=ERROR msg="The target appears to be a patched version." host=10.9.49.124 port=80
يقوم بالفحص بحثًا عن برمجية IOS XE المزروعة كما هو موضح من قبل Cisco PSIRT وCisco Talos. سيرسل الماسح الضوئي طلب HTTP POST إلى /webui/logoutconfirm.html?logon_hash=1 ويبحث عن سلسلة hexstring المكونة من 18 بايت في الاستجابة. سيحتوي مخرجات الماسح الضوئي على سطر مثل هذا عندما يجد برمجية مزروعة:
time=2023-10-17T06:09:02.967-04:00 level=SUCCESS msg=Found implant-id=1a80b7389ccd0a5dab rhost=192.168.1.1 rport=80 ssl=false
عندما لا يتم العثور على برمجية مزروعة، سيقول الماسح الضوئي شيئًا مثل:
{"time":"2023-10-17T06:13:48.241233896-04:00","level":"ERROR","msg":"The target appears to be a patched version.","host":"192.168.1.1","port":80}
لاحظ أن هذا لا يشير إلى نسخة مُرقّعة، بل فقط إلى أنه لم يتم العثور على برمجية مزروعة. هذه مجرد مخرجات عامة من ماسح الإصدارات الخاص بـ go-exploit. نظرًا لأن هذا مبني على go-exploit، فإنه يدعم مجموعة متنوعة من وظائف الفحص. فيما يلي نموذج للاستخدام:
$ ./build/implant-scanner -rhost 192.168.1.1 -rport 80 -proxy socks5://127.0.0.1:9050 -a -v -c
time=2023-10-17T06:08:59.586-04:00 level=STATUS msg="Starting target" index=0 host=192.168.1.1port=80 ssl=false "ssl auto"=true
time=2023-10-17T06:09:00.882-04:00 level=STATUS msg="Validating IOS XE target" host=192.168.1.1port=80
time=2023-10-17T06:09:02.237-04:00 level=SUCCESS msg="Target validation succeeded!" host=192.168.1.1port=80
time=2023-10-17T06:09:02.237-04:00 level=STATUS msg="Running a version check on the remote target" host=192.168.1.1port=80
time=2023-10-17T06:09:02.967-04:00 level=SUCCESS msg=Found implant-id=1a80b7389ccd0a5dab rhost=192.168.1.1rport=80 ssl=false
time=2023-10-17T06:09:02.967-04:00 level=SUCCESS msg="The target appears to be a vulnerable version!" host=192.168.1.1port=80
$ ./build/implant-scanner -rhost 192.168.1.1-rport 80 -proxy socks5://127.0.0.1:9050 -a -v -c
time=2023-10-17T06:08:59.586-04:00 level=STATUS msg="Starting target" index=0 host=192.168.1.1port=80 ssl=false "ssl auto"=true
time=2023-10-17T06:09:00.882-04:00 level=STATUS msg="Validating IOS XE target" host=192.168.1.1port=80
time=2023-10-17T06:09:02.237-04:00 level=SUCCESS msg="Target validation succeeded!" host=192.168.1.1port=80
time=2023-10-17T06:09:02.237-04:00 level=STATUS msg="Running a version check on the remote target" host=192.168.1.1port=80
time=2023-10-17T06:09:02.967-04:00 level=SUCCESS msg=Found implant-id=1a80b7389ccd0a5dab rhost=192.168.1.1rport=80 ssl=false
time=2023-10-17T06:09:02.967-04:00 level=SUCCESS msg="The target appears to be a vulnerable version!" host=192.168.1.1port=80
راجع documentation الخاص بـ go-exploit لفهم أفضل لتنسيق -rhosts-file.
$ ./build/implant-scanner -rhosts-file targets -log-json -log-file ./logs/output.json -v -c
$ tail logs/output.json
{"time":"2023-10-17T06:16:07.24555914-04:00","level":"STATUS","msg":"Validating IOS XE Implant target","host":"192.168.1.1","port":443}
{"time":"2023-10-17T06:16:10.363281285-04:00","level":"SUCCESS","msg":"Target validation succeeded!","host":"192.168.1.1","port":443}
{"time":"2023-10-17T06:16:10.363345035-04:00","level":"STATUS","msg":"Running a version check on the remote target","host":"192.168.1.1","port":443}