ELK — один из самых популярных стеков технологий. В очень многих компаниях используется связка Elasticsearch-Kibana-Logstash, в которой порой хранится очень интересная и важная информация (чаще всего это логи с различных систем). И очень часто при RedTeam эти логи могут помочь — доменные имена, ip-адреса, имена пользователей, какая-то информация, которая может косвенно помочь — все это мы встречали в своей практике в ELK разных компаний.
Речь идет к тому, что если вы встретили ELK — его надо тоже как-то проверить и указать Заказчику на недостатки.
Немного теории о том что для чего используется в стеке ELK. Elasticsearch хранит данные и обеспечивает быструю поисковую систему. Kibana — это графический интерфейс, который позволяет анализировать и визуализировать сохраненные данные в Elasticsearch. Logstash используется для сбора данных из разных источников и сохранения их в Elasticsearch.
Начнем с Elasticsearch
По умолчанию использует порт 9200, протокол HTTP.
Отметим сразу, что api elasticserach может быть не доступно напрямую — работать с elastic можно только через kibana
1. Первое, что необходимо проверить можем ли мы получить какую-то информацию по http://elasticsearch:9200/
Если мы увидели информацию, в которой фигурирует версия сервера — это хорошо и мы можем смело переходить к шагу 2.
Если информацию мы не увидели, то смотри пункт 3.
2. По умолчанию в elastic не включена аутентификация, что позволяет получить доступ сразу ко всей информации, содержащейся внутри
3. Если мы не увидели никакой информации на http://elasticsearch:9200/ — высок шанс того, что аутентификация включена и нам надо попробовать пробрутить пароли. Чаще всего пользователями являются: elastic (в старых версиях пароль был changeme), remote_monitoring_user, beats_system, logstash_system, kibana, kibana_system, apm_system
4. Если мы не смогли подобрать пароль и Elasticsearch не использует SSL/TLS, то можно попробовать осуществить атаку типа “человек по середине” (если это возможно).
Возможно ваша проверка будет проходить методом “белого ящика” и логины-пароли вам дадут.
5. Следующий шаг — получение информации о пользователях и ролях в системе и дамп всей хранящейся информации (если это согласовано с Заказчиком).
Получить информацию о всех пользователях:
http://elasticsearch:9200/_security/user
Получить информацию о всех ролях:
http://elasticsearch:9200/_security/role
6. Сделать дамп информации, к которой есть доступ:
http://elasticsearch:9200/_search?pretty=true&size=9999
Здесь важно указать size, потому что без него, по умолчанию дампится будет только 10 результатов.
Kibana
По умолчанию использует порт 5601, протокол HTTP.
1. Аутентификация в Kibana связана с аутентификацией в Elastic — если в elasticsearch нет пароля — в кибане его тоже не будет. И наоборот — если есть пароль, то в кибане тоже будет — можно логиниться с учетными данными эластика
2. После получения доступа в веб интерфейс kibana — приступаем к поиску нужной нам информации (ip, домены, логи и т.д.)
3. Можно попробовать продвинуться немного дальше. В разделе Management можно увидеть версию Kibana. Если она < 6.6.0 — можно попробовать выполнить код, воспользовавшись CVE-2019–7609
4. Также необходимо проверить есть ли возможность под пользователем управлять индексами elasticsearch (в разделе Management — Elasticsearch — Index management). Если такая возможность есть без какой-либо авторизации — потенциальный злоумышленник может очень сильно навредить
Для пентеста Logstash необходим доступ к серверу. Поэтому в нашем рассказе мы его опустим.
Чаще всего пентест ELK начинается с того, что найдена кибана и из нее надо получить данные, а в идеале — добраться до всех данных в elasticsearch. Если развернута elk — значит есть необходимость обрабатывать большой объем данных.
Надеемся, что информация окажется вам полезной!