- Security monitoring in Linux with Tripwire
- More Linux resources
- More about automation
- Использование Tripwire для обнаружения вторжений на сервер Ubuntu
- Вступление
- Установка Tripwire
- Инициализация базы данных
- Настройка файла политики в соответствии с системой
- Проверка конфигураций
- Настройка Email-уведомлений
- Автоматизация Tripwire с помощью Cron
- Итоги
Security monitoring in Linux with Tripwire
Photo by PhotoMIX Ltd. from Pexels
More Linux resources
Every sysadmin loses sleep every once and a while over system intrusions. Nobody wants a server they’re responsible for to be compromised. The problem is, even though you may review logs regularly, a truly effective system intrusion doesn’t leave obvious logs lying around. This makes it difficult to know definitively whether your systems are secure.
In addition to setting SELinux to Enforcing and implementing regular pentests, one of the best ways to monitor your system for security breaches is to — well, monitor your system for security breaches. If that seems easier said than done, then you need to try Tripwire. Tripwire is a file integrity monitoring tool that watches for changes to critical files on your system. This article shows you how to install, setup, and use Tripwire on your network.
Tripwire is both a company and an open-source code base. You can purchase monitoring from Tripwire, or you can use the GPLv2 code they’ve made available on GitHub. The usual trade-offs apply. If you pay for it, Tripwire does most of the hard work for you, and all you have to do is pay attention to the reports. If you implement Tripwire yourself, then you get to set it up and configure it on your own.
To install Tripwire on RHEL or CentOS, you must add the Extra Packages for Enterprise Linux (EPEL) repository. On RHEL 8, you must enable the codeready-builder option in subscription-manager :
On CentOS, you should enable PowerTools :
With EPEL now added to your repository list, install Tripwire :
Setting a hostname
Before configuring Tripwire, you should set a hostname for your server if it doesn’t already have one. Hostnames are a frequent point of confusion, so read my article about setting hostnames to make sure you’re clear on what you’re setting. On CentOS, RHEL, and Fedora, you can set a hostname with hostnamectl :
Next, you must generate encryption keys for Tripwire. After all, the point of Tripwire is to prevent attackers from covering their tracks, so Tripwire data must be strongly encrypted.
First, create a local key with the twadmin tool:
Next, create a site key:
In both cases, you must provide a passphrase for each key. Keep these passphrases private and safe!
More about automation
Tripwire uses two different keys for encryption: the local key, which is unique to each server, and a site key, which you can use across all systems within your organization. The site key is an important feature because it enables an IT manager to dictate a single security policy for the organization, and it can be updated centrally, signed with the site key, and then distributed with Ansible or scp for use on every server. Each server admin still has a unique local key, though, so even though the security policy file can’t be changed, they can still access Tripwire for updates and reports.
Tripwire configuration file
Next, you need to create a basic configuration file for Tripwire. Most of the defaults in the config are acceptable, and nothing needs to be changed unless you know your system differs in some significant way from what you see in the example config file provided at /etc/tripwire/twcfg.txt . By default, Tripwire uses sendmail to email you alerts. If you’re using postfix, there’s no need to change it, however, because postfix provides sendmail aliases. Also defined in the config file are the locations of your encryption keys and policy file, so verify that those are correct.
When you’re happy with the configuration options, use twadmin to validate the config text and write it out to a file called /etc/tripwire/tw.cfg , which is signed with the site key. Signing the configuration file requires the passphrase to your site key.
Policy file syntax
The policy file is where you put in most of the work for Tripwire. Your Tripwire policy dictates which files to monitor and which to ignore, and which lie somewhere in between. Both extremes are equally important. If your daily Tripwire reports send a false positive for every single user file that changes throughout a workday, then you’ll quickly learn to ignore your Tripwire reports altogether.
The sample policy file bundled with the EPEL install of Tripwire is built around a full install of a Fedora Workstation. You must customize it for your system unless you’re running a full install of Fedora Workstation, but reading it helps give you an idea of what a standard policy file contains. To decode the Tripwire notation, review the twpolicy(4) man page.
Policy files can be complex, and it might help to think of it more like a Sass or Makefile than a configuration file. You can create variables , or use some default ones, and rules , and even conditionals to govern how Tripwire treats individual directories and files.
For instance, the ReadOnly variable defines a rule for files meant to be read-only. In this context, «read-only» doesn’t mean its file permissions are set to r— (that is, 400 ), but that there’s generally no change expected from the time of Tripwire’s initialization to a daily report, or a report on a day-to-day basis.
A rule is structured as a line terminated by a semi-colon ( ; ) and delimited by an arrow ( -> ). This block of code sets the Tripwire executables to ReadOnly :
The sample file from Fedora uses variables to define most rules. For example:
So its entries to monitor Tripwire binaries are:
The two examples serve exactly the same purpose, and the implementation is just different.
Use the sample policy file as a starting point and construct a policy to monitor your system.
Generating a policy file
Exclusively for the sake of testing, add this line to the Tripwire Data Files section:
Create a critical test file named secrets :
Generate your policy file with twadmin :
Enter your site key passphrase when prompted.
This results in a signed and encrypted file, /etc/tripwire/tw.pol .
With your keys generated, your configuration set, and a policy file in place, you can now initialize Tripwire:
Enter your local key passphrase when prompted.
If you see warnings, read them carefully and correct the errant entries in your policy file. It’s not uncommon for your first attempt at a policy file, especially when it’s based on an existing one, to reference files that don’t actually exist on your system. You can deal with this by installing the missing files or by removing the references to them from your /etc/tripwire/twpol.txt master file.
If you had to make changes, update your policy file by regenerating it, and then re-initialize your database:
You should do this until you have reached a good starting place. Once you’ve got a sane starting database, you shouldn’t re-initialize your database, but instead use the tripwire command to check the integrity of your system and, optionally, override acceptable differences with the —interactive option:
The EPEL install of Tripwire creates cron jobs to run Tripwire reports, and to email reports to root . You can run a manual report, too:
This command saves a report file to /var/lib/tripwire/reports (or whatever location you set in the configuration file). To view this file, use the twprint command:
To see a report with an error, make a change the secrets test file and run a report:
Then view the report:
Assuming you’re happy with the modification to your test file, you can update Tripwire’s database:
Protect your systems
Tripwire is a highly-precise and extremely pedantic security monitor. Stop struggling to parse logs for signs of intruders and make Tripwire work for you. With Tripwire, when something changes on a system, you’ll know about it, and you can deal with it accordingly.
[ Want to learn more about security? Check out the IT security and compliance checklist. ]
Источник
Использование Tripwire для обнаружения вторжений на сервер Ubuntu
Вступление
Безопасность сервера – один из важнейших вопросов системного администрирования. Даже настроенный фаервол и fail2ban, безопасные сервисы и ограниченные приложения не дают стопроцентной гарантии того, что сервер сможет отразить любую хакерскую атаку.
Работа хостовой системы обнаружения вторжений (host-based intrusion detection system, или HIDS) заключается в накоплении сведений о файловой системе и конфигурациях компьютера; она хранит эту информацию для отслеживания и проверки текущего состояния системы. Отличия между рабочим и текущим состоянием системы могут быть признаком того, что данный сервер подвержен опасности взлома.
Tripwire – популярная хостовая система обнаружения вторжений в Linux. Данная программа отслеживает множество различных точек файловой системы в целях выявления несанкционированных изменений.
Это руководство охватывает установку и настройку tripwire на Ubuntu 12.04.
Примечание: в связи с характером систем обнаружения вторжений данное руководство лучше выполнять на новом, недавно созданном сервере.
Установка Tripwire
К счастью, Tripwire можно найти в репозитории Ubuntu по умолчанию. Для установки программы используйте apt-get:
sudo apt-get update
sudo apt-get install tripwire
Данная установка выполнит настройку некоторых необходимых пакетов.
Во-первых, будет настроено почтовое приложение, загруженное как зависимость. Чтобы настроить уведомления по электронной почте, выберите ” internet site”.
Затем появится вопрос, нужно ли установить фразовые пароли во время инсталляции. Выберите “yes”. Также Tripwire спросит, нужно ли создать конфигурационный файл (выберите “yes”), после чего будет задан аналогичный вопрос о файле политики (опять же, “yes”).
Затем нужно выбрать и подтвердить фразовый пароль для ключа сайта. Для защиты конфигурационных файлов Tripwire использует два ключа:
- ключ сайта; этот ключ используется для защиты конфигурационных файлов. Необходимо убедиться, что конфигурационные файлы не были изменены; в противном случае системе обнаружения нельзя доверять. Поскольку одни и те же файлы конфигурации можно использовать сразу на нескольких серверах, этот ключ вместе с файлами можно использовать на разных серверах.
- локальный ключ; он используется на каждой машине для запуска исполняемых файлов. Он гарантирует, что исполняемые файлы не запускаются без согласия пользователя.
Инициализация базы данных
После завершения установки нужно инициализировать базу данных. Как и большинство программ безопасности, Tripwire поставляется с общими, но строгими настройками по умолчанию (которые, возможно, понадобится подогнать под потребности конкретного сервера).
Если ранее ответ на вопрос “создать файл политики во время установки?” был отрицательным, нужно создать этот файл сейчас, выполнив команду:
sudo twadmin —create-polfile /etc/tripwire/twpol.txt
Будет запрошен установленный ранее фразовый пароль.
Вышеприведенная команда создаст зашифрованный файл политики из простого текстового файла, указанного в каталоге /etc/tripwire/. Этот зашифрованный файл Tripwire читает при запуске своих проверок.
Теперь нужно инициировать базу данных, которую tripwire будет использовать для подтверждения версии системы (при этом tripwire читает только что созданный файл политики и проверяет указанные в нем точки).
Поскольку этот файл пока что не был специализирован для данной системы, будет выведено множество предупреждений, ложных срабатываний и ошибок. Их можно использовать в качестве подсказок для того, чтобы быстро отладить содержимое конфигурационного файла.
Основной способ инициировать базу данных:
sudo tripwire —init
Это создаст файл базы данных и сообщит о конфигурациях, которые необходимо скорректировать.
На данном этапе рекомендуется сохранить выбранные конфигурации и поместить все необходимые файлы в конфигурационный каталог. Для этого выполните проверку и разместите файлы, перечисленные в файле с именем test_results, в конфигурационном каталоге.
Просмотрев этот файл, можно увидеть такие записи:
less /etc/tripwire/test_results
Filename: /etc/rc.boot
Filename: /root/mail
Filename: /root/Mail
Filename: /root/.xsession-errors
. . .
Настройка файла политики в соответствии с системой
Теперь, когда список файлов с настройками Tripwire получен, можно перейти к файлу политики и отредактировать его, чтобы предотвратить ранее выведенные ошибки и ложные срабатывания.
Откройте простой текстовый файл политики в редакторе (нужны root-привилегии):
sudo nano /etc/tripwire/twpol.txt
Найдите все файлы, которые были выведены в test_results. Раскомментируйте нужные строки таким образом, чтобы настройки совпали.
В разделе “Boot Scripts” нужно раскомментировать все строки /etc/rc.boot, поскольку таковых нет в Ubuntu:
(
rulename = «Boot Scripts»,
severity = $(SIG_HI)
)
<
/etc/init.d -> $(SEC_BIN) ;
#/etc/rc.boot -> $(SEC_BIN) ;
/etc/rcS.d -> $(SEC_BIN) ;
Иногда домашний каталог root содержит огромное количество файлов, которые необходимо раскомментировать. Запомните: все, чего нет в системе, нужно раскомментировать.
(
rulename = «Root config files»,
severity = 100
)
<
/root -> $(SEC_CRIT) ; # Catch all additions to /root
#/root/mail -> $(SEC_CONFIG) ;
#/root/Mail -> $(SEC_CONFIG) ;
#/root/.xsession-errors -> $(SEC_CONFIG) ;
#/root/.xauth -> $(SEC_CONFIG) ;
#/root/.tcshrc -> $(SEC_CONFIG) ;
#/root/.sawfish -> $(SEC_CONFIG) ;
#/root/.pinerc -> $(SEC_CONFIG) ;
#/root/.mc -> $(SEC_CONFIG) ;
#/root/.gnome_private -> $(SEC_CONFIG) ;
#/root/.gnome-desktop -> $(SEC_CONFIG) ;
#/root/.gnome -> $(SEC_CONFIG) ;
#/root/.esd_auth -> $(SEC_CONFIG) ;
#/root/.elm -> $(SEC_CONFIG) ;
#/root/.cshrc -> $(SEC_CONFIG) ;
/root/.bashrc -> $(SEC_CONFIG) ;
#/root/.bash_profile -> $(SEC_CONFIG) ;
#/root/.bash_logout -> $(SEC_CONFIG) ;
/root/.bash_history -> $(SEC_CONFIG) ;
#/root/.amandahosts -> $(SEC_CONFIG) ;
#/root/.addressbook.lu -> $(SEC_CONFIG) ;
#/root/.addressbook -> $(SEC_CONFIG) ;
#/root/.Xresources -> $(SEC_CONFIG) ;
#/root/.Xauthority -> $(SEC_CONFIG) -i ; # Changes Inode number on login
#/root/.ICEauthority -> $(SEC_CONFIG) ;
>
Во время проверки Tripwire может пожаловаться на дескрипторы файлов файловой системы /proc. Данные файлы постоянно изменяются, что будет регулярно вызывать ложное срабатывание, если не изменить конфигурации.
В разделе “Devices & Kernel information” найдите файловую систему /proc, которую необходимо проверить:
Однако, Tripwire будет проверять каждый файл данной системы, чего делать вовсе не нужно. Вместо этого удалите данную спецификацию и внесите параметры конфигурации для всех директорий системы /proc, которые обязательно нужно проверить:
<
/dev -> $(Device) ;
#/proc -> $(Device) ;
/proc/devices -> $(Device) ;
/proc/net -> $(Device) ;
/proc/tty -> $(Device) ;
/proc/sys -> $(Device) ;
/proc/cpuinfo -> $(Device) ;
/proc/modules -> $(Device) ;
/proc/mounts -> $(Device) ;
/proc/dma -> $(Device) ;
/proc/filesystems -> $(Device) ;
/proc/interrupts -> $(Device) ;
/proc/ioports -> $(Device) ;
/proc/scsi -> $(Device) ;
/proc/kcore -> $(Device) ;
/proc/self -> $(Device) ;
/proc/kmsg -> $(Device) ;
/proc/stat -> $(Device) ;
/proc/loadavg -> $(Device) ;
/proc/uptime -> $(Device) ;
/proc/locks -> $(Device) ;
/proc/meminfo -> $(Device) ;
/proc/misc -> $(Device) ;
>
В этой части файла нужно также обратить внимание на файловую систему /dev/pts. Tripwire не станет проверять ее по умолчанию, поскольку указано проверить только систему /dev, а /dev/pts – совсем другая файловая система. Чтобы Tripwire проверил и эту систему, ее нужно задать:
<
/dev -> $(Device) ;
/dev/pts -> $(Device) ;
#/proc -> $(Device) ;
/proc/devices -> $(Device) ;
/proc/net -> $(Device) ;
/proc/tty -> $(Device) ;
. . .
Последнее, что нужно раскомментировать – это строки /var/run и /var/lock (чтобы система не отмечала нормальные изменения файловой системы, внесенные сервисами):
(
rulename = «System boot changes»,
severity = $(SIG_HI)
)
<
#/var/lock -> $(SEC_CONFIG) ;
#/var/run -> $(SEC_CONFIG) ; # daemon PIDs
/var/log -> $(SEC_CONFIG) ;
>
Сохраните внесенные изменения и закройте файл.
Завершив редактирование файла, нужно активировать внесенные конфигурации; это делается путем воссоздания зашифрованного файла политики, который читает Tripwire:
sudo twadmin -m P /etc/tripwire/twpol.txt
После того, как нужный файл был создан, необходимо повторно инициализировать базу данных , чтобы новые конфигурации выполнялись:
sudo tripwire —init
Please enter your local passphrase:
Parsing policy file: /etc/tripwire/tw.pol
Generating the database.
*** Processing Unix File System ***
Wrote database file: /var/lib/tripwire/tripit.twd
The database was successfully generated.
Все выведенные ранее предупреждения теперь не должны появиться. В противном случае необходимо вернуться в /etc/tripwire/twpol.txt и отредактировать его снова таким образом, чтобы предупреждения исчезли.
Проверка конфигураций
Если при инициализации базы данных не появилось никаких жалоб на конфликты, то файл политики соответствует системным настройкам. Тем не менее, нужно запустить проверку, чтобы узнать, как выглядит отчет Tripwire, и еще раз убедиться, что никаких предупреждений действительно нет:
Базовый синтаксис запуска проверки:
sudo tripwire —check
Выведенный результат должен указать, что в данной системе не было обнаружено никаких ошибок или изменений.
Такой результат проверки – доказательство того, что конфигурации полностью правильны. Теперь нужно очистить некоторые файлы и удалить из системы конфиденциальную информацию.
Удалите созданный файл test_results:
sudo rm /etc/tripwire/test_results
Также нужно удалить простые текстовые конфигурационные файлы. Не бойтесь удалять их – при необходимости их можно легко восстановить из зашифрованных файлов с помощью пароля.
Для восстановления простого текстового конфигурационного файла передайте соответствующий зашифрованный файл в twadmin (точно так же, как это делается для создания зашифрованной версии файла). Теперь просто конвертируйте его в текстовый файл:
sudo sh -c ‘twadmin —print-polfile > /etc/tripwire/twpol.txt’
Попробуйте сделать это сейчас; переместите текстовую версию конфигурационного файла в хранилищ резервных копий, а затем воссоздайте его с помощью зашифрованной версии:
sudo mv /etc/tripwire/twpol.txt /etc/tripwire/twpol.txt.bak
sudo sh -c ‘twadmin —print-polfile > /etc/tripwire/twpol.txt’
Если все сработало должным образом, спокойно удаляйте текстовые версии конфигурационных файлов:
sudo rm /etc/tripwire/twpol.txt
sudo rm /etc/tripwire/twpol.txt.bak
Настройка Email-уведомлений
Данное руководство показывает, как настроить tripwire, чтобы он запускался ежедневно и присылал электронные уведомления. В процессе настройки можно также научиться обновлять базу данных после внесения изменений в систему.
Чтобы активировать функцию автоматических уведомлений, используйте команду mail. На данный момент она не установлена, потому ее нужно скачать из репозиториев.
Кроме того, это отлично демонстрирует реакцию tripwire на изменения в системе.
Для установки файлов используйте:
sudo apt-get install mailutils
Установив команду, проверьте возможность данной системы отправлять отчеты tripwire по почте. Данный отчет будет содержать информацию об изменениях и предупреждения, поскольку только что было установлено новое программное обеспечение, о чем tripwire не был предупрежден:
sudo tripwire —check | mail -s «Tripwire report for `uname -n`» ваш_email@domain.com
Вскоре по электронной почте придет отчет с подробной информацией о новой, только что установленной программе mail. Это очень хорошо: во-первых, это означает, что Tripwire отслеживает изменения в файловой системе; во-вторых, установленное программное обеспечение также работает.
Теперь подтвердите внесенные изменения программного обеспечения путем интерактивной проверки, что обновит базу данных.
Для этого наберите:
sudo tripwire —check —interactive
Это запустит обычную процедуру проверки, но в конце данная процедура не выводит отчет на экран, а копирует его в текстовый файл и открывает в редакторе по умолчанию.
Данный отчет предоставляет подробную информацию о каждом измененном файле, что чрезвычайно полезно в случае возникновения реальных проблем безопасности, но на данный момент она, наверное, не слишком важна.
Полезную информацию можно найти в начале отчета. После короткого вступления находятся строки с флаговыми кнопками для каждого из добавленных или измененных файлов:
Rule Name: Other binaries (/usr/sbin)
Severity Level: 66
——————————————————————————-
Remove the «x» from the adjacent box to prevent updating the database
with the new values for this object.
Added:
[x] «/usr/sbin/maidag»
Modified:
[x] «/usr/sbin»
. . .
Данные флаговые кнопки указывают на необходимость обновить базу данных, чтобы активировать изменения в файлах. Проверьте каждое окошко с меткой “х” и убедитесь, что со всеми внесенными изменениями все в порядке.
Заметив ошибку, уберите метку “х”; в таком случае указанный файл не будет обновлен в базе данных. При следующем запуске tripwire данный файл снова будет отмечен флажком.
Указав, какие изменения нужно внести в БД, сохраните и закройте файл.
На данном этапе будет запрошен фразовый пароль, чтобы tripwire мог обновить файлы базы данных.
В случае если все изменения были приняты, то заново запрошенный отчет будет намного короче, а список изменений будет пуст.
Автоматизация Tripwire с помощью Cron
Убедившись, что все работает должным образом, можно настроить cron, который будет запускать проверку Tripwire каждый день.
Рекомендуется использовать crontab root-пользователя, поскольку правки в системном cronjob могут быть уничтожены при обновлении системы.
Проверьте, существует ли у root-пользователя crontab, выполнив команду:
Если crontab уже существует, его нужно конвертировать в файл и создать его резервную копию:
sudo sh -c ‘crontab -l > crontab.bad’
Затем отредактируйте crontab, набрав:
Если crontab запущен впервые, он спросит, какой редактор использовать. Как правило, используется достаточно надежный nano.
Затем откроется файл, в котором можно настроить автоматический запуск tripwire. Чтобы спланировать ежедневный запуск tripwire, нужно просто выбрать время запуска (как правило, сервисы запускаются в непиковое время, чтобы не перегружать часы пик).
мин час * * * команда
Команда, которую нужно выполнить – та же, что была использована ранее, чтоб получить отчет. Теперь использовать sudo нет необходимости, поскольку все это будет запущено как root.
Итак, чтобы tripwire запускался ежедневно в 3:30 am, поместите в файл подобную строку:
30 3 * * * /usr/sbin/tripwire —check | mail -s «Tripwire report for `uname -n`» ваш_email@domain.com
Отредактируйте данную строку согласно требованиям.
Итоги
Итак, теперь система обнаружения вторжений установлена на сервер, автоматически запускается и отправляет отчеты о внесенных в систему изменениях. Рекомендуется ежедневно проверять данные отчеты, вовремя обновлять базу данных tripwire, а также отслеживать подозрительную активность.
Источник