# 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/uk/kb/rkhunter-rootkit-scanner/), а порядок подальших дій розпишіть заздалегідь у [плані реагування на інцидент](https://www.zevshost.net/uk/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/uk/kb/wazuh-siem-monitoring/) для кореляції з іншими подіями сервера.

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

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

---

Джерело: https://www.zevshost.net/uk/kb/osquery-inventarizaciya/
