К основному содержимому

osquery: инвентаризация сервера и следы взлома

Безопасность · 29.09.2026

Что такое osquery и зачем он нужен на сервере

Osquery — это открытый инструмент, который превращает операционную систему в базу данных: процессы, сетевые соединения, установленные пакеты и файлы можно опросить обычным SQL-запросом. Утилиту разработала Meta и передала сообществу, сейчас её поддерживает Linux Foundation. На VPS или выделенном сервере osquery заменяет десяток разрозненных команд одним универсальным интерфейсом.

Главное отличие от ps, netstat или ss — результат приходит в виде таблицы, которую легко фильтровать, сравнивать со снимком за вчера и отправлять в систему мониторинга. Именно поэтому osquery полезен и для рутинной инвентаризации, и для расследования инцидента после подозрения на взлом.

Как установить osquery на Linux-сервер

Пакеты osquery собраны для основных дистрибутивов и подключаются через официальный репозиторий. На Ubuntu и Debian достаточно добавить ключ, репозиторий и поставить пакет:

curl -L https://pkg.osquery.io/deb/pubkey.gpg | gpg --dearmor -o /usr/share/keyrings/osquery.gpg
echo "deb [signed-by=/usr/share/keyrings/osquery.gpg] https://pkg.osquery.io/deb deb main" > /etc/apt/sources.list.d/osquery.list
apt update && apt install osquery
systemctl enable osqueryd --now

На RHEL, AlmaLinux и CentOS пакет ставится через yum или dnf из репозитория pkg.osquery.io, конфигурация демона лежит в файле /etc/osquery/osquery.conf, а интерактивная консоль запускается командой osqueryi.

Как посмотреть процессы и сеть через SQL-запросы

Основной способ работы с osquery — интерактивная оболочка osqueryi, где вместо десятка утилит используется один язык запросов. Ниже — типовые таблицы для инвентаризации сервера.

ТаблицаЧто показывает
processesЗапущенные процессы, путь к бинарнику, родительский PID
listening_portsПорты, которые слушает сервер, и связанный процесс
deb_packages / rpm_packagesУстановленные пакеты и их версии
crontabЗадания cron всех пользователей
authorized_keysSSH-ключи, разрешённые для входа

Пример запроса, который выводит все процессы, слушающие сетевые порты, вместе с путём к исполняемому файлу:

SELECT p.name, p.pid, p.path, lp.port, lp.address
FROM processes p
JOIN listening_ports lp ON p.pid = lp.pid
WHERE lp.port > 0;

Такой запрос за секунду покажет то, на что обычно уходит несколько команд lsof и netstat подряд.

Как искать следы взлома с помощью osquery

При расследовании инцидента важно найти отклонения от привычной картины: неизвестный процесс, лишний cron, изменённый бинарник. Osquery помогает быстро сузить круг подозрительных объектов.

  • Процессы без файла на диске (признак инжекта в память): SELECT name, pid FROM processes WHERE on_disk = 0;
  • Новые задания cron, добавленные за последние сутки, через сравнение с эталонным снимком таблицы crontab
  • Лишние ключи в authorized_keys, которых нет в вашем списке доступа
  • Бинарники с недавней датой изменения в системных каталогах: SELECT path, mtime FROM file WHERE directory = '/usr/bin' ORDER BY mtime DESC LIMIT 20;

Эти запросы не заменяют полноценный SIEM, но дают быстрый первый срез за первые минуты после обнаружения аномалии. Для проверки на скрытые бэкдоры дополните osquery сканером rkhunter, а порядок дальнейших действий распишите заранее в плане реагирования на инцидент.

Как настроить osqueryd для постоянного мониторинга

Разовые запросы полезны, но постоянную защиту даёт демон osqueryd с расписанием и differential logging — он запоминает предыдущий результат запроса и логирует только изменения. Конфигурация задаётся в JSON-файле:

{
  "schedule": {
    "listening_ports": { "query": "SELECT * FROM listening_ports;", "interval": 300 },
    "crontab": { "query": "SELECT * FROM crontab;", "interval": 3600 }
  },
  "file_paths": {
    "ssh_keys": [ "/root/.ssh/authorized_keys", "/home/%/.ssh/authorized_keys" ]
  }
}

Результаты пишутся в /var/log/osquery/osqueryd.results.log и оттуда легко забираются в централизованный сбор логов или в SIEM вроде Wazuh для корреляции с другими событиями сервера.

Чек-лист внедрения osquery на сервере

  • Установить пакет osquery и включить сервис osqueryd в автозагрузку
  • Настроить schedule для ключевых таблиц: процессы, порты, cron, authorized_keys
  • Включить file integrity monitoring для критичных каталогов через file_paths
  • Настроить отправку результатов в syslog или отдельную систему логирования
  • Раз в неделю снимать контрольный снимок таблиц и сравнивать с текущим состоянием
  • Хранить историю запросов расследования инцидентов отдельно от рабочих логов
← Назад в базу знаний Задать вопрос поддержке