Гонка по символическим ссылкам
Эта статья нуждается в дополнительных цитатах для проверки . ( август 2016 г. ) |
Гонка символических ссылок — это своего рода уязвимость безопасности программного обеспечения , возникающая в результате того, что программа создает файлы небезопасным способом. [ 1 ] Злоумышленник может создать символическую ссылку на файл, который иначе ему не будет доступен. Когда привилегированная программа создает файл с тем же именем, что и символическая ссылка, она фактически вместо этого создает связанный файл, возможно, вставляя содержимое, желаемое злоумышленником (см. пример ниже), или даже предоставленное злонамеренным пользователем (в качестве входных данных). в программу).
Это называется « гонкой », потому что в типичном варианте программа проверяет, существует ли уже файл с таким именем; если он не существует, программа создает файл. Злоумышленник должен создать ссылку в промежутке между проверкой и созданием файла .
Гонка символических ссылок может произойти с антивирусными продуктами, которые решают поместить подозрительный файл в карантин или удалить, а затем делают это. В промежутке между решением и действием вредоносное ПО может заменить подозрительный файл системным или антивирусным файлом, который вредоносное ПО хочет перезаписать. [ 2 ]
Пример
[ редактировать ]В этом наивном примере Unix программа foo
является setuid
. Его функция — получение информации для учетных записей , указанных пользователем. Для «эффективности» он сортирует запрошенные учетные записи во временный файл ( /tmp/foo
естественно), прежде чем делать запросы.
Каталог /tmp
доступен для записи во всем мире. Злоумышленник Mallory создает символическую ссылку на файл /root/.rhosts
названный /tmp/foo
. Затем Мэллори вызывает foo
с user
в качестве запрошенной учетной записи. Программа создает (временный) файл /tmp/foo
(действительно создавая /root/.rhosts
) и помещает информацию о запрошенной учетной записи (например, user password
) в нем. Он удаляет временный файл (просто удаляя символическую ссылку).
Теперь /root/.rhosts
содержит информацию о пароле, которая (если она даже имеет правильный формат) является заклинанием, необходимым для того, чтобы любой мог использовать rlogin
войти в компьютер как суперпользователь .
В некоторых Unix-системах есть специальный флаг O_NOFOLLOW
для open(2)
для предотвращения открытия файла через символическую ссылку (висячую или иную) и стандартизирован в POSIX.1-2008 .
Обходной путь
[ редактировать ]Функция POSIX стандартной библиотеки C. mkstemp
может использоваться для безопасного создания временных файлов. Для сценариев оболочки системная утилита делает то же самое.