
Cisco IOS XE scansione & rilevamento di implant (CVE-2023-20198, CVE-2023-20273)
Rilevamento di rete dello sfruttamento di CVE-2023-20198 e fingerprinting del post-sfruttamento dei dispositivi Cisco IOS XE.
La cartella suricata/ contiene regole di rilevamento Suricata per lo sfruttamento di CVE-2023-20198. Queste regole monitorano un percent-encoded-percent che può essere utilizzato per bypassare l'autenticazione sui dispositivi Cisco IOS XE non ancora corretti per CVE-2023-20198.
Questa directory contiene anche PCAP di riferimento basati sul traffico di sfruttamento osservato in natura:
Questo repository contiene anche informazioni riguardanti le attività post-sfruttamento collegate alle sfruttamenti massivi dell'interfaccia utente Web Management Software di Cisco IOS XE. Cisco Talos 1 ha pubblicato un'impronta digitale che potrebbe verificare se l'impianto era attivo sui dispositivi Cisco IOS XE. Per riferimento:
curl -k -X POST "https://DEVICEIP/webui/logoutconfirm.html?logon_hash=1"
Se la risposta HTTP consiste in una stringa esadecimale, questo è un indicatore ad alta confidenza che il dispositivo è compromesso. Tuttavia, come menzionato da molteplici fonti 2 3, il numero di impianti che possono essere scoperti utilizzando questo metodo è diminuito significativamente.
Il traffico di rete investigato verso un dispositivo compromesso ha mostrato che l'attaccante ha aggiornato l'impianto per eseguire un controllo aggiuntivo dell'header.
Pertanto, per molti dispositivi, l'impianto è ancora attivo, ma ora risponde solo se è impostato il corretto header HTTP Authorization.
Abbiamo dato un'altra occhiata al post iniziale del blog di Cisco Talos e abbiamo notato un controllo aggiuntivo della posizione nel codice dell'impianto:

Basandoci sullo screenshot sopra del codice dell'impianto condiviso da Cisco Talos, abbiamo trovato un altro metodo che può essere utilizzato per rilevare la presenza dell'impianto.
curl -k "https://DEVICEIP/%25"
Utilizzando %25 (percentuale codificata), soddisfiamo le condizioni specificate nel controllo aggiuntivo della posizione. Ciò farà sì che il server risponda con una risposta HTTP diversa rispetto a quella normale quando l'impianto non è in esecuzione.
Attualmente sono note tre versioni dell'impianto. A partire dal 1 novembre 2023, l'impianto è denominato BadCandy da Cisco Talos 1.
Un segno rivelatore dell'operazione dell'impianto è un <head><title>404 Not Found</title></head> nel corpo. Un esempio di corpo HTTP è il seguente:
$ 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>
La terza variante restituisce la pagina di login anziché la 404. Poiché normalmente ci si aspetterebbe un reindirizzamento javascript piuttosto che questa pagina di login, possiamo comunque determinare la presenza dell'impianto verificando se viene restituita una pagina di login:
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>
Nei nostri risultati di scansione abbiamo trovato diverse risposte di login e abbiamo concluso con la stringa name="Username" come identificatore per determinare se viene restituita una pagina di login.
Se l'impianto non è presente, si otterrà una risposta diversa. Ad esempio:
$ curl -k 'https://DEVICEIP/%25'
<script>window.onload=function(){ url ='/webui';window.location.href=url;}</script>
Abbiamo creato un piccolo script che verifica la compromissione utilizzando il metodo di fingerprinting sopra descritto. Lo script si trova qui:
Esempio di utilizzo:
$ 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!
È anche possibile scansionare un elenco di host, separati da newline.
$ python3 iocisco.py --file cisco-ips.txt