Михаил Флёнов - Linux глазами хакера
14.8. Небезопасная NFS
Технология NFS (Network File System, сетевая файловая система) была разработана компанией Sun Microsystems в 1989 году. Идея была великолепной. Любой пользователь может монтировать каталоги сервера к своей файловой системе и использовать их, как будто они находятся на компьютере клиента. Это очень удобно в сетях. Пользовательские каталоги могут находиться на сервере и подключаться к клиенту по мере надобности. Таким образом, все файлы будут храниться централизованно, а использоваться, как будто они находятся локально.
Как я уже говорил, удобство и безопасность — несовместимые вещи, a NFS слишком удобна.
В состав NFS входит утилита showmount, которая может отобразить, какие директории и какими пользователями подключены. Для администратора это неоценимая информация.
Выполните команду showmount -a localhost.
Вы сможете увидеть следующую информацию о NFS на своем сервере:
All mount points on localhost:
robert:/home/robert
econom:/home/jhon
buh:/home/andrey
robert:/usr/local/etc
econom:/usr/games
Результат разделен на две колонки символом двоеточия. В первой находится имя компьютера, подключившего удаленный раздел, а во второй — путь на сервере к подсоединенному ресурсу.
Приятно видеть подробную информацию, но и опасно, потому что команда может выполняться удаленно, а значит, любой хакер доберется с ее помощью до следующей информации:
□ подключенные директории. В примере выше подсоединяются различные папки из раздела /home. Чаще всего их названия совпадают с именами пользователей, поэтому легко определить действительные имена юзеров, не обращаясь к файлу /etc/passwd. С такой информацией хакеру проще будет подбирать пароли доступа;
□ имена компьютеров в сети. Если вы потратили большие усилия на защиту своего DNS-сервера, то можете считать, что вы сделали это зря, если на каком-либо сервере установлена NFS. Один запрос показывает имена компьютеров в сети, пусть и не все, а только работающие с NFS, но и этого может быть достаточно для хакера. Кстати, ему не надо даже зондировать сеть с помощью ping-запросов, потому что и так видно действующие компьютеры;
□ используемые программы, включая номер версии. Если пользователи монтируют каталоги с программами, то имена этих каталогов могут выглядеть как /usr/local/jail 1.0. Это только пример, но он показывает, что директории в Linux могут содержать в качестве имени название программы и, самое главное, номер версии.
В зависимости от того, какие открыты каталоги, хакер может получить намного больше информации. Выходит, что утилиты NFS слишком болтливы, а этого нельзя допускать.
Если вы решили использовать NFS, то позаботьтесь о том, чтобы она не был доступна из Интернета. Для этого необходимо запретить подключение к 2049 UDP- и TCP-порту извне. Эти функции может выполнить сетевой экран. А если хакер уже взломал какой-то компьютер в сети и получил возможность выполнять команды внутри нее, то защита сетевого экрана не поможет.
При настройке NFS в файле /etc/exports указываются экспортируемые файловые системы и права доступа к ним. Никогда не открывайте полный доступ ко всей системе, т.е. в файле не должно быть строки:
/ rw
Необходимо четко прописывать пути к каталогам, которые могут быть монтированы пользователями. Это значит, что если пользователи должны иметь возможность подключать домашние каталоги, то следующее разрешение также является неверным и опасным:
/home rw
В чем здесь опасность? Не все пользовательские каталоги должны монтироваться удаленно. Например, если вы работаете под пользовательской учетной записью, но являетесь администратором, то в вашем каталоге могут быть программы, используемые для управления системой. Нельзя допустить, чтобы злоумышленник смог его увидеть (даже с правами только на чтение). Разрешайте подключение только конкретным пользователям, которые действительно монтируют свои файловые системы удаленно. Например:
/home/Robert rw
/home/FlenovM rw
/home/Andreу rw
Большинство специалистов по безопасности сходятся во мнении, что NFS не стоит использовать вообще. Если вы решили применить ее только для того, чтобы программы были установлены централизованно, то следует победить свою лень и заняться их постановкой на каждый компьютер в отдельности.
Если вам необходимо сделать документы общедоступными, чтобы пользователи могли работать совместно с одним каталогом, то можно рассмотреть вариант использования Samba (см. гл. 6). Этот сервис менее болтлив и может решить ваши потребности в разделении каталогов сервера.
14.9. Определение взлома
Для эффективной защиты сервера очень важно вовремя определить, что сервер был взломан. Чем раньше вы узнаете о проникновении в систему хакера, тем скорее сможете отреагировать и предотвратить печальные последствия. Помните, взломы бывают всегда и с любой системой, но вы должны уметь их раскрывать.
Как можно выявить хакера? Существует очень много методов, и сейчас мы рассмотрим наиболее интересные и эффективные.
14.9.1. Осведомлен, значит защищен
Очень часто я использую чрезвычайно эффективный, но сложный в реализации метод — информирование при запуске потенциально опасных программ. Сложность заключается в том, что надо уметь программировать под Linux хотя бы на каком-нибудь языке. Лучше, если это будет С, но можно и Perl. В крайнем случае, подойдет умение писать сценарии (командные файлы).
Итак, в чем заключается мой метод? Войдя в систему, хакер всегда оглядывается и старается найти способ укрепиться в системе, чтобы оставаться долгое время незаметным для администратора. Для этого взломщик чаще всего выполняет команды who, su, cat и др. Ваша задача установить на них ловушки. Например, можно изменить код программы su так, чтобы сразу после ее выполнения администратору направлялось письмо.
Получив сообщение о том, что была выполнена опасная команда, и она запускалась не администратором, есть повод проверить систему на наличие в ней постороннего.
Если вы не умеете программировать, можно обойтись и средствами самой ОС. Допустим, что вы хотите получать сообщения каждый раз, когда выполняется команда who. Взломщик часто выполняет такую директиву, когда входит в систему, чтобы узнать, есть ли там администратор. Определить место расположения программы можно командой:
which who
В результате вы должны увидеть путь типа /usr/bin/who.
Для начала запоминаем права на файл, выполнив команду:
ls -al /usr/bin/who
Для данной программы должны быть права -rwxr-xr-x, что соответствует числу 755.
Теперь необходимо переименовать файл /usr/bin/who в /usr/bin/system_who. Это можно сделать следующей командой:
mv /usr/bin/who /usr/bin/system_who
Меняем права доступа:
chmod 755 /usr/bin/system who
Теперь, чтобы выполнить команду who, нужно использовать имя system_who. Но скопированный файл может стать неисполняемым, поэтому второй командой мы восстанавливаем права.
Затем создаем заглушку для программы who. Это будет файл с именем who, в директории /usr/bin. Когда хакер будет выполнять команду who, то будет запускаться наш файл. Для этого выполним команду:
cat /usr/bin/who
Теперь все команды, вводимые с консоли, будут записываться в файл /usr/bin/who. Наберите две строки:
/usr/bin/system_who
id | mail -n -s attack [email protected]
После этого нажмите сочетание клавиш <Ctrl>+<D> и измените права на созданный нами файл /usr/bin/who, установив значение 755.
Выполните команду who. Все вроде нормально, но если проверить почту, то в вашем ящике будет лежать новое письмо с заголовком "attack" (рис. 14.3), и в нем будут находиться параметры (все, что вернет команда id) пользователя, выполнившего команду. Это из-за того, что запустилась не системная команда, а наш файл, который содержит две строки:
□ /usr/bin/system_who — сначала запускаем системный файл who, который мы переименовали, чтобы взломщик ничего не заподозрил;
□ id | mail -n -s attack [email protected] — выполняется команда id, а результат направляется с помощью почтовой программы mail в почтовый ящик [email protected] Ключ -s задает заголовок письма. Ключ -n предотвращает чтение файла /etc/mail.rc. Я рекомендую указывать только эти атрибуты, чтобы на экране не появлялось лишней информации, и взломщик ничего не заподозрил. Хакер не должен знать, что программа отправила администратору какое-нибудь сообщение.
Рис. 14.3. Пример сообщения об атаке
Таким образом, можно подменить все опасные программы, которые должны быть недоступны простым пользователям.