
Cisco IOS XE Implantat-Scanning & -Erkennung (CVE-2023-20198, CVE-2023-20273)
Netzwerkerkennung der Ausnutzung von CVE-2023-20198 und Fingerprinting der Post-Exploitation von Cisco IOS XE-Geräten.
Der Ordner suricata/ enthält Suricata-Erkennungsregeln für die Ausnutzung von CVE-2023-20198. Diese Regeln überwachen den Datenverkehr auf ein prozentkodiertes Prozentzeichen, das verwendet werden kann, um die Authentifizierung auf Cisco IOS XE-Geräten zu umgehen, die nicht für CVE-2023-20198 gepatcht wurden.
Dieses Verzeichnis enthält außerdem Referenz-PCAPs, die auf in freier Wildbahn beobachtetem Exploitation-Datenverkehr basieren:
Dieses Repository enthält außerdem Informationen zu Post-Exploitation-Aktivitäten im Zusammenhang mit den Massen-Exploitations der Cisco IOS XE Software Web Management User Interface. Cisco Talos 1 hat einen Fingerprint veröffentlicht, mit dem geprüft werden kann, ob das Implantat auf Cisco IOS XE-Geräten aktiv war. Zur Referenz:
curl -k -X POST "https://DEVICEIP/webui/logoutconfirm.html?logon_hash=1"
Wenn die HTTP-Antwort aus einer hexadezimalen Zeichenkette besteht, ist dies ein Indikator mit hoher Konfidenz, dass das Gerät kompromittiert ist. Wie jedoch mehrere Quellen erwähnt haben 2 3, ist die Anzahl der Implantate, die mit dieser Methode entdeckt werden können, erheblich zurückgegangen.
Untersuchter Netzwerkverkehr zu einem kompromittierten Gerät hat gezeigt, dass der Bedrohungsakteur das Implantat um eine zusätzliche Header-Prüfung erweitert hat.
Daher ist das Implantat auf vielen Geräten weiterhin aktiv, antwortet nun aber nur noch, wenn der korrekte Authorization-HTTP-Header gesetzt ist.
Wir haben uns den ursprünglichen Blogbeitrag von Cisco Talos noch einmal angesehen und eine zusätzliche Location-Prüfung im Implantat-Code bemerkt:

Basierend auf dem obigen Screenshot des von Cisco Talos geteilten Implantat-Codes haben wir eine weitere Methode gefunden, mit der sich das Vorhandensein des Implantats per Fingerprinting feststellen lässt.
curl -k "https://DEVICEIP/%25"
Mit %25 (prozentkodiertes Prozentzeichen) erfüllen wir die Bedingungen der zusätzlichen Location-Prüfung. Dadurch antwortet der Server mit einer anderen HTTP-Antwort, als er es normalerweise tun würde, wenn das Implantat nicht läuft.
Derzeit sind drei Versionen des Implantats bekannt. Stand 1. November 2023 wird das Implantat von Cisco Talos als BadCandy bezeichnet 1.
Ein verräterisches Zeichen für den Betrieb des Implantats ist ein <head><title>404 Not Found</title></head> im Body. Ein Beispiel für einen solchen HTTP-Body ist:
$ 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>
Die dritte Variante gibt anstelle des 404 die Login-Seite zurück. Da man normalerweise eher eine JavaScript-Weiterleitung erwarten würde als diese Login-Seite, können wir das Vorhandensein des Implantats weiterhin feststellen, indem wir prüfen, ob eine Login-Seite zurückgegeben wird:
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>
Wir haben in unseren Scan-Ergebnissen verschiedene Login-Antworten gefunden und haben uns schließlich für die Zeichenkette name="Username" als Identifikator entschieden, um festzustellen, ob eine Login-Seite zurückgegeben wird.
Wenn das Implantat nicht vorhanden ist, erhält man eine andere Antwort. Zum Beispiel:
$ curl -k 'https://DEVICEIP/%25'
<script>window.onload=function(){ url ='/webui';window.location.href=url;}</script>
Wir haben ein kleines Skript erstellt, das mit der obigen Fingerprinting-Methode auf Kompromittierung prüft. Das Skript ist hier zu finden:
Beispielverwendung:
$ 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!
Es ist auch möglich, eine Liste von Hosts zu scannen, die durch Zeilenumbrüche getrennt ist.
$ python3 iocisco.py --file cisco-ips.txt