Вот как вы можете исправить высокую загрузку ЦП Microsoft Edge Content


Кажется, что Microsoft почти всегда опаздывает на вечеринку, когда дело доходит до разработки приложений. После многих лет непопулярного доминирования в Internet Explorer они представили Microsoft Edge, сопровождающий Windows 10. Несмотря на то, что у этого браузера есть много товаров, он все еще отстает от конкурентов.
И хотя в это трудно поверить, у него слишком много проблем с производительностью для нативного приложения. Одна из часто упоминаемых проблем связана с чрезвычайно высокой загрузкой ЦП процесса Content, принадлежащего Microsoft Edge .
Решения этой проблемы можно найти ниже, так что не стесняйтесь проверить их и, надеюсь, снизить нагрузку на процессор до более нормальных значений.
ИСПРАВЛЕНО: Microsoft Edge Content использует слишком много CPU
- Очистить кеш браузера
- Сканирование на наличие вредоносных программ
- Run Edge без расширений
- Отключить встроенный Flash Player
- Попробуйте очевидные или менее очевидные альтернативы
Решение 1 — Очистить кеш браузера
Все мы знаем, что Edge был намерением Microsoft бросить вызов Chrome и Firefox в отношении скорости и меньшего потребления ресурсов. Первоначально это было сделано, но обновления и многофункциональные дополнения, которые идут с ними, отняли много его легкого характера. Теперь даже локально сохраненный кеш может вызывать нештатные перепады памяти и процессора, даже если открыта только одна вкладка.
Итак, начнем с кэшированных данных. Мы предлагаем полностью удалить его, за исключением паролей. Вы также можете удалить их, если для хранения паролей вы используете стороннее приложение или расширение.
Вот как удалить данные из браузера Edge:
- открыто Край
- Нажмите Ctrl + Shift + Delete .
- Установите все флажки и нажмите « Очистить» .
- Читайте также: Исправлено: Microsoft Edge исчез в Windows 10
Решение 2 — Сканирование на наличие вредоносных программ
Наличие вредоносной инфекции может быть еще одной возможной причиной. Имейте в виду, что мы бродим в темноте и пытаемся охватить все возможные причины. Теперь, несмотря на то, что это маловероятный сценарий, есть небольшие шансы, что какой-то PuP был невольно установлен . Мы все слышали о угонщиках браузера, которые использовали ваши ресурсы для майнинга криптовалюты.
Чтобы избежать этого, мы советуем сканировать на наличие вредоносных программ и, кроме того, использовать специализированный анти-PuP инструмент под названием AdwCleaner от Malwarebytes.
Вот вся процедура для комбо Защитника Windows и AdwCleaner:
- открыто Защитник Windows из области уведомлений панели задач.
- выбирать Защита от вирусов и угроз .

- Выберите Параметры сканирования .

- Выберите Автономное сканирование Защитника Windows.
- щелчок Сканируй сейчас .
- Ваш компьютер перезагрузится, и начнется процесс сканирования.
- После запуска снова загрузите Malwarebytes AdwCleaner , здесь
- Запустите инструмент и нажмите « Сканировать сейчас» .

- Подождите, пока инструмент не сканирует вашу систему, и нажмите Очистить и восстановить .
- Перезагрузите компьютер.
- Читайте также: Bitdefender Internet Security 2019: лучший антивирус для платформы Windows
Решение 3 — Run Edge без расширений
Дополнения или расширения для браузера имеют первостепенное значение для многих пользователей. Начиная с блокировщиков рекламы и переходя к различным полезным утилитам — каждый серьезный разработчик браузера должен сделать их доступными. Edge начинался без расширений, но теперь, когда они есть , пользователи вполне удовлетворены тем, что может предложить новый браузер Microsoft.
Однако, несмотря на то, что все они проходят стандартную проверку, они все же принадлежат сторонним разработчикам. И поэтому может быть или не быть хорошо оптимизирован.
Имея это в виду, еще одним жизнеспособным шагом по устранению неполадок является отключение всех расширений и поиск изменений. Позже вы можете, с помощью системы исключения, выяснить, какая из них вызывает высокую загрузку процессора и утечки памяти.
Вот как отключить расширения в Microsoft Edge:

