OpenSSH - система, предназначенная для
защиты от перехвата информации при передаче по сети. Она включает в себя
замену стандартным утилитам удаленного управления, передачи файлов, выполнения
команд и прочим утилитам, которые передают по сети конфиденциальную
информацию. Для защиты используется криптографический механизм SSL, для
авторизации - RSA и DSA. Система изначально создана для OpenBSD, но сейчас
приспособлена для нужд других
Unix-систем и windows.
19-21 августа 2001 в bugtraq
появилась информация о
двух слабых местах в реализации OpenSSH.
Первое: при подключении пользователя по
SSH (secure shell - утилита для
удаленного управления) выдается
приветствие, местоположение которого
пользователь может указать произвольно.
При этом система, читая файл
приветствия, работает с правами
суперпользователя, т.е. способна прочитать
файл, который не может прочитать сам
пользователь.
При подключении пользователя через SSH
система берет из файла login_conf
параметры
copyright=имя_файла и
welcome=имя_файла.
Вот код, который их
отображает:
copyright:
if (newcommand == NULL &&
!quiet_login && !options.use_login) {
fname = login_getcapstr(lc, "copyright", NULL, NULL);
if (fname != NULL && (f = fopen(fname, "r")) != NULL) {
while (fgets(buf, sizeof(buf), f) != NULL)
fputs(buf, stdout);
fclose(f);
welcome:
f = fopen(login_getcapstr(lc, "welcome", "/etc/motd",
"/etc/motd"), "r");
while (fgets(buf, sizeof(buf), f))
fputs(buf, stdout);
fclose(f);
Сбрасывание прав доступа
суперпользователя происходит позднее.
Вторая проблема: если используется sshd
для запуска конкретной программы, и
разрешен sftp (замена стандартного file transfer
protocol), то пользователи
с ограниченными правами могут получить
дополнительные права. Проблема
существует как в OpenSSH 2.9 из OpenBSD, так и в
портированной версии
OpenSSH 2.9p2. В этих системах по умолчанию sftp
разрешен.
OpenSSH позволяет ограничить права
конкретных пользователей. Например,
удобно настроить систему сохранения
конфигурации на другой сервер, при этом
проверяется, что шифруется конфигурация
именно нужного сервера, и что она
передается именно на нужный сервер. И
можно ограничить права пользователя,
ответственного за эту операцию,
выполнением лишь набора необходимых команд.
Несмотря на большое количество
ограничений, OpenSSH не позволяет запретить
доступ к sftp. Через sftp клиент может
забирать, отсылать, удалять и менять
хозяина файлов и директорий.
Сценарий:
Есть сервер Important.
Есть сервер DumpTape.
Important настроен так, чтобы сохранять свою
конфигурацию на DumbTape.
Проблема:
Любой, кто получит доступ к ключу на DumpTape (например,
получив права root
на нем), сможет подсоединиться к серверу
Important через sftp, зайти и
заменить файлы, отвечающие за
ограничение прав доступа пользователя, и,
таким образом, убрать из них ограничения.
После этого он может подключиться
через SSH (аналог telnet).
Если вы замените скрипт для резервного
копирования так, как описано в инструкции
по
OpenSSH, то скрипт запустится с правами root, и
тот, кто взломает сервер
DumbTape, получит администраторский доступ к
серверу Important. Далее он
может сделать с ним, что угодно.
Рекомендации по устранению второй
проблемы: до тех пор пока не будет
выпущен официальный патч, запретите
использование sftp.