Ведення логів або журналування в Linux-системах є однією з основних системних функцій, що дозволяє відслідковувати будь-які дії, вчинені користувачем, системою чи зовнішніми програмними засобами. Надалі ця інформація стає основним джерелом даних відновлення після збою чи захисту від несанкціонованого доступу до ресурсів. Для можливості її ефективного використання необхідно розуміти принципи організації зберігання ліг та методи роботи з ними. Розглянемо їх детальніше.
Організація системного журналування в Linux
Журналування організовано таким чином, щоб упорядкувати інформацію, що надходить на вхід, залежно від її типу та призначення. З цією метою виділено кілька журналів для фіксації подій, серед яких можна виділити системний, журнал для фіксації повідомлень, додатків та служб.
У системному журналі фіксуються будь-які події, пов'язані з роботою системи, що гарантує певну стабільність у її роботі. До цієї категорії також належать журнали автентифікації.
Інформація, пов'язана з автентифікацією користувачів, фізично розподілена між кількома системними файлами, серед яких є текстові та бінарні. До основних текстових файлів можна віднести файли auth.log та lastlog. До бінарних – файли btmp та wtmp. Всі вони зазвичай знаходяться у системному каталозі /var/log/.
В auth.log інформація зберігається як окремих записів, у полях яких записуються дані певного типу. Наприклад, там є поля для дати й часу автентифікації користувача, імені видаленого хоста, а також для повідомлення, що виводиться. В результаті це забезпечує фіксацію всіх спроб підключення до системи з боку користувачів або сторонніх процесів.
В lastlog фіксуються дані останніх сесій кожного із зареєстрованих у системі користувачів.
В btmp реєструються дані щодо кожної з невдалих спроб аутентифікації в системі.
В wtmp фіксуються всі останні відвідування користувачів.
Зібрана системою інформація з автентифікації може бути використана як Адміністратором, так і самою системою. Наприклад, Адміністратор може використовувати її з наступних целях:
- управління профілями користувача;
- виявлення слабких місць захисту від несанкціонованого доступу;
- аналіз помилок входу до системи;
- виявлення спроб злому з боку певних IP-адрес та вжиття заходів щодо їх блокування;
- періодичне одержання оновлених даних про роботу системи аутентифікації.
Що стосується використання інформації з аутентифікації для самої Linux-системи, то завдяки їй стає можливим відслідковувати будь-які зміни, внесені в систему.
Для реалізації зазначених цілей Адміністратори використовують низку вбудованих та зовнішніх програмних засобів, що дозволяють переглядати дані у зручному вигляді, робити вибірку потрібних записів, встановлювати та налаштовувати автоматичну фільтрацію заборонених користувачів тощо. Розглянемо деякі з цих засобів у порядку зростання їх складності та важливості.
Використання простих засобів перегляду та пошуку в журналах аутентифікації
До таких засобів можна віднести програми перегляду та навігації для текстових файлів великого розміру. Вони дозволяють вибирати потрібні ділянки файлу для перегляду, виділяти їх, а також здійснювати пошук даних, що відповідають потрібним критеріям відповідно до встановлених шаблонів пошуку. Цих можливостей цілком вистачає для здійснення більшої частини завдань з керування профілями користувача.
Найбільш поширеними для Linux-систем є програми tail та less, кожна з яких має свою специфіку роботи та набори опцій для запуску.
Програма tail
Це найбільш простий програмний засіб перегляду даних, що не має можливостей потужних редакторів, але дозволяє досить швидко потрапити в потрібну частину файлу. За функціональністю воно найближче до команди head. Команда має трохи більше десятка опцій для запуску, що дозволяє встановити для неї той чи інший режим роботи.
Спочатку використовуємо її без опцій. Для цього наберемо в терміналі:
$ tail /var/log/auth.log
В результаті ми отримали інформацію з файлу auth.log про останні десять спроб підключення до системи. Чому саме десять? Тому що за умовчанням ця програма виводить таку кількість записів з будь-якого файлу. Нижче ми виписали перші п'ять із виведених командою записів, щоб їх проаналізувати.
Dec 18 15:33:42 | dedicated | systemd-logind[603] | New session 7664 of user root. |
Dec 18 15:33:42 | dedicated | systemd: pam_unix(systemd-user:session) | session opened for user root(uid=0) by (uid=0) |
Dec 18 15:37:27 | dedicated | sshd[1642251] | Unable to negotiate with 218.92.0.59 port 4966: no matching key exchange method found. Their offer: diffie-hellman-group1-sha1,diffie-hellman-group14-sha1,diffie-hellman-group-exchange-sha1 [preauth] |
Dec 18 15:37:34 | dedicated | sshd[1642253] | Unable to negotiate with 220.77.114.179 port 60039: no matching host key type found. Their offer: ssh-rsa,ssh-dss [preauth] |
Dec 18 15:38:02 | dedicated | sshd[1642255] | Invalid user Oracle from 104.248.14.84 port 60530 |
Як бачимо, у першому стовпці (полі) фіксується точна дата і час події, що відбулася. В даному випадку це проміжок часу від 15.33 до 15.38 18 грудня.
У друге поле заноситься ім'я хоста, з якого було здійснено вхід до системи – dedicated.
У третьому полі відбито джерело сформованого повідомлення, зазвичай, це з базових компонентів Linux-системи (systemd-logind, sshd і т. д.).
У четвертому полі знаходиться текст системного повідомлення. Наприклад, «відкрито нову сесію під номером 7664 для користувача root» (New session 7664 of user root) або «немає доступу для користувача Oracle з IP-адреси 104.248.14.84, порт 60530» (Invalid user Oracle from 104.248.14.84 port 60530).
Застосування опцій або параметрів запуску дозволяє зробити програму tail більш гнучкою та зручною у використанні. Переглянути ці опції можна за допомогою вбудованої команди man. Переглянемо їх у терміналі:
$ man tail
Як бачимо, тут наведено детальний синтаксис для використання того чи іншого параметра. Так, якщо ми хочемо, щоб команда виводила не десять записів, як зараз, а лише три, то нам допоможе параметр -n. Застосуємо його практично. Для цього введемо в терміналі:
$ tail -n3 /var/log/auth.log
В результаті ми отримали у виведенні команди лише три останні записи, що значно прискорює процес аналізу даних.
Іншим важливим параметром є опція -f, використання якої дозволяє отримувати тільки ту інформацію, яка зазнала змін, тобто нову. Це дозволяє відстежувати файли журналів у режимі реального часу. Наведемо синтаксис її використання:
$ tail -f /var/log/auth.log
Так само й інші опції здатні ще більше збільшити гнучкість програмного засобу.
Програма less
Засіб має потужні можливості повноцінного редактора, що дозволяє, наприклад, використовувати його для довільного перегляду тексту в обох напрямках, здійснювати посторінковий висновок інформації, а також шукати потрібні ділянки тексту згідно з введеним шаблоном.
Запустимо її в терміналі для перегляду інформації про спроби підключення до системи:
$ less /var/log/auth.log
Програма має безліч опцій запуску, які завжди можна переглянути, ввівши відповідну команду:
$ man less
Однією з найбільш корисних опцій є параметр –s, що дозволяє прибрати прогалини всередині тексту, що переглядається. Синтаксис його використання наступний:
$ less -s /var/log/auth.log
Також корисним може бути використання параметра -a, що забороняє здійснювати пошук у ділянці тексту, який наразі відображається на екрані.
Опція -Dxcolor дозволяє задати потрібний колір тексту, що відображається, що також важливо для підвищення зручності читання та рівня сприйняття інформації.
Здійснити пошук потрібної фрази або слова можна за допомогою поля з миготливим курсором у нижній частині екрана. Введені символи сприйматимуться програмою як шаблон пошуку.
Щоб вийти з режиму перегляду, натисніть клавішу Q.
Використання системних засобів перегляду журналів автентифікації
До таких засобів відносяться вбудовані команди last та lastlog. На відміну від вже розглянутих простих засобів вони орієнтовані працювати лише з журналами аутентифікації і витягують у своїй інформацію з текстових файлів, а й бінарних. Тому при їх використанні не потрібно вводити повну назву файлу журналу, вони самостійно виберуть дані з потрібного файлу.
Спочатку продемонструємо використання команди last. Її основне призначення - виведення інформації з усіх останніх (кілька десятків) спроб входу в систему з боку будь-якого користувача або зовнішнього програмного засобу. Причому дані виводяться як у вдалим спробам підключення, і невдалим, інформацію якими вона бере з бінарного файлу log/btmp, у якому фіксуються.
Введемо в терміналі:
$ last
Як бачимо, дані виведені для двох користувачів – root и test_use, а також системного компонента reboot.
Тут фіксуються: ім'я користувача чи процесу; точка входу/підключення (порт, термінал тощо); IP-адреса; дата та час події; час сеансу (поле logged in).
Ця інформація дає достатньо відомостей, щоб Адміністратор зміг отримати об'єктивну інформацію про всі підключення до системи та вжити дієвих заходів у разі виявлення прихованих атак зловмисників.
Команда lastlog налаштована на виведення відомостей, зібраних в однойменному журналі /var/log/lastlog, в якому, як уже говорилося, фіксуються дані про останню сесію кожного із зареєстрованих у системі користувачів чи процесів. Причому інформація, що нею виводиться, автоматично впорядковується згідно з записами системного файлу passwd.
Використовуємо цю команду для отримання відомостей про останній сеанс кожного з наших користувачів. Для цього наберемо в терміналі:
$ lastlog
В результаті ми отримали повний набір відомостей, що складається зі значень таких полів: ім'я користувача або процесу; порт; IP-адреса; дата та час останнього відвідування. Звертаємо увагу, що дата та час відвідин виводяться тільки для реальних користувачів. Для системних процесів виводиться рядок «Never logged in», тобто «ніколи не входив», що цілком природно.
Програма також має низку опцій, що дозволяють дещо змінити формат виведення, і, по суті, отримати готовий фільтр.
Наприклад, виведемо лише тих користувачів, які відвідували систему раніше двох останніх днів. Для цього введемо в терміналі:
$ lastlog --before 2
Можна переконатися, що до списку було внесено зміни. Тепер ми не побачимо в ньому користувачів, які проходили аутентифікацію в останні два дні - відсутній користувач root, який був першим у списку.
Використання параметра -time дозволило б нам вивести лише користувачів, які проходили автентифікацію після зазначеного нами періоду.
Наведені приклади дають нам чітке уявлення про те, що можливості одних лише вбудованих програмних засобів роботи з журналами автентифікації досить великі і можуть бути використані Адміністраторами у повсякденній роботі. У разі використання зовнішніх утиліт, таких як F2B, подібні можливості стають практично необмеженими.