Для чего в браузеры _навязчиво_ тянут многопроцессность?
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 08.03.23 10:33
Оценка:
Сперва объясняли тем, что для изоляции вкладок/страниц друг от друга. Но JS сейчас чуть более, чем везде, поэтому для полной изоляции нужен отдельный процесс на каждую вкладку, а этого нет, как я понимаю, нигде. Если же оно само решает, какие нужно изолировать, а какие нет, то по каким критериям, и насколько это надежно?

Но еще более непонятно, почему это столь навязчиво. Когда-то в Firefox можно было задать ограничение в меню настроек. Потом это выпилили, но оставили возможность ограничить в общем наборе настроек (about:config). Теперь, насколько я понимаю, выпилили и оттуда, и сейчас оно плодит процессы десятками (в одном из профилей я насчитал 25).

Этому есть внятные объяснения? Сколько ни читал — везде что-то мямлят, но неубедительно.
Re: Для чего в браузеры _навязчиво_ тянут многопроцессность?
От: Osaka  
Дата: 08.03.23 15:30
Оценка:
ЕМ>Но еще более непонятно, почему это столь навязчиво. Когда-то в Firefox можно было задать ограничение в меню настроек. Потом это выпилили, но оставили возможность ограничить в общем наборе настроек (about:config). Теперь, насколько я понимаю, выпилили и оттуда, и сейчас оно плодит процессы десятками (в одном из профилей я насчитал 25).
ЕМ>Этому есть внятные объяснения? Сколько ни читал — везде что-то мямлят, но неубедительно.
Если можно чуть что прибивать/перезапускать процессы, то пользователи не заметят, как много разрабы насиньёрили утечек памяти.
Отредактировано 08.03.2023 15:31 Osaka . Предыдущая версия .
Re: Для чего в браузеры _навязчиво_ тянут многопроцессность?
От: m2user  
Дата: 08.03.23 16:42
Оценка:
ЕМ>Этому есть внятные объяснения? Сколько ни читал — везде что-то мямлят, но неубедительно.

Полагаю, так действительно проще контролировать, сколько ресурсов (память, CPU) потребляет та или иная вкладка.
Re[2]: Для чего в браузеры _навязчиво_ тянут многопроцессность?
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 08.03.23 16:53
Оценка:
Здравствуйте, m2user, Вы писали:

M>Полагаю, так действительно проще контролировать, сколько ресурсов (память, CPU) потребляет та или иная вкладка.


Каким образом? Если работа виртуальной машины и выделение памяти хоть как-то контролируются ядром/диспетчером браузера (а они обязаны контролироваться, если это серьезный софт, а не наколенная поделка), то оно видно при любой организации. Если не контролируются, то как это можно узнать у ОС, когда несколько вкладок группируется в одном процессе?
Re: Для чего в браузеры _навязчиво_ тянут многопроцессность?
От: rudzuk  
Дата: 08.03.23 16:55
Оценка: 5 (1) +2
Здравствуйте, Евгений Музыченко, Вы писали:

ЕМ>Сперва объясняли тем, что для изоляции вкладок/страниц друг от друга. Но JS сейчас чуть более, чем везде, поэтому для полной изоляции нужен отдельный процесс на каждую вкладку, а этого нет, как я понимаю, нигде.


Именно для изоляции и нужно. У меня в лисе количество процессов Isolated Web Co(ntent), примерно, равно количеству активных вкладок. Количество может не биться т.к. браузеры, в целях экономии ресурсов, могут останавливать некоторые (долго неиспользуемые, например) вкладки (процесс, соответственно, убивается, хотя вкладка есть).
Re[2]: Для чего в браузеры _навязчиво_ тянут многопроцессность?
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 08.03.23 17:10
Оценка:
Здравствуйте, rudzuk, Вы писали:

R>процесс, соответственно, убивается, хотя вкладка есть


Похоже на то — после того, как погонял вкладки туда-сюда, количество дочерних процессов у этого профиля возросло до полусотни.

То есть, исходя из того, что браузероделы старательно выпиливают возможности ограничения количества процессов, они совершенно не в состоянии обеспечить мало-мальски годную изоляцию иначе, как средствами защиты памяти ОС? Это ведь означает, что виртуальные машины реализованы до невозможности убого. Даже первые реализации VMM x86, которые появились больше двадцати лет назад, и поддерживали виртуализацию ядерного кода, успешно справлялись с его изоляцией как от хостовой ОС, так и VM друг от друга. С тех пор разработка VM настолько деградировала?
Re[3]: Для чего в браузеры _навязчиво_ тянут многопроцессность?
От: m2user  
Дата: 08.03.23 17:55
Оценка:
ЕМ>Каким образом? Если работа виртуальной машины и выделение памяти хоть как-то контролируются ядром/диспетчером браузера (а они обязаны контролироваться, если это серьезный софт, а не наколенная поделка), то оно видно при любой организации.

Судя по about:performance — что-то контролируется.

EM> Если не контролируются, то как это можно узнать у ОС, когда несколько вкладок группируется в одном процессе?


я подразумевал 1 процесс на одну вкладку.
Хотя вариант 1 процесс на 1 сайт (домен) тоже имеет смысл.
Re[3]: Для чего в браузеры _навязчиво_ тянут многопроцессность?
От: пффф  
Дата: 08.03.23 18:00
Оценка:
Здравствуйте, Евгений Музыченко, Вы писали:

ЕМ>Похоже на то — после того, как погонял вкладки туда-сюда, количество дочерних процессов у этого профиля возросло до полусотни.


ЕМ>То есть, исходя из того, что браузероделы старательно выпиливают возможности ограничения количества процессов, они совершенно не в состоянии обеспечить мало-мальски годную изоляцию иначе, как средствами защиты памяти ОС? Это ведь означает, что виртуальные машины реализованы до невозможности убого. Даже первые реализации VMM x86, которые появились больше двадцати лет назад, и поддерживали виртуализацию ядерного кода, успешно справлялись с его изоляцией как от хостовой ОС, так и VM друг от друга. С тех пор разработка VM настолько деградировала?


