Мониторинг USB-накопителей на Linux с помощью Wazuh

Про мониторинг USB-накопителей

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

В блоге также есть публикация про мониторинг USB-накопителей на Windows.

Wazuh, платформа SIEM и XDR, предоставляет out-of-the-box правило для мониторинга USB-устройств на конечных точках Linux. Однако эти журналы ограничены и не содержат достаточной информации о событии, как видно на изображении ниже. Используя правила udev, можно получить расширенные журналы о событиях, связанных с USB.

Инфраструктура

  • Настроенная и готовая к использованию последняя версия виртуальной машины Wazuh OVA, которая содержит основные компоненты решения (сервер, indexer, дешборд).
  • Установленная и зарегистрированная на сервере Wazuh конечная точка Ubuntu 22.04 LTS с агентом Wazuh.

Конфигурация

Необходимо настроить конечную точку Ubuntu для использования утиліти udev, которая может генерировать расширенные журналы, когда USB-накопитель подключен к конечной точке. Также нужно настроить кастомные правила и список CDB (constant database, постоянная база данных) на сервере Wazuh, позволяя ему инициировать оповещение, когда к конечной точке Ubuntu подключается неавторизованное USB-устройство.

Конечная точка Ubuntu

Устройства Linux поставляются с утилитой udev по умолчанию. udev – менеджер девайсов для ядра Linux, который динамически управляет узлами устройств в каталоге /dev. Он отвечает за распознавание и конфигурацию девайсов при их подключении к системе или отключении от нее. Утилита udev облегчает пользователям и программам взаимодействие с аппаратными компонентами.

Необходимо создать правило udev, которое обнаруживает подключение USB-устройств к контролируемой конечной точке. Оно запускает скрипт, который записывает детали события в файл журнала, который агент Wazuh читает и пересылает на сервер Wazuh для анализа.

Следует выполнить следующие действия, чтобы создать правило и настроить агент Wazuh для сбора журналов.

1) Создать файл с названием usb_detect.sh в каталоге /var/ossec/bin/:

touch /var/ossec/bin/usb_detect.sh

2) Добавить следующий скрипт в файл /var/ossec/bin/usb_detect.sh:

#!/bin/bash

log_file="/var/log/usb_detect.json"
vendor="$ID_VENDOR"
model="$ID_MODEL"
serial="$ID_SERIAL_SHORT"
device="$DEVNAME"
devtype="$DEVTYPE"
hostname=$(hostname)

json="{\"hostname\":\"$hostname\",\"vendor\":\"$vendor\",\"model\":\"$model\",\"serial\":\"$serial\",\"device\":\"$device\",\"type\":\"$devtype\"}"

echo "$json" >> "$log_file"

Этот скрипт позволяет утилите udev собирать подробную информацию о USB-устройстве, подключенном к конечной точке. Он также записывает журнал в JSON-файл /var/log/usb_detect.json, доступный для Wazuh.

3) Изменить разрешение файла, чтобы этот скрипт не могли выполнять другие:

chmod 700 /var/ossec/bin/usb_detect.sh

4) Создать файл usb-detect.rules в каталоге /etc/udev/rules.d/:

touch /etc/udev/rules.d/usb-detect.rules

5) Добавить следующее правило в файл:

ACTION=="add", SUBSYSTEMS=="usb", RUN+="/var/ossec/bin/usb_detect.sh"

6) Выполнить наведенную ниже команду, чтобы перезагрузить правила udev:

udevadm control --reload

7) Добавить следующую конфигурацию в файл агента Wazuh /var/ossec/etc/ossec.conf, чтобы собирать журналы из файла /var/log/usb_detect.json:

<ossec_config>
  <!-- Logcollector for udev USB detected Logs -->
  <localfile>   
    <log_format>json</log_format>
    <location>/var/log/usb_detect.json</location>
  </localfile>
</ossec_config>

8) Перезапустить агент Wazuh, чтобы применить изменения:

systemctl restart wazuh-agent

Сервер Wazuh

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

Обнаружение USB-накопителей

1) Добавить следующее правило в файл /var/ossec/etc/rules/local_rules.xml:

<!-- Rule for USB monitoring in Linux-->
<group name="Linux, usb,">
  <rule id="111010" level="7">
    <field name="serial">\w+</field>
    <field name="type">usb_device</field>
    <description>A PNP device $(vendor) $(model) was connected to $(hostname).</description>
  </rule>
</group>

Где:

Правило ID 111010 обнаруживает подключение USB-накопителя к конечной точке Linux.

2) Перезапустить менеджер Wazuh, чтобы применить изменения:

systemctl restart wazuh-manager

Подключение USB-устройства к контролируемой конечной точке запускает правило, как показано ниже.

На изображении ниже показаны дополнительные сведения о USB-устройстве, подключенном к конечной точке Ubuntu, например серийный номер девайса, который нужен для создания белого списка одобренных устройств.

Фильтрация авторизованных и неавторизованных USB-накопителей

Чтобы обнаруживать, когда неавторизованные USB-накопители подключаются к контролируемой конечной точке, необходимо создать список CDB (constant database, постоянная база данных). Он содержит серийные номера авторизованных USB-накопителей, которые нужны для кастомных правил.

Для этого нужно выполнить следующие действия:

1) Создать список CDB usb-drives в каталоге /var/ossec/etc/lists/:

touch /var/ossec/etc/lists/usb-drives

2) Добавить серийный (serial) номер с двоеточием (:) в список CDB:

4C530001260524115055:

3) Добавить конфигурацию <list>etc/lists/usb-drives</list> к блоку <ruleset> файла /var/ossec/etc/ossec.conf:

<ruleset>
  <!-- Default ruleset -->
  <decoder_dir>ruleset/decoders</decoder_dir>
  <rule_dir>ruleset/rules</rule_dir>
  <rule_exclude>0215-policy_rules.xml</rule_exclude>
  <list>etc/lists/audit-keys</list>
  <list>etc/lists/amazon/aws-eventnames</list>
  <list>etc/lists/security-eventchannel</list>

  <!-- User-defined ruleset -->
  <decoder_dir>etc/decoders</decoder_dir>
  <rule_dir>etc/rules</rule_dir>
  <list>etc/lists/usb-drives</list>
</ruleset>

4) Добавить следующее правило в ранее созданную группу Linux, usb в файле /var/ossec/etc/rules/local_rules.xm:

<!-- Rule for USB monitoring in Linux-->
<group name="Linux, usb,">
  <rule id="111010" level="7">
    <field name="serial">\w+</field>
    <field name="type">usb_device</field>
    <description>A PNP device $(vendor) $(model) was connected to $(hostname).</description>
  </rule>

  <rule id="111011" level="8">
    <if_sid>111010</if_sid>
    <list field="serial" lookup="not_match_key">etc/lists/usb-drives</list>
  <description>Unauthorized PNP device $(vendor) $(model) was connected to $(hostname).</description>
  </rule>
</group>

Где:

Правило ID 111011 проводит обзор списка CDB для проверки, является ли подключенный USB-накопитель авторизованным.

5) Перезапустить менеджер Wazuh, чтобы применить изменения:

systemctl restart wazuh-manager

Тестирование конфигурации

Проверка проводится путем подключения неавторизованного USB-устройства к контролируемой конечной точке Ubuntu. Серийного номера девайса нет в списке CDB. Это запускает правило обнаружения неавторизованного USB, как показано ниже.

Подписаться на новости