Можно ли в Windows/NTFS перенести символическую ссылку на другой компьютер?

В целях проверки безопасности с участием серверов Windows я хотел бы попытаться загрузить символическую ссылку в веб-приложение Windows. Однако, основываясь на официально доступной информации, неясно, существуют ли жесткие ссылки Windows (которые, я полагаю, такие же, как соединения NTFS) в виде файла, который можно скопировать с жесткого диска так же, как это делается в Linux. Это расплывчато, но я понимаю, что соединения NTFS - это какие-то другие артефакты файловой системы, которые отличаются от «обычных» файлов - я не могу найти документацию, подтверждающую или опровергающую это. IE NTFS Я хочу знать, поддерживает ли NTFS прямое манипулирование записью символической ссылки, чтобы я мог переместить символическую ссылку на другой компьютер.

Я знаю, что файлы программных ссылок Windows (.lnk) не ограничены таким образом, но они не подходят для целей теста.

Моя цель - скопировать символическую ссылку с виртуальной машины, а затем загрузить ее на сервер, который я тестирую.

Это возможно? (У меня сложилось впечатление, что это не так.) Из того, что я видел, абсолютно каждая программа в Windows будет рассматривать жесткую ссылку как файл назначения. Есть ли способ обойти это, возможно, используя специальный редактор для временного повреждения файла? Если символическая ссылка существует как обычный файл в файловой системе, можно ли изменить символическую ссылку, чтобы ее можно было переместить в ОС, отличную от Windows, для дальнейшего использования?

Дайте мне знать, если это будет лучший вопрос о сбое сервера. Поскольку это не относится непосредственно к безопасности, а является скорее приземленной технической проблемой в сфере безопасности, я не думаю, что это подходит для безопасности Stack Exchange.


person baordog    schedule 27.09.2016    source источник


Ответы (2)


Трудно дать очень прямой ответ. Я работаю над проектом резервного копирования/восстановления/образа и копирую целые образы дисков на сервер через веб-службу, так что можно делать то, что вы хотите, но нужно учитывать многое.

Жесткие ссылки

Обычно предполагается, что жесткие ссылки нельзя отличить друг от друга, однако между связанными файлами и их «исходным» файлом есть тонкая разница. Эта разница заключается в том, что запросы к $MFT (с использованием аргументов, связанных с USN, в функции winapi DeviceIOControl) будут возвращать только один из файлов. Это можно считать исходным файлом. Затем вы можете вызвать функцию winapi NtQueryInformationFile для перечисления жестких ссылок.

Симлинки и соединения - разные звери...

Вы можете узнать, что папка является соединением или символической ссылкой, получив от нее атрибуты. В атрибутах есть флаг ReparsePoint, если это соединение или символическая ссылка. Кстати, разница между соединениями и символическими ссылками заключается в том, что соединение представляет собой перенаправление в другое место на том же томе, а символическая ссылка — это перенаправление в место вне тома. Целью перенаправления всегда является другая папка в любом случае.

Что интересно, так это то, что и символические ссылки, и соединения выглядят и ведут себя как папки, в то время как они на самом деле являются файлами, содержащими информацию о перенаправлении. Когда вы открываете их, NTFS обычно просматривает перенаправление и открывает цель перенаправления. NTFS проверяет разрешения у цели перенаправления, поэтому для атаки это может быть ненадежной стратегией.

При открытии перехода/симлинка можно добавить флаг FILE_FLAG_OPEN_REPARSE_POINT. Когда вы делаете это, NTFS не выполняет перенаправление, а открывает содержимое, которое на самом деле является информацией о перенаправлении, и, предполагая, что вы знаете формат этой информации, можно реконструировать соединение/символическую ссылку на сервер. Обратите внимание, что перенаправление может указывать на местоположение, которое может не существовать или существовать только временно. Это ожидаемо, так как некоторые сетевые ресурсы не всегда могут быть доступны.

Короче говоря, можно скопировать соединение или символическую ссылку... в то время как копирование жесткой ссылки номинально означает копирование файла... с учетом вышеизложенных тонкостей. Вы также можете создать жесткую ссылку вручную, если целевой файл существует.

С жесткими ссылками в картине безопасности NTFS есть один интересный недостаток. Если у пользователя есть доступ к файлу, и вы создаете жесткую ссылку на этот файл в папке, к которой у пользователя нет доступа, пользователь все равно может открыть этот файл, используя путь к жесткой ссылке. Это связано с тем, что ссылка и исходный файл указывают на один и тот же файл (и информацию о безопасности) на диске. Разрешения, измененные для любой из ссылок, влияют на все ссылки. Не зная этого, вы можете непреднамеренно нанести ущерб файловой системе :-)

Я знаю, что это немного сумбурно, поэтому позвольте мне резюмировать так:

Записи каталога NTFS могут быть папками или файлами. Жесткие ссылки — это записи каталога, которые все указывают на один файл. Симлинки и соединения — это на самом деле файлы, которые действуют как папки для большинства практических целей (пока вы не знаете, как получить информацию о перенаправлении, как описано выше).

person Clay    schedule 18.10.2016

Соединения AFAIR, NTFS (каталог) на самом деле являются символическими ссылками. Соединение реализовано в виде специального атрибута файла, называемого точкой повторной обработки, который содержит цель ссылки.

С другой стороны, жесткие ссылки реализованы как прямые ссылки на базовую запись MFT целевого файла и хранятся как обычные записи внутри дерева каталогов. На самом деле вы не можете отличить жесткую ссылку от «исходного» файла (каждый файл и каталог на самом деле имеет по крайней мере одну жесткую ссылку, поскольку она содержится где-то в дереве каталогов).

Если вы хотите скопировать саму символическую ссылку, вам нужно знать, что это символическая ссылка, и извлечь информацию о ее цели. Файловые операции (кроме удаления и, возможно, переименования) перенаправляются на цель ссылки. Таким образом, вы можете скопировать символическую ссылку, создав ее точную копию в области назначения.

Фактический вопрос заключается в том, позволяет ли интерфейс, который вы используете для выполнения операции копирования, создавать символические ссылки на цель.

person Martin Drab    schedule 28.09.2016
comment
Я пытаюсь сделать это, загрузив ссылку непосредственно на веб-сервер через приложение. Цель состоит в том, чтобы заставить IIS перейти по ссылке, чтобы я мог получить файлы, которые не авторизованы для моего пользователя. Замена файлов символическими ссылками — распространенная атака на Unix-системы. - person baordog; 28.09.2016
comment
@baordog вы когда-нибудь проверяли, возможно ли это? что ты нашел? - person n00b; 07.10.2019
comment
Насколько я помню, это невозможно, но это было давно, поэтому я могу ошибаться. - person baordog; 25.11.2019