- Откройте Edge.
- Нажмите на 3-точечное меню и откройте Расширения из меню.
- Отключите все расширения по отдельности и перезапустите браузер.
Решение 4 — Отключить встроенный Flash Player
Несмотря на то, что мы работаем над расширениями, сторонние флэш-плееры становятся популярными, поскольку в наши дни почти в каждом браузере есть встроенный флэш-плеер. И, судя по некоторым отчетам, этот Flash-плеер является виновником ненормального использования ЦП процессом Content. Что вам нужно сделать, это временно отключить его и искать изменения в диспетчере задач.
- Читайте также: Почему мой компьютер не распознает Adobe Flash Player в IE?
Если проблема не устранена, мы вряд ли сможем помочь. Но если загрузка ЦП процесса Content падает, мы советуем отключить встроенный флеш-плеер навсегда и перейти на сторонние альтернативы.
Вот где отключить встроенный флеш-плеер в Microsoft Edge:

- Откройте Edge.
- Нажмите на меню из 3 точек и выберите вкладку « Дополнительно » на левой панели.
- Под Adobe Flash отключите параметр « Использовать Adobe Flash Player ».
- Перезапустите браузер и установите сторонний флеш-плеер.
Решение 5 — Попробуйте очевидные или менее очевидные альтернативы
Наконец, до тех пор, пока Microsoft не предоставит надежное и постоянное решение для рассматриваемой проблемы, вы можете использовать Google Chrome, Mozilla Firefox, Opera или любой другой браузер . Существует причина, по которой Edge, несмотря на все добавления и обновления функций, все еще сильно отстает от Chrome на мировом рынке браузеров.
Вы также можете извлечь все закладки в новый браузер и существенно ускорить переход. Вот как это сделать:
И на этой ноте мы можем завершить эту статью. Надеюсь, это было полезное чтение. Также, пожалуйста, не стесняйтесь поделиться своими мыслями по этому вопросу в разделе комментариев ниже.
СВЯЗАННЫЕ СТАТЬИ ВЫ ДОЛЖНЫ ПРОВЕРИТЬ:
- Как изменить поисковую систему по умолчанию в Microsoft Edge
- Полное исправление: проблемы с положением окна Microsoft Edge
- Microsoft Edge блокирует автозапуск видео в Windows 10 Redstone 5
- Вот как Windows 10 RS5 повышает безопасность ПК, Skype и Edge
Microsoft Edge Content Process продолжает истощать память компьютера


Microsoft давно хвастается тем, что Windows 10 — лучшая операционная система, которую она когда-либо создавала. Браузер Edge встроен в Windows 10, и Microsoft с гордостью заявляет, что это самый быстрый и безопасный браузер, который он когда-либо разрабатывал. Несмотря на заявления Microsoft, есть много ситуаций, которые доказали, что любимая ОС Microsoft и браузер далеки от совершенства .
Есть все еще много проблем с Windows 10, которые преследуют пользователей с самого первого дня, когда Microsoft запустила ОС. Пользователи сообщали о них через центр обратной связи или выражали свое недовольство на форуме Microsoft, но эти действия не решили проблему.
Когда пользователи Windows 10 впервые начали тестировать браузер Edge , они быстро заметили, что память их компьютеров истощается так называемым «процессом обработки содержимого Microsoft Edge». В то время никто не обращал внимания на эту проблему, так как Edge был совершенно новым, и пользователи ожидали увидеть ошибки. Перенесемся через год, и та же проблема все еще присутствует.
Microsoft Edge Content Process истощает память Windows 10
Процесс: Microsoft Edge Content Process, использует 1,5 ГБ оперативной памяти, а я даже не использую Edge. Почему этот вампир, истекающий из памяти, высасывает так много моего барана, и как я могу пронзить кол его сердцем, чтобы это больше не повторилось?
Microsoft никогда не выпускала никаких комментариев относительно этого странного процесса Edge, который активен, даже когда пользователи фактически не используют браузер. Согласно гипотезам пользователей, Microsoft Edge Content Process связан с Cortana . Другие пользователи критикуют Microsoft за активацию бесполезных процессов и даже заявляют, что хакеры могут использовать процесс содержимого Edge для доступа к своим компьютерам.
Выслеживание, домогательство, нарушение неприкосновенности частной жизни. Открытые порты, требующие помощи хакеров, будут использовать процессы, разрушающие наши компьютеры. Бесполезно говорить о безопасности, когда это разрушает нашу безопасность. Я отказался от установки Linux на двух компьютерах, три из которых работают под управлением Windows 8.1, а два — под управлением Windows 7.
Похоже, что единственное решение, чтобы остановить Microsoft Edge Content Process — это удалить браузер. Вас тоже мучает эта проблема? Расскажите нам больше о своем опыте в разделе комментариев ниже.
СВЯЗАННЫЕ ИСТОРИИ, КОТОРЫЕ ВЫ ДОЛЖНЫ ПРОВЕРИТЬ:
- Более 60% пользователей Windows перейдут на MacOS для большей конфиденциальности
- Как заблокировать использование веб-камеры в Windows 10, если вы беспокоитесь о своей конфиденциальности
- Лучшее программное обеспечение для защиты конфиденциальности Windows 10 для использования
MicrosoftEdgeCP.exe что это за процесс? (относится и к MicrosoftEdgeSH.exe)

