Site icon 8HOST.COM

Мониторинг безопасности системы с помощью osquery в Ubuntu 16.04

osquery – это открытый инструмент безопасности, который превращает операционную систему в единую базу данных с таблицами, которым можно отправлять запросы с помощью SQL-подобных операторов. С помощью этих запросов можно отслеживать целостность файлов, проверять состояние и конфигурацию брандмауэра, выполнять проверки безопасности целевого сервера и многое другое.

Это кросс-платформенное приложение с поддержкой последних версий macOS, Windows 10, CentOS и Ubuntu. Проект разрабатывается командой Facebook. Согласно официальному описанию osquery является фреймворком на основе SQL для мониторинга и аналитики операционной системы.

osquery позволяет запускать команды типа select * from logged_in_users ;.

+-----------+----------+-------+------------------+------------+------+
| type      | user     | tty   | host             | time       | pid  |
+-----------+----------+-------+------------------+------------+------+
| login     | LOGIN    | ttyS0 |                  | 1483580429 | 1546 |
| login     | LOGIN    | tty1  |                  | 1483580429 | 1549 |
| user      | root     | pts/0 | 24.27.68.82      | 1483580584 | 1752 |
| user      | 8host    | pts/1 | 11.11.11.11      | 1483580770 | 4057 |
| boot_time | reboot   | ~     | 4.4.0-57-generic | 1483580419 | 0    |
| runlevel  | runlevel | ~     | 4.4.0-57-generic | 1483580426 | 53   |
+-----------+----------+-------+------------------+------------+------+

osquery можно использовать в качестве средства для мониторинга безопасности системы и обнаружения вторжений на сервере.

Установка osquery дает доступ к следующим компонентам:

osqueryi и osqueryd являются независимыми инструментами. Они не взаимодействуют друг с другом, потому их можно использовать отдельно. Большинство флагов и параметров, необходимых для запуска, одинаковы дял всех компонентов. Вы можете запустить osqueryi с помощью конфигурационного файла osqueryd, чтобы настроить среду без большого количества опций командной строки.

Данный мануал поможет:

Логи демона osqueryd нужно отправлять на внешние конечные точки логирования, для правильной настройки которых требуется дополнительная экспертиза. Этот мануал не охватывает эту конфигурацию, но поможет настроить и запускать демон и сохранить результаты локально.

Требования

1: Установка osquery

osquery можно скомпилировать из исходного кода или установить с помощью менеджера пакетов. Репозиторий Ubuntu готовых пакетов не предлагает, потому нужно добавить в систему официальный репозиторий osquery для Ubuntu.

Добавьте открытый ключ репозитория:

sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 1484120AC4E9F8A1A577AEEE97A80C63C9D8B80B

Добавьте репозиторий:

sudo add-apt-repository "deb [arch=amd64] https://osquery-packages.s3.amazonaws.com/xenial xenial main"

Обновите индекс пакетов:

sudo apt-get update

Установите osquery:

sudo apt-get install osquery

Из коробки osquery умеет мало полезного, приложение не относится к автоматически конфигурируемому ПО. Чтобы использовать интерактивную оболочку или демона, необходимо передать флаги и параметры с помощью командной строки, либо через файл конфигурации. Чтобы просмотреть флаги и параметры, доступные для демона, введите:

osqueryd --help

В выводе команды вы найдете десятки флагов командной строки и множество параметров конфигурации. Ниже приведен фрагмент вывода этой команды.

osquery 2.1.2, your OS as a high-performance relational database
Usage: osqueryd [OPTION]...
osquery command line flags:
--flagfile PATH                           Line-delimited file of additional flags
--config_check                            Check the format of an osquery config and exit
--config_dump                             Dump the contents of the configuration
--config_path VALUE                       Path to JSON config file
--config_plugin VALUE                     Config plugin name
--config_tls_endpoint VALUE               TLS/HTTPS endpoint for config retrieval
--config_tls_max_attempts VALUE           Number of attempts to retry a TLS config/enroll request
--config_tls_refresh VALUE                Optional interval in seconds to re-read configuration
--daemonize                               Run as daemon (osqueryd only)
...
...
osquery configuration options (set by config or CLI flags):
--audit_allow_config                      Allow the audit publisher to change auditing configuration
--audit_allow_sockets                     Allow the audit publisher to install socket-related rules
--audit_persist                           Attempt to retain control of audit
--aws_access_key_id VALUE                 AWS access key ID
--aws_firehose_period VALUE               Seconds between flushing logs to Firehose (default 10)
--aws_firehose_stream VALUE               Name of Firehose stream for logging
--aws_kinesis_period VALUE                Seconds between flushing logs to Kinesis (default 10)
--aws_kinesis_random_partition_key        Enable random kinesis partition keys
--aws_kinesis_stream VALUE                Name of Kinesis stream for logging
--aws_profile_name VALUE                  AWS profile for authentication and region configuration
--aws_region VALUE                        AWS region

Чтобы просмотреть дополнительные флаги командной строки, предназначенные для интерактивной оболочки, введите:

osqueryi --help

Запуск osqueryi – это самый простой способ просмотра и запроса таблиц osquery, доступных из коробки. Для примера запустите приложение, используя следующую команду:

osqueryi --verbose

Эта команда откроет интерактивную оболочку, где вы увидите такой результат:

I0105 01:52:54.987584  4761 init.cpp:364] osquery initialized [version=2.1.2] I0105 01:52:54.987808  4761 extensions.cpp:351] Could not autoload extensions: Failed reading: /etc/osquery/extensions.load
I0105 01:52:54.987944  4761 extensions.cpp:364] Could not autoload modules: Failed reading: /etc/osquery/modules.load
I0105 01:52:54.988209  4761 init.cpp:606] Error reading config: config file does not exist: /etc/osquery/osquery.conf
I0105 01:52:54.988334  4761 events.cpp:886] Error registering subscriber: socket_events: Subscriber disabled via configuration
I0105 01:52:54.993973  4763 interface.cpp:307] Extension manager service starting: /home/8host/.osquery/shell.em
Using a virtual database. Need help, type '.help'
osquery>

Судя по сообщениям об ошибках в выводе, не все компоненты osquery работают корректно. Отдельные запросы (например, select * from yara ;) не возвращают ничего – это значит, что таблица еще не заполнена данными.

Другие запросы (типа select time, severity, message from syslog ;) возвращают такие сообщения:

W1202 15:44:48.600539  1720 virtual_table.cpp:492] Table syslog is event-based but events are disabled
W1202 15:44:48.600587  1720 virtual_table.cpp:499] Please see the table documentation: https://osquery.io/docs/#syslog

Чтобы исправить эти ошибки, нужно откорректировать конфигурации сервера.

Закройте консоль:

.exit

В следующем разделе вы узнаете, как изменить аспекты операционной системы, чтобы обеспечить работу osquery.

2: Доступ osquery к системным логам

Теперь нужно настроить доступ osquery к системным логам. В Ubuntu 16.04 для этого нужно отредактировать конфигурационный файл Rsyslog. Все, что нужно сделать – добавить пару строк в конец файла.

Откройте /etc/rsyslog.conf:

sudo nano /etc/rsyslog.conf

В файл нужно добавить конфигурации, которые сообщат Rsyslog, какой конвейер использовать для записи и какие параметры syslog записывать. По умолчанию используется /var/osquery/syslog_pipe. Затем osquery заполнит таблицу syslog информацией, записанной в этот конвейер.

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

/etc/rsyslog.conf
template(
name="OsqueryCsvFormat"
type="string"
string="%timestamp:::date-rfc3339,csv%,%hostname:::csv%,%syslogseverity:::csv%,%syslogfacility-text:::csv%,%syslogtag:::csv%,%msg:::csv%\n"
)
*.* action(type="ompipe" Pipe="/var/osquery/syslog_pipe" template="OsqueryCsvFormat")

Сохраните и закройте файл.

Перезапустите демон:

sudo systemctl restart rsyslog

3: Конфигурационный файл osquery

Конфигурационный файл упростит запуск osqueryi. Вместо того чтобы получать множество параметров из командной строки, osqueryi может прочитать эти параметры в файле конфигурации, расположенного в файле /etc/osquery/osquery.conf. Конечно же, демон также будет иметь доступ к этому файлу.

Конфигурационный файл также содержит запросы, которые необходимо выполнить по расписанию. Однако большинство запросов, которые можно запланировать, поставляются в так называемых пакетах. Пакеты – это файлы, расположенные в каталоге /usr/share/osquery/packs.

Из коробки osquery не поставляется с конфигурационным файлом, но предлагает образец такого файла, который можно скопировать в /etc/osquery и изменить согласно своим потребностям. Однако в этом файле нет некоторых параметров, необходимых для запуска osquery на дистрибутиве Linux, потому лучше создать конфигурационный файл самостоятельно.

Файл будет состоять из трех разделов:

Ниже вы найдете список опций, которые будут использоваться в конфигурационном файле, их описания и рекомендуемые значения. Этих опций будет достаточно для запуска osqueryi и osqueryd в Ubuntu 16.04 и на другом дистрибутиве Linux.

Вы уже знаете, как просматривать все флаги командной строки и параметры конфигурации, доступные для osqueryi и osqueryd, но указанных выше параметров будет достаточно для запуска osquery на этом сервере.

Создайте и откройте файл:

sudo nano /etc/osquery/osquery.conf

Конфигурационный файл использует формат JSON. Скопируйте и вставьте в файл следующее:

Читайте также: Основы работы с JSON

{
"options": {
"config_plugin": "filesystem",
"logger_plugin": "filesystem",
"logger_path": "/var/log/osquery",
"disable_logging": "false",
"log_result_events": "true",
"schedule_splay_percent": "10",
"pidfile": "/var/osquery/osquery.pidfile",
"events_expiry": "3600",
"database_path": "/var/osquery/osquery.db",
"verbose": "false",
"worker_threads": "2",
"enable_monitor": "true",
"disable_events": "false",
"disable_audit": "false",
"audit_allow_config": "true",
"host_identifier": "hostname",
"enable_syslog": "true",
"audit_allow_sockets": "true",
"schedule_default_interval": "3600"
},

Следующая часть конфигурации – это раздел для планирования. Каждый запрос определяется по ключу или имени, которое должно быть уникальным в файле, за ним следует запрос и интервал запуска запроса в секундах. Добавьте запланированный запрос, который просматривает таблицу crontab каждые 300 секунд.

Добавьте эти строки в файл:

"schedule": {
"crontab": {
"query": "SELECT * FROM crontab;",
"interval": 300
}
},

Вы можете составить любое количество запросов. Для этого достаточно следовать формату. Если не соблюсти формат, файл не пройдет валидацию. Добавьте еще пару запросов:

"schedule": {
"crontab": {
"query": "SELECT * FROM crontab;",
"interval": 300
},

"system_profile": {


"query": "SELECT * FROM osquery_schedule;"


},


"system_info": {


"query": "SELECT hostname, cpu_brand, physical_memory FROM system_info;",


"interval": 3600


}

},

После запланированных запросов вы можете добавить декораторы. Это специальные запросы, которые добавляют данные к другим запланированным запросам. Эти декораторы добавляют UUID хоста и имя пользователя, в начало каждого запланированного запроса.

Добавьте эти строки в файл:

"decorators": {
"load": [
"SELECT uuid AS host_uuid FROM system_info;",
"SELECT user AS username FROM logged_in_users ORDER BY time DESC LIMIT 1;"
] },

После этого нужно направить osquery в список пакетов, где содержатся другие специальные запросы. Каждая установка osquery предлагает стандартный набор пакетов в каталоге /usr/share/osquery/packs. Один из пакетов предназначен для macOS, остальные – для Linux. пакеты можно использовать из стандартного каталога или же переместить их в каталог /etc/osquery.

Добавьте в файл эти строки:

"packs": {
"osquery-monitoring": "/usr/share/osquery/packs/osquery-monitoring.conf",
"incident-response": "/usr/share/osquery/packs/incident-response.conf",
"it-compliance": "/usr/share/osquery/packs/it-compliance.conf",
"vuln-management": "/usr/share/osquery/packs/vuln-management.conf"
}
}

