Що таке 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_paths
- Налаштувати надсилання результатів у syslog або окрему систему логування
- Раз на тиждень знімати контрольний знімок таблиць і порівнювати з поточним станом
- Зберігати історію запитів розслідування інцидентів окремо від робочих логів