Управление сигналами в Unix.

Сигналы используются в UNIX для уведомления процесса о наступлении определенного события или условия и для управления асинхронными операциями. 

Например, когда пользователю нужно приостановить работающую программу, он нажимает Ctrl+Z. Это приводит к пересылке SIGTSTP всем процессам фонового режима. Таким образом, сигналы служат для изменения потока исполнения программ. Однако нужно запретить любые несанкционированные действия, изменяющие этот поток, т.е. необходимо обезопасить работу с сигналами. Помните, что SIGTSTP — лишь один из более чем 30 типов сигналов. 

Примером уязвимости управления сигналами может служить ошибка в wu-ftpd v2.4, обнаруженная в конце 1996 г. Она заключается в том, что как обычный, так и анонимный пользователь может получить доступ к файлам с правом root. Ошибка связана с некорректной работой сервера FTP по управлению сигналами. Сервер устанавливает два обработчика сигналов (во время инсталляции в системе). Первый обработчик перехватывает сигнал SIGPIPE при закрытии подключения к порту управления/данных. Второй обработчик перехватывает сигнал SIGURG во время остановки пересылки файлов командой ABOR. В обычных условиях, когда пользователь регистрируется на сервере FTP, сервер работает с действующим правом UID данного пользователя и не имеет полномочий root. Но если соединение данных закрывается случайным образом, серверу FTP посылается сигнал SIGPIPE. Сервер перескакивает на функцию dologout () и повышает свое право до уровня root (UID 0 ), затем добавляет регистрационную запись в файл системного журнала, закрывает файл журнала xferlog, удаляет экземпляр пользовательского объекта из таблицы процессов и завершает свою работ)'. Именно в этот момент сервер устанавливает свой действующий идентификатор UID в значение 0, что уязвимо для атаки. 

Нападающий может послать серверу FTP сигнал SIGURG с действующим UID равным 0, приостановить сервер, который попытается зарегистрировать пользователя, а затем перескочить в главный цикл команд сервера. Создаются условия гонки, поскольку атакующий формирует сигнал SIGURG после того, как сервер установил свой действующий UID в значение 0, но до того, как пользователь успешно зарегистрируется в журнале. Если нападающему повезет (можно попробовать несколько раз), он останется зарегистрированным пользователем сервера FTP с правом root и сможет вытянуть или записать любой файл, а также исполнить (потенциально) любую команду с правом root.

Похожие материалы: