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, было бы вообще огонь для меня, но такого нагуглить не удалось.
Что дальше
Для более подробной информации можно посмотреть:
- Официальная документация https://osquery.readthedocs.io/en/stable/
- Репозиторий на GitHub https://github.com/osquery/osquery
- Видеодемонстрация (неофициальная) https://www.youtube.com/watch?v=v9bK8_pZNwo