• Курсы Академии Кодебай, стартующие в мае - июне, от команды The Codeby

    1. Цифровая криминалистика и реагирование на инциденты
    2. ОС Linux (DFIR) Старт: 16 мая
    3. Анализ фишинговых атак Старт: 16 мая Устройства для тестирования на проникновение Старт: 16 мая

    Скидки до 10%

    Полный список ближайших курсов ...

Статья Подборка трюков для Windows NTFS [Часть 2]

ТРЮК 4: "СКРЫТЬ" НАЗНАЧЕНИЕ DIRECTORY JUNCTIONS

*Что это такое?:
Код:
Что такое Directory Junctions?
Directory Junctions (слияния папок) позволяют соединять папки вместе таким образом, что вы можете привязать любую имеющуюся папку к любой другой локальной папке. Например, если имеются три папки, c:\folder1, c:\folder2 и c:\documents, то можно создать точки перехода к папке c:\documents таким образом, что она будет казаться подпапкой других двух папок, т.е. на диске будут существовать папки c:\folder1\documents и c:\folder2\documents.
Изначально предполагалось, что в поставку будет входить специальная утилита linkd.exe, предназначенная для создания Directory Junctions, однако сейчас эта программа не включена в Win2000 и поставляется в составе Resource Kit. Также Directory Junctions могут быть созданы при помощи API, однако это потребует написания собственной программы.

На первый взгляд, Directory Junctions и Distributed File System выполняют одни и те же задачи, так как оба этих сервиса создают видимость единого дерева папок, в действительности состоящих из множества распределенных папок. Однако между ними есть несколько существенных различий:

Система DFS использует службу Active Directory для хранения своей информации
Благодаря использованию Active Directory система DFS может обеспечивать защиту от сбоев и выравнивание нагрузки на систему, в то время как Directory Junctions не обеспечивают ни того, ни другого, хотя это и не является необходимым в контексте локального компьютера
Система DFS в основном нацелена на объединение сетевых ресурсов в единое пространство имен, в то время как Directory Junctions связывают только локальные ресурсы
DFS может работать с использованием нескольких файловых систем, а Directory Junctions основаны только на NTFS 5.0
Система DFS требует программы-клиента, а Directory Junctions - нет.
*DFS - Distributed File System (DFS) — компонент Microsoft Windows, использующийся для упрощения доступа и управления файлами, физически распределёнными по сети. При её использовании файлы, распределённые по серверам, представляются находящимися в одном месте.
----------------------------
Источник: http://old.windowsfaq.ru/winnt/884.html

Directory junctions очень полезны для атакующих. С его помощью можно создать (с обычными правами пользователя) символическую ссылку на папку.

На мой взгляд, лучшая уязвимость в безопасности для объяснения directory junctions - это AVGater, где злоумышленник помещает файл в папку x. Затем он помечает файл как вирус и установленное антивирусное решение переместит его в карантин. После этого злоумышленник удаляет папку x и заменяет ее directory junction с именем “x", которое указывает на C:\windows\System32\. Если злоумышленник нажмет кнопку “восстановить”, антивирусное решение скопирует файл в папку x, которая теперь указывает на system32 с системными привилегиями (что напрямую приводит к EoP). Часто можно злоупотреблять directory junctions, если целевое приложение содержит уязвимость race condition.
Код:
Состояние гонки (англ. race condition), также конкуренция — ошибка проектирования многопоточной системы или приложения, при которой работа системы или приложения зависит от того, в каком порядке выполняются части кода. Своё название ошибка получила от похожей ошибки проектирования электронных схем
----
с википедии

directory junction можно создать с помощью утилиты mklink с аргументом /J. Это можно объединить с трюком:: $INDEX_ALLOCATION, чтобы создать directory junction с именем “…”:

pentesting-ntfs-12-300x159@2x.png


Первый directory junction "test1“ был создан с нормальным именем, и поэтому назначение правильно показано в выходных данных ”dir". Однако в случае directory junction ” ... " целевой объект больше не отображается (вместо этого отображается [ ... ]; см. красную рамку). Также обратите внимание, что вы можете позволить junction1 указывать на junction2, который указывает на junction3 и так далее, пока последний не укажет на фактический пункт назначения. Поскольку пути перепутаны, вы можете войти в junction с вышеупомянутым трюком” cd ... \ ... \ " (находясь в папке system32), но “." укажет на ... “C:\test8" вместо этого:

pentesting-ntfs-13-300x150@2x.png


Команда dir отображает файлы из папки system32 (отмечена красным цветом; обратите внимание, что первая команда создала hello.файл bat в C:\test8\).

pentesting-ntfs-14.png


Красным отмечены последние файлы из папки system32 (последние выходные данные команды dir). В синей рамке мы видим, что "hello.bat" из текущего каталога (".\ ") должен быть выполнен. Так как пути запутаны, это выполнит C:\test8\hello.bat (зеленая рамка), а не C:\windows\system32\hello.bat. Я не уверен, что это имеет прямое влияние на безопасность, так как вы можете запускать файлы в любой папке, однако, это может быть использовано для обхода белых списков приложений с белыми файлами сценариев.

ТРЮК 5: СКРЫВАНИЕ ADS

Как уже обсуждалось, можно смотреть ADS с помощью параметра /r команды dir. Более того, streams.exe это инструмент от Sysinternals, который также может смотреть потоки:

pentesting-ntfs-30-300x275@2x.png


В более старых версиях windows можно было скрыть ADS, используя зарезервированные имена в качестве базового имени (например: CON, NUL, COM1, COM2, LPT1, ...).
Тем не менее, на windows 10 это, кажется, больше не возможно сделать, но ” ... " все еще работает:


pentesting-ntfs-31-235x300@2x.png


ADS на “...” были успешно созданы, но не перечислены инструментами. Создание ADS на COM1 приводит к ошибке, создание ADS на NULL не влияет (ADS создаваться не будет). Обратите внимание, что вы также можете создать ADS на диске, например “echo 123 > C:\:abc.txt”. Это скроет от команды "dir /r" внутри C:\. Тем не менее, он будет показывать ADS внутри подпапок C:\ для “..”. Например:

pentesting-ntfs-32-300x249@2x.png


Красным отмечено ADS, мы создали C:\:abc.txt ADS. Этот ADS также виден через инструмент streams.exe, если он вызывается непосредственно на C:\. Поэтому, чтобы скрыть от обоих инструментов можно использовать трюк “...”. Существует второй трюк, который может быть использован, чтобы скрыть от инструментов. На windows можно добавить “.<spaces>.” в конце файла, windows автоматически удалит его.

pentesting-ntfs-40.png


Однако мы можем создать такой файл с ADS! Забавным свойством такого файла является то, что инструменты не смогут открыть файл, потому что путь похожий на " xyz. .” будет автоматически изменен на “XYZ”, а этого файла не существует. Вот доказательство:

pentesting-ntfs-41.png


Созданный ADS foobar.txt не может быть найден инструментами:

pentesting-ntfs-42-241x300@2x.png


Мы также можем создать каталог с именем “. .” вроде этого:

pentesting-ntfs-50.png


Тогда невозможно войти в эту папку:

pentesting-ntfs-51.png


Более того, уже упомянутая техника (вроде cd. .\. .\ не работает), но cd “. .:: $ INDEX_ALLOCATION” работает (важны двойные кавычки).

Если мы можем добавить пробелы между именем каталога, мы также можем добавить его в конце, как "b “или".. ” или.“ “. Каталоги с названием".. "можно ввести с помощью нашей уже обсуждаемой техники:

pentesting-ntfs-53-300x178@2x.png


ТРЮКИ С ФАЙЛОВОЙ СИСТЕМОЙ VS. АНТИВИРУСНЫЕ РЕШЕНИЯ / СОФТ ДЛЯ ФОРЕНЗИКИ:

Я сделал быструю проверку вышеупомянутых трюков с антивирусными продуктами, чтобы проверить, могут ли они поймать вредоносное ПО, которое злоупотребляет трюками. Наиболее примечательной находкой были файлы / папки, оканчивающиеся на “. .”. Например, я сохранил тестовый вирус eicar в папке и скопировал его с помощью следующих команд:
Код:
copy eicar.com > "123. .::$DATA"
copy eicar.com > tester
echo 123 > "foo. .::INDEX_ALLOCATION"
cd "foo. .::$INDEX_ALLOCATION"
copy ..\eicar.com .
copy ..\eicar.com .\eicar

После этого я снова включил антивирусные решения и проверил папку. Все антивирусные решения только что идентифицировали “eicar.com " и "tester" в этой папке, но не вирус eicar в " 123. ."или в двух файлах в" foo. .” папке. Однако, когда эта папка введена и файлы запущены, антивирусные продукты нашли их (потому что содержимое загружается из файловой системы в память). Действие "Удалить" из защитника Windows не может удалить файлы и, следовательно, не влияет, однако, действие “Удалить” например из Emsisoft может удалить тестовый вирус в папке. Emsisoft просто удалила “eicar.com "файл в" foo. .” папке, файл “eicar” не был удален, а содержание можно прочитать без проблем (Emsisoft ответили нам, что только те файлы, которые отображаются в виде исполняемых проверяются, за исключением некоторых конкретных расширений файлов, как .com. Это поведение может быть изменено в настройках, переключившись на “тщательное” для сканирования на чтение файла; windows defender с другой стороны, также блокируется чтение “eicar”). Я также провел короткий тест на Autopsy 4.6.0. В папку ” ... "можно ввести, однако, в " foo. ."папку нельзя. Кроме того, я создал файл с именем “valid” с содержимым “valid” и файл с именем “valid. ."с содержимым "secret". Вскрытие показывает для обоих файлов содержимое “valid”. В дополнение к этому,“.. “папка (с пробелом в конце) интерпретируется как"..” и поэтому идет на один каталог вверх по двойному щелчку. Это относится только к режиму "логические файлы", в режиме образа диска (raw), все отображается правильно (в режиме реального времени Autopsy использует Windows API для доступа к данным и, следовательно, возникают проблемы).

