Home » Аудит конечных точек с помощью osquery: SQL-видимость хоста
Аудит конечных точек с помощью osquery: SQL-видимость хоста

Аудит конечных точек с помощью osquery: SQL-видимость хоста

Привет, любители серверной магии и охотники за прозрачностью! Сегодня копнем в одну реально крутую тему: как устроить аудит конечных точек с помощью osquery и получить SQL-видимость хоста. Если ты когда-нибудь мечтал смотреть на свой сервер, как на базу данных — ты попал по адресу. Я расскажу, зачем это нужно, как это работает, как быстро всё запустить, и поделюсь лайфхаками из практики. Поехали!

Зачем вообще нужен аудит конечных точек и почему osquery?

Логгирование, мониторинг, аудит — эти слова слышал каждый, кто когда-либо настраивал сервер, будь то VPS, выделенный сервер или облако. Но вот в чем фишка: большинство инструментов мониторинга либо слишком сложные, либо дают только поверхностную инфу. Ты видишь, что сервер «жив», но не знаешь, что на нем реально происходит.

И тут на сцену выходит osquery — бесплатная утилита с открытым исходным кодом от Facebook, которая превращает твой сервер (или даже рабочую станцию) в SQL-базу данных, где каждая таблица — это часть состояния системы: процессы, пользователи, логи, сетевые соединения, автозагрузка, установленные пакеты и многое другое. Всё это можно запросить простым SQL!

  • Хотите узнать, кто сейчас в системе? — Легко.
  • Какие процессы стартовали за последние 10 минут? — Запрос в пару строк.
  • Есть ли подозрительные бинарники в автозагрузке? — Осмотр за секунду.

Это не просто мониторинг, это настоящее X-ray для твоего хоста.

Почему это важно? Проблемы и боли

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

  • Неожиданные процессы или майнеры, которых не должно быть.
  • Изменения в конфиге, которые никто не документировал.
  • Появление новых пользователей или sudoers без согласования.
  • Скрытые подключения к внешним адресам.
  • Зловреды, притаившиеся в автозагрузке.

Обычные логи часто не дают полной картины. А если серверов много? Или если у тебя Docker-контейнеры, каждый со своей жизнью? Вот тут osquery реально спасает — он универсален и работает на Linux, Windows, macOS, и даже в контейнерах.

Как это работает? Архитектура и базовые алгоритмы

Давай разберемся, что под капотом у osquery.

  • Движок: osquery — это демон (или интерактивный шелл), который отображает системные параметры как таблицы базы данных.
  • Таблицы: Таблицы — это плагины, которые собирают инфу из разных системных источников: файловая система, процессы, сеть, реестр (на Windows), журналы и т.д.
  • SQL-интерфейс: Ты пишешь SQL-запрос, osquery парсит его и возвращает результат. Пример: SELECT * FROM processes WHERE name = 'sshd';
  • Расписание: Можно настраивать периодические запросы (scheduled queries), чтобы ловить изменения и отправлять алерты.
  • Расширяемость: osquery поддерживает плагины и сторонние таблицы — можно писать свои.

Архитектура простая, но мощная. Ты получаешь «живую» базу данных, которая обновляется в реальном времени.

Быстрый старт — как всё настроить?

Покажу на примере Ubuntu (но на CentOS, Debian, Fedora, macOS и даже Windows всё похоже).

Установка osquery


sudo apt-get update
sudo apt-get install osquery

Если пакет не найден — добавь официальный репозиторий:


sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 1484120AC4E9F8A1A577AEEE97A80C63C9D8B80B
sudo add-apt-repository 'deb [arch=amd64] https://pkg.osquery.io/deb deb main'
sudo apt-get update
sudo apt-get install osquery

На других системах — смотри официальную документацию.

Интерактивный режим

Для теста запусти:


osqueryi

Это интерактивный SQL-шелл. Теперь можно делать запросы, например:


SELECT name, pid, path FROM processes WHERE name LIKE '%ssh%';

SELECT * FROM users;

SELECT * FROM listening_ports WHERE port > 1024;

Демон и расписание

Чтобы osquery работал как сервис и собирал данные по расписанию:


sudo systemctl enable osqueryd
sudo systemctl start osqueryd

Конфиг по умолчанию: /etc/osquery/osquery.conf

Пример простого конфига для аудита процессов и пользователей:


{
  "schedule": {
    "processes": {
      "query": "SELECT pid, name, cmdline FROM processes;",
      "interval": 300
    },
    "users": {
      "query": "SELECT * FROM users;",
      "interval": 600
    }
  }
}

osquery будет выполнять эти запросы каждые 5 и 10 минут соответственно.

Логгирование и интеграция

Результаты можно писать в файл, отправлять через syslog, или интегрировать с SIEM (например, Splunk, ELK).


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

Логи в JSON — легко парсить и анализировать.

Кейсы, примеры, сравнения

Задача osquery Стандартные средства Плюсы/Минусы
Список процессов SELECT * FROM processes; ps aux osquery возвращает больше полей, можно фильтровать, агрегировать, строить сложные выборки
Проверка автозагрузки SELECT * FROM startup_items; manually: ls /etc/init.d, systemctl list-unit-files osquery объединяет все источники, не надо парсить руками
Анализ пользователей SELECT * FROM users; cat /etc/passwd osquery сразу дает инфу по UID, GID, shell, home, last login и т.д.
Мониторинг сетевых соединений SELECT * FROM listening_ports; netstat -tulnp osquery можно фильтровать по PID, протоколу, порту и делать алерты

Положительные кейсы:

  • Быстро нашли майнер, который маскировался под systemd.
  • Обнаружили несанкционированную SSH-автозагрузку через cron.
  • Поймали пользователя, который добавил себе sudo без ведома админа.

Отрицательные кейсы:

  • osquery не видит процессы, если работает под непривилегированным пользователем.
  • В контейнере без монтирования /proc и /sys — часть таблиц будет пустой.
  • Некоторые таблицы могут тормозить на огромных серверах (10k+ процессов или файлов).

Команды osquery — шпаргалка


# Список всех таблиц:
.tables

# Описание таблицы:
.schema processes

# Поиск подозрительных процессов:
SELECT pid, name, cmdline FROM processes WHERE name NOT LIKE '%system%' AND name NOT LIKE '%ssh%';

# Пользователи с shell = /bin/bash:
SELECT username, shell FROM users WHERE shell = '/bin/bash';

# Вся автозагрузка:
SELECT * FROM startup_items;

# Сетевые соединения:
SELECT * FROM listening_ports WHERE address != '127.0.0.1';

# Найти все бинарники с setuid:
SELECT path, mode FROM file WHERE mode & 4000;

Ошибки новичков и мифы

  • osquery — не SIEM, не антивирус и не IDS, это инструмент сбора данных, а не автоматического реагирования.
  • Думают, что osquery «тормозит» — на самом деле, если не запускать тяжелые запросы каждую минуту, он почти не грузит систему.
  • Некоторые считают, что osquery только для Linux — это миф, он отлично работает и на Windows, и на macOS.
  • Ожидают, что osquery сам всё отправит в облако — настраивать интеграцию надо руками.
  • Забывают о правах: чтобы видеть всё, osquery должен работать с нужными привилегиями (обычно — root).

Похожие решения и сравнение

Инструмент Платформы SQL-интерфейс Расширяемость Легкость интеграции Примечания
osquery Linux, Windows, macOS Да Да Высокая Открытый исходный код
Auditd Linux Нет Средняя Средняя Гибкая фильтрация, но нет SQL
Wazuh Linux, Windows, macOS Нет Высокая Средняя Мощный, но сложнее в настройке
Sysmon Windows Нет Средняя Средняя Глубокий аудит, но только Win

Интересные факты и нестандартные применения

  • osquery можно запускать внутри Docker-контейнеров для аудита их состояния.
  • Плагин для Prometheus — можно строить графики по SQL-запросам osquery.
  • Есть osquery-брокеры для Kafka — можно отправлять события в потоковую обработку.
  • Можно использовать osquery для инвентаризации: какие пакеты стоят, какие ядра, какая версия BIOS и так далее.
  • С помощью osquery можно мониторить состояние SSL-сертификатов, парсить crontab, искать rootkits и даже анализировать логи безопасности (например, auth.log).

Новые возможности для автоматизации и скриптов

Главная фишка osquery — ты можешь строить любые SQL-запросы и интегрировать их в свои пайплайны. Например:

  • Проверять на лету, не появился ли новый пользователь без MFA.
  • Автоматически отправлять алерт, если найден подозрительный процесс.
  • Генерировать ежедневный отчет о состоянии серверов (пакеты, ядро, процессы, соединения) — скриптом на Python или Bash.
  • Встраивать osquery в CI/CD пайплайн для проверки контейнеров перед деплоем.

Есть даже готовые Python-биндинги — можно писать свои автоматизации на любимом языке.

Выводы и рекомендации

osquery — это универсальный швейцарский нож для аудита конечных точек. Он прост в установке, гибок в настройке и реально расширяет твой арсенал мониторинга. Если у тебя VPS, выделенный сервер, облако или даже флота Docker-контейнеров — обязательно попробуй osquery. Это не замена SIEM, но отличный доп-инструмент для быстрого аудита, поиска аномалий, автоматизации рутинных проверок и инвентаризации.

  • Используй osquery для прозрачности и контроля: процессы, пользователи, сеть, автозагрузка, изменения в системе.
  • Интегрируй с лог-менеджментом, строй алерты и отчеты.
  • Не забывай о правах и безопасности — запускай osquery от root, если нужен полный доступ, но не забывай про best practices.
  • Экспериментируй с плагинами и кастомными таблицами.

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

Официальные ресурсы для старта:

Пробуй, автоматизируй, делись опытом! А если есть вопросы или кейсы — кидай в комменты, обсудим!


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

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

Leave a reply

Your email address will not be published. Required fields are marked