Предисловие
Данная публикация — относительно вольный перевод опубликованоой в блоге Facebook статьи «Introducing osquery».
Введение в osquery
Мониторинг состояния вашей системы в реальном времени очень важен. В Facebook мы разработали фреймворк под названием osquery, который позволяет взглянуть на низкоуровневый мониторинг операционной системы по новому.
Osquery представляет операционную систему как высокопроизводительную реляционную базу данных. Этот подход позволяет вам писать SQL запросы, чтобы легко и эффективно получать информацию о вашей системе. С osquery текущее состояние ОС представляется в виде SQL таблиц из которых вы можете получить информацию о:
- запущенных процессах;
- загруженных модулях ядра;
- открытых стевых соединениях.
SQL таблицы создаются через легко расширяемый API. Несколько таблиц уже существуют и еще множество разрабатывается. Лучше понять легкость и выразительность, которую предоставляет osquery, помогут следующие примеры.
Примеры запросов
Первый пример иллюстрирует, как вы можете использовать osquery для взаимодействия с процессами, запущенными в текущей системе. Конкретно этот запрос возвращает процессы, которые исполняются в данный момент. Условие WHERE в данном запросе возвращает только те процессы, которые были запущены из бинарников, но в данный момент уже не существуют в файловой системе. Это обычная практика, к которой прибегают злоумышленники, поэтому этот запрос не вернет никаких результатов в вашей системе, при условии, что ваша система не была скомпрометирована.
SELECT name, path, pid FROM processes WHERE on_disk = 0;
Взаимодействие с ОС с помощью SQL — простое и занимательное занятие. Одно из преимуществ, которые дает нам SQL — это возможность объединять (join) разные таблицы вместе для анализа системы. Следующий пример как раз показывает нам, как можно одновременно использовать информацию из двух «таблиц» — listening_ports и processes. Этот запрос ищет все процессы, которые слушают сетевые порты. Таким образом, используя «таблицу» процессов из предыдущего примера, мы можем объединить ее с другой «таблицей» — таблицей сетевых портов. И там, и там используется PID процесса, по которому и происходит объединение.
SELECT DISTINCT process.name, listening.port, listening.address, process.pid FROM processes AS process JOIN listening_ports AS listening ON process.pid = listening.pid;
Osquery включает в себя множество таблиц и еще множество создаются нами ежедневно. Таблицы легки для написания, поэтому мы не против и даже поощряем разработку новых таблиц сторонними разработчиками. Подробную инфорацию вы можете получить в нашей wiki.
Features
Osquery — это фреймворк, который мы используем для создания новых продуктов и инструментов. Модульный исходный код osquery дает нам преимущество перед существующими концепциями. Мы выпускаем несколько инструментов как часть одного open source релиза и в планах у нас еще много чего. Мы также с нетерпением ждем момента, когда наше коммьюнити представит свои инструменты, основанные на osquery.
Интерактивная консоль
Интерактивная консоль osqueryi представляет из себя SQL интерфейс, в котором вы можете исполнять свои запросы и исследовать свою ОС. Со всей выразительной силой SQL и множеством полезных таблиц, встроенных в osquery, консоль — это бесценный инструмент для диагностики проблем ОС, решения проблем производительности и многого другого.
Больше информации по использованию osquery — в нашей вики.
Мониторинг кластеров
Для мониторинга крупных систем существуем демон — osqueryd. Он позволяет планировть запросы для исполнения их во всей вашей инфраструктуре. Демон самостоятельно заботится об аггрегировании результатов запросов по времени и генерирует логи, отображающие состояние изменений в инфраструктуре. Вы можете использовать его для актуализации информации о безопасности, производительности, конфигурации и состояния целостности вашей инфраструктуры. Демон osqueryd также может интегрировать ваши внутренние логи с помощью robust plugin architecture.
Если вы заинтересовались использованием osqueryd в вашей инфраструктуре — вновь приглашаем вас в вики, а также в internal deployment guide.
Кросплатформенность
Osquery — кросплатформенный. И хотя osquery имеет преимущество в низкоуровневых операционных системах, вы можете собрать и использовать его в Ubuntu, CentOS и MacOS. Это даже даст определенное преимущество, т.к. позволит мониторить корпоративные маки на том же уровне, что и корпоративные Linux сервера.
Нативные сборки и документация
Для облегчения деплоя osquery поставляется как обычный пакет для всех поддерживаемых операционных систем. Также существует подробная документация о создании собственных пакетов. Поэтому разработка и внедрение ваших собственных osquery инструментов должна быть максимально легкой.
Osquery был разработан с учетом особенностей используемых окружений для того, чтобы дать возможность горячей замены плагинов в уже работающей системе. Использование предоставляемых интерфейсов позволяет более глубоко интегрировать osquery в вашу инфраструктуру если один или несколько используемых плагинов уже не не удовлетворяют вашим нуждам.
Подробнее здесь.
Модульный исходный код
Osquery состоит из высокопроизводительных модульных компонентов с хорошо документированным публичным API. Эти компоненты могут быть с легкостью собраны вместе для создания новых интересных приложений и инструментов. Подробная информация об API здесь.
Open source
После общения с несколькими внешними компаниями пришло понимание, что подобный мониторинг низкоуровневого поведения операционных систем это не уникальная проблема Facebook'a. Через несколько месяцев мы выпустили osquery в виде бинарных файлов для ограниченного количества компаний. Они с успехом внедрили и протестировали osquery на своем оборудовании и мы получили от них отличнейший фидбек.
И сейчас мы рады сообщить, что настало время open source osquery. Вы можете найти весь код и документацию на GitHub.
Мы с нетерпением ждем отзывов от коммьюнити. Мы будем вести всю работу с osquery на GitHub. Это облегчит работу сторонних разработчиков. Мы надеемся, вы увидите потенциал в osquery и сотворите прекрасные вещи вместе с нами.
Автор: kimonniez