Фигурная скобка в конце файла нужна, чтобы закрыть фигурную скобку в первой строке файла. В результате файл должен выглядеть следующим образом:

{
"options": {
"config_plugin": "filesystem",
"logger_plugin": "filesystem",
"logger_path": "/var/log/osquery",
"disable_logging": "false",
"log_result_events": "true",
"schedule_splay_percent": "10",
"pidfile": "/var/osquery/osquery.pidfile",
"events_expiry": "3600",
"database_path": "/var/osquery/osquery.db",
"verbose": "false",
"worker_threads": "2",
"enable_monitor": "true",
"disable_events": "false",
"disable_audit": "false",
"audit_allow_config": "true",
"host_identifier": "hostname",
"enable_syslog": "true",
"audit_allow_sockets": "true",
"schedule_default_interval": "3600"
},
"schedule": {
"crontab": {
"query": "SELECT * FROM crontab;",
"interval": 300
},
"system_profile": {
"query": "SELECT * FROM osquery_schedule;"
},
"system_info": {
"query": "SELECT hostname, cpu_brand, physical_memory FROM system_info;",
"interval": 3600
}
},
"decorators": {
"load": [
"SELECT uuid AS host_uuid FROM system_info;",
"SELECT user AS username FROM logged_in_users ORDER BY time DESC LIMIT 1;"
] },
"packs": {
"osquery-monitoring": "/usr/share/osquery/packs/osquery-monitoring.conf",
"incident-response": "/usr/share/osquery/packs/incident-response.conf",
"it-compliance": "/usr/share/osquery/packs/it-compliance.conf",
"vuln-management": "/usr/share/osquery/packs/vuln-management.conf"
}
}

Сохраните и закройте файл. Затем проверьте его:

sudo osqueryctl config-check

Если в файле нет ошибок, команда вернет:

I0104 11:11:46.022858 24501 rocksdb.cpp:187] Opening RocksDB handle: /var/osquery/osquery.db

Если команда обнаружила ошибку, в выводе вы узнаете, где именно она находится. Исправьте ее и повторите проверку.

4: Настройка пакета мониторинга целостности файлов osquery

Наблюдение за целостностью файлов на сервере – это важный аспект мониторинга безопасности системы. Для этого osquery предлагает готовое решение.

Пакеты, добавленные в конфигурацию в предыдущем разделе, поставляются из коробки. В этом разделе мы добавим в список еще один пакет, он будет содержать запрос и директивы, которые будут использоваться для отслеживания целостности файлов. В руководстве этот файл называется fim.conf. Создайте файл:

sudo nano /usr/share/osquery/packs/fim.conf

Теперь создайте пакет, который будет мониторить события в файлах каталогов /home, /etc и /tmp каждые 300 секунд. Скопируйте и вставьте в файл эти строки:

{
"queries": {
"file_events": {
"query": "select * from file_events;",
"removed": false,
"interval": 300
}
},
"file_paths": {
"homes": [
"/root/.ssh/%%",
"/home/%/.ssh/%%"
],
"etc": [
"/etc/%%"
],
"home": [
"/home/%%"
],
"tmp": [
"/tmp/%%"
] }
}

Сохраните и закройте файл.

Чтобы у osquery был доступ к этому пакету, сошлитесь на новый файл в конфигурационном файле /etc/osquery/osquery.conf.

sudo nano /etc/osquery/osquery.conf

Добавьте новую строку в раздел packs:

...
"packs": {
"fim": "/usr/share/osquery/packs/fim.conf",
"osquery-monitoring": "/usr/share/osquery/packs/osquery-monitoring.conf",
"incident-response": "/usr/share/osquery/packs/incident-response.conf",
"it-compliance": "/usr/share/osquery/packs/it-compliance.conf",
"vuln-management": "/usr/share/osquery/packs/vuln-management.conf"
}

Сохраните и закройте файл. Проверьте синтаксис файла:

sudo osqueryctl config-check

5: Проверка безопасности с помощью osqueryi