Хеллоушки. Значит поставил я себе на тестовый комп Windows 10, и не простую, а последний билд 1803. Ну и как бы она немного обновлена, там всякие новые функции какие-то.. и новые процессы есть в диспетчере. Вот один из них это MicrosoftEdgeCP.exe — ну я думаю что и так видно что процесс связан с браузером Edge. Но вот что он делает? Вот с этим мы будем сегодня разбираться.
Но сперва я посмотрел в интернете.. и вот что узнал — MicrosoftEdgeCP.exe расшифровывается как Microsoft Edge Content Process, это системный файл, то есть идет от самой винды, и нужен процесс для ускорения запуска браузера Microsoft Edge. Кроме MicrosoftEdgeCP.exe в диспетчере также могут быть MicrosoftEdge.exe и MicrosoftEdgeSH.exe, они тоже нужны для ускорения запуска. У всех этих процессов в колонке Состояние указано Приостановлено, а если запустить браузер Edge, то в колонке уже будет написано Выполняется
Ну фух, самое главное что это не вирус! Точно? Я думаю что почти точно, все таки время то уже прошло.. просто я находил в интернете инфу, что раньше в процесс MicrosoftEdgeCP.exe внедрялся какой-то троян Gozi, но это было два года назад. Как сейчас — не знаю, но надеюсь что Microsoft приняла меры и защитила Windows 10 от этого злого вируса.
Кстати, я когда закрыл браузер Edge, то процесс MicrosoftEdgeCP.exe пропал.. у меня было их два, и был еще один MicrosoftEdge.exe и все они пропали То есть после включения компа они как бы висят, чтобы ваш первый запуск браузера был быстрый. Но как только закрыли браузер, то они исчезают и обратно не возвращаются, вот так.. Однако потом выяснилось, что процессы MicrosoftEdgeCP.exe могут появиться и после закрытия браузера..
Вот нашел картинку, где есть все три процесса, смотрите:

Правда у меня не было процесса MicrosoftEdgeSH.exe.. как я уже писал, у меня было два MicrosoftEdgeCP.exe и один просто MicrosoftEdge.exe, смотрите:

Так, странно что-то.. я сделал перезагрузку. Все нормально, винда загрузилась, все проги загрузились, но вот процессов этих нет.. подождал еще пять минут — все равно нет. Может они как-то по-особенному запускаются? Возможно нужно еще подождать немного, но времени нет, поэтому идем дальше.. значит запускается MicrosoftEdgeCP.exe вот из этой папки:

Название папки, откуда запускаются процесс — Microsoft.MicrosoftEdge_8wekyb3d8bbwe, какое-то уникальное оно, поэтому у вас скорее всего последние символы названия папки будут другие.. Кстати в этой папке нет MicrosoftEdgeSH.exe — может он был в предыдущих билдах? Все может быть. Кстати для интереса я поискал у себя на компе файл MicrosoftEdgeSH.exe и вы знаете, нашел его в этих двух папках:

