Как проверить шимм на мониторе
Обновлено: 24.11.2024
В 2017 году компания Mandiant отреагировала на несколько инцидентов, которые мы связываем с FIN7 — финансовой группой угроз, связанной с вредоносными операциями, начиная с 2015 года. В различных средах FIN7 использовала бэкдор CARBANAK, который эта группа использовала в предыдущих операциях.
Уникальным аспектом инцидентов было то, как группа установила бэкдор CARBANAK для постоянного доступа. Компания Mandiant определила, что группа использовала базу данных шиммирования приложений для обеспечения постоянства в системах в различных средах. Прокладка внедрила вредоносное исправление в памяти в процесс диспетчера управления службами («services.exe»), а затем породила бэкдор-процесс CARBANAK.
Компания Mandiant установила, что FIN7 также использовал этот метод для установки утилиты для сбора данных о платежных картах для постоянного доступа. Это был отход от предыдущего подхода FIN7 к установке вредоносной службы Windows для внедрения процесса и постоянного доступа.
Фон экрана совместимости приложений
Согласно Microsoft, оболочка совместимости приложений представляет собой небольшую библиотеку, которая прозрачно перехватывает API (путем перехвата), изменяет переданные параметры, обрабатывает саму операцию или перенаправляет операцию в другое место, например дополнительный код, хранящийся в системе. Сегодня прокладки в основном используются для совместимости с устаревшими приложениями. Хотя прокладки служат законным целям, их также можно использовать злонамеренно. Консультанты Mandiant уже обсуждали базы данных прокладок на BruCon и BlackHat.
Регистрация базы данных Shim
Существует несколько способов регистрации базы данных прокладок в системе. Одним из способов является использование встроенного инструмента командной строки «sdbinst.exe». На рис. 1 показаны два раздела реестра, созданные при регистрации оболочки с помощью утилиты «sdbinst.exe».
Рисунок 1. Разделы реестра базы данных Shim
После регистрации базы данных прокладок в системе файл базы данных прокладок (расширение файла «.sdb») будет скопирован в каталог «C:\Windows\AppPatch\Custom» для 32-разрядных прокладок или «C :\Windows\AppPatch\Custom\Custom64” для 64-битных прокладок.
Вредоносная установка базы данных Shim
Чтобы установить и зарегистрировать в системе базу данных вредоносных оболочек, FIN7 использовала пользовательский сценарий PowerShell в кодировке Base64, который запускал утилиту sdbinst.exe для регистрации пользовательского файла базы данных оболочек, содержащего исправление, в системе. На рис. 2 представлен расшифрованный отрывок из восстановленного скрипта FIN7 PowerShell, показывающий параметры этой команды.
Рисунок 2. Фрагмент сценария PowerShell FIN7 для установки пользовательской оболочки
FIN7 использовал различные соглашения об именах для файлов базы данных прокладок, которые были установлены и зарегистрированы в системах с помощью утилиты «sdbinst.exe». Обычным соблюдением было создание файла базы данных прокладок с расширением файла «.tmp» (рис. 3).
Рисунок 3: Пример базы данных с вредоносным кодом
При регистрации пользовательской базы данных прокладок в системе файл со случайным идентификатором GUID и расширением «.sdb» записывается в каталог по умолчанию для 64-разрядной базы данных прокладок, как показано на рис. 4. Зарегистрированный файл базы данных прокладок имел тот же хэш MD5, что и файл, изначально созданный в каталоге «C:\Windows\Temp».
Рисунок 4: База данных Shim после регистрации
Кроме того, были созданы специальные разделы реестра, соответствующие регистрации базы данных прокладок. На рис. 5 показаны ключи и значения, относящиеся к этой установке оболочки.
Рисунок 5. Разделы реестра базы данных Shim
Описание базы данных, используемое для регистрации базы данных-прокладки, «Microsoft KB2832077», было интересным, поскольку этот номер базы знаний не был опубликованным патчем базы знаний Microsoft. Это описание (показанное на рис. 6) появилось в списке установленных программ в панели управления Windows на скомпрометированной системе.
Рисунок 6. База данных Shim как установленное приложение
Подробности базы данных вредоносного кода
В ходе расследования компания Mandiant обнаружила, что FIN7 использовала пользовательскую базу данных прокладок для исправления как 32-разрядных, так и 64-разрядных версий «services.exe» с их полезной нагрузкой CARBANAK. Это произошло, когда процесс «services.exe» выполнялся при запуске. Файл базы данных shim содержал шелл-код для загрузчика первой стадии, который получил дополнительную полезную нагрузку шелл-кода, хранящуюся в ключе реестра. Шелл-код второго этапа запускал DLL CARBANAK (хранящуюся в разделе реестра), которая порождала экземпляр Service Host («svchost.exe») и внедрялась в этот процесс.
На рис. 7 показан проанализированный файл базы данных оболочек, который использовался FIN7.
Рисунок 7: Проанализированный файл базы данных shim
Для загрузчика первого этапа исправление перезаписало функцию «ScRegisterTCPEndpoint» по относительному виртуальному адресу (RVA) «0x0001407c» в процессе services.exe вредоносным шелл-кодом из файла базы данных shim.
Новая функция «ScRegisterTCPEndpoint» (шелл-код) содержала ссылку на путь «\REGISTRY\MACHINE\SOFTWARE\Microsoft\DRM», который представляет собой место в реестре, где на система.
На рис. 8 показан фрагмент проанализированной структуры исправления в восстановленном файле базы данных прокладок.
Рисунок 8: Структура патча, проанализированная из файла базы данных shim
Шеллкод, хранящийся в пути реестра «HKLM\SOFTWARE\Microsoft\DRM», использовал функцию API «RtlDecompressBuffer» для распаковки полезной нагрузки. Затем он заснул на четыре минуты, прежде чем вызвать точку входа полезной нагрузки CARBANAK DLL в систему. После загрузки в память он создал новый процесс с именем «svchost.exe», содержащий DLL-библиотеку CARBANAK.
Объединение
На рис. 9 представлен общий обзор базы данных прокладок, используемой в качестве постоянного механизма для использования патча в памяти, внедряющего шелл-код в 64-разрядную версию «services.exe».
Рисунок 9: Процесс внедрения кода базы данных Shim
Обнаружение
Mandiant рекомендует следующее для обнаружения шимминга вредоносных приложений в среде:
Я исключаю обработку SIGKILL из первого PR, чтобы мы могли найти долгосрочное решение.
Короче говоря, нам нужно где-то контролировать процесс, чтобы увидеть, уничтожена ли прокладка, а также отправить SIGKILL в контейнер/процесс.
- прокладка порождает процесс монитора
- прокладка мониторов среды выполнения
- обработка более высокого уровня (возможно ли это?)
OTOH, нам нужно решить, хотим ли мы поддерживать повторное подключение оболочки в некоторых случаях (например, при обновлении?) и как отличить ее от правильной остановки оболочки.
Текст был успешно обновлен, но возникли следующие ошибки:
sboeuf прокомментировал 5 декабря 2017 г.
прокомментировал bergwolf 11 декабря 2017 г.
Я попробовал containerd (и docker-containerd), и процесс прокладки для контейнера отслеживается containerd, и если такая прокладка умирает, containerd вызывает kill 9 во время выполнения, чтобы убить контейнер. Однако прокладка процесса таким образом не контролируется.
sboeuf прокомментировал 11 декабря 2017 г.
@bergwolf да, стандартный процесс не отслеживается таким образом, и вы также не можете предположить, что будет использоваться containerd. В случае CRI-O контейнер не используется.
прокомментировал bergwolf 12 декабря 2017 г.
@sboeuf Я хотел объединить процессы мониторинга, чтобы мы использовали один монитор для всех прокладок, чтобы уменьшить объем памяти. Среда выполнения может создать процесс монитора двумя способами:
- при вызове crio/containerd через командную строку
- при вызове в качестве библиотеки
Затем процесс монитора может сканировать все файлы process.json (или state.json) (везде, где среда выполнения сохраняет список активных процессов для контейнера), сопоставлять их с активными процессами в контейнерах, а затем отправлять SIGKILL процессам, которые отсутствует в файлах json, но жив в контейнерах.
Что вы думаете?
WeiZhang555 прокомментировал 12 декабря 2017 г.
- прокладка порождает процесс монитора
- прокладка мониторов среды выполнения
- обработка более высокого уровня (возможно ли это?)
Я считаю, что мы оставляем часть монитора компоненту высокого уровня (вариант 3).
Как вы уже говорили, containerd может справиться с этим достаточно хорошо, если cri-o не отслеживает прокладку среды выполнения, тогда мы должны добавить коды в стандартный crio. Когда shim умирает, containerd/crio может обнаружить это и должен вызвать что-то вроде kata-runtime kill container SIGKILL, чтобы уничтожить контейнер
Идея @sboeuf выглядит странно, прокладка породила дочерний процесс, а затем родитель дочернего монитора, что, если дочерний процесс будет убит? Это не может полностью гарантировать поток.
OTOH, нам нужно решить, хотим ли мы поддерживать переподключение shim в некоторых случаях (например, при обновлении?) и как отличить это от правильной остановки shim.
Что вы подразумеваете под "повторным подключением шима"? Для сценария горячего обновления, если containerd/crio обновлен, он должен повторно подключиться к kata-shim, за эту часть отвечает программное обеспечение высокого уровня; но если прокладка умирает, умирает контейнер или процесс exec. Оболочка — это наименьший блок монитора, который никогда не может аварийно завершить работу. Часть оперативного восстановления должна выполняться на более высоком уровне.
прокомментировал bergwolf 12 декабря 2017 г.
@WeiZhang555 Я думал о горячем обновлении ката-шим. Монитор оболочки должен знать разницу между прокладкой горячего обновления и прокладкой, уничтоженной SIGKILL, и не уничтожать прокладку горячего обновления.
Но поскольку у нас нет общих прокладок, поддержка горячего обновления прокладок может оказаться слишком сложной.
прокомментировал bergwolf 12 декабря 2017 г.
@WeiZhang555 хотя мониторинг верхнего уровня предпочтительнее, современный уровень техники таков, что только containerd отслеживает прокладки процесса контейнера, и даже containerd не отслеживает прокладки процесса exec. Поэтому я предложил создать монитор прокладки для каждого хоста в среде выполнения kata, которым мы можем управлять.
sboeuf прокомментировал 12 декабря 2017 г.
@WeiZhang555 Я не вижу причин для уничтожения дочернего процесса (того, который контролирует родительский).
В любом случае, мне нравится идея иметь более высокий уровень (containerd или CRI-O), контролирующий процесс прокладки и отправляющий контейнер уничтожения ката SIGKILL в случае уничтожения прокладки. Меня беспокоит только то, что мы на самом деле говорим о возможности полагаться на этот верхний слой, который мы не можем контролировать, поэтому сначала у нас должен быть свой собственный механизм. ЕСЛИ мы сможем убедиться, что эти верхние уровни, такие как containerd и CRI-O, не будут отправлять SIGKILL процессу shim, а вместо этого будут использовать среду выполнения для завершения процесса, это также упростит работу с нашей стороны.
WeiZhang555 прокомментировал 13 декабря 2017 г.
Я не вижу причин для уничтожения дочернего процесса (того, который контролирует родительский).
Наши инженеры-испытатели сделают это, они убивают любой процесс, который они могут, чтобы проверить надежность системы, и я так их боюсь :-), OOM или плохой код также иногда приводят к уничтожению дочернего процесса.
Я вижу ваши доводы, мы можем сделать и то, и другое:
- добавьте коды мониторов в cri-o, если их нет. (контейнер достаточно хорош)
- реализовать монитор прокладки для каждого хоста, возможно, его нужно будет запускать как единственную службу. Я надеюсь, что мы сможем сделать этот сервис необязательным, если верхний уровень справляется с этим хорошо, и в этом случае нам не нужна эта служба мониторинга прокладок.
Что вы об этом думаете?
Комментарийteawater прокомментирован 13 декабря 2017 г.
@WeiZhang555 Я согласен с этой идеей.
sboeuf прокомментировал 13 декабря 2017 г.
@WeiZhang555 да, я согласен с предложением, и иметь один компонент, обрабатывающий такие вещи, может быть действительно интересно. Но это означает, что вы ожидаете, что каждая прокладка сначала зарегистрируется в этом компоненте, чтобы он знал, с каким сокетом ему следует связаться в случае обнаружения уничтожения прокладки, верно?
Кроме того, как вы планируете, чтобы такой компонент имел значение между уничтожением прокладки и корректным завершением прокладки?
Я хочу убедиться, что мы не получим отдельный компонент, слишком сложный для единственной цели обработки этого случая.
WeiZhang555 прокомментировал 14 декабря 2017 г.
Но это означает, что вы ожидаете, что каждая прокладка сначала зарегистрируется в этом компоненте, чтобы он знал, с каким сокетом ему следует обращаться в случае обнаружения уничтожения прокладки, верно?
Да, вы правы. Это настоящая проблема. Поэтому я предпочитаю монитор с высокого уровня :)
Кроме того, как вы планируете, чтобы такой компонент имел значение между уничтожением прокладки и корректным завершением прокладки?
Я могу придумать один из способов: позволить shim записывать канал монитора, когда он нормально завершает работу, поэтому, если он будет убит, канал будет аварийно закрыт.
Еще одна проблема заключается в том, что если монитор хоста убит, а прокладки уничтожены до того, как монитор будет загружен systemd, монитор должен повторно сканировать все процессы прокладок. Таким образом, список процессов-прокладок должен храниться на диске, и когда монитор включен, он должен определять активность процессов в этом списке.
Поэтому я всегда надеюсь, что компонент высокого уровня сможет сделать этот монитор за нас, это упростит задачу. Компонент внешнего монитора значительно усложняет всю нашу систему.
@sboeuf есть еще предложения?
Комментарийteawater прокомментирован 14 декабря 2017 г.
@WeiZhang555
Из-за каждого хоста дизайн становится слишком сложным. Думаю, почему бы не вернуться к монитору процессов?
И shim может наблюдать за монитором с помощью "cmd.Wait" внутри горутины.
sboeuf прокомментировал 14 декабря 2017 г.
@teawater это то, о чем я упоминал изначально в этой ветке, но @WeiZhang555 считает, что мы должны рассмотреть случай, когда ребенок убит, в этом случае у нас больше ничего не остается для наблюдения за прокладкой.
@WeiZhang555 Я думаю, нам нужно четко указать, кто должен контролировать прокладку, и наличие двух разных способов мониторинга может создать некоторые конфликты, поскольку один и тот же процесс внутри виртуальной машины будет сигнализироваться дважды (может быть, это не проблема, а проблема). обязательно).
Я согласен, что нам было бы проще, если бы этим занимался непосредственно более высокий уровень, но мне действительно интересно, следует ли это делать здесь. Для нас, поскольку мы находимся в случае виртуализированного контейнера и поскольку нам нужна прокладка, у нас есть это ограничение обнаружения того, что прокладка была SIGKILL. Но если вы думаете о случае с runc, в этом нет необходимости. Для стандартного контейнера, если процесс получает SIGKILL, нет реальной необходимости в каком-либо обнаружении, поскольку правильный процесс был убит.
Итак, в основном я говорю, что ДА, я хотел бы, чтобы это обрабатывалось на верхнем уровне, но я не вижу причин, по которым компонент более высокого уровня мог бы принять это.
jshachm прокомментировал 18 января 2018 г.
Поработав с @WeiZhang555 над отладкой различных странных проблем, связанных с shim/proxy и qemu vm , мы немного изменили свое мнение о мониторинге. Не только о shim, но и обо всех компонентах.
Прежде всего, ката-шим процесса инициализации контейнера означает только процесс инициализации контейнера с точки зрения компонентов высокого уровня. Таким образом, если процесс kata-shim не завершился, когда виртуальная машина не работает ненормально, как OOM, и прокси-сервер также не работает (база на одном прокси-сервере наблюдает только за одним контейнером vm). Это приведет к вещам, с которыми мы сталкиваемся в наши дни, когда наверху все равно не убьет shim, потому что он думает, что контейнер все еще работает. Это очень смущает Wei. В этом случае его никто не убьет. Это вызовет проблемы с зависанием через некоторое время.
Нужна ли двойная проверка между прокси и прокладкой? На случай, если верхняя лестница не может отправить SIGKILL в shim. Или у вас есть другие хорошие предложения, ребята?
sboeuf прокомментировал 19 января 2018 г.
Привет, @jshachm, я не уверен, что понял, что ты пытаешься сказать. Я не могу определить решение, которое вы предлагаете для решения проблемы здесь. Напоминаем, что мы не пытаемся убить прокладку, но мы хотим убедиться, что в случае, если прокладка получит SIGKILL, этот сигнал будет перенаправлен процессу-контейнеру, работающему внутри виртуальной машины. Это связано с тем, что сама прокладка не может обрабатывать такой сигнал. Вот почему мы говорили о других программах, способных отслеживать процесс shim, чтобы мы могли фактически пересылать сигнал SIGKILL из этой программы.
jshachm прокомментировал 19 января 2018 г.
@sboeuf Извините, может быть, я должен сделать это более ясным.
Я прекрасно понимаю, что вы имеете в виду по поводу прокладок и SIGKILL. До этого времени мы думали, что обработки верхней лестницы будет достаточно. Однако мы обнаружили, что верхняя лестница не может покрыть, как я сказал выше.
Поэтому мы предлагаем, помимо верхней лестницы, добавить еще один способ сделать прокладку надежной и правильно пересылать SIGKILL: может потребоваться еще одна легкая прокладка для мониторинга процессов, а также простой способ, возможно, двойная проверка между прокси и прокладкой. Создание дочернего процесса, возможно, тоже может сработать, и сегодня я проверю, работает ли это в нашем случае.
Все равно спасибо, возможно, мы сможем обсудить это позже в slack.
sboeuf прокомментировал 19 января 2018 г.
@jshachm спасибо за разъяснения. То, что вы предлагаете о прокси-сервере, было бы выполнимым, но не лучшим решением, потому что прокси-сервер не может быть частью уравнения, если мы полагаемся на VSOCK для связи с агентом. В этом случае не было бы необходимости в прокси, таким образом, мы потеряли бы возможность контролировать прокладку.
Вот почему я предложил, чтобы прокладка могла разветвляться, а ее дочерние элементы контролировали бы своего родителя.
egernst прокомментировал 2 мая 2018 г.
Ах, наконец-то прочитал это (через 4 месяца?). Это действительно хорошая проблема, которую мы все еще можем обсудить, чтобы сделать наше решение 1.0 более надежным.
egernst прокомментировал 18 сентября 2018 г.
@bergwolf – есть новости по этому поводу?
jcvenegas прокомментировал 17 июля 2019 г.
Любое обновление по этому поводу, несколько лет спустя это статус
агент shim
агент shim
агент shimv2
Во всех случаях у нас есть прокладка, но shimv2 одновременно является средой выполнения, поэтому вся логика может быть потеряна.
Интересно, если агент, способный обнаруживать соединение, был закрыт, то уничтожение происходит внутри агента.
jcvenegas прокомментировал 17 июля 2019 г.
Или, как предложил @jodh-intel, мы можем повторно использовать модель в CC3.
c3d прокомментировал 25 января 2021 г.
Назначение @bergwolf для повторной оценки, если нам нужно оставить проблему открытой.
Вы не можете выполнить это действие в данный момент.
Вы вошли в другую вкладку или окно. Перезагрузите, чтобы обновить сеанс. Вы вышли на другой вкладке или в другом окне. Перезагрузите, чтобы обновить сеанс.
Снижает ли установка прокладки между фокусировочным экраном и камерой задний или передний фокус? Если заменить тонкую прокладку на толстую, это приблизит точку точной фокусировки к вам или отдалит? (Что бы это ни стоило, я устанавливал как минимум три экрана на разные камеры - K10D, K7 и KX - и ни один из них не дал точно точных результатов. Katzeye был наименее худшим).
Спасибо всем, у кого есть опыт этой корректировки.
Я жду набор прокладок, так как мой Katzeye немного не в порядке. Я понимаю, что использование более тонкой прокладки сместит фокус в сторону камеры (т. е. уменьшит задний фокус), что мне и нужно сделать.
Но я могу ошибаться.
Моя камера была с фронтальной фокусировкой с установленной на заводе шайбой. Затем я удалил прокладку и провел повторный тест.
В этот момент я определил, что он сфокусировался примерно на том же пределе. Я не измерял толщину оригинальной прокладки,
но, почитав, я предположил, что толщина по умолчанию составляет около 0,4 единицы. Я заказал шайбы 0.1, 0.15, 0.2, .25 и .3 от Pentax,
и решил попробовать .2
Результат оказался более менее правильным для моего SMC-M 50mm/F1.7@ F/1.7 и мой SMC-M100mm/F2.8 @ F2.8.
По сути, вам нужно будет вставить более тонкую шайбу для коррекции передней фокусировки (перемещение точки фокусировки дальше назад) и более толстую шайбу,
для коррекции задней фокусировки.
Сделайте несколько первоначальных пробных снимков сцены с объективами, используя шкалу расстояний на объективе, а затем сфокусируйтесь вручную. Сравните ваши близкие и бесконечные выстрелы. Сохраните файлы на потом.
Затем проведите серьезный тест с использованием некоторых диаграмм (или какой-либо настройки, которая вам подходит), чтобы определить, какая стиральная машина работает лучше всего. Выйдите и сделайте повторные снимки той же сцены, которую вы использовали для своих первоначальных образцов.
Вы должны без труда определить, добились ли вы успеха. Убедитесь, что вы тестируете на близком расстоянии и на бесконечности, и посмотрите, как ваши снимки с ручной фокусировкой
сравниваются со снимками, сделанными с использованием шкалы расстояний на вашем объективе. Шкала расстояний на объективе может быть смещена, но тогда вы будете иметь представление, на сколько (приблизительно).
Важно постараться сохранить все параметры одинаковыми, т. е. использовать штатив, ту же сцену, время и условия освещения. Также обратите внимание на свое физическое состояние.
Глаза могут устать, и это повлияет на вашу фокусировку.
Вот объяснение с диаграммами от Focussing
Текст немного по-чинглишски, но вместе с диаграммами он понятен.
Прокладки помещаются между нижней стороной призмы и фокусирующим экраном.
Функция автофокусировки не зависит от фокусировочного экрана или регулировочных шайб.
Если вы фокусируете объект в видоискателе, чтобы он был четким, но изображение сфокусировано ближе к переднему плану, это передний фокус. Чтобы исправить это, вам нужно установить прокладку THINNER между призмой и фокусировочным экраном.
Если вы сфокусировали объект в видоискателе, чтобы сделать его четким, но изображение сфокусировано дальше на задний план, это задний фокус. Чтобы исправить это, вам нужно установить ТОЛЩЕМУ прокладку между призмой и фокусировочным экраном.
Итак, чтобы ответить на ваш вопрос "Если заменить тонкую прокладку на толстую, принесет ли это точку точной фокусировки". ближе к вам (т.е. вы будете исправлять проблему с задним фокусом)
Первоначально опубликовано Джонатаном Маком
Я жду набор прокладок, так как мой Katzeye немного не в порядке. Я понимаю, что использование более тонкой прокладки сместит фокус в сторону камеры (т. е. уменьшит задний фокус), что мне и нужно сделать.
Но я могу ошибаться.
Да, я думаю, у вас наоборот. Думайте о зеркале как о центральной точке пути между фокусировочным экраном и датчиком.
При более толстой шайбе путь участка между фокусировочным экраном и зеркалом был бы короче, чем путь между зеркалом и сенсором.
Использование этого более короткого расстояния между зеркалом и датчиком сместит фокусную точку перед плоскостью датчика, т.е. фронт-фокус.
Извините, довольно упрощенное объяснение.
Злоумышленники могут установить постоянство и/или повысить привилегии, выполняя вредоносный контент, запускаемый оболочками приложений. Инфраструктура/инфраструктура совместимости приложений Microsoft Windows (Application Shim) была создана для обеспечения обратной совместимости программного обеспечения по мере изменения кодовой базы операционной системы с течением времени. Например, функция смещения приложений позволяет разработчикам применять исправления к приложениям (без перезаписи кода), которые были созданы для Windows XP, чтобы они работали с Windows 10. [1]
В рамках платформы создаются прокладки, которые действуют как буфер между программой (или, точнее, таблицей адресов импорта) и ОС Windows. Когда программа выполняется, выполняется обращение к кэшу прокладок, чтобы определить, требует ли программа использования базы данных прокладок (.sdb). Если это так, база данных shim использует перехват для перенаправления кода по мере необходимости для связи с ОС.
Список всех прокладок, установленных в настоящее время установщиком Windows по умолчанию (sdbinst.exe), хранится в:
- %WINDIR%\AppPatch\sysmain.sdb и
- hklm\software\microsoft\windows nt\currentversion\appcompatflags\installedsdb
Пользовательские базы данных хранятся в:
- %WINDIR%\AppPatch\custom и %WINDIR%\AppPatch\AppPatch64\Custom и
- hklm\software\microsoft\windows nt\currentversion\appcompatflags\custom
Чтобы обеспечить безопасность оболочек, Windows разработала их для работы в пользовательском режиме, поэтому они не могут изменять ядро, и для установки оболочки у вас должны быть права администратора. Однако некоторые прокладки можно использовать для обхода контроля учетных записей (UAC и RedirectEXE), внедрения библиотек DLL в процессы (InjectDLL), отключения предотвращения выполнения данных (DisableNX) и обработки исключений структуры (DisableSEH), а также перехвата адресов памяти (GetProcAddress).< /p>
Использование этих прокладок может позволить злоумышленнику выполнить несколько злонамеренных действий, таких как повышение привилегий, установка бэкдоров, отключение средств защиты, таких как Защитник Windows, и т. д. [2] Прошивки также можно использовать для обеспечения устойчивости, постоянно вызывая уязвимые программы.
Читайте также: