Привет! Меня зовут Миша, я основатель https://defbox.io — платформы на которой можно попробовать написать детект под разные атаки и соревноваться кто лучше это делает 🙂
На примере SSH-bruteforce стенда я расскажу, как можно своими руками сделать лабу для тренировки написания детектов:
-
Как поднять платформу для сбора и анализа логов.
-
Как поднять и подготовить заведомо уязвимый сервер.
-
Как провести SSH-Bruteforce.
-
Что искать в платформе из п.1 и как написать правило в эластике.
Зачем это нужно? Чтобы потренировать свои скиллы аналитика логов, попробовать построить домашний SIEM или чтобы просто разобраться с чем это там работают ваши коллеги.
Мы хотим собирать логи и находить в них нехорошие события. Перед тем, как создавать эти события, нужно подготовиться к сбору логов. Для этого мы поднимем популярный ELK стек (строго говоря мы поднимем EK стек, логстеш мы подымать не будем).
ELK стенд и уязвимый сервер можно поднять по разному:
-
на разных виртуальных машинах в облаке.
-
на разных виртуальных машинах используя личный компьютер.
-
Поднять ELK на своем компьютере, а в облаке поднять виртуальную машину с уязвимым стендом.
Мы будем использовать третий вариант, хоть это и может показаться спорным из-за необходимости выставлять эластик в интернет.
Поднять его можно вот так:
-
Клонируем репозиторий с готовыми docker compose файлами:
git clone https://github.com/deviantony/docker-elk.git -
Переходим в этот репозиторий
cd docker-elk/ -
Делаем магию чтобы мы могли писать правила корелляции:
echo "xpack.encryptedSavedObjects.encryptionKey: $(openssl rand -hex 32)" >> kibana/config/kibana.yml(Эта команда генерирует и создает случайный ключ, который кибана будет использовать для шифрования) -
И запускаем ELK —
docker compose --profile=setup up
После выполнения этих действий по адресу http://localhost:5601 вас будет ждать кибана в которой можно смотреть логи. Мы чуть позже посмотрим на нее.
Еще у нас должен быть доступен эластик — http://localhost:9200
Для того, чтобы на этот эластик можно было отправлять логи, нужно сделать так, чтобы эластик был доступен из интернета — для этого лучше всего воспользоваться ngrok’ом.
Теперь, когда у нас доступен эластик, мы можем развернуть виртуальную машину с SSH, специально сконфигурировать ее плохо, и даже взломать.
Эта статья больше обзорная, поэтому мы возьмем один из самых простых сценариев — брутфорс SSH.
Вообще, виртуальную машину развернуть можно где угодно, лично я обычно разворачиваю их в Digital Ocean. Это можно либо руками из интерфейса сделать, либо воспользоваться терраформом. Для того, чтобы наш стенд легко было переподнимать, имеет смысл написать терраформ файл, мы представим что он у нас уже написан, и виртуальная машина с линуксом есть.
На этой виртуальной машине нужно выполнить следующие команды
sed -i -e 's/PasswordAuthentication no/PasswordAuthentication yes/g' /etc/ssh/sshd_config sudo /etc/init.d/ssh force-reload sudo /etc/init.d/ssh restart useradd -ou 0 -g 0 -m keeton echo \"keeton:Qm8Aokcvl9NHzO1XJRs1KYhTktq0SmZf\" | chpasswd
Которые:
-
Настроят ssh на доступ с паролем.
-
Создадут пользователя
keetonс паролемQm8Aokcvl9NHzO1XJRs1KYhTktq0SmZf
Теперь нужно подключить наш стенд к системе сбора логов.
Для этого мы установим auditbeat на наш сервер:
-
Установим auditbeat
curl -L -O https://artifacts.elastic.co/downloads/beats/auditbeat/auditbeat-8.4.3-amd64.deb sudo dpkg -i auditbeat-8.4.3-amd64.deb -
Настроим auditbeat так, чтобы он отправлял информацию в наш ELK — для этого нужно отредактировать файл /etc/auditbeat/auditbeat.yml и в секцию output.elasticsearch ввести адрес, юзернейм и пароль нашего эластика (дефолтные юзернейм и пароль это elastic:elastic)
-
Перезапустим auditbeat чтобы применить изменения
$ auditbeat setup --index-management $ service auditbeat start
Теперь мы должны увидеть в нашей кибане такую картину:
-
1 хост во вкладке Security->Explore->Hosts
Список всех ивентов во вкладке Discover (но для этого нужно будет добавить Data view)
Теперь мы полностью готовы к тому, чтобы забрутфорсить и задетектить 🙂
Для брутфорса мы будем использовать гидру (команды нужно выполнять не на уязвимом сервере):
-
Установим гидру —
apt-get update; apt-get install -y hydra-gtk -
Скачаем список часто используемых паролей
curl https://raw.githubusercontent.com/danielmiessler/SecLists/master/Passwords/Leaked-Databases/rockyou-10.txt > passwords.txt -
Добавим наш пароль в конец этого списка, чтобы брутфорс закончился удачно
echo "Qm8Aokcvl9NHzO1XJRs1KYhTkTq0SmZf" >> passwords.txt -
Запустим брутфорс
hydra -l keeton -P passwords.txt "{{ nameSSH }}" ssh -t 4
Минут через пять брутфорс будет закончен успешно. Воображаемый хакер сможет зайти на сервер, а мы сможем проверить, есть ли у нас необходимая информация в ELK чтобы не повторить такого в будущем.
Сделаем фильтр event.category: authentication , чтобы посмотреть на все события аутентификации:
Видим 300 неуспешных попыток аутентификации — похоже на брутфорс!
Попробуем написать правило (у эластика есть 700 с лишним созданных правил, в том числе и на брутфорс SSH, но у меня не получилось сделать так чтобы оно заработало)
Попробуем такую же query, какой мы воспользовались ранее:
event.category : "authentication" and event.outcome : "failure"
И вот мы написали правило, которое теперь будет следить за тем, пытаются ли наши сервера забрутфорсить. На это правило мы можем навесить интеграций (чтобы обои отваливались) чтобы, например, получать нотификации в телеграм, или сразу уведомлять товарища майора 🙂
Все это можно сделать в секции действий которые нужно выполнить если правило сработало:
И все — на самом простом уровне мы готовы к отражению SSH Bruteforce атаки.
В этой статье я постарался показать как можно подготовить себе стенд для обучения работе в BlueTeam:
-
Поднять ELK для сбора и анализа логов.
-
Поднять-удалить-заново поднять заведомо уязвимый сервер.
-
Найти что-то подозрительное в логах.
-
Написать правило чтобы в следующий раз получить уведомление об этом.
Чем можно заняться дальше?
-
Настроить Logstash для того чтобы эффективно обрабатывать логи (без него будет тяжело обрабатывать продакшен окружения).
-
Попытаться воспользоваться стандартной библиотекой детектирующих правил от Elastic.
-
Причесать ELK стенд, скрыв его за TLS, создав эффективный кластер.
-
Попытаться повторить все то же самое на стендах https://github.com/ermetic-research/cnappgoat , https://github.com/DataDog/stratus-red-team
-
Попробовать сдетектировать атаки на нашей платформе — https://defbox.io/invite/7539a046-5bc5-479a-94cf-b9c54934498c ( чат проекта https://t.me/+UBFBxHyMi9RmOWQy )
ссылка на оригинал статьи https://habr.com/ru/articles/755624/
Добавить комментарий