Как проверить MicrosoftEdgeCP.exe на вирус? Если у вас есть такие мысли, мол может вирус.. то я вас понимаю и поэтому сейчас покажу как точно узнать MicrosoftEdgeCP.exe вирус или нет. Ну вернее почти точно. В этом нам поможет сервис ВирусТотал, это такой ну очень известный проверяльщик файлов. Итак, открываем браузер, я пользуюсь кстати Хромом и идем там на сайт ВирусТотала:
На сайте нажимаем кнопку Выберите файл:

И теперь нужно выбрать файл MicrosoftEdgeCP.exe. Чтобы узнать где он лежит, то идете в диспетчер, находите там процесс MicrosoftEdgeCP.exe (если его нет то просто запустите Edge и он появится), процесс нашли — нажали правой кнопкой, выбрали открыть расположение и откроется папка, откуда запускается процесс. Все, теперь просто осталось скопировать путь этой папки и вставить его в окно выбора.. ну смотрите, вот я вставляю свой путь:

Путь вставил, потом нажимаю Открыть, и в этом окошке открывается папка, путь которой я вставил, ну а потом мне остается только выбрать файл на проверку и нажать Открыть:

После этого на сайте ВирусТотала нажимаю кнопку Проверить:

И тут выскакивает сообщение, что мол файл этот уже был проверен.. но нет, мне нужно чтобы был проверен именно тот файл, который я сейчас загрузил, поэтому нажимаю на Повторить анализ:


Как происходит проверка? Файл MicrosoftEdgeCP.exe проверяется многими движками антивирусов и потом можно посмотреть какие движки считают файл опасным. В нашем случае нет ни одного такого движка, все движки антивирусов считают что файл безопасный, ну значит так и есть:

А внизу кстати там идет список всех движков, которые проверяли файл:

Видите, тут напротив Alibaba иконка перечеркнутого глаза, это наверно движок не смог вообще увидеть файл, ну мож глюк какой-то.. да и антивирус Alibaba, впервые слышу о таком.. Ну это не все движки, далеко не все, их там аж 66 штуки, у вас может будет больше или меньше. Кстати тут есть и движок Аваста, и Касперского, Comodo, в общем наверно тут движки всех более-менее популярных антивирусов.
Как отключить MicrosoftEdgeCP.exe через редактор локальной групповой политики? То есть как сделать так, чтобы браузер запускался без этого ускорения? Я нашел способ в интернете, нужно пойти в политику и найти там настройку вот эту:
Разрешить предварительный запуск Microsoft Edge при загрузке Windows, когда система простаивает, и каждый раз при закрытии Microsoft Edge
Но вот трабла — нет этой настройки у меня. Возможно потому что это билд 1803. Но ее реально нет. Однако я нашел нечто похожее и кажется это оно — просто настройку переименовали. Так, ладно, смотрите — зажимаем кнопки Win + R, потом в окошко Выполнить пишем команду:

Открылся редактор локальной групповой политики, теперь тут идете вот в этот раздел:

Кстати ребята, вот это мы открыли Конфигурация компьютера, но как оказалась настройки Microsoft Edge есть и в Конфигурация пользователя:

Ну это так.. просто вам на заметку.
Но нам нужен именно раздел Конфигурация компьютера. Справа будут всякие настройки:

И я тут не вижу эту настройку:
Разрешить предварительный запуск Microsoft Edge при загрузке Windows, когда система простаивает, и каждый раз при закрытии Microsoft Edge
Может у вас она будет? Если есть — то нажимайте по ней два раза и выставляйте там Включено, а там где параметры, то там выберите Запретить предварительный запуск, вот картинка с интернета:

И нажимайте ОК. Но вот у почему-то такой настройки нет и вроде там где нужно смотрю, а настройки нет.. Потом еще как бы должна быть такая настройка:
Разрешить Microsoft Edge запускать и загружать начальную страницу и страницу новой вкладки при запуске Windows и каждый раз при закрытии Microsoft Edge
Но ее тоже у меня нет! Если у вас есть — нажимаете два раза, задаете там Включено и там где параметры выбираете Запретить предварительную загрузку вкладок, картинка в тему:

Но у меня этой настройки нет блина! Но если у вас есть — то включайте эти настройки. А что есть у меня? А у меня есть такая настройка только:
Не дает Microsoft Edge запускать и загружать страницу начальной и новой вкладки при загрузке Windows и каждый раз при закрытии Microsoft Edge
Вот такая настройка, не дает и все, вот она у меня:

