Как снять защитную пленку с монитора

Обновлено: 05.07.2024

Давным-давно в далекой стране жил шим-детектор. Детектор прокладок отслеживал данные, поступающие с платформ Endpoint Detection and Response (EDR), отслеживая изменения определенных путей реестра. Он хорошо справлялся со своей задачей, но, к сожалению, наделал столько шума, что аналитики не захотели его слушать.

Что же делать маленькому шумному детектору?

Чтобы подготовить почву для нашей истории, важно иметь представление о том, как работают детекторы Red Canary. Мы начинаем с широкого охвата обнаружения и сужаем фокус по мере продвижения; мы хотим, чтобы наши детекторы были достаточно широкими, чтобы улавливать вещи, о которых мы еще не знаем явно, сохраняя при этом достаточную фокусировку, чтобы снизить уровень шума (потому что мы не хотим, чтобы у наших аналитиков подкрадывалась «усталость от бдительности»). В некоторых случаях мы начинаем с предпосылки и разбиваем один детектор на несколько, чтобы мы могли идентифицировать активность с разных точек зрения. Это не только увеличивает детализацию для настройки, но и для подавления или внесения в белый список; все без снижения видимости.

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

Проблема для защитников и специалистов по реагированию на инциденты заключается в том, что эти оболочки можно динамически применять к неустаревшим приложениям, даже к основным (привилегированным) процессам Windows. В памяти. С очень небольшим следом. Одно слово для вас: Карбанак. Вот причина шумного маленького детектора shim: чтобы найти вредоносную активность, связанную с шиммированием приложений.

У MITRE есть полезная информация об этом методе в их структуре ATT&CK, в разделе Technique T1138 — Application Shimming. Для удобства вот выдержка из их API:

Обнаружение мерцания приложения


Из этого описания должно быть совершенно очевидно, что эта тема имеет существенную глубину. Когда я впервые столкнулся с событием от нашего бывшего детектора, мой основной вопрос был: «Как модификация реестра указывает на атаку с использованием шимминга злонамеренного приложения?» Проблема заключается в том, что для того, чтобы модификации реестра имели значение, вы должны иметь возможность анализировать реестр и видеть фактически вносимые изменения. Это обычно недоступно в телеметрии EDR, которая больше касается действий, связанных с выполнением.

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

Разжигаем огонь

После некоторых исследований и внутреннего обсуждения мы обновили детектор, чтобы отслеживать создание файлов SDB. Это помогло несколько уменьшить шум, но не учитывало законные приложения, записывающие файлы SDB во время обычных процессов установки. Нам нужно было взять лопату и насыпать угля в топку!

У нас была предстоящая «выездная команда» для работы над различными элементами и задачами, поэтому я взял на себя задачу провести внутреннюю презентацию о нашей способности обнаруживать вредоносные шимминги через ACI. Большинство исследований, которые я нашел, указывали на Carbanak и были связаны с действиями DFIR после взлома, включая анализ памяти, обратный инжиниринг двоичных файлов и другие подробные анализы «мертвых боксов». Там была хорошая информация, но ее действительно нужно было обработать для использования с данными EDR и для использования в рамках стратегии раннего обнаружения.

В итоге мы получили детектор, фокусирующийся на поведении при выполнении sdbinst.exe, основного процесса ACI. sdbinst.exe запускался нормально? Порождал ли он подозрительные процессы или предпринимал другие подозрительные действия? Какие файлы SDB он создал? Эти подходы будут сочетать в себе возможности с остальными нашими детекторами, и все они предназначены для пометки других подозрительных бинарных файлов или активности. Нам нужно было целостное представление, которое учитывало бы комбинации поведения, а не статические или вычисляемые индикаторы; это то, что повысит точность и поможет аналитикам сосредоточиться на истинной вредоносной деятельности. Но будет ли это эффективно?Внутреннее тестирование показало, что да, и мы подожгли этот двигатель!

Сопоставление детекторов с MITRE ATT&CK

Открылась прекрасная возможность, когда мы начали сопоставлять детекторы с матрицей MITRE ATT&CK. Если вы читали нашу недавнюю статью о сопоставлении детекторов с методами MITRE ATT&CK, то у вас есть некоторое представление об этом процессе. (И если вы ее не читали, то вам следует!) Часть этого процесса включает в себя создание и публикацию методов проверки того, как на самом деле могут происходить атаки, независимо от охвата наших детекторов. Это приводит нас к Atomic Red Team, набору тестов, которые мы широко освещали в нашем блоге и социальных сетях. Пока наши исследователи тестировали шимминг приложений, команда аналитиков увидела это воочию.

Вот активность, которую мы наблюдали:

Обнаружение мерцания приложения


Тестировщики создали пользовательскую базу данных оболочек и сохранили ее на диск. Если вы помните из более раннего скриншота ATT&CK, путь к файлу SDB довольно стандартный (хотя содержащиеся в нем инструкции по коду могут и не быть!). Чтобы злоумышленник мог использовать ACI таким образом, он должен использовать файл SDB, так что это один из аспектов обнаружения. Также обратите внимание, что командный процессор (cmd.exe) является родительским для sdbinst.exe.

Обнаружение мерцания приложения

Затем нужно было запустить двоичный файл и вставить код в его память, чтобы принять соответствующие меры. Точные методы и конечные результаты могут различаться, но в целом процесс должен быть одинаковым. Наши исследователи создали собственный двоичный файл для использования; в случае с Carbanak злоумышленники использовали PowerShell для запуска sdbinst.exe и создания собственного файла SDB. Это позволило им ввести код в диспетчер управления службами (services.exe, привилегированный процесс) для запуска бэкдора.

Это отличается от межпроцессного внедрения, поскольку с точки зрения злоумышленника вы не взаимодействуете с выполняющимся кодом, не захватываете удаленный поток и не прокладываете себе путь в память процесса. Вместо этого с помощью инструкций, хранящихся в базе данных прокладок, назначенный процесс исправляется — в памяти — при выполнении. В результате ничего не происходит, пока процесс не будет перезапущен; это может происходить естественным образом или запускаться с помощью какого-либо другого механизма (например, запланированного задания). Пока остается эта инструкция SDB, шиммирование будет происходить каждый раз при запуске процесса.

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

Обнаружение атаки Shimming приложения

В общем, это различные аспекты или этапы шимминг-атаки приложения:

  • Компиляция кода для внесения исправлений в память приложения; обычно это файл DLL, но может быть практически любым. Этот код записывается в целевую систему, но в этот момент ничего не «делает».
  • Создание и регистрация базы данных прокладок (файл SDB) на целевом хосте с использованием платформы ACI (sdbinst.exe).
  • Перезапуск системы или отдельного процесса, чтобы вставить указанный код в память процесса.
  • Победа!

Это также практически идентичен подходу, который администратор использует для исправления устаревшего приложения, или тому, что многие установщики используют по умолчанию, чтобы избежать полного переписывания старого кода. Так как же узнать, что такое зло, а что добро? Некоторые из них будут выделяться после изучения поведения, но в некоторых случаях они могут быть немного более неясными.

Вот различные типы действий, которые могут быть полезны для дальнейшего изучения поведения:

  • Изменения реестра. Найдите изменения реестра, указывающие на то, что файл SDB был зарегистрирован в системе с помощью sdbinst.exe. Платформы EDR могут собирать эти данные телеметрии, но без возможности анализировать детали этих изменений, они имеют довольно высокий уровень шума и низкую точность.
  • Создание файлов SDB на узле: эти данные легко собираются с помощью EDR, но также с высоким уровнем шума и низкой точностью. Наибольший интерес представляют файлы, созданные под профилем пользователя или в других нестандартных местах, или подозрительными процессами (не установщиком, msiexec.exe и т. д.).
  • Выполнение sdbinst.exe при подозрительных обстоятельствах. Это обычно наблюдается во время установки в качестве дочернего процесса msiexec.exe, но также может происходить и другими способами. Следите за утилитами командной строки, запускающими его вместо этого. Это, как правило, низкий уровень шума и высокая точность.
  • Журналы событий. Если у вас есть возможность анализировать и объединять журналы событий с остальной частью вашей телеметрии, интересные данные должны содержаться в файле Microsoft-Windows-Application-Experience-Program-Telemetry.evtx журналы.

Когда возникает активность, сочетающая эти действия — возможно, в сочетании с другими действиями, такими как подозрительный PowerShell или WMIC, — они больше не рассматриваются как изолированные IOC, поскольку достоверность резко возрастает. И это указывает нам правильный путь.

Обнаружение смещения приложения

Благодаря напряженной работе нашего маленького детектора шимминга мы смогли подтвердить, что да, он действительно может собирать данные о событиях, связанных с шиммированием вредоносных приложений. И аналитики знали, на что смотрят. Я просто обожаю, когда план складывается воедино!

Обнаружение мерцания приложения


Чтобы связать с нашей картой MITRE ATT&CK, мы можем увидеть наблюдаемые тактики, идентифицированные по-разному. Каждый из элементов, отмеченных цифрой «1» ниже, ссылается на описание метода атаки MITRE; который был показан в начале этого поста.

Обнаружение мерцания приложения

Элементы, отмеченные цифрой «2», содержат описание того, какой тип активности этот детектор выявляет для наших аналитиков; это показано на следующем изображении:

Обнаружение мерцания приложения


Наконец, кнопка «Просмотр в матрице ATT&CK» открывает это представление, чтобы показать общий охват тактики. Все это предоставляется при обнаружении, которое отправляется нашим клиентам.

Обнаружение мерцания приложения

Надеюсь, вам понравилась эта история о маленьком детекторе, который мог. Во-первых, он не мог (очень эффективно) обнаруживать шимминг приложений; теперь может. Фактически, с тех пор детектор был разделен на несколько детекторов (примерно дюжину), каждый из которых фокусируется на различных методах, с помощью которых можно использовать шиммирование приложений во время атаки. Это произошло «органически», поскольку мы работаем над повышением эффективности и результативности наших возможностей обнаружения и будем продолжать делать это для выявления новых угроз и масштабирования в соответствии с потребностями наших клиентов.

Примечание. Некоторые дисплеи PowerBook 140/145/170 могут мерцать, периодически становиться черными или отображать две горизонтальные черные линии. Если вы столкнулись с какой-либо из этих проблем, попробуйте сжать правую часть лицевой панели дисплея. Если сжатие лицевой панели приводит к улучшению или ухудшению состояния, установите прокладку на кабель дисплея. Прокладка улучшает соединение между пальцами разъема и контактами кабеля.


Примечание. Не устанавливайте прокладку на кабель дисплея, на котором указан номер детали 922-0820.


1 Снимите две пластиковые заглушки.

2 С помощью отвертки Torx T-8 выкрутите из дисплея два крепежных винта лицевой панели.


Потяните лицевую панель дисплея вниз и в сторону, чтобы освободить ее от монтажных выступов в верхней части дисплея.

Снимите лицевую панель с дисплея.


Примечание. Если вы устанавливаете прокладку на кабель дисплея PowerBook 1 70, перейдите к шагу 8. Вы можете отсоединить кабель дисплея от дисплея PowerBook 1 70, не снимая дисплей с корпуса.

5 Накройте клавиатуру чистой тканью или листом бумаги.

6 С помощью отвертки Torx T-8 открутите четыре винта крепления дисплея.


7 Снимите дисплей с экрана EMI и корпуса. Поместите дисплей лицевой стороной вниз на клавиатуру.

Примечание Lockinc: отображается экран PowerBook 145 Tab *.

8 Поднимите фиксатор на разъеме дисплея и отсоедините кабель дисплея.

Подключения дисплея Powerbook 145

9 Снимите прозрачную прокладку с бумажной подложки.

I 0 Поверните назад кабель дисплея и прижмите прокладку к задней (непроводящей стороне) разъема кабеля дисплея. Убедитесь, что прокладка не смята, находится на одном уровне с краями кабеля и не закрывает дорожки разъема.

Я исключаю обработку 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 для повторной оценки, если нам нужно оставить проблему открытой.

Вы не можете выполнить это действие в данный момент.

Вы вошли в другую вкладку или окно. Перезагрузите, чтобы обновить сеанс. Вы вышли на другой вкладке или в другом окне. Перезагрузите, чтобы обновить сеанс.

Злоумышленники могут установить постоянство и/или повысить привилегии, выполняя вредоносный контент, запускаемый оболочками приложений. Инфраструктура/инфраструктура совместимости приложений 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] Оболочки также могут быть использованы для обеспечения постоянства при постоянном вызове уязвимыми программами.

Читайте также: