Что такое 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_keys | SSH-ключи, разрешённые для входа |
Пример запроса, который выводит все процессы, слушающие сетевые порты, вместе с путём к исполняемому файлу:
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 или отдельную систему логирования
- Раз в неделю снимать контрольный снимок таблиц и сравнивать с текущим состоянием
- Хранить историю запросов расследования инцидентов отдельно от рабочих логов