Статьи

OSQuery: исследуйте свою ОС с помощью SQL

Если название звучит как обманчивый обман, это понятно — но это очень, очень реально. В объявлении от 30 октября Facebook выпустил OSQuery — новый способ проверки текущего состояния вашей операционной системы OS X или Linux путем написания SQL-запросов.

Сначала это может звучать странно, и ваша внутренняя реакция может быть резонирующим «Почему ?!», но при дальнейшем осмотре полезные аспекты становятся очевидными. Посмотрим как. В этом посте я расскажу вам, почему это может быть полезно для вас, покажу, как его установить, и проведу несколько примеров запросов к готовому Vagrant-боксу, который вы можете использовать, если вы в настоящее время не используете OS X или Linux.

Что это?

Я не буду срыгивать их объявление — подробности см. Там . В двух словах, OSQuery претендует на роль реляционной базы данных и содержит несколько «таблиц» (таблиц в кавычках, потому что они на самом деле не существуют в виде таблиц, к которым вы привыкли, например, в MySQL), которые отображают данные ОС способом это делает его запрашиваемым с помощью операторов SQL (да, включая объединения и многое другое!).

Если вы когда-либо сталкивались с ситуацией, когда вы не могли запустить Apache, потому что порт уже был занят, и вам нужно было перейти и просмотреть список процессов, только чтобы обнаружить, что мертвый экземпляр Skype перегружает порт 80, вы будете знать, оцените простоту OSQuery.

OSQuery работает на CentOS, Ubuntu и OS X, поддерживая ваши рабочие серверы, игровую приставку для разработки и операционные системы любого другого компьютера, к которому у вас есть доступ, например, ваших детей или ваших сотрудников, — позволяя вам использовать его для мониторинга ОС состояние всей вашей экосистемы. Это полностью открытый исходный код, и даже есть руководство по созданию ваших собственных таблиц, на случай, если некоторые из них отсутствуют, и они вам нужны. Команда регулярно добавляет новые таблицы, поэтому, даже если вы не хотите вносить свой вклад, но все же хотите использовать пропущенные таблицы, есть большая вероятность, что они появятся, если вы уделите им время.

Программное обеспечение устанавливается через (в настоящее время) самостоятельно созданные пакеты для всех поддерживаемых операционных систем и поставляется с osqueryi — интерактивной консолью для работы с запросами — и osqueryd — демоном, который вы можете запланировать для регулярного запуска и агрегирования данных на отслеживаемых компьютерах. , например. Документация очень хорошая, так что победить каждый аспект OSQuery так же просто, как посвятить этому день.

Установка и использование OSQuery

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

Процесс установки несколько запутан, если вы никогда не использовали виртуальные машины, поэтому давайте разберем его. Давайте представим, что у нас есть машина с Ubuntu 14.04, на которую мы хотим установить OSQuery. Как правило, вы устанавливаете программное обеспечение через менеджер пакетов, такой как Aptitude, с помощью команды, подобной apt-get install . Однако, поскольку OSQuery еще не находится в официальных репозиториях для этих типов дистрибутивов, нам нужно будет собрать пакет вручную, а затем установить его из локального расположения (скопировав файл .deb на целевой компьютер), а не удаленный репозиторий как обычно. Это может звучать сложнее, чем на самом деле, поэтому давайте сделаем шаг за шагом танец.

1. Клонируйте и обновите окно OSQuery

Убедитесь, что на вашем основном компьютере установлены Git, Vagrant и Virtualbox, и выполните следующее:

 git clone https://github.com/facebook/osquery cd osquery vagrant up ubuntu14 

Если в вашей копии Vagrant загружен образ Ubuntu14, загруженный ранее, вы должны начать работу в считанные минуты. В противном случае он загрузит образ, который может занять некоторое время, а затем создаст виртуальную машину.

2. Построить в виртуальной среде

SSH в вашу виртуальную vagrant ssh с vagrant ssh . В нашем случае это будет

 vagrant ssh ubuntu14 

Оказавшись внутри, выполните:

 sudo su cd /vagrant ./tools/provision.sh 

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

Это обновит экземпляр Ubuntu и загрузит все, что нужно OSQuery для сборки. Затем мы говорим ему обернуть себя в устанавливаемый пакет.

 make make package 

После этого вы сможете увидеть пакет в /vagrant/build/linux/osquery-0.0.1-trusty.amd64.deb .

3. Установка OSQuery

Чтобы установить это, мы можем использовать систему управления пакетами Debian по умолчанию:

 sudo dpkg -i osquery-0.0.1-trusty.amd64.deb 

Установить его на любой из ваших компьютеров с Ubuntu 14.04 теперь так же просто, как скопировать файл .deb и запустить приведенную выше команду. Мы даже можем установить его в ту ОС, которая его создала.

Если вам нужны пакеты для других операционных систем, процедура точно такая же с минимальными изменениями — просто следуйте инструкциям .

5. Использование OSQuery

Посмотрим, работает ли это. Войдите в интерактивную консоль, выполнив osqueryi . Вы должны увидеть что-то вроде этого:

Давайте посмотрим на тестовый запрос. Вставьте следующее в консоль и выполните его:

 SELECT * FROM users; 

Вы должны увидеть нечто подобное:

Вы можете получить список всех доступных таблиц, просто выполнив .tables , все команды с помощью .help и можете выйти с помощью .exit .

Пример злостных актеров

Согласно их сообщению, запрос:

 SELECT name, path, pid FROM processes WHERE on_disk = 0; 

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

Пример «Все пользователи с группами»

 SELECT u.uid, u.gid, u.username, g.name, u.description FROM users u LEFT JOIN groups g ON (u.gid = g. gid); 

Приведенный выше запрос выведет всех пользователей ОС с их идентификаторами, их группами и именами групп, а также их описаниями.

Найти все пустые группы

 SELECT groups.gid, groups.name FROM groups LEFT JOIN users ON (groups.gid = users.gid) WHERE users.ui d IS NULL; 

Этот запрос находит все группы пользователей ОС, которые пусты — ни один пользователь не принадлежит.

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

Вывод

OSQuery — последнее чудо Facebook с открытым исходным кодом — способ предоставления данных системного уровня с помощью API, подобного реляционной базе данных, который позволяет нам запрашивать нашу ОС, как если бы это была куча реляционных данных. Хотя он полезен для мониторинга сервера или кластера серверов, у него, безусловно, есть и другие приложения — от обнаружения вредоносных программ до убийств зомби-процессов.

Вы думали о каких-либо уникальных применениях? Хотите написать о них? Связаться!