Думаете не то? Я тоже так подумал сначала, но открыл эту настройку и увидел там вот такие слова:

Самое главное что там написано — По умолчанию для этого параметра установлено значение Разрешить предварительную загрузку. Понимаете? Эта настройка и отвечает за предварительную загрузку! Ну и дальше там в описании все доступным языком написано и все понятно. Что делать? Ну нужно включать эту настройку и там в меню выбирать Запретить предварительную загрузку вкладки:

Ну и потом нажать ОК, кстати вот и описание этой настройки, все сходится:

Как отключить MicrosoftEdgeCP.exe через реестр? Так ребята, тут такое приключилось.. ну я хотел проверить, можно ли отключить MicrosoftEdgeCP.exe через реестр. Но я не знаю как проверить — отключилась предварительная загрузка, или нет? Все таки процессы не сразу появляются.. поэтому я не могу дать гарантию, что те параметры, которые я напишу, что они вам помогут. Ведь тут еще все зависит от билда Windows, вот выше писал как отключить через групповую политику.. и как мы поняли, то названия настроек могут быть разные, зависит наверно от билда.. Поэтому пробовать эти параметры в реестре или нет — решать вам, я со своей стороны постараюсь максимально все расписать, чтобы вам было легко.
Кстати прикол — вот прочитал, что управление предварительной загрузкой Microsoft Edge появится только в Windows 10 билд 1809.. А у меня билд 1803…
Ладно, поехали. Запускаем реестр, для этого зажимаем кнопки Win + R и вставляем команду:

Перед вами откроется вот такой редактор реестра:

Слева идут разделы, а справа будут параметры. И что самое крутое — теперь можно вставить путь к разделу так как в проводнике, видите вверху там написано Компьютер? Вот это текстовое поле, туда можно вставить путь! Раньше такого не было и было не прикольно, только сейчас додумались это сделать. Так, первый параметр который создадим, это PreventTabPreloading. Значит открываем этот раздел:
Теперь создаем в этом разделе другой раздел — MicrosoftEdge, для этого нажимаем правой кнопкой по Microsoft и там выбираем Создать > Раздел:

И этот раздел называем MicrosoftEdge, чтобы в итоге у вас получилось так:

Теперь в MicrosoftEdge тоже создаем раздел и называем его TabPreloader, должно получиться так:

И теперь внутри раздела TabPreloader создаем параметр PreventTabPreloading, для этого просто нажимаем правой кнопкой справа по белому и выбираем там Создать > Параметр DWORD (32 бита):

И параметр называем PreventTabPreloading, чтобы получилось так:

Потом нажимаем два раза по PreventTabPreloading и ставим 1:

Нажали ОК. Значение 1 это чтобы запретить, а 0 чтобы разрешить.
Контрольная проверка — если вы все сделали правильно, то теперь если вы откроете этот раздел:

То у вас будет откроется раздел TabPreloader и в нем будет параметр PreventTabPreloading:

Надеюсь у меня мини-инструкция удалась Это мы делали вместе, а теперь вам нужно самостоятельно создать остальные параметры. Если не будет каких-либо разделов, то их нужно создать. Второй параметр — это тоже PreventTabPreloading, но его уже нужно создать по такому пути:
То есть сделать тоже самое, но уже в ветке HKEY_LOCAL_MACHINE. Дальше, еще нужно в разделе:
Создать параметр AllowPrelaunch и задать ему значение 0. Потом в разделе:
Создать параметр AllowTabPreloading и задать ему значение 0. Ну и после всех этих дел сделать перезагрузку.
Я все эти параметры создал и задал значение, а теперь я сделаю перезагрузку.. и пойду сделаю себе чай. А потом вернусь и посмотрю — не появилось ли процесса MicrosoftEdgeCP.exe.. и вот я сделал чай, сел, смотрю и вот ребята, процессы все равно висят:

К сожалению ребята мне не помогли эти параметры в реестре! Но опять же, почему? Я думаю что из-за того что у меня билд 1803
Неудачный эксперимент по отключению процесса MicrosoftEdgeCP.exe.. Хотел я попробовать отключить процесс.. и знаете как? Просто переименовав файл MicrosoftEdgeCP.exe, [исправить этот косяк] обычным способом не получилось, но при помощи Unlocker все таки получилось.. в общем нажимаю я правой кнопкой по MicrosoftEdgeCP.exe и выбираю пункт Unlocker:

В меню выбираю, что я хочу переименовать:

Потом изменяю название — просто добавляю символ нижнего пробела и нажимаю ОК:

Потом еще раз ОК нажал и все сделалось:

Файл у нас в переименован:

Ошибок никаких нет, сделал перезагрузку.. тоже все нормально, ошибок нет, процесса MicrosoftEdgeCP.exe в диспетчере тоже нет.. Вроде бы все нормально, да? И вот я запускаю Edge:

И браузер запустился, все нормально вроде.. но вот только он постоянно загружается, я попробовал перейти на сайт google.com, но он дальше загружается без остановки:

Еще пару секунд так повисел а потом сам закрылся. Я все повторил и результат был такой же. При этом в диспетчере был только один процесс MicrosoftEdge.exe и все.
Зачем на самом деле нужен MicrosoftEdgeCP.exe? Совсем забыл вам кое-что сказать про MicrosoftEdgeCP.exe.. В общем мне кажется на самом деле этот процесс нужен не для ускорения. Вот смотрите, я запустил браузер Edge и в нем открыта только Пустая вкладка:

При этом в диспетчере 4 процесса MicrosoftEdgeCP.exe:

Теперь я открыл несколько сайтов, то есть несколько вкладок:

И вот сколько теперь стало процессов:

Получается что MicrosoftEdgeCP.exe обеспечивает работу одной вкладки. То есть на каждую вкладку идет свой MicrosoftEdgeCP.exe, каждая вкладка имеет свой процесс. Примерно так и Хром работает. Именно поэтому если переименовать MicrosoftEdgeCP.exe, то браузер никак не будет работать.
Вывод — браузер Edge не работает без MicrosoftEdgeCP.exe и точка. Но самое страшное не это, а то что я обратно переименовал файл, сделал перезагрузку и… ноль, браузер все равно после запуска через несколько секунд закрывается! Запускал несколько раз и эффект тот же — браузер сам закрывается через пару сек! То есть если переименовать файл MicrosoftEdgeCP.exe, запустить Edge, и потом вернуть оригинальное имя файлу, то браузер все равно работать не будет. Какой вывод? Никогда не переименовывайте системные файлы просто так и без точки восстановления!.
На этом все ребята, написал много, но надеюсь кому-то эта инфа будет полезной. Удачи вам и берегите себя, до новых встреч!!
Механизм Arbitrary Code Guard (ACG) на примере Microsoft Edge
С выпуском Windows 10 Creators Update Microsoft начала использовать новый механизм безопасности в Microsoft Edge: Arbitrary Code Guard (ACG). Когда ACG применяется к процессу (в частности в процессу Microsoft Edge), в целевом процессе становится невозможным выделить новую исполняемую память или изменить существующую исполняемую память. Соответственно, исполнение произвольного кода для злоумышленника становится более сложной задачей.
Для достижения более высокой производительности современные браузеры используют JIT компиляцию (Just-In-Time) JavaScript-кода, но такой подход не совместим с ACG. Поэтому в Microsoft Edge был реализован следующий подход: JIT был выделен в отдельный процесс, относительно процесса содержимого (Content Process). Процесс содержимого посылает JIT процессу байт-код JavaScript, а JIT процесс компилирует его в машинный код и проецирует этот машинный код обратно в процесс содержимого.
Как работает ACG в Microsoft Edge
ACG зависит от настройки политики динамического кода процесса. Эта политика может быть установлена для любого процесса Windows вызовом функции SetProcessMitigationPolicy с параметром ProcessDynamicCodePolicy. В процессе содержимого Microsoft Edge вызов происходит следующим образом:
00 KERNELBASE!SetProcessMitigationPolicy 01 MicrosoftEdgeCP!SetProcessDynamicCodePolicy+0xc0 02 MicrosoftEdgeCP!StartContentProcess_Exe+0x164 03 MicrosoftEdgeCP!main+0xfe 04 MicrosoftEdgeCP!_main+0xa6 05 MicrosoftEdgeCP!WinMainCRTStartup+0x1b3 06 KERNEL32!BaseThreadInitThunk+0x14 07 ntdll!RtlUserThreadStart+0x21
Каждый процесс содержимого Microsoft Edge вызывает эту функцию вскоре после создания. К сожалению, поскольку один процесс содержимого может обращаться к другим процессам содержимого, которые запускаются в одной песочнице (App Container), процесс содержимого A может получить доступ к процессу содержимого B до того, как B активирует ACG. Это позволяет злоумышленнику сделать так, что в процессе B никогда не будет активирован механизм ACG (или просто исполнить в процессе B произвольный код до активации механизма ACG). Это проблема архитектуры, которая не исправлена на момент публикации документа, и ожидается, что проблема будет решена в будущих версиях Windows.
Политика динамического кода не всегда устанавливается процессом содержимого Microsoft Edge. Прежде чем принять решение о применении этой политики, процесс обращается к нескольким записям в реестре, как показано на рисунке ниже:

