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

> osquery превращает Linux-сервер в SQL-базу: как установить утилиту, опросить процессы и порты и найти следы взлома после инцидента.

## Что такое 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](https://www.zevshost.net/ru/kb/rkhunter-rootkit-scanner/), а порядок дальнейших действий распишите заранее в [плане реагирования на инцидент](https://www.zevshost.net/ru/kb/plan-reagirovaniya-na-incident/).

## Как настроить 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](https://www.zevshost.net/ru/kb/wazuh-siem-monitoring/) для корреляции с другими событиями сервера.

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

- Установить пакет osquery и включить сервис osqueryd в автозагрузку
- Настроить schedule для ключевых таблиц: процессы, порты, cron, authorized\_keys
- Включить file integrity monitoring для критичных каталогов через file\_paths
- Настроить отправку результатов в syslog или отдельную систему логирования
- Раз в неделю снимать контрольный снимок таблиц и сравнивать с текущим состоянием
- Хранить историю запросов расследования инцидентов отдельно от рабочих логов

---

Источник: https://www.zevshost.net/ru/kb/osquery-inventarizaciya/