ТРЮК 6: СКРЫТИЕ ПРОЦЕССА БИНАРНИКА

Как уже говорилось выше: windows автоматически удаляет “. .” в конце файла. Что делать, если мы можем как-то начать процесс с именем типа “file1. ."? Ну, тогда может случиться так, что при проверке (например, проверки подписи из антивирусных продуктов), возможно, выполняются на “file1”. Давайте попробуем это:

pentesting-ntfs-new1.png


Мы создали 3 файла:

  • “file” с подписью Microsoft из taskmgr.
  • “file. .” которая является нашей “поддельной вредоносной программой”, которая должна быть скрыта, но выполнена.
  • “filex x”, содержащий подпись WinSCP. Этот файл станет важным позже..

Теперь нам нужен способ начать процесс с " file. ." бинарника, который не является тривиальной задачей, потому что все вызовы Microsoft Windows API автоматически удаляют ". .”. Для решения этой проблемы мы используем следующий код:

pentesting-ntfs-new2-300x119@2x.png


Приведенный выше код просто вызывает CreateProcessA для создания процесса из "filex x" (WinSCP). Если мы скомпилируем это приложение и запустим его, WinSCP будет запущен. Однако мы не собираемся начинать его в обычном режиме. Вместо этого мы запускаем приложение внутри отладчика (например, WinDbg). Теперь мы устанавливаем breakpoint в функцию, которая делает соответствующий системный вызов “ " bp ntdll!NtCreateUserProcess". С помощью " g " (go) мы можем запустить нашу программу в отладчике и нажать breakpoint. В breakpoint текущий стек может быть сброшен ("DQ rsp"). 12-й указатель в стеке важен и должен быть сброшен. 4-е значение по этому адресу является указателем на имя файла.

pentesting-ntfs-new3-300x111@2x.png


Имя файла (зеленая рамка) теперь нормализовано (оно начинается с \??\С.)…\: Именно эта нормализация будет также удалять “. .“с конца имени файла – вот почему приведенный выше C-код не использовал "file. ." как название процесса. Однако, поскольку нормализация уже произошла, это значение теперь можно изменить. Давайте перепишем символы " x " на “."(команда " eb " для редактирования байтов):

pentesting-ntfs-new4-300x91@2x.png


После этого просто продолжайте выполнение с "g". Угадайте, что произойдет? Правильно, “file. .” (вредоносная программа) выполняется. Однако, если пользователь щелкает правой кнопкой мыши на процесс в диспетчере задач и выбирает "свойства “ "file" (taskmgr) с действительной подписью Microsoft будет показано.

pentesting-ntfs-new5-500x340.png


Но что такое "filex x" (WinSCP)? Да, этот файл также отображается как запущенный процесс, а именно в Process explorer (поскольку путь был задан до вызова NtCreateUserProcess):

pentesting-ntfs-new6-300x121@2x.png


А что c powershell? Да, также неверный двоичный файл:

pentesting-ntfs-new7.png


Является ли это проблемой? Ну, это зависит от прежде всего, может ли злоумышленник запустить процесс (вредоносное ПО), переименовать / удалить его, а затем переименовать действительный файл с тем же именем. Тогда вышеупомянутые эффекты в диспетчере задач и process explorer также произойдут. Однако, разница в том, что с вышеупомянутым трюком это происходит точно в то же время, когда процесс запускается. Например, рассмотрите возможность проверки установленного endpoint protection для каждого запущенного процесса, если двоичный хэш уже известен в облаке. С помощью этого трюка endpoint protection может использовать неправильный двоичный файл, чтобы проверить, если хэш уже известен. Обратите внимание, что для создания таких процессов не требуется отладчик. Приложение может просто перехватить функцию NtCreateUserProcess и реализовать изменения в обработчике.
 
Последнее редактирование:

alex69

New member
29.08.2019
2
0
BIT
5
Ну что же вы изъяли все изображения из своей интересной статьи?
 

XENEX

One Level
20.09.2020
4
3
BIT
0
Интиресненько но применять не прийдется боюсь никогда
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!