Троан Эрик В.
Шрифт:
Очень трудно выполнить полную проверку всех этих возможностей. Наилучшим способом предотвращения всех возможных атак против командной оболочки служит в первую очередь уклонение от ее запуска. Функции вроде
22.3.5. Создание временных файлов
Довольно часто в программах применяются временные файлы. Система Linux даже предусматривает для этой цели особые каталоги (
Давайте представим программу, активизированную пользователем root, которая создает основной сценарий во временном файле и затем запускает его. Для разрешения одновременного запуска нескольких экземпляров программы, возможно, сценарий включает программный идентификатор как часть имени файла и создает файл со следующим кодом:
Программа создает уникальное имя файла и усекает любой существующий файл с таким именем перед записью в него. Хотя на первый взгляд этот способ может показаться рациональным, фактически им легко воспользоваться для атак. Если файл, который программа пытается создать, уже существует как символическая ссылка, то открытый запрос следует по такой ссылке и открывает произвольный указываемый файл. Первым примером эксплуатации в такой ситуации является создание символических ссылок в
Еще более опасной является атака, при которой символические ссылки указывают на собственный файл взломщика (или когда в
Добавление
Самым лучшим способом создания временных файлов является применение библиотечной функции
164
Существует еще несколько библиотечных функций, имеющих дело с временными файлами, такие как
Параметр
В более старых версиях библиотеки С системы Linux создавался файл с режимом 0666 (общедоступное чтение/запись) и в зависимости от umask программы приобретались соответствующие права на файл. В более новых версиях читать и записывать в файл разрешено только текущему пользователю, но поскольку POSIX не определяет такое поведение, неплохо явно установить umask процесса (077 — хороший выбор!) до вызова
Система Linux и некоторые другие операционные системы предлагают функцию