1. Введення. Для багатьох людей, що захоплюються дослідженням мереж, рано чи пізно вставала проблема ідентифікації віддаленої системи і отримання якомога більше інформації про неї. На сьогоднішній день існує безліч способів ідентифікації систем. Не вдаючись у подробиці (все-таки тема трохи інша), можна виділити наступні:

— перелік відкритих портів
— вивчення маркерів мережевих сервісів (telnet, ftp, sendmail, pop, etc)
— використання програм, що здійснюють активне дослідження стека TCP/IP (наприклад queso)
— використання тестів на основі відомих сигнатур різних операційних систем і мережевих пристроїв (таке дослідження здійснює утиліта nmap від Fyodor при додаванні опції-O)
— пасивне дослідження стека протоколу TCP/IP
— використання HTTP команд (наприклад при telnet підключенні до 80 порту сервера)
— використання спеціалізованих сканерів безпеки

Це лише деякі зі способів ідентифікації віддаленої системи. У даній статті, не претендує на абсолютну грамотність, висвітлено деякі аспекти функціонування протоколу SNMP, які можуть бути корисні при взаємодії з віддаленими хостами.

2. SNMP
Як відомо, SNMP перекладається як Simple Network Management Protocol (протокол мережевого управління). Цей протокол використовує UDP-порти 161 і 162. SNMP був розроблений з метою надсилання запитів мережевих елементів (хости, гейтвеи, сервери та ін) для перевірки і зміни їх параметрів. Даний протокол близький до принципу «клієнт-сервер». Роль сервера виконують агенти, тобто опитувані мережеві пристрої, а роль клієнтів виконують системи управління, тобто мережеві додатки, які, власне, збирають інформацію. На даний момент існують три версії протоколу, які мають спільну базисну архітектуру.

1. SNMPv1 (читай RFC 1157). Основна проблема безпеки цієї версії полягала у тому, що єдиним механізмом захисту були паролі (community string), які пересилалися в незашифрованому вигляді.

2. SNMPv2 (читай RFC 1146). У даній версії протоколу питань безпеки було приділено більше уваги. Зокрема, були додані: функції хешування по алгоритму MD5, установка тимчасових міток для уникнення повторення та ретрансляції повідомлень, підтримка криптування за алгоритмом DES для збереження конфіденційності інформації, нові можливості адміністрування, захист паролів і віддаленої настройки конфігурації.

3. SNMPv3 (читай RFC 2571). Цей стандарт є удосконаленням другої версії. Крім всіх особливостей присутніх у другій версії, спрощена схема установки і управління, без втрати безпеки.

3. Безпека
Згідно RFC 2574, безпека в SNMP здійснюється за допомогою так званої користувальницької моделі безпеки (user-based security model-USM). Дана модель захищає від двох основних і двох другорядних типи загроз:

— модифікація інформації
— маскарадинг
— зміни в потоці повідомлень
— загроза розкриття даних

В структуру USM входить алгоритм хешування MD5 для забезпечення цілісності інформації, який захищає від атак модифікації даних. Проти змін у потоці повідомлень використовується синхронізація з виставленням часових міток. Як протидія загрозі розкриття даних здійснюється шифрування за алгоритмом DES. Слід зазначити, що використання даної опції є вибірковим, тобто на деяких системах вона може бути не активована.

4. Практика
Після цього короткого огляду про принципи роботи SNMP настав час поговорити про те, як можна використовувати достоїнства і недоліки цього протоколу при взаємодії з удалеными системами. Вся інформація про стан і налаштування мережевих елементів знаходиться в MIB (Management Information Base), на Базі Керуючої Інформації, яка являє собою зібрання модулів з даними. Звернутися до модулів можна за допомогою спеціальних запитів. Серед них можна виділити: GetRequest, SetRequest, GetNextRequest та ін. На жаль, більшість модулів доступні до читання з них інформації, а деякі і для запису. Правильна настройка передбачає роботу з конфігураційними файлами і ядром, чого багато системні адміністратори не люблять. За замовчуванням, залишаються дві групи даних «private» і «public». Утиліти, які використовуються для опитування мережних елементів, як правило, йдуть в стандартний дистрибутив операційної системи Linux.

В Red Hat 7.2 входить пакет: ucd-snmp-utils-4.2.1-7.i386.rpm
Встановлюємо пакет: rpm -i ucd-snmp-utils-4.2.1-7.i386.rpm

Після установки з’являються програми:

/usr/bin/snmpbulkget
/usr/bin/snmpbulkwalk
/usr/bin/snmpcheck
/usr/bin/snmpconf
/usr/bin/snmpdelta
/usr/bin/snmpdf
/usr/bin/snmpget
/usr/bin/snmpgetnext
/usr/bin/snmpinform
/usr/bin/snmpnetstat
/usr/bin/snmpset
/usr/bin/snmpstatus
/usr/bin/snmptable
/usr/bin/snmptest
/usr/bin/snmptranslate
/usr/bin/snmptrap
/usr/bin/snmpusm
/usr/bin/snmpvacm
/usr/bin/snmpwalk

За допомогою цих утиліт можна дізнатися практично УСЮ системну інформацію про віддаленої системи (починаючи від операційної системи і закінчуючи активними мережевими інтерфейсами). Головне-RTFM! Наприклад, утиліта snmpget посилає запити хостам, snmpset-встановлює значення в MIB (за наявності прав запису) і т. д.

Приклад:

#/usr/bin/snmpget target.com public system.sysDescr.0
Linux hostname 2.4.7-10 #1 Thu Sep 6 17:27:27 EDT 2001 i686

#/usr/bin/snmpget target.com public system.sysContact.0
system.sysContact.0 = [email protected]

#/usr/bin/snmpget target.com public system.sysName.0
system.sysName.0 = target

Існує величезна кількість параметрів, які зберігаються в MIB. Якщо вам знадобився весь список даних, то найкращим вибором буде утиліта snmpwalk.

#/usr/bin/snmpwalk target.com public

При використанні цієї утиліти з’являється величезна база інформації про систему: ім’я хоста, операційна система, меторасположение комп’ютера, системні інтерфейси, активні мережеві інтерфейси, IP і MAC адреси, з якими встановлювалися з’єднання нещодавно, інформація про мережі і маршрутизації, інформація про стан відкритих портів (цей спосіб набагато надійніше сканування, оскільки немає ніяких перешкод у вигляді брандмауерів).

Сподіваюся, ця стаття виявиться корисною для громадськості. При виникненні питань — читай man або RFC.

5. Забезпечення безпеки SNMP.
Першим кроком до захисту цього протоколу буде заборона доступу на SNMP-порти (див. вище) для всіх комп’ютерів, за винятком тих, кому буде дійсно необхідний санкціоноване підключення. Це можна здійснити за допомогою правил iptables/ipchains. Системним адміністраторам рекомендується стежити за тим, яка інформація про їх системі надається за замовчуванням. Також необхідно логгирование спроб несанкціонованого доступу. Безумовно, рекомендується відмова від першої версії SNMP, т. к. захист реалізована дійсна на дуже низькому рівні (що поробиш, коли розроблялася перша версія до Інтернет підключалися, в основному, люди знаючі і порядні). Але, як я прочитав в одній книзі, «кращий захист від SNMP-атак — не використовувати протокол SNMP».