Проблемы обработки сигналов
В системе UNIX сигналы (signal) обеспечивают механизм, используемый для изве-
щения процесса о том, что возникло какое-то определенное условие. Кроме того, с
помощью сигналов обрабатываются асинхронные события. Например, когда пользо-
ватель хочет приостановить работу выполняющейся программы, он нажимает комби-
нацию клавиш <Ctrl+Z>. При этом всем активным процессам рассылается сигнал
SIGTSTP. Таким образом, с помощью сигналов изменяется ход выполнения програм-
мы. Как и раньше, выражение "изменяется ход выполнения программы" должно вы-
звать у вас мгновенную реакцию, так как такие действия обычно таят в себе угрозу
для безопасности. Действительно, возможность влиять на ход выполнения работаю-
щей программы имеет решающее значение при обеспечении безопасности обработки
сигналов. Если бы дело ограничивалось лишь сигналом SIGTSTP, это было бы не
столь критично, однако в действительности для подобных целей может использовать-
ся свыше 30 сигналов, что, как вы понимаете, представляет собой сложную проблему.
Примером взлома защиты с использованием обработки сигналов может послужить
обнаруженный в конце 1996 года изъян в системе обработки сигналов программой
wu-
f
tpd
v2.4.
Этот изъян позволял как обычным, так и анонимным пользователям получать
доступ к файлам в качестве суперпользователя. Это оказалось возможным из-за ошибки
в сервере FTP, связанной с обработкой сигналов. При запуске
FTP-сервер
устанавливал
два обработчика сигналов. Первый из них использовался для обработки
сигналов
SIGPIPE при закрытии управляющего порта или порта данных, а второй — для обработ-
ки сигналов SIGURG, поступающих при обнаружении команды
ABOR,
предназначенной
для аварийного прекращения передачи данных. Обычно, когда пользователь регистриру-
ется на сервере FTP, сервер запускается в контексте действующего UID пользователя, а
не на уровне суперпользователя. Однако если соединение, по которому передаются дан-
ные, неожиданно закрывается,
FTP-серверу
отправляется
сигнал SIGPIPE, после чего
FTP-сервер вызывает функцию
dologout
()
и повышает свой уровень привилегий до
уровня суперпользователя (UID 0)! Сервер добавляет в файл системного журнала запись
об
отключении пользователя, закрывает
файл
журнала
xferlog,
удштяет
пользователь-
ский экземпляр сервера из таблицы процессов и завершает свою
работу
Именно в этот
момент сервер и изменяет свой
действующий
U1D
на 0, что
повышает
уязвимость сис-
темы в случае взлома. Взломщик может отправить
РТР-серверу
сигнал SIGURG, пока его
действующий
UID
равен 0, прервать работу сервера, когда он пытается отключить поль-
зователя, а потом заставить его снова
вернугься
обратно в режим обработки поступаю-
щих команд. Таким образом, здесь можно говорить о гонке на выживание, поскольку
взломщику необходимо успеть выдать сигнал SIGURG после того, как сервер изменит
свой UID на 0, но до отключения пользователя. Если
взломщику
это удастся (пусть и не
с первой попытки), он останется подключенным к FTP-серверу, но уже с полномочия-
ми суперпользователя! Это позволит ему получить или отправить любой файл, а также
выполнять команды с привилегиями root.
О Контрмеры: защита от взлома с помощью сигналов
Когда речь идет о файлах SUID, корректная обработка сигналов должна быть обя-
зательным требованием. Если программа перехватывает и обрабатывает сигналы над-
лежащим образом, конечный пользователь не сможет сделать ничего такого, что на-
рушило бы безопасность. Конечно, об этом должны позаботиться программисты, а
администратор прежде всего должен убедиться в том, что бит
SUID
установлен только
для тех файлов, которым это действительно необходимо. Об
этом
уже неоднократно
говорилось. Кроме того, нужно удостовериться в том, что установлены все модули об-
новления, предоставленные разработчиком операционной системы.
380 Часть
1!.
Хакинг
систем