
Cisco IOS XE सिस्टम्स में लगाए गए इम्प्लांट का पता लगाने वाला Go-आधारित स्कैनर, जो संक्रमित डिवाइस और कमजोर वर्शन की पहचान करने के लिए तैयार किए गए HTTP अनुरोध भेजता है।
23 अक्टूबर, 2023 को, जब सभी इम्प्लांट्स ने /webui/logoutconfirm.html पर अनुरोधों का जवाब देना बंद कर दिया, तो Fox-IT ने यह निर्धारित करने का एक नया तरीका विकसित किया कि कोई सिस्टम संक्रमित है या नहीं। विशेष रूप से, लॉगिन पर रीडायरेक्ट के साथ अनुरोधों का जवाब देने के बजाय, हमलावर के इम्प्लांट में यह लॉजिक था कि यदि अनुरोधित URI में % शामिल हो तो 404 लौटाया जाए। इसलिए यह स्कैनर अब /Fadf%25 जैसा HTTP get अनुरोध भेजता है। इम्प्लांट वाला सिस्टम निम्नलिखित पेलोड लौटाएगा:
<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 को पुनः प्राप्त नहीं कर सकते।
आप docker कंटेनर बनाने के लिए makefile का उपयोग कर सकते हैं:
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
Cisco PSIRT और Cisco Talos द्वारा वर्णित IOS XE इम्प्लांट के लिए स्कैन करता है। स्कैनर /webui/logoutconfirm.html?logon_hash=1 पर एक HTTP POST अनुरोध भेजेगा और प्रतिक्रिया में 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
-rhosts-file प्रारूप की बेहतर समझ के लिए go-exploit दस्तावेज़ीकरण देखें।
$ ./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}