Пентесты и Log4J: как использовать уязвимую систему
29 мая 2022 г.В этой статье мы проводим пентестирование уязвимой системы и демонстрируем, как можно получить удаленную оболочку с помощью эксплойта с открытым исходным кодом Log4j, который доступен каждому.
Введение
Эта критическая уязвимость, обозначенная как CVE-2021-44228, затрагивает большое количество клиентов, поскольку компонент Apache Log4j широко используется как в коммерческом программном обеспечении, так и в программном обеспечении с открытым исходным кодом. Кроме того, злоумышленники, использующие программы-вымогатели, используют эксплойт Log4j для увеличения охвата своих жертв по всему миру.
Наша демонстрация предоставляется в образовательных целях для более технической аудитории с целью повышения осведомленности о том, как работает этот эксплойт.
Raxis считает, что лучшее понимание состава эксплойтов — лучший способ для пользователей научиться бороться с растущими угрозами в Интернете.
Раскадровка эксплойта Log4j
Уязвимость Apache Log4j, CVE-2021-44228 (https://nvd.nist.gov/vuln/detail/CVE-2021-44228), затрагивает большое количество систем, и в настоящее время злоумышленники используют эту уязвимость для доступа в Интернет. подключенных систем по всему миру.
Чтобы продемонстрировать анатомию такой атаки, Raxis предоставляет пошаговую демонстрацию эксплойта в действии. В рамках нашей демонстрации мы делаем предположения о сетевой среде, используемой для сервера-жертвы, которая позволила бы осуществить эту атаку.
Конечно, существует много способов предотвратить успех этой атаки, например, использование более безопасных конфигураций брандмауэра или других передовых устройств сетевой безопасности, однако мы выбрали общую конфигурацию безопасности «по умолчанию» для демонстрации этой атаки.
Сервер-жертва
Во-первых, наш сервер-жертва — это веб-сервер Tomcat 8, использующий уязвимую версию Apache Log4j, настроенный и установленный в док-контейнере.
Docker-контейнер позволяет нам продемонстрировать отдельную среду для сервера-жертвы, которая изолирована от нашей тестовой среды. На нашем сервере Tomcat размещен образец веб-сайта, доступный по адресу https://github.com/cyberxml/log4j-poc, и он настроен на предоставление порта 8080 для уязвимого веб-сервера.
Никакие другие входящие порты для этого док-контейнера не доступны, кроме 8080. Докер-контейнер разрешает исходящий трафик, как и в стандартной конфигурации многих серверных сетей.
Обратите внимание, что этот конкретный репозиторий GitHub также содержит встроенную версию кода атаки и полезной нагрузки Log4j, однако мы отключили ее для нашего примера, чтобы обеспечить просмотр экранов так, как их видит злоумышленник. Мы используем только части веб-сервера Tomcat 8, как показано на снимке экрана ниже.
Рисунок 1: Демонстрационный веб-сервер Victim Tomcat 8, на котором запущен код, уязвимый для эксплойта Log4j
Далее нам нужно настроить рабочую станцию злоумышленника. Используя код эксплойта из https://github.com/kozmer/log4j-shell-poc,, Raxis настраивает три терминальных сеанса, называемых Netcat Listener, Python Веб-сервер и эксплойт, как показано ниже.
Прослушиватель Netcat, порт 9001
Сеанс прослушивателя Netcat, показанный на рисунке 2, представляет собой прослушиватель Netcat, работающий на порту 9001. Этот сеанс предназначен для перехвата оболочки, которая будет передана нам с сервера-жертвы через эксплойт.
Рисунок 2: Прослушиватель Netcat злоумышленника на порту 9001
Веб-сервер Python, порт 80
Сеанс веб-сервера Python на рис. 3 — это веб-сервер Python, работающий на порту 80 для распределения полезной нагрузки на сервер-жертву.
Рисунок 3: Веб-сервер Python злоумышленника для распределения полезной нагрузки
Код эксплойта, порт 1389
Сессия эксплойта, показанная на рис. 4, представляет собой экспериментальный код эксплойта Log4j, работающий на порту 1389 и создающий вооруженный LDAP-сервер.
Этот код перенаправит сервер-жертву на загрузку и выполнение класса Java, полученного с нашего веб-сервера Python, работающего на порту 80 выше.
Класс Java настроен на порождение оболочки на порт 9001, который является нашим прослушивателем Netcat на рис. 2.
Рисунок 4: Код злоумышленника с использованием Log4J
Выполнить атаку
Теперь, когда код подготовлен, пришло время выполнить нашу атаку. Мы подключимся к веб-серверу жертвы с помощью веб-браузера Chrome.
Наша строка атаки, показанная на рисунке 5, использует JNDI для выполнения запроса LDAP к сеансу Exploit злоумышленника, работающему на порту 1389.
Рисунок 5: Веб-сайт жертвы и строка атаки
Строка атаки использует уязвимость в Log4j и запрашивает выполнение поиска на сервере LDAP злоумышленника.
Для этого с сервера-жертвы выполняется исходящий запрос к системе злоумышленника через порт 1389. Сессия эксплойта на рис. 6 указывает на получение входящего соединения LDAP и перенаправление на веб-сервер Python нашего злоумышленника.
Рисунок 6: Эксплойт-сеанс злоумышленника, указывающий на входящее соединение и перенаправление
Сессия Exploit отправила перенаправление на наш веб-сервер Python, который обслуживает вооруженный Java-класс, содержащий код для открытия оболочки.
Этот класс Java фактически был настроен из нашего сеанса Exploit и обслуживается веб-сервером Python только через порт 80. Журнал подключений показан на рис. 7 ниже.
Рисунок 7: Веб-сервер Python злоумышленника отправляет оболочку Java
На последнем этапе нашей атаки Raxis получает шелл с контролем над сервером жертвы. Класс Java, отправленный нашей жертве, содержал код, который открывал удаленную оболочку для сеанса netcat нашего злоумышленника, как показано на рисунке 8.
Злоумышленник теперь имеет полный контроль над сервером Tomcat 8, хотя и ограничен сеансом докера, который мы настроили в этом тестовом сценарии.
Рисунок 8: Доступ злоумышленника к оболочке, контролирующей сервер жертвы
Вывод
Как мы уже продемонстрировали, уязвимость Log4j представляет собой многоэтапный процесс, который можно выполнить, если у вас есть все необходимое. Raxis наблюдает, как этот код внедряется в ботов-вымогателей, которые ищут в Интернете системы, которые можно использовать.
Это, безусловно, критическая проблема, которую необходимо решить как можно скорее, так как это вопрос времени, когда злоумышленник достигнет уязвимой системы.
Также опубликовано здесь
Оригинал