Перевод: splunkdefeat — Оболочка Splunk SDK для red teams

Перевод: splunkdefeat — Оболочка Splunk SDK для red teams

@Ent_TranslateIB

Введение

splunkdefeat - это оболочка Splunk Enterprise SDK для Python, помогающая "red teams" проводить различные методы атак на Splunk.

Мотивацией для создания этого инструмента была необходимость проиллюстрировать практические атаки на Splunk, связанные с ними риски и то, как защитники могут обнаружить эти действия. Автор не несет никакой ответственности за использование этого инструмента.

Хотя splunkdefeat был разработан специально для Splunk, методы атак, связанные с ними риски и стратегии обнаружения могут быть применены к любому поставщику.

Если вы хотите пропустить историю и получить код, перейдите сюда: splunkdefeat

Ограничения

Я признаю, что существуют дополнительные пути атак, настройки опций и общая разработка, которую можно выполнить с помощью splunkdefeat; однако выпуск этого инструмента предназначен для демонстрации доказательной базы и предоставления рекомендаций по обнаружению, если Splunk стал целью угрозы.

Изначально splunkdefeat был разработан с использованием стандартной установки Splunk Enterprise. В среде не использовалась однократная регистрация (SSO), многофакторная аутентификация (MFA), списки контроля доступа брандмауэра для REST API и другие передовые методы обеспечения безопасности Splunk. Все это может снизить эффективность splunkdefeat.

Однако, несмотря на существование этих ограничений конфигурации Splunk, я уверен, что splunkdefeat предоставит "red teams" практический подход к атаке на среду Splunk.

splunkdefeat MITRE ATT&CK Navigator

Хотя я позволил себе некоторые вольности при сопоставлении функциональности splunkdefeat с MITRE ATT&CK, как защитник, я считаю полезным визуально определять методы инструмента, чтобы затем проверить наличие мер по их снижению.

splunkdefeat MITRE ATT&CK Navigator

Разведка

Хотя это и не связано с функциональностью splunkdefeat, существует множество методов идентификации среды Splunk. Например, рабочий процесс nuclei splunk или сервис Shodan могут идентифицировать экземпляр Splunk.

Стратегии обнаружения

Стратегии обнаружения специально для функции splunkdefeat были разработаны с использованием индекса аудита Splunk и системы отслеживания изменений конфигурации. Я бы рекомендовал использовать приведенные ниже стратегии обнаружения как можно ближе к реальному времени. Индекс аудита Splunk может быть использован для множества других стратегий обнаружения.

Установка

Чтобы установить splunkdefeat, клонируйте репозиторий:

git clone git@github.com:markernest0/splunkdefeat.git

Зависимости Python

splunkdefeat зависит от модулей python-dotenv, prettytable и splunk-sdk.

Установите зависимости python:

pip install -r requirements.txt

Использование

Большинство функций splunkdefeat работает под действительной учетной записью Splunk с ролью администратора и возможностями по умолчанию. Среда Splunk (хост и порт) и учетные данные учетной записи (имя пользователя и пароль) хранятся в файле .env в каталоге python с кодом splunkdefeat.

Если у вас нет действительных учетных данных, начните с ключей -sh -sp -su и -sf, чтобы провести атаку грубой силой.

# Splunk host (default: localhost)
host=localhost
# Splunk admin port (default: 8089)
port=8089
# Splunk username
username=admin
# Splunk password
password=changeme
# Access scheme (default: https)
scheme=https
# Your version of Splunk (default: 6.2)
version=8.0
# Bearer token for authentication
#bearerToken=””
# Session key for authentication
#sessionKey=”<Session-Key>”

Функциональные возможности splunkdefeat

Создание нового пользователя

splunkdefeat можно использовать для создания нового пользователя с ролью по умолчанию user, power или admin.

При создании нового пользователя можно выбрать такие варианты имени пользователя, как: splunk-system-role, splunk-support, splunk-index и т.д., что придаст учетной записи дополнительную аутентичность.

При создании пользователя с ролью user или power убедитесь, что вы добавили дополнительные возможности к этой роли с помощью переключателей -ur и -uc, чтобы сохранить повышенную устойчивость.

Команда

python splunkdefeat.py -au splunk-replicate -ap mypassword123 -ar admin

Обнаружение

Поле action=create_user и значение будут идентифицировать вновь созданных пользователей.

index=_audit sourcetype=audittrail action=create_user
| table _time, user, action, fullname, username, email, roles, default_app, info

Добавление возможности к роли

Splunk имеет роли и возможности по умолчанию. splunkdefeat можно использовать для добавления возможностей admin_all_objects, schedule_search, edit_user и delete_by_keyword к ролям user, power или admin.

Добавление повышенных возможностей к более низкой привилегированной роли может позволить "red team" поддерживать постоянство в течение более длительного времени.

Команда

python splunkdefeat.py -ur admin -uc delete_by_keyword

Обнаружение

Поле action=edit_role и значение идентифицируют измененные роли для возможностей.

index=_audit sourcetype=audittrail action=edit_role
| table _time, user, action, info, role, old_capabilities, new_capabilities

Изменение действий оповещения о поиске по электронной почте

splunkdefeat может заменить действие оповещения по электронной почте для всех поисковых оповещений.

Red team может использовать следующие стратегии:

  • Использовать несуществующий адрес электронной почты и домен для предотвращения доставки оповещений и обнаружения вредоносной активности.
  • Использовать несуществующую электронную почту в домене целевой организации, чтобы предотвратить доставку оповещений и потенциально не вызвать другие обнаружения при использовании электронной почты вне почтового домена организации.
  • Использовать электронную почту, контролируемую "red team", для получения оповещений и мониторинга обнаружения атак в организации.
ПРЕДУПРЕЖДЕНИЕ: Эта опция заменит электронную почту для всех оповещений. red team должны использовать его с осторожностью.

Команда

python splunkdefeat.py -ue noreply@example.com

Все существующие почтовые адреса заменяются новым:

Обнаружение

Поля и значения "data.action"=update и "data.changes{}.properties{}.name"="action.email.to" идентифицируют измененные электронные адреса.

index=_configtracker sourcetype=splunk_configuration_change “data.action”=update “data.changes{}.properties{}.name”=”action.email.to” 
| table _time, data.changes{}.stanza, data.changes{}.properties{}.new_value, data.changes{}.properties{}.old_value

Отключение всех поисков

splunkdefeat может отключить все поиски. Это остановит обработку поисковых запросов и ухудшит обнаружение.

ПРЕДУПРЕЖДЕНИЕ: Red teams должны использовать эту команду с осторожностью, так как отключение всех поисков нарушит работу среды Splunk.

Команда

python splunkdefeat.py -ds

Обнаружение

Поле action=disable_saved_search и значение определяют отключенные поиски.

index=_audit sourcetype=audittrail action=disable_saved_search
| table _time, user, action, owner, savedsearch, app, type, disabled, info

Включить все поиски

splunkdefeat может включить все поиски. В нынешнем виде эта функция - скорее быстрый механизм для red teams, чтобы исправить опцию -ds.

Команда

python splunkdefeat.py -es

Обнаружение

Поле action=enable_saved_search и значение определяют включенные поиски.

index=_audit sourcetype=audittrail action=enable_saved_search
| table _time, user, action, owner, savedsearch, app, type, disabled, info

Перебор учетной записи

В splunkdefeat есть возможность перебора учетной записи для определения действительного пароля. Среда Splunk определяется с помощью ключей -sh и -sp. С помощью ключа -su определяется конкретный пользователь. При использовании ключа -sf задействуется файл creds.txt в каталоге creds.

Команда

python splunkdefeat.py -sh splunk.example.com -sp 8089 -su sc_admin -sf

В предыдущем примере создания нового пользователя splunk-replicate с паролем mypassword123, если этот пароль добавить в файл creds.txt и повторно выполнить команду, будет определен успешный вход.

python splunkdefeat.py -sh 147.182.214.150 -sp 8089 -su splunk-replicate -sf

Обнаружение

Поле action="login attempt" и значение идентифицируют активность входа в систему.

index=_audit sourcetype=audittrail action="login attempt"
| table _time, user, clientip, src, action, info, method, useragent

Неудачная попытка входа:

Успешная попытка входа:

Для эффективного предупреждения о действиях грубой силы, которые обычно приводят к большому количеству неудачных входов в систему за короткий период времени, эффективным может быть подсчет по неудачному имени пользователя.

index=_audit sourcetype=audittrail action=”login attempt” info=failed
| stats count by user
| where count > 5

Список текущего пользователя

splunkdefeat может вывести список текущего пользователя, реальное имя и роль. Red teams могут использовать это, чтобы определить, есть ли у пользователя роль администратора.

Команда

python splunkdefeat.py -lu

Обнаружение

Похоже, что следующее предупреждение связано с перечислением имени пользователя и роли для аутентифицированного пользователя. Однако, похоже, что в обычных операциях происходит большое количество действий, что может снизить точность обнаружения.

index=_audit sourcetype=audittrail action=edit_user operation=list info=granted
| table _time, user, action, object, operation, info

Список всех пользователей

splunkdefeat может вывести список всех пользователей.

Команда

python splunkdefeat.py -la

Обнаружение

То же самое обнаружение для списка текущего пользователя может быть применимо и для всех пользователей.

Список всех ролей

splunkdefeat может перечислить все роли и возможности.

