- Home »

Аудит конечных точек с помощью 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 или выделенный сервер под свои задачи.
Официальные ресурсы для старта:
- osquery.io — официальный сайт
- Документация
- GitHub-репозиторий
Пробуй, автоматизируй, делись опытом! А если есть вопросы или кейсы — кидай в комменты, обсудим!
В этой статье собрана информация и материалы из различных интернет-источников. Мы признаем и ценим работу всех оригинальных авторов, издателей и веб-сайтов. Несмотря на то, что были приложены все усилия для надлежащего указания исходного материала, любая непреднамеренная оплошность или упущение не являются нарушением авторских прав. Все упомянутые товарные знаки, логотипы и изображения являются собственностью соответствующих владельцев. Если вы считаете, что какой-либо контент, использованный в этой статье, нарушает ваши авторские права, немедленно свяжитесь с нами для рассмотрения и принятия оперативных мер.
Данная статья предназначена исключительно для ознакомительных и образовательных целей и не ущемляет права правообладателей. Если какой-либо материал, защищенный авторским правом, был использован без должного упоминания или с нарушением законов об авторском праве, это непреднамеренно, и мы исправим это незамедлительно после уведомления. Обратите внимание, что переиздание, распространение или воспроизведение части или всего содержимого в любой форме запрещено без письменного разрешения автора и владельца веб-сайта. Для получения разрешений или дополнительных запросов, пожалуйста, свяжитесь с нами.