Osquery полезно использовать во многих случаях. В этом разделе вы научитесь выполнять различные проверки безопасности в своей системе с помощью интерактивной оболочки osqueryi. Имейте в виду, что на данный момент демон osquery еще не запущен. И это преимущество osquery – даже если демон отключен, вы можете отправлять запросы с помощью osqueryi и использовать конфигурации для настройки среды.

Чтобы запустить osquery и указать конфигурационный файл, введите:

sudo osqueryi --config_path /etc/osquery/osquery.conf --verbose

Примечание: Опция verbose очень полезна для osqueryi и osqueryd, поскольку она отображает все ошибки или предупреждения, которые могут указывать на проблемы с osquery. Как правило, osqueryi можно запускать без привилегий root, но если вы вызываете osqueryi, указав конфигурационный файл демона, вы должны делать это через root.

Начните базовую проверку безопасности. К примеру, можно просмотреть, какие пользователи на данный момент вошли в систему:

select * from logged_in_users ;
+-----------+----------+-------+------------------+------------+------+
| type      | user     | tty   | host             | time       | pid  |
+-----------+----------+-------+------------------+------------+------+
| boot_time | reboot   | ~     | 4.4.0-57-generic | 1483580419 | 0    |
| runlevel  | runlevel | ~     | 4.4.0-57-generic | 1483580426 | 53   |
| login     | LOGIN    | ttyS0 |                  | 1483580429 | 1546 |
| login     | LOGIN    | tty1  |                  | 1483580429 | 1549 |
| user      | root     | pts/0 | 11.11.11.11      | 1483580584 | 1752 |
| user      | 8host    | pts/1 | 11.11.11.11      | 1483580770 | 4057 |
+-----------+----------+-------+------------------+------------+------+

В этом выводе есть два реальных пользовательских аккаунта, которые вошли в систему, и оба они привязаны к одному IP-адресу. Вы должны знать этот IP-адрес. Если этот адрес вам незнаком, вам следует выяснить, что это за пользователь.

Этот запрос сообщает вам о том, какие пользователи вошли в систему на данный момент. Чтобы узнать, кто заходил в систему ранее, отправьте запрос таблице last:

select * from last ;

Вывод не показал ничего необычного, потому ранее никто не заходил в систему:

+----------+-------+------+------+------------+------------------+
| username | tty   | pid  | type | time       | host             |
+----------+-------+------+------+------------+------------------+
| reboot   | ~     | 0    | 2    | 1483580419 | 4.4.0-57-generic |
| runlevel | ~     | 53   | 1    | 1483580426 | 4.4.0-57-generic |
|          | ttyS0 | 1546 | 5    | 1483580429 |                  |
| LOGIN    | ttyS0 | 1546 | 6    | 1483580429 |                  |
|          | tty1  | 1549 | 5    | 1483580429 |                  |
| LOGIN    | tty1  | 1549 | 6    | 1483580429 |                  |
| root     | pts/0 | 1752 | 7    | 1483580584 | 11.11.11.11      |
| 8host    | pts/1 | 4057 | 7    | 1483580770 | 11.11.11.11      |
+----------+-------+------+------+------------+------------------+

Чтобы узнать, как работает брандмауэр, введите:

select * from iptables ;

Если команда ничего не вернула, значит, брандмауэр IPTables не настроен. Для сервера с доступом к сети Интернет это не очень хорошо, поэтому лучше настроить брандмауэр.

В предыдущую команду можно добавить фильтры, чтобы она вывела только определенные столбцы:

select chain, policy, src_ip, dst_ip from iptables ;

Этот запрос должен вернуть такой результат. Поищите здесь какие-либо необычные исходные или целевые IP-адреса, которые вы не настроили:

+---------+--------+---------+-----------+
| chain   | policy | src_ip  | dst_ip    |
+---------+--------+---------+-----------+
| INPUT   | ACCEPT | 0.0.0.0 | 0.0.0.0   |
| INPUT   | ACCEPT | 0.0.0.0 | 127.0.0.0 |
| INPUT   | ACCEPT | 0.0.0.0 | 0.0.0.0   |
| INPUT   | ACCEPT | 0.0.0.0 | 0.0.0.0   |
| INPUT   | ACCEPT | 0.0.0.0 | 0.0.0.0   |
| INPUT   | ACCEPT | 0.0.0.0 | 0.0.0.0   |
| INPUT   | ACCEPT | 0.0.0.0 | 0.0.0.0   |
| INPUT   | ACCEPT | 0.0.0.0 | 0.0.0.0   |
| INPUT   | ACCEPT | 0.0.0.0 | 0.0.0.0   |
| INPUT   | ACCEPT | 0.0.0.0 | 0.0.0.0   |
| FORWARD | ACCEPT | 0.0.0.0 | 0.0.0.0   |
| FORWARD | ACCEPT | 0.0.0.0 | 0.0.0.0   |
| OUTPUT  | ACCEPT | 0.0.0.0 | 0.0.0.0   |
| OUTPUT  | ACCEPT | 0.0.0.0 | 0.0.0.0   |
+---------+--------+---------+-----------+

Этот запрос поможет вам найти вредоносное ПО, запуск которого запланирован через определенные промежутки времени:

select command, path from crontab ;

Любая подозрительная команда в выводе нуждается в дополнительной проверке:

+------------------------------------------------------------------------------------------------+--------------------------------+
| command                                                                                         | path                           |
+-------------------------------------------------------------------------------------------------+--------------------------------+
| root cd / && run-parts --report /etc/cron.hourly                                                | /etc/crontab                   |
| root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )                | /etc/crontab                   |
| root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )               | /etc/crontab                   |
| root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )              | /etc/crontab                   |
| root test -x /etc/cron.daily/popularity-contest && /etc/cron.daily/popularity-contest --crond   | /etc/cron.d/popularity-contest |
+-------------------------------------------------------------------------------------------------+--------------------------------+

Существуют ли в системе файлы, которые включены с помощью setuid? На любом сервере Ubuntu 16.04 есть немало таких файлов, но есть ли среди них такие, которых не должно быть в системе? Ответы на эти вопросы помогут вам обнаружить двоичные файлы для обхода защиты системы. Периодически запускайте этот запрос и сравнивайте его результаты со старыми результатами, чтобы отследить все изменения.

select * from suid_bin ;

Вот фрагмент вывода:

+-------------------------------+----------+-----------+-------------+
| path                          | username | groupname | permissions |
+-------------------------------+----------+-----------+-------------+
| /bin/ping6                    | root     | root      | S           |
| /bin/su                       | root     | root      | S           |
| /bin/mount                    | root     | root      | S           |
| /bin/umount                   | root     | root      | S           |
| /bin/fusermount               | root     | root      | S           |
| /bin/ntfs-3g                  | root     | root      | S           |
| /bin/ping                     | root     | root      | S           |
| /sbin/mount.ntfs-3g           | root     | root      | S           |
| /sbin/mount.ntfs              | root     | root      | S           |
| /sbin/unix_chkpwd             | root     | shadow    | G           |
| /sbin/pam_extrausers_chkpwd   | root     | shadow    | G           |
| /usr/bin/chage                | root     | shadow    | G           |
| /usr/bin/locate               | root     | mlocate   | G           |
| /usr/bin/chfn                 | root     | root      | S           |
| /usr/bin/chsh                 | root     | root      | S           |
| /usr/bin/newuidmap            | root     | root      | S           |
| /usr/bin/write                | root     | tty       | G           |
| /usr/bin/mlocate              | root     | mlocate   | G           |
| /usr/bin/at                   | daemon   | daemon    | SG          |
| /usr/bin/sg                   | root     | root      | S           |

Чтобы просмотреть список загруженных модулей ядра, введите:

select name, used_by, status from kernel_modules where status="Live" ;

Этот запрос также рекомендуется периодически запускать и сравнивать его результаты с предыдущими результатами.

Еще один запрос, который поможет вам найти на сервере бэкдор-файлы, – это запрос, который выводит все прослушивающиеся порты.

select * from listening_ports ;

На свежем сервере, где запущен только SSH по порту 22, вывод будет таким:

+-------+------+----------+--------+---------+
| pid   | port | protocol | family | address |
+-------+------+----------+--------+---------+
| 1686  | 22   | 6        | 2      | 0.0.0.0 |
| 1686  | 22   | 6        | 10     | ::      |
| 25356 | 0    | 0        | 0      |         |
+-------+------+----------+--------+---------+

Если в выводе есть только известные вам порты, которые должен прослушивать сервер, вам не о чем беспокоиться. Но если вы заметили другие открытые порты, вам нужно узнать, что это за порты.

Чтобы посмотреть активность файлов на сервере, запустите этот запрос:

+---------------------------+---------+------+
| target_path               | action  | uid  |
+---------------------------+---------+------+
| /home/8host/..bashrc.swp  | CREATED | 1000 |
| /home/8host/..bashrc.swp  | UPDATED | 1000 |
| /home/8host/..bashrc.swp  | UPDATED | 1000 |
| /home/8host/.bashrc       | UPDATED | 1000 |
| /home/8host/..bashrc.swp  | DELETED | 1000 |
| /home/8host/..bashrc.swp  | CREATED | 1000 |
| /home/8host/..bashrc.swp  | UPDATED | 1000 |
| /home/8host/..bashrc.swp  | UPDATED | 1000 |
| /home/8host/.bashrc       | UPDATED | 1000 |
| /home/8host/.bashrc       | UPDATED | 1000 |
| /home/8host/.bashrc       | UPDATED | 1000 |
| /home/8host/..bashrc.swp  | DELETED |      |
| /etc/test_file.txt        | DELETED |      |
| /home/8host/.bash_history | UPDATED | 1000 |
| /home/8host/.bash_history | UPDATED | 1000 |
| /etc/secret_file.md       | CREATED | 0    |
| /etc/secret_file.md       | UPDATED | 0    |
| /etc/secret_file.md       | UPDATED | 0    |
+---------------------------+---------+------+

Многие запросы позволяют определить потенциальные проблемы безопасности.

Чтобы уточнить схему таблицы, введите:

.schema name-of-table

Чтобы просмотреть доступные таблицы:

.tables

Среди пакетов, которые поставляются с osquery, есть еще много полезных примеров. Многие пакеты следует запускать периодически.

6: Запуск демона osqueryd

Демон osqueryd позволяет osquery запускать запросы с определенным интервалом. К ним относятся те запросы, которые вы настроили в разделе 4, а также запросы, которые были указаны в пакете FIM в разделе5. Если вы еще не изучили их, сейчас самое подходящее время посмотреть содержимое /usr/share/osquery/packs.

Результаты, созданные osqueryd, записываются в файл osqueryd.results.log в каталоге /var/log/osquery. Из коробки этот файл не существует. Файл создается только при запуске демона, когда он начинает генерировать результаты.

Вы можете запустить osqueryd, используя systemctl или osqueryctl. Оба инструмента выполняют одно и то же, поэтому не имеет значения, какой из них вы используете. osqueryd проверяет наличие конфигурационного файла при запуске и предупреждает вас, если не находит его. Демон будет работать без конфигурационного файла, хотя и не сможет сделать ничего полезного.

Ранее вы уже создали конфигурационный файл для демона. Теперь просто запустите его:

sudo systemctl start osqueryd

Или так:

sudo osqueryctl start

Через несколько минут после запуска демона размер лога /var/log/osquery/osqueryd.results.log увеличится. Вы можете убедиться в этом с помощью этой команды (запустите ее повторно немного позже):

ls -lh /var/log/osquery/osqueryd.results.log

Рост файла указывает, что результаты запланированных запросов записываются на диск. К сожалению, osquery не имеет средств оповещения, поэтому вы не сможете увидеть результаты запланированных запросов, если не просмотрите файл самостоятельно. Вы можете сделать это с помощью команды tail, которая будет непрерывно передавать последние 10 строк этого файла на ваш экран:

sudo tail -f /var/log/osquery/osqueryd.results.log

Нажмите CTRL+C, чтобы прервать работу команды.

В дальнейшем вы сможете отправить лог результатов запросов на внешнюю платформу для анализа. Для этого существует несколько средств с открытым исходным кодом (Doorman, Zentral и ElasticSearch, например).