К счастью, процесс содержимого Microsoft Edge не имеет доступа на запись ни к одному из этих разделов реестра, поэтому скомпрометированный процесс содержимого не может просто отключить ACG для процессов, которые будут созданы в будущем.
Кроме того, для обеспечения обратной совместимости перед установкой значения политики динамического кода Edge пытается определить, присутствуют ли какие-либо драйверы (например, графики), которые несовместимы с ACG. Как сказано в блоге Microsoft о ACG:
По соображениям совместимости в настоящее время ACG применяется только на 64-х разрядных машинах, у которых главный GPU работает под управлением драйвера WDDM 2.2 (модель драйверов, выпущенная с Windows 10 Anniversary Update), или при использовании программного рендеринга. В экспериментальных целях программный рендеринг можно принудительно включить с помощью Control Panel -> Internet Options -> «Advanced». На текущий момент на устройствах Microsoft (Surface Book, Surface Pro 4 и Surface Studio) и некоторых других системах, драйвера GPU которых точно совместимы с ACG, применяется ACG. Мы намерены улучшить охват и точность списка поддерживаемых GPU, поскольку мы оцениваем телеметрию и отзывы клиентов.
Это означает, что на многих системах со старыми драйверами GPU механизм ACG не будет включен, даже если компьютер работает под управлением обновленной версии Windows.
Для проверки того, что политика динамического кода включена для процесса, можно вызвать скрипт PowerShell’а Get-ProcessMitigation, как показано на рисунке ниже:

