
Cisco IOS XE сканирование и обнаружение имплантов (CVE-2023-20198, CVE-2023-20273)
Обнаружение в сети эксплуатации CVE-2023-20198 и снятие отпечатков (fingerprinting) постэксплуатации устройств Cisco IOS XE.
Папка suricata/ содержит правила обнаружения Suricata для эксплуатации CVE-2023-20198. Эти правила отслеживают процентно-кодированный процент, который может использоваться для обхода аутентификации на устройствах Cisco IOS XE, не исправленных для CVE-2023-20198.
Этот каталог также содержит эталонные PCAP-файлы, основанные на наблюдаемом в дикой природе трафике эксплуатации:
Этот репозиторий также содержит информацию о действиях после эксплуатации, связанных с массовой эксплуатацией веб-интерфейса управления Cisco IOS XE Software. Cisco Talos 1 опубликовал отпечаток (fingerprint), который позволяет проверить, активен ли имплант на устройствах Cisco IOS XE. Для справки:
curl -k -X POST "https://DEVICEIP/webui/logoutconfirm.html?logon_hash=1"
Если HTTP-ответ состоит из шестнадцатеричной строки, это является индикатором высокой степени уверенности, что устройство скомпрометировано. Однако, как упоминалось в нескольких источниках 2 3, количество имплантов, которые можно обнаружить с помощью этого метода, значительно сократилось.
Исследование сетевого трафика к скомпрометированному устройству показало, что злоумышленник обновил имплант для выполнения дополнительной проверки заголовка. Таким образом, для многих устройств имплант все еще активен, но теперь отвечает только при наличии правильного HTTP-заголовка Authorization.
Мы еще раз взглянули на первоначальный пост в блоге Cisco Talos и заметили дополнительную проверку местоположения в коде импланта:

Основываясь на приведенном выше скриншоте кода импланта, предоставленном Cisco Talos, мы нашли еще один метод, который можно использовать для обнаружения присутствия импланта.
curl -k "https://DEVICEIP/%25"
Используя %25 (процентно-кодированный процент), мы удовлетворяем условиям, указанным в дополнительной проверке местоположения. Это заставит сервер ответить иным HTTP-ответом, чем обычно, когда имплант не работает.
В настоящее время известно три версии импланта. По состоянию на 1 ноября 2023 года имплант назван BadCandy компанией Cisco Talos 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