Рассмотрим пример того, как злоумышленник может использовать короткие имена в своих целях на примере команды ls:
□ хакер создает в каком-либо каталоге (например, в общедоступном /tmp) файл с таким же именем, как и у атакуемой программы;
□ в этот файл может быть записан сценарий, который выполняет необходимые хакеру действия.
Например, следующий код может быть записан в такой файл:
#!/bin/sh
# Изменяем права доступа к файлам /etc/passwd и /etc/shadow
chmod 777 /etc/passwd > /dev/null
chmod 777 /etc/shadow > /dev/null
# Выполняем программу
ls exec /bin/ls "[email protected]"
В данном примере выполняется всего три команды. Первые две изменяют права доступа к файлам /etc/passwd и /etc/shadow так, чтобы любой пользователь смог их прочитать. При этом все сообщения, которые могут возникнуть во время выполнения команд, направляются на нулевое устройство /dev/null, чтобы они не отображались на экране. После этого выполняется системная команда ls из каталога bin.
Теперь устанавливаем программе ls права, которые позволят выполнять ее любому пользователю:
chmod 777 /tmp/ls
Ложный файл готов. Теперь необходимо сделать так, чтобы он выполнялся вместо системной команды ls. Для этого достаточно добавить в системную переменную окружения PATH в самое начало каталог /tmp. Если теперь кто-либо запустит команду ls без указания полного пути, то выполнится наш сценарий, который попытается изменить права доступа на файлы паролей. Если у пользователя, запустившего команду, хватит полномочий для изменения прав, то можно считать, что система взломана.
Следите за содержимым системной переменной окружения PATH, чтобы ее никто не изменил.
14.12.5. Доверительные хосты
В файле .rhosts можно прописать адреса хостов, которым вы доверяете. Пользователи этих компьютеров смогут подключаться к серверу без аутентификации с помощью таких программ, как Telnet или FTP.
Мы уже столько раз говорили о безопасности, что нетрудно догадаться, что хакер может подделать адрес отправителя. Если ему удастся это сделать, то ваш сервер превращается в проходной двор.
14.12.6 Защита паролей
Для защиты паролей Linux достаточно только охранять файл /etc/shadow. Помимо этого вы должны контролировать сложность паролей, регулярно пытаясь подобрать пароль по популярным словарям, которые легко найти в Интернете (именно их используют хакеры). Если пароли сложные, то даже при получении файла взломщику понадобится слишком много времени, и скорей всего ничего не удастся.
Но не все так просто. Если пароли для доступа к системе защищаются самой ОС и обязательно шифруются, то остальные программы могут не иметь такой возможности. Например, в пользовательских программах для доступа к определенным сервисам, в частности FTP или POP3, может не использоваться шифрование, и в этом случае пароли могут находиться в конфигурационном файле в открытом виде.
Прежде чем устанавливать какую-либо программу, узнайте, где она хранит пароли и как они защищены (используется шифрование или нет). Устанавливайте такие права на файлы, чтобы доступ к ним мог получить только конкретный пользователь и администратор. Желательно, чтобы для группы стояли нулевые права, особенно если в ней может быть несколько пользователей.
Если отдельная группа создается для каждого пользователя, то группе можно выделить некоторые права. И все же, я бы не советовал этого делать, потому что неизвестно, что будет в будущем. Хакер может добавить себя в определенную группу, или вы сами можете случайно или намеренно объединить пользователей.
Всем своим пользователям я рекомендую не сохранять в программах паролей. Это значит, что при проверке почты надо каждый раз указывать свой пароль. Но это очень неудобно, особенно когда у пользователя более трех почтовых ящиков, а это в наше время является нормой. Да и при наличии одного очень трудно заставить пользователя помнить все пароли и не сохранять их в системе.
Но вводить пароль надо непосредственно в программе, и лучше всего, если он не будет отображаться на экране. Это значит, что надо стараться не указывать пароли в командной строке, которая не может использовать невидимые символы.
Существует множество методов, с помощью которых можно увидеть набираемый пароль, например, команда ps. Пример правильного получения пароля — утилита login, которая не отображает на экране вводимые данные.
В открытом виде пароли могут храниться и в базах данных, именно там содержится наиболее важная информация для любой организации. Базы данных требуют отдельного разговора, и в данной книге мы эту тему не затрагиваем, но забывать о ней нельзя.
14.12.7. Перенаправление сервисов
Если существуют какие-либо ресурсы, к которым обращается ограниченный круг людей, то необходимо заставлять сервисы работать на нестандартных портах. Это позволит защитить систему от излишних посягательств.
Одной из распространенных проблем использования стандартных портов является возможность их сканирования. Например, хакер узнает об уязвимости БД определенного разработчика. Допустим, что эта база использует порт 1457. Злоумышленнику достаточно только запустить сканирование сети в поисках компьютера с открытым портом 1457. Как только машина найдена, она попадает в "черный" список, и хакер может запустить программу, которая автоматически захватит все компьютеры из списка.
Проблема легко решается переконфигурированием сервиса для работы на другом порту, и при этом необходимо убрать любые баннеры, которые появляются при подключении на этот канал. В этом случае хакер не сможет узнать, что работает на порту и как взаимодействовать с удаленной программой.
Если с сервисами сервера работает небольшое количество людей, то можно поменять местами особо уязвимые (те программы, которые предоставляют пользователям возможность записи или выполнения команд в системе), например FTP (заставить работать на 80 порту) и HTTP (настроить на 21 порт). Жаль, что это нельзя сделать с общедоступными сервисами, а если и можно, то бесполезно. Например, если заставить работать Web-сервер на 81 порту вместо 80, то любой пользователь Интернета должен иметь возможность узнать об этом. А тогда и хакер будет в курсе.
14.13. Обнаружен взлом
Если вы обнаружили, что в системе есть посторонний, а сервер содержит секретную информацию, потеря которой может оказаться фатальной для вас, я рекомендую остановить сетевой интерфейс, чтобы компьютер отключился от сети, и начать анализ системных журналов. Лучше пусть сервер будет полчаса недоступным, чем вы полностью потеряете над ним контроль.
Для анализа первым делом необходимо запустить проверку конфигурации системы (об этом мы говорили в разд. 12.3). Необходимо сравнить отчеты программ проверки до и после взлома. Это поможет вам понять, что успел сделать хакер. Если в вашей системе оказался rootkit, то его нужно удалить.
Следующим этапом необходимо проверить контрольные суммы всех основных файлов, особенно конфигурационных из каталога /etc и исполняемых из каталога /bin. Злоумышленник может изменить эти файлы, чтобы получить потайной вход и оставаться в системе незамеченным. Определив отклонения, постарайтесь вернуть все в исходное состояние.
Далее, анализируем целостность пакетов. Сначала выполняем команду:
rpm -qa | grep kernel
Таким образом можно проверить установленные пакеты ядра, а потом обследовать их. Если вы увидели изменения, то добейтесь возврата в исходное состояние.
После этого необходимо проверить обновления для ОС Linux и используемых вами служб. В большинстве случаев взлом происходит именно из-за устаревшего программного обеспечения. Обновите все программы. Не забудьте и Web-сценарии, которые используются на Web-сервере, потому что они также нередко становятся причиной взлома.
Если у вас Web-сервер, то я не спешил бы возобновлять его работу, потому что это может быть опасно. Возможно, что ошибка еще не исправлена, если у вас много сценариев, написанных самостоятельно. Если ваш компьютер выполняет функции почтового сервера или решает любые другие задачи, то можно возобновить работу, но продолжать тщательное наблюдение за системой.
И только на последнем этапе я рекомендую начать анализ журналов и выявление действий хакера, которые привели к взлому, параллельно наблюдая за работающей системой. Если злоумышленник снова попытается проникнуть, то вы должны увидеть это и предотвратить вторжение на раннем этапе, чтобы не пришлось повторять процесс чистки системы.
Пока вы анализируете журналы, все пользователи должны сменить свои пароли доступа к серверу и ко всем его службам.