Беб победил десктоп
Re[4]: Для чего в браузеры _навязчиво_ тянут многопроцессность?
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 08.03.23 18:02
Оценка:
Здравствуйте, m2user, Вы писали:

M>я подразумевал 1 процесс на одну вкладку.


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

Это ж, по сути, уже до неприличия убого. Я еще понимаю, если б код для HTML писался на ассемблере, C/C++, паскале или подобных языках, где практически нет ограничений на доступ в память и выполнение операций. Но, блин, насколько ж нужно все просрать, чтоб не суметь обеспечить изоляцию для жабаскрипта???
Re[5]: Для чего в браузеры _навязчиво_ тянут многопроцессность?
От: cserg  
Дата: 08.03.23 18:18
Оценка:
Здравствуйте, Евгений Музыченко, Вы писали:

ЕМ>Подход "отдельный процесс для каждой вкладки" (как и в варианте "для каждого домена") подразумевает заявление разработчиков, типа "мы совершенно не в состоянии обеспечить сколько-нибудь вменяемую защиту вкладок друг от друга, поэтому умываем руки и отдаем всю безопасность на откуп ОС".

Да.

ЕМ>Это ж, по сути, уже до неприличия убого. Я еще понимаю, если б код для HTML писался на ассемблере, C/C++, паскале или подобных языках, где практически нет ограничений на доступ в память и выполнение операций. Но, блин, насколько ж нужно все просрать, чтоб не суметь обеспечить изоляцию для жабаскрипта???

Так ведь жабаскрипт не сам по себе, он вызывает код из потрохов браузера, а эти потроха на C/C++.
Re[6]: Для чего в браузеры _навязчиво_ тянут многопроцессность?
От: пффф  
Дата: 08.03.23 18:25
Оценка:
Здравствуйте, cserg, Вы писали:

ЕМ>>Это ж, по сути, уже до неприличия убого. Я еще понимаю, если б код для HTML писался на ассемблере, C/C++, паскале или подобных языках, где практически нет ограничений на доступ в память и выполнение операций. Но, блин, насколько ж нужно все просрать, чтоб не суметь обеспечить изоляцию для жабаскрипта???

C>Так ведь жабаскрипт не сам по себе, он вызывает код из потрохов браузера, а эти потроха на C/C++.

Дык это просто решается. Надо потроха переписать на JS, и всё всем сразу станет хорошо
Заодно и производительность увеличится
Re[5]: Для чего в браузеры _навязчиво_ тянут многопроцессность?
От: m2user  
Дата: 08.03.23 18:29
Оценка:
ЕМ>Это ж, по сути, уже до неприличия убого. Я еще понимаю, если б код для HTML писался на ассемблере, C/C++, паскале или подобных языках, где практически нет ограничений на доступ в память и выполнение операций. Но, блин, насколько ж нужно все просрать, чтоб не суметь обеспечить изоляцию для жабаскрипта???

А уязвимости в зависимостях? Например в каком-нибудь ffmpeg.
Re[6]: Для чего в браузеры _навязчиво_ тянут многопроцессность?
От: пффф  
Дата: 08.03.23 18:31
Оценка:
Здравствуйте, m2user, Вы писали:

ЕМ>>Это ж, по сути, уже до неприличия убого. Я еще понимаю, если б код для HTML писался на ассемблере, C/C++, паскале или подобных языках, где практически нет ограничений на доступ в память и выполнение операций. Но, блин, насколько ж нужно все просрать, чтоб не суметь обеспечить изоляцию для жабаскрипта???


M>А уязвимости в зависимостях? Например в каком-нибудь ffmpeg.


А его тоже на JS надо переписать
Re[3]: Для чего в браузеры _навязчиво_ тянут многопроцессность?
От: rudzuk  
Дата: 08.03.23 19:29
Оценка:
Здравствуйте, Евгений Музыченко, Вы писали:

ЕМ>То есть, исходя из того, что браузероделы старательно выпиливают возможности ограничения количества процессов, они совершенно не в состоянии обеспечить мало-мальски годную изоляцию иначе, как средствами защиты памяти ОС?


А как ее иначе гарантированно обеспечить в условиях нативного кода? Были, конечно, попытки... Вспомним, хотя бы, сингулярити ос и браузер газель от МС, но это уже не про натив.

ЕМ>Даже первые реализации VMM x86, которые появились больше двадцати лет назад, и поддерживали виртуализацию ядерного кода, успешно справлялись с его изоляцией как от хостовой ОС, так и VM друг от друга. С тех пор разработка VM настолько деградировала?


Виртуальные машины используют аппаратные возможности для изоляции. Если браузеры начнут так делать... Это будет уже браузер-ОС. Хотя, не исключено, что все движется именно в этом направлении. Нужно же как-то появившиеся ресурсы утилизировать.
Re[6]: Для чего в браузеры _навязчиво_ тянут многопроцессность?
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 08.03.23 19:34
Оценка:
Здравствуйте, cserg, Вы писали:

C>Так ведь жабаскрипт не сам по себе, он вызывает код из потрохов браузера, а эти потроха на C/C++.


Это эквивалентно заявлению "так ведь макрос на Visual Basic не сам по себе, он вызывает код из потрохов офиса, который, в конечном итоге, вызывает код ядра, а там вообще никакой защиты нет, поэтому безопасность макросов может быть обеспечена только установкой офиса на отдельный компьютер, изолированный от сети".
Re[4]: Для чего в браузеры _навязчиво_ тянут многопроцессность?
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 08.03.23 19:43
Оценка:
Здравствуйте, rudzuk, Вы писали:

R>А как ее иначе гарантированно обеспечить в условиях нативного кода?


Что такое "нативный код" в применении к браузеру, исполняющему код из HTML?

R>Виртуальные машины используют аппаратные возможности для изоляции.


Какие аппаратные возможности они используют для изоляции ядерного кода? Если там перехватывать каждую привилегированную команду, производительность просядет в разы. Поэтому какие-то команды транслируются в локальные вызовы, а какие-то исполняются непосредственно в режиме ядра, под надзором ядерной же компоненты VMM. Какие-то уязвимости в этой схеме бывали, но их ведь как-то закрыли — потому, что подошли ответственно и профессионально. А разработчики браузеров, такое впечатление, стремятся снять с себя вообще всякую ответственность.

R>Это будет уже браузер-ОС.


Не нужно браузер-ОС. Нужно просто технически грамотную реализацию виртуальной машины, что для JS вообще не представляет сложностей. По-хорошему, конечно, ее бы вынести из браузера, оставив ему только интерпретацию HTML/CSS, где вполне достаточно средств визуализации, а всю интерактивщину отдать в веб-приложения, выполняемые в VMM.
Re[7]: Для чего в браузеры _навязчиво_ тянут многопроцессность?
От: cserg  
Дата: 08.03.23 20:06
Оценка: +1
Здравствуйте, Евгений Музыченко, Вы писали:

ЕМ>Это эквивалентно заявлению "так ведь макрос на Visual Basic не сам по себе, он вызывает код из потрохов офиса, который, в конечном итоге, вызывает код ядра, а там вообще никакой защиты нет,

Так ведь макросы на Visual Basic тоже небезопасны. Почти такая же ситуация как с JS.

ЕМ>поэтому безопасность макросов может быть обеспечена только установкой офиса на отдельный компьютер, изолированный от сети".

И этого недостаточно. Всегда найдется кто-нибудь с флешкой.
Re[8]: Для чего в браузеры _навязчиво_ тянут многопроцессность?
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 08.03.23 20:12
Оценка:
Здравствуйте, cserg, Вы писали:

C>Так ведь макросы на Visual Basic тоже небезопасны. Почти такая же ситуация как с JS.


Не такая же. В отношении макросов на VB никогда не возникало даже мысли о том, что в разных окнах офиса будут работать макросы из доверенных и недоверенных источников. Там подход примитивный: не доверяешь — не запускай, и все тут. Коли уж браузер берет на себя задачу исполнения кода из недоверенного источника, ему следует позаботиться об обеспечении безопасности. Иначе можно докатиться до "на кой проверять правильность входных данных — ну грохнется процесс, и всего делов...".
Re[9]: Для чего в браузеры _навязчиво_ тянут многопроцессность?
От: cserg  
Дата: 08.03.23 20:27
Оценка:
Здравствуйте, Евгений Музыченко, Вы писали:

ЕМ>... Коли уж браузер берет на себя задачу исполнения кода из недоверенного источника, ему следует позаботиться об обеспечении безопасности.

Вот разработчики и позаботились посредством разделения по разным процессам. Другие варианты либо менее надежные, либо более сложные и затратные.

ЕМ>Иначе можно докатиться до "на кой проверять правильность входных данных — ну грохнется процесс, и всего делов...".

И пусть лучше грохнется одна вкладка в браузере чем весь браузер.
Re[5]: Для чего в браузеры _навязчиво_ тянут многопроцессность?
От: rudzuk  
Дата: 08.03.23 20:32
Оценка: 5 (1) +3
Здравствуйте, Евгений Музыченко, Вы писали:

ЕМ>Что такое "нативный код" в применении к браузеру, исполняющему код из HTML?


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

R>>Виртуальные машины используют аппаратные возможности для изоляции.


ЕМ>Какие аппаратные возможности они используют для изоляции ядерного кода?


Не заметил, что речь о ядерном коде.

ЕМ>Если там перехватывать каждую привилегированную команду, производительность просядет в разы. Поэтому какие-то команды транслируются в локальные вызовы, а какие-то исполняются непосредственно в режиме ядра, под надзором ядерной же компоненты VMM. Какие-то уязвимости в этой схеме бывали, но их ведь как-то закрыли — потому, что подошли ответственно и профессионально.


Они не бывали, они происходят до сих пор. В 19 и 20 годах были продемонстрированы атаки на VirtualBox и VMware приводящие к побегу из ВМ.

R>>Это будет уже браузер-ОС.


ЕМ>Нужно просто технически грамотную реализацию виртуальной машины, что для JS вообще не представляет сложностей. По-хорошему, конечно, ее бы вынести из браузера, оставив ему только интерпретацию HTML/CSS, где вполне достаточно средств визуализации, а всю интерактивщину отдать в веб-приложения, выполняемые в VMM.


1. Браузер не состоит из одной лишь ВМ для джиэс.
2. Кто может дать гарантию, что во всем коде браузер нет ошибок? Очевидно — никто.
Re[5]: Для чего в браузеры _навязчиво_ тянут многопроцессность?
От: ltc  
Дата: 08.03.23 22:46
Оценка: +1
ЕМ>Подход "отдельный процесс для каждой вкладки" (как и в варианте "для каждого домена") подразумевает заявление разработчиков, типа "мы совершенно не в состоянии обеспечить сколько-нибудь вменяемую защиту вкладок друг от друга, поэтому умываем руки и отдаем всю безопасность на откуп ОС".

ЕМ>Это ж, по сути, уже до неприличия убого. Я еще понимаю, если б код для HTML писался на ассемблере, C/C++, паскале или подобных языках, где практически нет ограничений на доступ в память и выполнение операций. Но, блин, насколько ж нужно все просрать, чтоб не суметь обеспечить изоляцию для жабаскрипта???


А что, собственно, плохого в том, что по назначению используется тот инструментарий, который уже есть в системе? Not invented here? Надо обязательно своё нагородить и потом отлаживать и поддерживать? Я понимаю, если бы там интенсивный IPC был и эффективнее было бы в одном процессе, но так ведь вкладки должны быть полностью изолированы друг от друга идеологически. Накладные расходы на несколько десятков процессов в 2023 году мне кажутся незначительными.
Re[9]: Для чего в браузеры _навязчиво_ тянут многопроцессность?
От: ltc  
Дата: 08.03.23 22:48
Оценка: +2
Здравствуйте, Евгений Музыченко, Вы писали:

C>>Так ведь макросы на Visual Basic тоже небезопасны. Почти такая же ситуация как с JS.


ЕМ>Не такая же. В отношении макросов на VB никогда не возникало даже мысли о том, что в разных окнах офиса будут работать макросы из доверенных и недоверенных источников. Там подход примитивный: не доверяешь — не запускай, и все тут. Коли уж браузер берет на себя задачу исполнения кода из недоверенного источника, ему следует позаботиться об обеспечении безопасности. Иначе можно докатиться до "на кой проверять правильность входных данных — ну грохнется процесс, и всего делов...".


Интенсивность использования макросов никогда не была и не будет даже отдаленно сопоставимой от популярности и дикой разношерстности веба.
Re: Для чего в браузеры _навязчиво_ тянут многопроцессность?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 08.03.23 22:49
Оценка: 5 (1) +1
Здравствуйте, Евгений Музыченко, Вы писали:


ЕМ>Этому есть внятные объяснения? Сколько ни читал — везде что-то мямлят, но неубедительно.


Безопасность. Сейчас уже редко находят, но после появления v8 было найдено много уязвимостей. То есть некоторые скрипты на js приводили к выполнению произвольного кода. Даже если права на системные вызовы ограничены, то произвольный код в браузере может вытащить куки из соседних вкладок, а следовательно получить аутентификацию в интернет-банке например.

Сейчас таких ошибок стало меньше, но нет никаких гарантий что их нет. И собственно гарантировать что их не будет невозможно.
Re: Для чего в браузеры _навязчиво_ тянут многопроцессность?
От: Pauel Беларусь http://blogs.rsdn.org/ikemefula
Дата: 09.03.23 09:17
Оценка:
Здравствуйте, Евгений Музыченко, Вы писали:

ЕМ>Для чего в браузеры _навязчиво_ тянут многопроцессность?


15 лет уже, с разморозкой.
Re[2]: Для чего в браузеры _навязчиво_ тянут многопроцессность?
От: Слава  
Дата: 09.03.23 10:09
Оценка: +1
Здравствуйте, gandjustas, Вы писали:

G>Безопасность. Сейчас уже редко находят, но после появления v8 было найдено много уязвимостей. То есть некоторые скрипты на js приводили к выполнению произвольного кода. Даже если права на системные вызовы ограничены, то произвольный код в браузере может вытащить куки из соседних вкладок, а следовательно получить аутентификацию в интернет-банке например.


Больше всего меня разозлило невозможность запустить Chrome под отдельным пользователем через runas под виндой, когда Chrome только начал свою многопроцессорность. У меня всегда под браузер были отдельные пользователи, для разных задач — разные, банк — отдельно.

Только недавно я нашёл ключ командной строки, который вроде бы позволяет это сделать.
Re[10]: Для чего в браузеры _навязчиво_ тянут многопроцессность?
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 09.03.23 10:43
Оценка:
Здравствуйте, cserg, Вы писали:

C>Вот разработчики и позаботились посредством разделения по разным процессам. Другие варианты либо менее надежные, либо более сложные и затратные.


JavaScript используется почти тридцать лет, а идея изоляции вкладок в процессах стала применяться лишь несколько лет назад. Однако, разработчики браузеров с самого начала уверяли, что их реализации виртуальных машин безопасны. Все это время они беззастенчиво врали? А если так, то какие основания доверять им в том, что изоляцию с помощью выноса в процессы они сделали не криво?

C>И пусть лучше грохнется одна вкладка в браузере чем весь браузер.


При таком импотентском подходе к безопасности не удивлюсь, ежели станет грохаться вся система.
Re[6]: Для чего в браузеры _навязчиво_ тянут многопроцессность?
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 09.03.23 10:57
Оценка:
Здравствуйте, rudzuk, Вы писали:

R>Браузер на чем написан? Кто может дать гарантию, что в этом коде нет ошибок приводящих к приколам, типа переполнения буфера и т.п.?


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

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

R>В 19 и 20 годах были продемонстрированы атаки на VirtualBox и VMware приводящие к побегу из ВМ.


И сколько известно таких успешных атак, на фоне известных успешных атак на браузеры?

R>2. Кто может дать гарантию, что во всем коде браузер нет ошибок?


А кто может мало-мальски убедительно показать, что "изоляция" в отдельных процессах действительно повышает безопасность?
Re[2]: Для чего в браузеры _навязчиво_ тянут многопроцессность?
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 09.03.23 11:01
Оценка:
Здравствуйте, Pauel, Вы писали:

P>15 лет уже


Еще несколько лет назад это явление подавалось главным образом как "ускорение", и легко поддавалось контролю. Теперь это "стало обязательным".
Re[6]: Для чего в браузеры _навязчиво_ тянут многопроцессность?
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 09.03.23 11:45
Оценка:
Здравствуйте, ltc, Вы писали:

ltc>А что, собственно, плохого в том, что по назначению используется тот инструментарий, который уже есть в системе?


Как минимум, то, что в системе он был и тридцать лет назад, но чрезмерно активное внедрение почему-то наблюдается в последние лет пять.
Re[2]: Для чего в браузеры _навязчиво_ тянут многопроцессность?
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 09.03.23 11:46
Оценка:
Здравствуйте, gandjustas, Вы писали:

G>Сейчас таких ошибок стало меньше, но нет никаких гарантий что их нет. И собственно гарантировать что их не будет невозможно.


А гарантировать, что их не будет после "изоляции" вкладок в процессах — можно?
Re[3]: Для чего в браузеры _навязчиво_ тянут многопроцессность?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 09.03.23 12:12
Оценка:
Здравствуйте, Евгений Музыченко, Вы писали:

ЕМ>Здравствуйте, gandjustas, Вы писали:


G>>Сейчас таких ошибок стало меньше, но нет никаких гарантий что их нет. И собственно гарантировать что их не будет невозможно.


ЕМ>А гарантировать, что их не будет после "изоляции" вкладок в процессах — можно?

Нет. Но придумать изоляцию сильнее чем процессами вряд ли получится.
Re: Для чего в браузеры _навязчиво_ тянут многопроцессность?
От: vsb Казахстан  
Дата: 09.03.23 12:45
Оценка:
1. Изоляция. Чтобы баг в одной вкладке не влиял на другие вкладки.

2. Безопасность. Изоляция процессов даёт дополнительные гарантии. А уж после открытия возможности читать не свою память через тайминги — тут вообще не завидую разработчикам браузеров.

Разработчики браузеров взвалили на себя титаническую задачу выполнять произвольный код из интернета и не допускать уязвимостей. Многопроцессность это тут вообще ерунда. Я не удивлюсь, если каждую страницу будут в отдельной виртуальной машине запускать. Старый Edge свой процесс так и запускал — в отдельной виртуальной машине (но не каждую вкладку), насчёт нового не знаю.
Отредактировано 09.03.2023 12:45 vsb . Предыдущая версия .
Re[3]: Для чего в браузеры _навязчиво_ тянут многопроцессность?
От: m2user  
Дата: 09.03.23 12:53
Оценка:
С>Больше всего меня разозлило невозможность запустить Chrome под отдельным пользователем через runas под виндой, когда Chrome только начал свою многопроцессорность. У меня всегда под браузер были отдельные пользователи, для разных задач — разные, банк — отдельно.

С>Только недавно я нашёл ключ командной строки, который вроде бы позволяет это сделать.


А в чем там проблема была?
По идее все дочерние процессы должны под правильной учеткой запуститься..
Re[4]: Для чего в браузеры _навязчиво_ тянут многопроцессность?
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 09.03.23 13:06
Оценка:
Здравствуйте, gandjustas, Вы писали:

G>Но придумать изоляцию сильнее чем процессами вряд ли получится.


Легко — создавать каждый процесс от имени отдельного пользователя. Без этого процессы свободно имеют доступ к памяти друг друга.

Следующий этап — создание каждого процесса в отдельной виртуальной машине. Далее — запуск этих виртуальных машин от имени разных пользователей.
Re[5]: Для чего в браузеры _навязчиво_ тянут многопроцессность?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 09.03.23 13:20
Оценка:
Здравствуйте, Евгений Музыченко, Вы писали:

ЕМ>Здравствуйте, gandjustas, Вы писали:


G>>Но придумать изоляцию сильнее чем процессами вряд ли получится.


ЕМ>Легко — создавать каждый процесс от имени отдельного пользователя. Без этого процессы свободно имеют доступ к памяти друг друга.

В windows можно ограничить права дочернего процесса. В Linux вроде тоже.


ЕМ>Следующий этап — создание каждого процесса в отдельной виртуальной машине. Далее — запуск этих виртуальных машин от имени разных пользователей.

Виртуальные машины пока что слишком дорогие.
Re[2]: Для чего в браузеры _навязчиво_ тянут многопроцессность?
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 09.03.23 13:22
Оценка:
Здравствуйте, vsb, Вы писали:

vsb>А уж после открытия возможности читать не свою память через тайминги


Я еще с того момента, как все встали на уши, пытаюсь найти пример кода, демонстрирующего эту возможность. Пока не преуспел. А Вы?

vsb>Разработчики браузеров взвалили на себя титаническую задачу выполнять произвольный код из интернета и не допускать уязвимостей.


Если б они выполняли произвольный двоичный код, в котором могут встречаться произвольные команды и обращения к произвольным адресам памяти, ее можно было бы считать "титанической". А задача безопасного выполнения кода на JS — вполне себе рутинная, такие языки для того и придуманы, чтобы обеспечение безопасности не являлось непосильной задачей. Но разработчики браузеров, судя по всему, хотят выглядеть героическими борцами со вселенским злом, причем как можно дольше.
Re[4]: Для чего в браузеры _навязчиво_ тянут многопроцессность?
От: Слава  
Дата: 09.03.23 14:27
Оценка:
Здравствуйте, m2user, Вы писали:

M>А в чем там проблема была?

M>По идее все дочерние процессы должны под правильной учеткой запуститься..

Я не смог выяснить, но предполагаю, что runas использует job object, Chrome тоже запускает дочерние процессы внутри джоба, а винда вплоть до какой-то версии не поддерживала вложенные джобы.
Re[7]: Для чего в браузеры _навязчиво_ тянут многопроцессность?
От: rudzuk  
Дата: 09.03.23 14:31
Оценка:
Здравствуйте, Евгений Музыченко, Вы писали:

R>>Браузер на чем написан? Кто может дать гарантию, что в этом коде нет ошибок приводящих к приколам, типа переполнения буфера и т.п.?


ЕМ>Не понял, как это может быть связано с попытками изоляции посредством выноса вкладок в другие процессы. Даже если "страничный" код в дочерних процессах общается с родительским процессом исключительно посредством сообщений, остается масса возможностей эксплуатации подобных уязвимостей. Ну и в дочерние процессы (по крайней мере, в винде) загружены десятки системных DLL, к которым "страничный" код тоже можно получить доступ через исполняющий код браузера, находящийся в этих процессах. Очевидно, усложнение доступа к коду/данным соседних вкладок считается приоритетным над сохранением возможности читать/писать файлы, реестр, отправлять данные по сети и т.п.


Изоляция обеспечивается не просто запуском в отдельном процессе, сами процессы работают с сильно ограниченными правами (т.е. даже будучи взломанным, процесс ничего не сможет сделать с пользовательской системой. в идеале, конечно). Так же браузеры выделяют отдельные подсистемы в изолированне процессы (например, у лиса сеть, плагины, хранилища данных и куки — все отделено).

R>>В 19 и 20 годах были продемонстрированы атаки на VirtualBox и VMware приводящие к побегу из ВМ.


ЕМ>И сколько известно таких успешных атак, на фоне известных успешных атак на браузеры?


Ну ты сравнил... В гипервизоре xen, чуть больше полумиллиона строк кода, тогда, как в лисе их 21 миллион. Разница в 40 раз, однако.

R>>2. Кто может дать гарантию, что во всем коде браузер нет ошибок?


ЕМ>А кто может мало-мальски убедительно показать, что "изоляция" в отдельных процессах действительно повышает безопасность?


Системные механизмы обеспечивающие безопасность.
Re[5]: Для чего в браузеры _навязчиво_ тянут многопроцессность?
От: OlegMax  
Дата: 09.03.23 14:35
Оценка:
Здравствуйте, Евгений Музыченко, Вы писали:

ЕМ> Без этого процессы свободно имеют доступ к памяти друг друга.

Штоа?!
Вообще, огненный тред! Столько некомпетентности и воодушевления одновремнно!
Re[7]: Для чего в браузеры _навязчиво_ тянут многопроцессность?
От: ltc  
Дата: 09.03.23 15:24
Оценка: +1
Здравствуйте, Евгений Музыченко, Вы писали:

ltc>>А что, собственно, плохого в том, что по назначению используется тот инструментарий, который уже есть в системе?


ЕМ>Как минимум, то, что в системе он был и тридцать лет назад, но чрезмерно активное внедрение почему-то наблюдается в последние лет пять.


Странное объяснение. За 30 лет многое поменялось. 30 лет назад безопасность в интернете была совсем не так актуальна как сегодня, а аппаратные ресурсы куда скромнее. Сейчас, когда процессоры выросли "вширь" многоядерностью, а требования по памяти почти любой веб-страницы многократно превышают накладные расходы на отдельный процесс — не вижу причины, почему использование отдельных процессов это плохо.
Re[3]: Для чего в браузеры _навязчиво_ тянут многопроцессность?
От: vsb Казахстан  
Дата: 09.03.23 16:23
Оценка:
Здравствуйте, Евгений Музыченко, Вы писали:

vsb>>А уж после открытия возможности читать не свою память через тайминги


ЕМ>Я еще с того момента, как все встали на уши, пытаюсь найти пример кода, демонстрирующего эту возможность. Пока не преуспел. А Вы?


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

vsb>>Разработчики браузеров взвалили на себя титаническую задачу выполнять произвольный код из интернета и не допускать уязвимостей.


ЕМ>Если б они выполняли произвольный двоичный код, в котором могут встречаться произвольные команды и обращения к произвольным адресам памяти, ее можно было бы считать "титанической". А задача безопасного выполнения кода на JS — вполне себе рутинная, такие языки для того и придуманы, чтобы обеспечение безопасности не являлось непосильной задачей. Но разработчики браузеров, судя по всему, хотят выглядеть героическими борцами со вселенским злом, причем как можно дольше.


Во-первых современный движок JS — штука сложная. Которая генерирует машинный код и тд. Понятно, что при отсутствии багов безопасность будет. Но пробитие "песочницы" случается регулярно. Поэтому баги были, есть и будут. Нужно больше слоёв защиты.

Во-вторых в современном браузере выполняется куча кода на C. В том числе и старого. XSLT-движок, к примеру, есть, какой-то древний. Куча медиа-форматов. Работа с USB, Bluetooth и прочей периферией. В какой-то момент логика всё равно приходит в код на С и совсем не факт, что там все аргументы и их комбинации были проверены и провалидированы на 100%. Баги случаются. Тут тоже дополнительный слой защиты нужен.

Я как-то смотрел описание полного пробития всех систем защиты. Пробивают даже все. Иногда. Но это требует целого сочетания уязвимостей во многих компонентах. Очевидно, что это увеличивает защиту.
Re[6]: Для чего в браузеры _навязчиво_ тянут многопроцессность?
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 09.03.23 16:51
Оценка:
Здравствуйте, gandjustas, Вы писали:

G>В windows можно ограничить права дочернего процесса.


Так, чтоб процесс не мог их вернуть обратно — нельзя. Только если создать процесс от имени другого пользователя.
Re: Для чего в браузеры _навязчиво_ тянут многопроцессность?
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 09.03.23 17:32
Оценка:
Здравствуйте, Евгений Музыченко, Вы писали:

Ну возможно есть надежда на WebAssembly.


[0:03:37.5] BE: Давайте, прежде всего, я начну с того, как JavaScript появился, чтобы начать играть современную роль. JavaScript я делал в спешке, в мае 1995 года в течение 10 дней, в Netscape, и он был частично ориентирован на сходство с Java, из-за внутренней политики компании. В результате, JavaScript, оттого что он загружается из HTML и может быть написан кем угодно, начиная с небольших скриптов и заканчивая большими программами, за последние 22 года занял место побежденной Java на стороне клиента в Интернете.

JavaScript был срочной работой. Конструкции скелетов других языков спешно переделывались мной в франкенштейнового робота. Он родился достаточно быстро не только из-за политики Netscape, но и из-за привязки Microsoft Windows к Internet Explorer и связи его с Netscape; в итоге, это привело судебному иску в США к Microsoft за злоупотребление монополией… Мы знали, что нам нужно торопиться. У нас были кое-какие технологии в Netscape 2 — JavaScript, ориентированный на Java, плюс появились новшества раннего HTML в Netscape. Мы понимали, что если сделаем их среди первых, они станут частью веб-стандартов.

и солнце б утром не вставало, когда бы не было меня
Re[3]: Для чего в браузеры _навязчиво_ тянут многопроцессность?
От: cserg  
Дата: 09.03.23 22:43
Оценка:
Здравствуйте, Евгений Музыченко, Вы писали:

ЕМ>... А задача безопасного выполнения кода на JS — вполне себе рутинная, такие языки для того и придуманы, чтобы обеспечение безопасности не являлось непосильной задачей.

Браузер предоставляет всякие разные API, которые реализованы частично или полностью на C/C++, т.е. у вас нет чистого JS, а есть бутерброд, где например из JS синхронно вызывается код написанный на C/C++, который в свою очередь может сделать обратный вызов JS. И у вас есть не только JS объекты в управляемой куче, но объекты в неуправляемой куче, и ссылающиеся друг на друга. И в обратном вызове JS можно сделать действия, на которые код на C/C++ не рассчитан и получить висящие указатели и далее use-after-free.
Другой пример — итерация по std::vector с использованием итератора. Если из тела цикла есть возможность вызвать JS, то разработчик должен проверить, что у JS нет возможности модифицировать вектор, а если она есть, то например делать локальную копию вектора перед циклом и ездить по ней, чтобы не получить инвалидный итератор.
И тд и тп.

ЕМ>Но разработчики браузеров, судя по всему, хотят выглядеть героическими борцами со вселенским злом, причем как можно дольше.

Переписать миллионы строк кода совсем нелегко. И еще неизвестно какой будет результат такой переделки. На выходе можно получить более надежный браузер, но супер тормозной или жрущий больше ресурсов, такой, что никто им не будет пользоваться.
Re: Для чего в браузеры _навязчиво_ тянут многопроцессность?
От: wildwind Россия  
Дата: 10.03.23 06:26
Оценка:
Здравствуйте, Евгений Музыченко, Вы писали:

ЕМ>Когда-то в Firefox можно было задать ограничение в меню настроек. Потом это выпилили, но оставили возможность ограничить в общем наборе настроек (about:config). Теперь, насколько я понимаю, выпилили и оттуда


Это не должно касаться пользователя, это сугубо внутреннее дело разработчиков.

ЕМ>сейчас оно плодит процессы десятками (в одном из профилей я насчитал 25).


А почему тебя это беспокоит? Хендлов жалко?
Re[5]: Для чего в браузеры _навязчиво_ тянут многопроцессность?
От: wildwind Россия  
Дата: 10.03.23 06:33
Оценка: +1
Здравствуйте, Евгений Музыченко, Вы писали:

ЕМ>Здравствуйте, m2user, Вы писали:


M>>я подразумевал 1 процесс на одну вкладку.


ЕМ>Подход "отдельный процесс для каждой вкладки" (как и в варианте "для каждого домена") подразумевает заявление разработчиков, типа "мы совершенно не в состоянии обеспечить сколько-нибудь вменяемую защиту вкладок друг от друга, поэтому умываем руки и отдаем всю безопасность на откуп ОС".


А ты в состоянии предложить механизм такой защиты в рамках одного процесса? Думаешь, никто не думал об этом?

ЕМ>Это ж, по сути, уже до неприличия убого.


Нет. Использовать механизмы ОС по максимуму это грамотное архитектурное решение. Альтернатива это разрабатывать "ОС внутри ОС" и повторять все эти готовые механизмы своими руками за свои деньги. Без доступа к режиму ядра. А потом постоянно следить, не протекает ли где и постоянно затыкать дыры.
Re: Для чего в браузеры _навязчиво_ тянут многопроцессность?
От: ути-пути Россия  
Дата: 10.03.23 07:42
Оценка:
Здравствуйте, Евгений Музыченко, Вы писали:

ЕМ>Но еще более непонятно, почему это столь навязчиво. Когда-то в Firefox можно было задать ограничение в меню настроек. Потом это выпилили, но оставили возможность ограничить в общем наборе настроек (about:config). Теперь, насколько я понимаю, выпилили и оттуда, и сейчас оно плодит процессы десятками (в одном из профилей я насчитал 25).


Не оно?

dom.ipc.processCount
dom.ipc.processCount.webIsolated
Переубедить Вас, к сожалению, мне не удастся, поэтому сразу перейду к оскорблениям.
Re[5]: Для чего в браузеры _навязчиво_ тянут многопроцессность?
От: rm2  
Дата: 10.03.23 08:02
Оценка:
Здравствуйте, Евгений Музыченко, Вы писали:

ЕМ>Здравствуйте, m2user, Вы писали:


M>>я подразумевал 1 процесс на одну вкладку.


ЕМ>Подход "отдельный процесс для каждой вкладки" (как и в варианте "для каждого домена") подразумевает заявление разработчиков, типа "мы совершенно не в состоянии обеспечить сколько-нибудь вменяемую защиту вкладок друг от друга, поэтому умываем руки и отдаем всю безопасность на откуп ОС".


ЕМ>Это ж, по сути, уже до неприличия убого. Я еще понимаю, если б код для HTML писался на ассемблере, C/C++, паскале или подобных языках, где практически нет ограничений на доступ в память и выполнение операций. Но, блин, насколько ж нужно все просрать, чтоб не суметь обеспечить изоляцию для жабаскрипта???


Всем плевать на твое понимание убогости, если упомянутым образом обеспечивается реализация задачи наименьшими силами для разработчика, и оно никак не травмирует среднего пользователя.
Re: Для чего в браузеры _навязчиво_ тянут многопроцессность?
От: Pavel Dvorkin Россия  
Дата: 11.03.23 04:42
Оценка:
Здравствуйте, Евгений Музыченко, Вы писали:

ЕМ>Этому есть внятные объяснения? Сколько ни читал — везде что-то мямлят, но неубедительно.


А собственно, что тут такого ?

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

Кстати, не только браузеры. Количество процессов svchost в последнее время растет чуть ли не по экспоненте. Да и другие приложения ненамного отстают. У меня запущено 2 копии Skype, при этом процессов с именем Skype аж 12. И 6 процессов с именем Slack. И даже thunderbird, который вообще-то сидит и молчит почти все время своей работы, тоже обзавелся 3 процессами. А еще есть 7 RuntimeBroker, 2 SearchApp и др.

Вот FAR упорно держится и ему 1 процесса хватает.
With best regards
Pavel Dvorkin
Re[2]: Для чего в браузеры _навязчиво_ тянут многопроцессность?
От: wildwind Россия  
Дата: 11.03.23 06:29
Оценка: 6 (1) +1
Здравствуйте, Pavel Dvorkin, Вы писали:

PD>А собственно, что тут такого ?


Предположу, чьл у Евгения, как у Windows разработчика с большим опытом, крепко сидит в голове стереотип: "плодить процессы в Windows дорого, нужно ограничиться потоками". Но времена давно изменились.
Re: Для чего в браузеры _навязчиво_ тянут многопроцессность?
От: sambl74 Россия  
Дата: 13.03.23 15:21
Оценка:
Здравствуйте, Евгений Музыченко, Вы писали:

ЕМ>Теперь, насколько я понимаю, выпилили и оттуда, и сейчас оно плодит процессы десятками (в одном из профилей я насчитал 25).


Там ещё под одному процессу на каждый плагин стартует — чтобы они тоже изолированно работали. Так что на одну страничку может быть дофига процессов.
Re: Для чего в браузеры _навязчиво_ тянут многопроцессность?
От: Эйнсток Файр Мухосранск Странный реагент
Дата: 01.04.23 18:33
Оценка:
ЕМ> оно плодит процессы десятками

Запускай в виртуалке, виртуалке выставляй нужное количество ядер.
Графический вывод можно законнектить на хост.
Re[3]: Для чего в браузеры _навязчиво_ тянут многопроцессность?
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 01.04.23 18:48
Оценка:
Здравствуйте, wildwind, Вы писали:

PD>>А собственно, что тут такого ?


W>Предположу, чьл у Евгения, как у Windows разработчика с большим опытом, крепко сидит в голове стереотип: "плодить процессы в Windows дорого, нужно ограничиться потоками". Но времена давно изменились.


Евгений уже лет 20 не имеет никакого отношения к Far. И что такого изменилось, что плодить процессы в винде стало дёшево?
Маньяк Робокряк колесит по городу
Re[4]: Для чего в браузеры _навязчиво_ тянут многопроцессность?
От: PM  
Дата: 01.04.23 20:38
Оценка:
Здравствуйте, Marty, Вы писали:

PD>>>А собственно, что тут такого ?


W>>Предположу, чьл у Евгения, как у Windows разработчика с большим опытом, крепко сидит в голове стереотип: "плодить процессы в Windows дорого, нужно ограничиться потоками". Но времена давно изменились.


M>Евгений уже лет 20 не имеет никакого отношения к Far. И что такого изменилось, что плодить процессы в винде стало дёшево?


Продолжая оффтоп: коллега Marty, вы очень похожи на чата-бота, который только ему известным набором весовых коэффициентов (или чем там оперирует ChatGPT) смог создать контекст в связке Far -> Eugene Roshal

Мне, как обычному смертному, была очевидна отсылка к Евгению-топикстартеру, и потребовалась пара минут, чтобы вспомнить про Евгения, создателя Far, который уже давно к нему не имеет отношения.
Re[5]: Для чего в браузеры _навязчиво_ тянут многопроцессность?
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 01.04.23 21:02
Оценка:
Здравствуйте, PM, Вы писали:

M>>Евгений уже лет 20 не имеет никакого отношения к Far. И что такого изменилось, что плодить процессы в винде стало дёшево?


PM>Продолжая оффтоп: коллега Marty, вы очень похожи на чата-бота, который только ему известным набором весовых коэффициентов (или чем там оперирует ChatGPT) смог создать контекст в связке Far -> Eugene Roshal


Возможно и похож. Продуктами Евгения Рошаля я пользуюсь больше 20ти лет, а продуктами ТС, Евгения Музыченко, я никогда не пользовался. Я, когда влез в эту тему, даже не выяснял, кто там топик-стартер, так-то
А в подветку я влез после фразы "Вот FAR упорно держится и ему 1 процесса хватает"


PM>Мне, как обычному смертному, была очевидна отсылка к Евгению-топикстартеру, и потребовалась пара минут, чтобы вспомнить про Евгения, создателя Far, который уже давно к нему не имеет отношения.


А мне, как чатботу, была очевидна отсылка к Рошалю через фразу "Вот FAR упорно держится и ему 1 процесса хватает". Я как человек-чатбот, не смог найти никакой связи между Far'ом и Евгением топикстартером, при этом имея старую нейронную связь между Far и Eugene Roshal.
Маньяк Робокряк колесит по городу
Re[6]: Для чего в браузеры _навязчиво_ тянут многопроцессность?
От: PM  
Дата: 01.04.23 21:09
Оценка:
Здравствуйте, Marty, Вы писали:

M>А мне, как чатботу, была очевидна отсылка к Рошалю через фразу "Вот FAR упорно держится и ему 1 процесса хватает". Я как человек-чатбот, не смог найти никакой связи между Far'ом и Евгением топикстартером, при этом имея старую нейронную связь между Far и Eugene Roshal.


По ответу видно что вы человек, или его отличная имитация
Приятно было пообщаться с флудером старой закалки
Re[7]: Для чего в браузеры _навязчиво_ тянут многопроцессность?
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 01.04.23 21:12
Оценка:
Здравствуйте, PM, Вы писали:

M>>А мне, как чатботу, была очевидна отсылка к Рошалю через фразу "Вот FAR упорно держится и ему 1 процесса хватает". Я как человек-чатбот, не смог найти никакой связи между Far'ом и Евгением топикстартером, при этом имея старую нейронную связь между Far и Eugene Roshal.


PM>По ответу видно что вы человек, или его отличная имитация

PM>Приятно было пообщаться с флудером старой закалки


ChatGPT5, отслеживаю контекст на несколько постов выше по ветке в разных чатиках
Маньяк Робокряк колесит по городу