Сбор событий
У нас есть машина на Astra, наш клиент. Мы хотим обеспечить сбор данных с нее
в SIEM. Вопрос — какие данные мы должны собирать?
Два источника данных:
- Логи системы (syslog)
- Журналы аудита (системные вызовы)
Загрузка базы данных в KB
У нас есть база SIEM Content, пока крутится колесико около нее, создать ветку
невозможно.
При выбранной базе SIEM Content нажимаем «Создать ветку»
Имя: Branch
Идентификатор: Branch
Все галочки ставим
Делаем нашу ветку установочной
Меню SIEM — Пакеты экспертизы
Слева от меню SIEM выбираю Branch
Теперь мы можем создать пакет для установки
Плюсик рядом с надписью «Наборы для установки» появится только в том
случае, если база выбрана установочной
Создаем набор для установки — нажимаем тот самый плюсик
Системное название: Install
Устанавливать в конвейер: IP-адрес
Появится набор, перехожу в «Все объекты», выделяю один объект и жму Ctrl+A
Над списком выбранных объектов есть кнопочки справа, нужна третья кнопка
справа «Наборы для установки»
Выбираю в окне мой набор и жму «Сохранить»
Выбираю слева набор Install и нажимаю кнопку «Установить в SIEM»
Если пойти в Базы данных, то мы теперь увидим, что как в SIEM Content, так и в
Branch у меня есть по две ревизии.
Дальше будет простое событие: в SIEM Content рано или поздно приедет еще
одна ревизия (или несколько), которые мы сможем затащить в Branch при
помощи кнопки «Импорт ревизий»
По результатам импорта ревизий новые объекты смешаются со старыми и будут
в разделе «Все объекты»
Это никак не повлияет на содержимое набора Install
Новые элементы появятся в разделе «Вне наборов» — новое никуда ни в какой
набор никто еще не положил
Мы создадим новый набор для установки, скопируем туда объеты из «Вне
наборов» и запустим установку.
Настройка отправки событий
Переключаемся на виртуалку client
sudo -i - Настраиваем службу auditd
nano /etc/audit/auditd.conf
Ctrl+K, Ctrl+U, Ctrl+U
log_format — дублируем
первую строчку комментируем — ставим # в самом начале
во второй строке вместо RAW пишем enriched
disp_qos — дублируем
первую строчку комментируем
во второй вместо lossy пишем lossless
name_format — дублируем
первую строчку комментируем
во второй вместо NONE пишем hostname
log_format = enriched
disp_qos = lossless
name_format = hostname
Ctrl+O, Enter, Ctrl+X
Мы пока не выключили запись журнала аудита в обычные файлы, мы это
сделаем потом. Пока нам для проверки будет удобно делать так.
systemctl restart auditd
проверяем
cat /var/log/audit/audit.log
каждая строчка должна начинаться с node=userXX-client - Какие системные вызовы мы хотим ловить?
Подключаем наше сетевое хранилище
mkdir /opt/nfs && mount -t nfs nfs.corp:/opt/nfs /opt/nfs
cp /opt/nfs/mp10/files/00-siem.rules /etc/audit/rules.d
копируем файл с настройками, какие системные вызовы и в отношении чего
писать в лог
auditctl -R /etc/audit/rules.d/00-siem.rules
просим службу аудита загрузить новые правила прямо сейчас
как проверить, что правила заработали?
grep pt_ /var/log/audit/audit.log
если мне в ответ приезжает куча текста, то всё работает хорошо - audit и systemd-journald
как я могу узнать, что сейчас systemd-journald получает данные аудита?
journalctl
Shift+G
вижу данные из audit
q для выхода
systemctl disable —now systemd-journald-audit.socket
systemctl mask systemd-journald-audit.socket
systemctl restart systemd-journald
systemctl restart auditd
как проверить, что это работает?
logger kek
journalctl
Shift+G
q - Заворачиваем audit в syslog через /dev/log
nano /etc/audisp/plugins.d/syslog.conf
active меняю на yes
args меняю на LOG_LOCAL6
файл выглядит так:
active = yes
direction = out
path = builtin_syslog
type = builtin
args = LOG_LOCAL6
format = string
Ctrl+O, Enter, Ctrl+X
systemctl restart auditd
еще раз перезапускаю auditd
Как сейчас идут события аудита?
Они идут в /dev/log, дальше в systemd-journald, дальше в syslog-ng, и дальше в
файл /var/log/syslog
И auditd напрямую их пишет еще в /var/log/audit/audit.log - Заворачиваем syslog в MP
nano /etc/syslog-ng/conf.d/10-siem.conf
(переключаюь на MP и смотрю его IP)
ip a | head -n 15
MP Льва = 172.31.116.198
filter pt_siem_filter {
(facility(local6) or priority(info))
and not facility(mail, lpr, news, uucp, cron);
};
destination siem_agent_udp { udp(«172.31.116.XXX» port(514)); };
log {
source(s_src);
filter(pt_siem_filter);
destination(siem_agent_udp);
};
Вместо XXX пишем свой адрес
Ctrl+O, Enter, Ctrl+X
systemctl restart syslog-ng
сообщения в сторону MP уже полетели, но их там никто не ждет и не читает - Отключить запись аудита в /var/log/audit/audit.log
Не хотим видеть локальный файл
nano /etc/audit/auditd.conf
Ctrl+K, Ctrl+U, Ctrl+U
дублируем строчку write_logs
первую комментируем
на второй меняем yes на no
Ctrl+O, Enter, Ctrl+X
systemctl restart auditd
ls -l /var/log/audit/audit.log
выполняем несколько раз и видим, что размер файла не меняется
В файл логов аудита мы перестали записывать, но теперь наши логи от аудита
радостно льются в syslog
Мы направили логи аудита в syslog-ng с пометкой local6
Что мы увидим в результате анализа /etc/syslog-ng/syslog-ng.conf
destination(d_syslog); — описывает /var/log/syslog
log { source(s_src); filter(f_syslog3); destination(d_syslog); };
вот эта строка говорит, что нужно отправлять логи в d_syslog
Наша задача: отредактировать фильтр f_syslog3, чтобы он не включал в себя
facility local6
nano /etc/syslog-ng/syslog-ng.conf
ищу filter f_syslog3
после mail дописываю , local6
filter f_syslog3 { not facility(auth, authpriv, mail, local6) and not filter(f_debug); };
Ctrl+O, Enter, Ctrl+X
записываю и закрываю редактор
systemctl restart syslog-ng
Включаем сбор логов на агенте
Мы должны сформулировать задачу агенту: открой порт 514 и вечно принимай
оттуда данные.
Создаю задачу сбора данных
Название: syslog
Профиль: SysLog
Сохранить и запустить
Поиск виноватых
На агенте надо убедиться, что события вообще прилетают
добавить репозиторий base в /etc/apt/sources.list
apt install tcpdump
tcpdump -ni eth0 port 514
посмотреть сетевой трафик на интерфейсе eth0 на порт 514
Работа с активами
Сбор событий не обязан никак быть связанным с активами. Хорошо, если активы
и сбор информации с них связаны, но это не обязательно. Почему?
Актив со стороны MP выглядит, как объект с какими-то свойствами. Набор
свойств может быть разный, в зависимости от того, как мы дружим с активом.
Логика подхода к активам говорит нам о двух способах:
- Черный ящик — у нас нет доступа к внутренней структуре актива, а есть только
возможно сканить его снаружи.
Пример: у меня стоит сетевая железка, доступа туда нет, но я могу сканить ее
порты.
Мне это дает:
- осознание, что это в сети есть;
- я могу знать список открытых портов;
- периодически из баннеров (баннер — текст, который дает служба на открытом
порту) можно узнать, какая версия софта установлена;
- Белый ящик — у нас есть доступ в систему (учетная запись для доступа)
У Linux-машин доступ в систему обычно означает наличие УЗ, которая может
заходить по SSH. Для хорошего сканирования (максимально полного) крайне
желательно этой УЗ дать возможность выполнять команды с правами root.
Проще всего делать УЗ для сканирования с возможностью делать sudo без ввода
пароля.
Локальные УЗ подчиняются правилам из
/etc/sudoers
/etc/sudoers.d/*
visudo для редактирования sudoers, чтобы не выстрелить себе в ногу
Желательно (крайне) для сканирования делать доменную УЗ, чтобы она была
одна и центрально управлялась. Важный момент здесь, что если нет
централизации (домена) или не хочется возиться с доменной УЗ, то при наличии
средств автоматизации (Salt, Puppet), можно управлять и локальной УЗ.
Как выглядит сеть здорового человека: она разделена на сегменты (VLAN),
каждый сегмент держит за собой один или несколько диапазонов адресов.
Задачи сканирования лучше создавать по отдельным VLAN.
Создаем задачу на сбор данных, называем blackbox, и тут у нас есть два профиля:
HostDiscoverу — сканит 5 портов, но они настолько разные, что можно сделать
вывод о том, какая система
22 порт редко открыт на Windows
135 порт редко открыт на Linux
Параметры проверки узлов: Сканирование активных узлов — Проводить
Подключаться к активам: по IP-адресу
Сетевые адреса: 172.31.116.0/24
Логика объектов: когда я собрал какие-то объекты и их свойства, то я могу
делать по ним запросы.
Например, покажи мне машины, у которых открыт порт 22
Я могу сделать это чисто мышкой (открыв любую машину, у которой открыт порт
22 и создав, например, группу)
Теперь хочу посканить в режиме белого ящика, для этого иду на клиента
создавать учетку.
Задача: сделать учетку
mp10
Qwerty78
sudo -i
adduser mp10
adduser mp10 astra-admin
добавляем пользователя в группу astra-admin
IP: 172.31.116.199
Я должен с машины mp10 подключиться по SSH к клиенту и выполнить
повышение привилегий без запроса пароля
С машины
ssh -l mp10 172.31.116.XXX
sudo -i
Сбор данных — Задачи
Название: Whitebox
Профиль: Unix Audit
Открываю учетную запись, нажимаю Добавить, заполняю
Название: mp10
Логин: mp10
Пароль дважды
Включаю повышение привилегий
Способ: sudo
MP10, выполнив сканирование whitebox, нашел FQDN, и засунул его в свойства
актива
Как надо было: выполнять PTR-запросы даже при blackbox
Давайте попробуем обновить немного софт на клиенте, чтобы увидеть разницу
Делаем в терминале, где мы зашли по SSH на клиента
sed -i s/1.7.3/1.7.4/g /etc/apt/sources.list
apt update
apt install chromium
И снова запускаю whitebox