Особо следует отметить запись «AllowThreadOptOut: OFF». В предыдущих версиях Windows этот параметр был «ON», что позволило выйти из под ACG. Это, как и ожидалось, привело к тому, что механизм был крайне не эффективным.
Когда процесс содержимого Microsoft Edge вызывает SetProcessMitigationPolicy(), он также устанавливает флаг AllowRemoteDowngrade, который позволяет не-AppContainer процессам, отключать политику в любое время. Это используется, когда меняется драйвер дисплея. Попытка отключить политику динамического кода из самого процесса содержимого, после включения, приведет к ошибке ERROR_ACCESS_DENIED.
Когда включена политика динамического кода, как сказано выше, становится невозможным:
- выделить новую исполняемую память
- изменить существующую исполняемую память
Когда процесс A пытается выделить исполняемую память в процессе B, имеет значение только политика процесса A. То есть: если в процессе B установлена политика динамического кода (включен механизм ACG), а в процессе А — нет, то вызов из процесса A будет успешным, если процесс A будет обладать описателем на процесс B с соответствующими правами.
Таким образом, единственными способами выделения исполняемой памяти в процессе с включенным механизмом ACG являются:
- выделение исполняемой памяти другим процессом, для которого выключен механизм ACG
- загрузка DLL в процесс
Насколько эффективен ACG?
Существует несколько подходов, используемых злоумышленниками, в ситуации, когда невозможно выделить исполняемую память:
- Если злоумышленнику не нужно выходить из текущего процесса, то можно выполнить data-only атаку (использовать только неисполняемую память). Применимо к браузеру это может означать перезаписывание соответствующих полей, чтобы отключить или обмануть проверки политик, что эквивалентно атаке Universal XSS (Примечание: в Google Chrome с включенной изоляцией сайта реализация такой атаки сильно усложнена).
- В противном случае, когда злоумышленнику не доступны скрипты, единственным путем остаются техники пере-использования существующего кода, такие как ROP. Стоит обратить внимание, что злоумышленник не может использовать ROP только для того, чтобы сделать область памяти полезной нагрузки исполняемой, а затем передать туда управление (как это часто делается в эксплоитах сегодня). Вместо этого вся полезная нагрузка должна быть записана на ROP. В настоящее время это будет трудоемкой задачей, но масштабное применение ACG может послужить стимулом к разработке автоматизированных инструментов, которые облегчили бы эту задачу.
- Если же присутствует среда исполнения скриптов, то у злоумышленника есть третий (более простой) подход. Вместо написания полезной нагрузки на ROP, атакующий с примитивом чтения и записи может использовать среду исполнения скриптов, которая уже присутствует в этом процессе (например, JavaScript в Edge). Это позволит создать интерфейс, который позволит:
- вызывать произвольную нативную функцию с произвольными аргументами из среды исполнения скриптов
- передавать возвращаемое значение обратно в среду исполнения скриптов
В настоящее время, с большим количеством известных подходов, обход CFG в Windows не составляет труда. Однако, если Microsoft сможет исправить все известные недостатки CFG (а Microsoft уже проявила намерение это сделать), ситуация может измениться в ближайшие пару лет.
Таком образом, успешное применение ACG напрямую зависит от успешного применения CFG и CIG (Code Integrity Guard). Все эти механизмы должны работать вместе, чтобы предотвратить выполнение кода злоумышленника:
- При использовании CIG и ACG, но без CFG, как описано выше, атакующий может закодировать полезную нагрузку в виде ROP-цепочки или злоупотребить средой исполнения скриптов для выполнения произвольного кода.
- При использовании CFG и CIG, но без ACG, атакующий может проецировать исполняемую память в текущий процесс.
- При использовании CFG и ACG, но без CIG, атакующий может загрузить вредоносную библиотеку в текущий процесс.
Chakra (JIT-сервер)
Для реализации JIT в Chakra (JavaScript Engine в Microsoft Edge) при включенном механизме ACG, Microsoft запускает части Chakra, которые ответственны за компиляцию кода, в отдельном процессе — JIT-сервере. Основное взаимодействие процесса содержимого и JIT-сервера показано на рисунке ниже:

При такой архитектуре процесс содержимого по-прежнему обрабатывает все задачи, связанные с запуском JavaScript, кроме компиляции (JIT’инга) скриптов. Когда Chakra определяет, что функция JavaScript (или цикл) должна быть скомпилирована в нативный код (обычно это происходит после интерпретации одного и того же участка скрипта несколько раз), вместо того, чтобы делать это текущем процессе, происходит вызов JIT-сервера, которому передается байт-код целевой функции. Затем JIT-сервер компилирует байт-код и записывает полученный исполняемый нативный код обратно в вызывающий процесс с использованием разделяемой памяти (объекта секции). После этого процесс содержимого может выполнить полученный исполняемый код без нарушения политики динамического кода.
С точки зрения запущенных процессов, JIT-сервер выглядит так же, как и другой процесс содержимого, и даже использует тот же exe-файл: MicrosoftEdgeCP.exe. Существенное отличие заключается в том, что для JIT-процесса механизм ACG не включен, что и позволяет ему проецировать исполняемый код обратно в процесс содержимого. При этом запускается только один процесс JIT-сервера, который обслуживает все существующие процессы содержимого.
Заключение
ACG преуспевает в достижении своей непосредственной цели: предотвращение выделения и модификации исполняемой памяти. Однако из-за взаимной зависимости CFG, ACG и CIG с одной стороны, а так же недостатков текущей реализации CFG в Microsoft Windows с другой, ACG не является достаточным средством предотвращения продвинутых атак по выходу из песочницы браузера. Таким образом, Microsoft должна исправить все известные недостатки CFG, прежде чем ACG станет существенным препятствием для эксплойтов.
- Google Project Zero
- Microsoft Edge
- Arbitrary Code Guard
- ACG
- JIT
- SetProcessMitigationPolicy
- Информационная безопасность
- Системное программирование
- Microsoft Edge
- Разработка под Windows