Osquery: фреймворк мониторинга и аналитики системы с доступом по SQL

Введение

Согласно официальной документации https://osquery.readthedocs.io/en/stable/, «Osquery — это инструментарий операционной системы для Windows, OS X (macOS), Linux и FreeBSD. Этот инструментарий делает низкоуровневую аналитику операционной системы и мониторинг производительным и интуитивно понятным. Osquery представляет операционную систему как высокопроизводительную реляционную базу данных. Это позволяет писать запросы SQL для исследования данных операционной системы. В osquery SQL-таблицы представляют собой абстрактные концепции, такие как запущенные процессы, загруженные модули ядра, открытые сетевые соединения, плагины браузера, аппаратные события или хэши файлов». Распространяется под двойным лицензированием, Apache License 2 и GPL 2.

Osquery состоит из демона osqueryd и интерактивной консоли osqueryi.

Рассмотрим каждый компонент в отдельности.

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

И про консоль: «Интерактивная консоль запросов, osqueryi, предоставляет вам интерфейс SQL, чтобы выполнять запросы и изучать вашу операционную систему. Обладая мощью полного языка SQL и десятками встроенных полезных таблиц, osqueryi является бесценным инструментом при реагировании на инциденты, диагностике проблем работы системы, устранении проблем с производительностью и т. д.».

Как было написано выше, Osquery кроссплатформенный, в частности для GNU/Linux предоставляются DEB и RPM пакеты и tar.gz дистрибутивы.

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

Базовое использование

Давайте перейдём к практике попробуем несколько простых запросов, запустив osqueryi.

Получение списка пользователей

Команда: select * from users;


Результат:

Получение списка процессов пользователей

Команда: select users.username as ‘User name’, processes.pid as ‘Process ID’, processes.name as ‘Process name’ from processes join users on users.uid = processes.uid;

Результат (урезанный):

Самые тяжёлые процессы

Команда: select u.username as ‘User name’, p.pid as ‘Process PID’, p.name as ‘Process name’, round((p.total_size * ’10e-7′), 2) as ‘RAM (MB)’  from processes as p join users as u on u.uid = p.uid order by total_size desc limit 10;

Результат:

Углубляемся

Полный список таблиц

Команда: .tables;

Результат (урезанный):

Поля конкретной таблицы

Команда: .schema routes

Результат:

Более красивый вариант показа полей конкретной таблицы

Команда: PRAGMA table_info(routes);

Результат:

Запуск из обычной консоли и более удобный формат вывода

Для встраивания в ваши скрипты запросы к osqueryi можно передавать аргументом или на стандартный ввод. И вывод можно передавать в более удобном для автоматизированной обработки формате JSON. То есть следующие команды аналогичны:

$ osqueryi —json ‘select * from processes as p where p.pid = 1’

$ echo ‘select * from processes as p where p.pid = 1;’ | osqueryi —json

Вывод в обоих случаях будет такой:

А вывод можно перенаправить, например в jq (инструмент парсинга JSON) и, выполнив:

osqueryi —json ‘select * from processes as p where p.pid = 1’ | jq ‘.[0].cmdline’

получить:

Расширение

SDK Osquery позволяет создавать свои таблицы и подключать их к общему списку, пример на C++ можно посмотреть в официальной документации https://osquery.readthedocs.io/en/stable/development/osquery-sdk/

Есть возможность сделать подобное и на Python, см. https://github.com/osquery/osquery-python

С помощью этого можно добавлять свои источники мониторинга в общий фреймворк Osquery и использовать наряду со стандартными.

Если ещё можно было бы подрубить к Django ORM, было бы вообще огонь для меня, но такого нагуглить не удалось.

Что дальше

Для более подробной информации можно посмотреть:

  1. Официальная документация https://osquery.readthedocs.io/en/stable/
  2. Репозиторий на GitHub https://github.com/osquery/osquery
  3. Видеодемонстрация (неофициальная) https://www.youtube.com/watch?v=v9bK8_pZNwo

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *