Сбор событий
У нас есть машина на Astra, наш клиент. Мы хотим обеспечить сбор данных с нее
в SIEM. Вопрос — какие данные мы должны собирать?
Два источника данных:

  1. Логи системы (syslog)
  2. Журналы аудита (системные вызовы)
    Загрузка базы данных в 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
  3. Настраиваем службу 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
  4. Какие системные вызовы мы хотим ловить?
    Подключаем наше сетевое хранилище
    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
    если мне в ответ приезжает куча текста, то всё работает хорошо
  5. 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
  6. Заворачиваем 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
  7. Заворачиваем 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 уже полетели, но их там никто не ждет и не читает
  8. Отключить запись аудита в /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 выглядит, как объект с какими-то свойствами. Набор
свойств может быть разный, в зависимости от того, как мы дружим с активом.
Логика подхода к активам говорит нам о двух способах:

  1. Черный ящик — у нас нет доступа к внутренней структуре актива, а есть только
    возможно сканить его снаружи.
    Пример: у меня стоит сетевая железка, доступа туда нет, но я могу сканить ее
    порты.
    Мне это дает:
  • осознание, что это в сети есть;
  • я могу знать список открытых портов;
  • периодически из баннеров (баннер — текст, который дает служба на открытом
    порту) можно узнать, какая версия софта установлена;
  1. Белый ящик — у нас есть доступ в систему (учетная запись для доступа)
    У 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