Команда

python splunkdefeat.py -lr

Обнаружение

Действие action="edit_roles_grantable" с полем operation=list и значением отображает список конкретных ролей.

index=_audit sourcetype=audittrail action=edit_roles_grantable operation=list
| table _time, user, action, object, operation, info

Список всех поисков

splunkdefeat может вывести список всех поисков, включая имя и поисковый запрос. Red teams могут использовать эту информацию, чтобы лучше понять степень зрелости центра безопасности (SOC) и способы обхода обнаружения.

Команда

python splunkdefeat.py -ls

Обнаружение

Действия action=list_workload_pools, action=select_workload_pools, action=edit_search_schedule_window и action=edit_search_schedule_priority, похоже, связаны с деятельностью; однако не была определена стратегия обнаружения, которую можно было бы отличить от обычных операций.

Сохранение всех поисков

splunkdefeat может сохранять все поисковые запросы, включая имя и поисковый запрос, локально.

Сохранение поисковых запросов организации, особенно если эти сигнатуры обнаружения активно используются для обнаружения вредоносной активности, имеет долгосрочные последствия раскрытия стратегий обнаружения. В частности, "red teams" могут использовать сигнатуры для тестирования стратегий атак и повышения вероятности уклонения от обнаружения во время кампании.

Команда

python splunkdefeat.py -ss

Обнаружение

Как и в случае со списком всех поисков, не была определена стратегия обнаружения, которую можно было бы отличить от обычных операций.

Удаление пользователя

splunkdefeat может удалить пользователя. Удаление пользователя может помешать командам получить доступ к среде Splunk.

ПРЕДУПРЕЖДЕНИЕ: Red teams должны использовать эту команду с осторожностью, так как удаление пользователя может привести к появлению лишних поисковых запросов и нарушению работы среды Splunk.

Команда

python splunkdefeat.py -du user_a

Обнаружение

Поле action=remove_user и значение идентифицируют удаленных пользователей.

index=_audit sourcetype=audittrail action=remove_user
| table _time, user, action, username, info

Удаление всех поисков

splunkdefeat может удалить все поиски. Удаление поиска может помешать командам выявить вредоносную активность.

ПРЕДУПРЕЖДЕНИЕ: Red teams должны использовать эту команду с осторожностью, так как удаление всех поисков нарушит работу среды Splunk.

Команда

python splunkdefeat.py -rs

Обнаружение

Следующее обнаружение действительно отклоняется через использование индекса _internal. splunkdefeat использует Splunk REST API, и удаление сохраненных поисков можно определить в конечной точке ниже.

index=_internal uri=”/servicesNS/*/search/saved/searches/*” method=DELETE status=200
| table _time, user, method, file, clientip, useragent

Манипулировать всеми поисковыми запросами

splunkdefeat может манипулировать всеми поисками, добавляя к строке поиска случайный UUID. Например: | search 3e75de6b-f83e-42f1-8949-669b24227706 Смысл этой функции в том, что базовый поиск остается неизменным, однако он всегда будет неудачным, если в конце будет указано необходимое совпадение UUID.

ПРЕДУПРЕЖДЕНИЕ: Red teams должны использовать эту функцию с осторожностью, поскольку манипулирование всеми поисками приведет к нарушению работы среды Splunk.

Команда

python splunkdefeat.py -ms

После выполнения этой команды все поиски будут иметь обязательное соответствие случайному UUID:

Обнаружение

Поля и значения "data.action"=update и "data.changes{}.properties{}.name"="search" идентифицируют измененные почтовые адреса.

index=_configtracker sourcetype=splunk_configuration_change “data.action”=update “data.changes{}.properties{}.name”=”search”
| table _time, data.changes{}.stanza, data.changes{}.properties{}.new_value, data.changes{}.properties{}.old_value

Заключение

Угрожающий субъект может существенно нарушить способность организации обнаруживать атаки, используя такую систему, как Splunk. Более того, утечка сигнатур обнаружения может иметь долгосрочные последствия для способности организации обнаруживать будущие кампании. Red teams должны принимать активное участие в оценке инструментов защитника, таких как Splunk, в попытке выявить пробелы в средствах защиты.

splunkdefeat предоставляет базовую основу для нацеливания на экземпляр Splunk и выявления пробелов в обнаружении.

Я надеюсь, что другие члены сообщества увидят ценность и будут итеративно развивать многие неразработанные возможности этой структуры!

Оригинал статьи - здесь.
Поддержите автора хлопками на Medium.


Перевод статьи был выполнен проектом перевод энтузиаста:

  • 📚 @Ent_TranslateIB - Телеграмм канал с тематикой информационной безопасности
  • 🔥 @Ent_Translate - Инстаграм проекта

Report Page