В этом руководстве вы узнаете, как обнаружить изменения критических файлов в Linux с помощью Auditbeat и ELK.
Auditbeat – cогласно информации на оф сайте, собирает данные Linux и следит за целостностью файлов.
Он передает эти события в режиме реального времени остальной части стека Elastic для дальнейшего анализа.
Это позволяет выяснить, кто был действующим лицом и какое действие выполнили и когда.
- Обнаружение изменений критических файлов на Linux с помощью Auditbeat и ELK
- Установка и настройка стека ELK
- Установка Auditbeat на хост
- Установка Auditbeat на системы на базе Ubuntu/Debian
- Установка Auditbeat на системы на базе RHEL
- Настройка подключения Auditbeat к Elasticsearch
- Настройка Auditbeat для сбора данных аудита
- Проверка конфигурации Auditbeat
- Загрузка шаблона индекса Auditbeat и дашбордов визуализации в Elasticsearch
- Настройка ведения логов Auditbeat
- Запуск Auditbeat
Обнаружение изменений критических файлов на Linux с помощью Auditbeat и ELK
Установка и настройка стека ELK
Для начала вам необходимо иметь работающий стек ELK.
🐧 Настройка кластера Elasticsearch на CentOS 8/7 | Ubuntu 20.04 / 18.04 с Ansible
Установка Auditbeat на хост
Чтобы иметь возможность обнаруживать изменения критических файлов в Linux с помощью Auditbeat и ELK, вам необходимо установить Auditbeat на хост, который вы отслеживаете.
В этом руководстве мы будем использовать два хоста, Ubuntu и Rocky Linux vms в качестве удаленных хостов для мониторинга любых изменений в критических файлах.
Установка Auditbeat на системы на базе Ubuntu/Debian
Выполните приведенные ниже команды для установки Auditbeat на системы на базе Ubuntu/Debian;
apt install gnupg2 apt-transport-https -y
wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | gpg --dearmor > /etc/apt/trusted.gpg.d/elastic.gpg
echo "deb https://artifacts.elastic.co/packages/7.x/apt stable main" > /etc/apt/sources.list.d/elastic-7.x.list
apt update
apt install auditbeat -y
Установка Auditbeat на системы на базе RHEL
Выполните приведенные ниже команды для установки Auditbeat на системы на базе RHEL;
rpm --import https://packages.elastic.co/GPG-KEY-elasticsearch
cat > /etc/yum.repos.d/elastic.repo << EOL [elastic-7.x] name=Elastic repository for 7.x packages baseurl=https://artifacts.elastic.co/packages/7.x/yum gpgcheck=1 gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch enabled=0 autorefresh=1 type=rpm-md EOL
yum --enablerepo=elastic-7.x install auditbeat -y
Настройка подключения Auditbeat к Elasticsearch
После завершения установки откройте файл конфигурации Auditbeat для редактирования;
Перейдите к разделу конфигурации Elasticsearch Output;
... ... # ---------------------------- Elasticsearch Output ---------------------------- output.elasticsearch: # Array of hosts to connect to. hosts: ["localhost:9200"] # Protocol - either `http` (default) or `https`. #protocol: "https" # Authentication credentials - either API key or username/password. #api_key: "id:api_key" #username: "elastic" #password: "changeme" ...
Установите конфигурации вывода в зависимости от того, как настроен ваш Elasticsearch.
В моей настройке мне просто нужно обновить IP-адрес и порт Elasticsearch, заменив localhost:9200 на данные подключения Elasticsearch; 192.168.58.22:9200.
... ... # ---------------------------- Elasticsearch Output ---------------------------- output.elasticsearch: # Array of hosts to connect to. hosts: ["192.168.58.22:9200"] # Protocol - either `http` (default) or `https`. #protocol: "https" # Authentication credentials - either API key or username/password. #api_key: "id:api_key" #username: "elastic" #password: "changeme" ...
Сохраните изменения и выйдите из файла конфигурации.
Убедитесь, что порт Elasticsearch открыт и к нему можно подключиться;
nc -nvz 192.168.58.22 9200
Затем проверьте соединение Auditbeat с Elasticsearch (убедитесь, что служба auditbeat не запущена до выполнения этой команды);
auditbeat test output
elasticsearch: http://192.168.58.22:9200... parse url... OK connection... parse host... OK dns lookup... OK addresses: 192.168.58.22 dial up... OK TLS... WARN secure connection disabled talk to server... OK version: 7.16.0
Настройка Auditbeat для сбора данных аудита
Далее необходимо настроить Auditbeat для сбора данных системного аудита, которые должны быть отправлены в Elasticsearch.
В стандартном файле конфигурации Auditbeat, /etc/auditbeat/auditbeat.yml, настройки по умолчанию для Auditbeat показаны ниже;
# =========================== Modules configuration ============================ auditbeat.modules: - module: auditd # Load audit rules from separate files. Same format as audit.rules(7). audit_rule_files: [ '${path.config}/audit.rules.d/*.conf' ] audit_rules: | ## Define audit rules here. ## Create file watches (-w) or syscall audits (-a or -A). Uncomment these ## examples or add your own rules. ## If you are on a 64 bit platform, everything should be running ## in 64 bit mode. This rule will detect any use of the 32 bit syscalls ## because this might be a sign of someone exploiting a hole in the 32 ## bit API. #-a always,exit -F arch=b32 -S all -F key=32bit-abi ## Executions. #-a always,exit -F arch=b64 -S execve,execveat -k exec ## External access (warning: these can be expensive to audit). #-a always,exit -F arch=b64 -S accept,bind,connect -F key=external-access ## Identity changes. #-w /etc/group -p wa -k identity #-w /etc/passwd -p wa -k identity #-w /etc/gshadow -p wa -k identity ## Unauthorized access attempts. #-a always,exit -F arch=b64 -S open,creat,truncate,ftruncate,openat,open_by_handle_at -F exit=-EACCES -k access #-a always,exit -F arch=b64 -S open,creat,truncate,ftruncate,openat,open_by_handle_at -F exit=-EPERM -k access - module: file_integrity paths: - /bin - /usr/bin - /sbin - /usr/sbin - /etc - module: system datasets: - package # Installed, updated, and removed packages period: 2m # The frequency at which the datasets check for changes - module: system datasets: - host # General host information, e.g. uptime, IPs - login # User logins, logouts, and system boots. - process # Started and stopped processes - socket # Opened and closed sockets - user # User information # How often datasets send state updates with the # current state of the system (e.g. all currently # running processes, all open sockets). state.period: 12h # Enabled by default. Auditbeat will read password fields in # /etc/passwd and /etc/shadow and store a hash locally to # detect any changes. user.detect_password_changes: true # File patterns of the login record files. login.wtmp_file_pattern: /var/log/wtmp* login.btmp_file_pattern: /var/log/btmp*
Auditbeat поддерживает различные модули, которые упрощают сбор, разбор и визуализацию различных данных аудита.
К таким модулям относятся:
- Auditd: определен как –
module: auditd
.. Модуль получает события аудита от Linux Audit , который является частью ядра Linux. - Целостность файла: определяется –
module: file_integrity
в конфигурационном файле Auditbeat. Этот модуль посылает события, когда файл изменяется (создается, обновляется или удаляется) на диске. События содержат метаданные файла и хэши. По умолчанию он отслеживает следующие каталоги;
/bin
/usr/bin
/sbin
/usr/sbin
/etc
System: определяется- module: system
в конфигурационном файле. - Этот модуль собирает различную информацию о системе, связанную с безопасностью.
В этой установке мы будем использовать конфигурации по умолчанию.
Если вы хотите отслеживать другой файл/каталог на предмет изменений целостности, добавьте его в модуль file_integrity.
Проверка конфигурации Auditbeat
Каждый раз, когда вы вносите изменения в конфигурацию Auditbeat, убедитесь, что вы проверили конфигурацию.
auditbeat test config
Если в выводе будет Config OK, значит, все в порядке.
Загрузка шаблона индекса Auditbeat и дашбордов визуализации в Elasticsearch
Выполните приведенную ниже команду для загрузки шаблона индекса Auditbeat:
auditbeat setup --index-management -E output.logstash.enabled=false -E 'output.elasticsearch.hosts=["192.168.58.22:9200"]' -E setup.kibana.host=192.168.58.22:5601
Вывод:
Index setup finished.
Выполните эту команду, чтобы загрузить дашборды визуализации в Elasticsearch;
auditbeat setup -e -E output.logstash.enabled=false -E output.elasticsearch.hosts=['192.168.58.22:9200'] -E setup.kibana.host=192.168.58.22:5601
Настройка ведения логов Auditbeat
Выполните приведенную ниже команду для обновления журналов Auditbeat;
cat >> /etc/auditbeat/auditbeat.yml << EOL logging.level: info logging.to_files: true logging.files: path: /var/log/auditbeat name: auditbeat keepfiles: 7 permissions: 0644 EOL
Обновим ограничение на размер исполняемого файла процесса, который будет хэшироваться.
По умолчанию это значение равно “100 Мб”.
При значении по умолчанию вы можете увидеть предупреждение, например:
failed to hash executable /usr/share/auditbeat/bin/auditbeat for PID 5888: failed to hash file /usr/share/auditbeat/bin/auditbeat: hasher: file size 111924496 exceeds max file size
sed -i '/ state.period:/a\ process.hash.scan_rate_per_sec: 50 MiB\n process.hash.max_file_size: 250 MiB\n process.hash.hash_types: [sha1]' /etc/auditbeat/auditbeat.yml
Запуск Auditbeat
Теперь вы можете запустить и включить службу Auditbeat;
systemctl enable --now auditbeat
Проверка состояния;
systemctl status auditbeat
● auditbeat.service - Audit the activities of users and processes on your system. Loaded: loaded (/lib/systemd/system/auditbeat.service; enabled; vendor preset: enabled) Active: active (running) since Thu 2021-12-09 20:46:09 EAT; 3s ago Docs: https://www.elastic.co/beats/auditbeat Main PID: 2621 (auditbeat) Tasks: 5 (limit: 1133) Memory: 41.8M CPU: 109ms CGroup: /system.slice/auditbeat.service └─2621 /usr/share/auditbeat/bin/auditbeat --environment systemd -c /etc/auditbeat/auditbeat.yml --path.home /usr/share/auditbeat --path.config /etc/auditbeat > Dec 09 20:46:09 debian11 systemd[1]: Started Audit the activities of users and processes on your system..
см. также:
- ⏳ Невозможно загрузить ОС Linux из-за Auditd (CentOS / RHEL)
- 📨 Как отправить выбранные события аудита в определенные файлы или хосты с помощью rsyslog & auditd
- ⏰ Сообщения Auditd заполняют /var/log/messages
- Как игнорировать / отключать определенные записи журнала auditd
- Как контролировать запуск / остановку службы с помощью auditd
- Как проверить все команды, выполняемые в системе Linux, с помощью auditd
- Как отследить, кто удаляет файл в CentOS / RHEL, используя Auditd
- Как исключить определенных пользователей, группы или службы с помощью Auditd для аудита системных вызовов