The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

Оценка эффективности применения MiraclePtr для предотвращения уязвимостей в Chrome

23.01.2024 15:50

Компания Google проанализировала эффективность использования в коде на языке С++ типа MiraclePtr (raw_ptr<T>) вместо обычных указателей для защиты от уязвимостей, вызванных обращением к уже освобождённым областям памяти (use-after-free). MiraclePtr предоставляет обвязку над указателями, выполняющую дополнительные проверки и аварийно завершающую работу в случае обнаружения обращения к освобождённым областям памяти. Поддержка MiraclePtr была включена по умолчанию на платформах Windows и Android в мае 2022 года (в Chrome 102), а на платформах ChromeOS, Linux и macOS в июне 2023 года. Защита на базе MiraclePtr в Chrome применяется для всех процессов, кроме процесса, отвечающего за отрисовку (renderer).

После изучения динамики отправки отчётов об уязвимостях и аварийных завершениях работы, а также разбора связанных с безопасностью инцидентов и результатов fuzzing-тестирования, был сделан вывод, что внедрение MiraclePtr предоставило защиту от 57% уязвимостей класса use-after-free, благодаря переводу на использование MiraclePtr полей классов и параметров callback-вызовов. Кроме того, упоминается, что 5 из 6 выявленных за прошлый год критических уязвимостей в стабильной ветке Chrome были идентифицированы благодаря изучению отчётов об аварийных завершениях, связанных с использованием MiraclePtr.

Ценой применения MiraclePtr является повышение потребления памяти, так как для указателей требуется хранить дополнительные 4 байта со счётчиком ссылок. Потребление памяти основным процессом браузера при применении MiraclePtr увеличивается на 5.5-8% в сборках для настольных систем и на 2% в версии для Android. Среднее повышение потребления для всех процессов оценивается в 1-3%. Кроме того, при использовании MiraclePtr зафиксированы отдельные регрессии, приводящие к снижению производительности, но не связанные с ключевыми метриками, такими как время загрузки и отрисовки страницы. Из выявленных регрессий отмечается задержка на 1.5% первого ввода в Chrome OS, замедление на 1.5% открытие вкладок на платформе Android, а также увеличение вероятности задержки ввода из-за конкуренции в основном потоке (увеличение вероятности на 10% в 99-ом процентиле).

  1. Главная ссылка к новости (https://security.googleblog.co...)
  2. OpenNews: Microsoft открыл CHERIoT, аппаратное решение для повышения безопасности кода на языке Си
  3. OpenNews: В кодовой базе Chromium разрешено использование языка Rust
  4. OpenNews: Около 21% нового компилируемого кода в Android 13 написано на языке Rust
  5. OpenNews: 70% проблем с безопасностью в Chromium вызваны ошибками при работе с памятью
Лицензия: CC BY 3.0
Короткая ссылка: https://opennet.ru/60482-miracleptr
Ключевые слова: miracleptr, chrome
При перепечатке указание ссылки на opennet.ru обязательно


Обсуждение (74) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.1, Аноним (-), 16:23, 23/01/2024 [ответить] [﹢﹢﹢] [ · · · ]  
  • +9 +/
    В общем Чуда не произошло.
    Накладные расходы в 5.5-8% потребления памяти и торможение на 1.5% думаю допустимы, но неприятны.
    Особенно учитывая улучшение 'немного лучше 50%' - "защиту от 57% уязвимостей класса use-after-free"

    Может после этого попросят андроид команду поделиться опытом испроьзования Rust.

     
     
  • 2.4, _kp (ok), 16:50, 23/01/2024 [^] [^^] [^^^] [ответить]  
  • –5 +/
    А в Rust безопасный код типа только при компиляции проверяется?
     
     
  • 3.39, Аноним (39), 23:08, 23/01/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Можно было уже прочитать хотя бы википодию.
     
     
  • 4.69, 12yoexpert (ok), 22:59, 24/01/2024 [^] [^^] [^^^] [ответить]  
  • +/
    не читайте во время еды, там есть примеры синтаксиса
     
  • 4.76, Аноним (76), 03:23, 25/01/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Если бы ты сам почитал хотя бы википедию, то знал бы, что во время выполнения программы также выполняются некоторые проверки безопасности. Например, при обращении к срезам (slices) или использовании небезопасных функций и блоков кода, Rust может проверять индексы, границы массивов и другие условия безопасности. Естественно, небесплатно.
     
  • 2.24, Аноним (24), 20:08, 23/01/2024 [^] [^^] [^^^] [ответить]  
  • +2 +/
    > Может после этого попросят андроид команду поделиться опытом испроьзования Rust.

    Так поделились же год назад. Надо свежЕе? Предполагаю не сильно статистика поменялась. Кратко: в андроидовском раст-коде ошибок работы с памятью (это не только use-after-free, но и всякие выходы за границы буфера, двойное освобождение и прочее ) - ровно ноль. Это в 1.5 млн строк кода разных системных компонент, 21% всего нового нативного кода системы. Собираются и дальше выкидывать си/плюсы и внедрять больше раста. Уже даже посматривают и облизываются на раст-подсистему, создаваемую в линукс-ядре. Короче, очень довольны растом:

    https://security.googleblog.com/2022/12/memory-safe-languages-in-android-13.ht

     
     
  • 3.25, Аноним (-), 20:19, 23/01/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Не, рамарка была про "андроид команда своими программерами делиться не захочет, а своих еще переучить нужно или новых набрать".

    С другой стороны, я видел их отчет по поводу "Rust fact vs. fiction: 5 Insights from Google's Rust journey in 2022"
    и там людей с переучивали весьма быстро.

     
  • 3.73, Прадед (?), 02:11, 25/01/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Вообщетики двойное освобождение тоже юз афта фри
     
  • 2.26, Аноним (26), 20:24, 23/01/2024 [^] [^^] [^^^] [ответить]  
  • +2 +/
    57% это даже не стакан на половину пуст, а пуст на 7 % меньше чем на половину
     
     
  • 3.34, Минона (ok), 22:27, 23/01/2024 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Fields Medal этому господину!
     
  • 3.55, n00by (ok), 11:51, 24/01/2024 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > стакан на половину пуст

    Стакан априори пуст (с завода-изготовителя). Если в нём что-то есть, значит, его наполняли. То есть единственно верная оценка: стакан наполовину полон. Кто заявляет обратное, у того проблемы с пониманием проходящего.

     
  • 2.70, 12yoexpert (ok), 23:00, 24/01/2024 [^] [^^] [^^^] [ответить]  
  • +/
    > Может после этого попросят андроид команду поделиться опытом испроьзования Rust.

    думаю, просто перейдут на firefox

     
  • 2.81, Бывалый смузихлёб (?), 10:47, 25/01/2024 [^] [^^] [^^^] [ответить]  
  • +/
    > внедрение MiraclePtr предоставило защиту от 57% уязвимостей класса use-after-free
    > для указателей требуется хранить дополнительные 4 байта со счётчиком ссылок

    Ну вообще-то, очень неплохо. Весьма незначительными изменениями сделали раст наполовину не нужным даже теоретически.
    Такими темпами может оказаться, что на него и даром не надо ничего переписывать, ведь сверхъестественными способностями он не обладает

     

  • 1.2, anonymmm (?), 16:34, 23/01/2024 [ответить] [﹢﹢﹢] [ · · · ]  
  • +8 +/
    The owner of the memory must free it when the time is right, don‘t assume raw_ptr<T> will free it for you (it won’t). Unlike std::unique_ptr<T>, base::scoped_refptr<T>, etc., it does not manage ownership or lifetime of an allocated object.
    if the pointer is the owner of the memory, consider using an alternative smart pointer.


    Так я не понял, а почему они просто std::unique_ptr и прочие smart указатели из стандартной библиотеки не используют.

     
     
  • 2.5, topin89 (ok), 16:53, 23/01/2024 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Как ни странно, даже unique_ptr'ы небесплатные: https://youtu.be/rHIkrotSwcc?t=1054
     
     
  • 3.38, Аноним (38), 23:08, 23/01/2024 [^] [^^] [^^^] [ответить]  
  • +1 +/
    А миракл птр бесплатное?
     
  • 3.57, n00by (ok), 11:55, 24/01/2024 [^] [^^] [^^^] [ответить]  
  • –2 +/
    Это психологический треннинг? Если пример кода (на 19:32) поместить в реальный мир, то foo() будет встроена, с соответствующей оптимизацией.
     
     
  • 4.71, 12yoexpert (ok), 23:07, 24/01/2024 [^] [^^] [^^^] [ответить]  
  • +/
    ну да, нафиг стандарты. аноним гарантирует, что "будет встроена"
     
     
  • 5.78, n00by (ok), 10:10, 25/01/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Аноним пусть делает, что хочет. Я велосипедил std::unique_ptr<> до принятия в стандарт и очень внимательно изучал генерируемые MSVC 7-й версии листинги. Потому для себя выводы сделал ещё тогда, а с тех пор оптимизаторы шагнули вперёд. Пользуясь случаем, передаю привет секте свидетелей экономии углеродного следа за счёт разделяемых библиотек.
     
  • 2.6, 12yoexpert (ok), 16:56, 23/01/2024 [^] [^^] [^^^] [ответить]  
  • +1 +/
    это аналоги обычных std-шных указателей, только с тормозными проверками, принудительным падением и крешдампом
     
  • 2.18, unix greybeard (?), 19:22, 23/01/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Вероятно для этого придется переписывать слишком много кода. А так можно просто заменить обычные указатели на raw_ptr и заиметь Профит.
     
     
  • 3.43, mister_0 (?), 23:52, 23/01/2024 [^] [^^] [^^^] [ответить]  
  • +1 +/
    но если всё переписать на unique, shared и weak ptrs, то double free и use after free станут невозможными, разве это не профит???
     
     
  • 4.50, 12yoexpert (ok), 00:51, 24/01/2024 [^] [^^] [^^^] [ответить]  
  • +2 +/
    разыменовывать нулевые smart pointers законом запретили? кажется, я что-то пропустил
     
     
  • 5.59, anonymmm (?), 12:08, 24/01/2024 [^] [^^] [^^^] [ответить]  
  • +/
    такое разименование легко заменить, процесс грохнется с pagefault, проблема же, что используются адреса, по которым уже освобождён объект и состояние памяти в неизвестном состоянии.
     
     
  • 6.61, n00by (ok), 12:17, 24/01/2024 [^] [^^] [^^^] [ответить]  
  • –1 +/
    > используются адреса, по которым уже освобождён объект

    Очень хочется увидеть пример кода для unique_ptr<>.

     
  • 5.60, n00by (ok), 12:15, 24/01/2024 [^] [^^] [^^^] [ответить]  
  • –1 +/
    > разыменовывать нулевые smart pointers законом запретили?

    20.11.1.2.4  Observers  [unique.ptr.single.observers]

    add_lvalue_reference_t<T> operator*() const;

    1 Preconditions: get() != nullptr.

    2 Returns: *get().


    16.5.4.11  Expects paragraph  [res.on.expects]

    1 Violation of any preconditions specified in a function’s Preconditions: element results in undefined behavior.

    > кажется, я что-то пропустил

    Совершенно точно. Момент, когда программистов заменили на пользователей библиотек и упаковщиков кода.

     
     
  • 6.62, 12yoexpert (ok), 12:32, 24/01/2024 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > 1 Violation of any preconditions specified in a function’s Preconditions: element results in undefined behavior.

    ты такой остряк, в квн не пробовал выступать?

    специально для тебя разжую: что мешает ошибочно или специально разыменовать нулевой автоматический указатель? выше написано "то double free и use after free станут невозможными," - в каком месте use after free станет невозможным?

    с появлением поколения "тред не читал, комментить побежал" мы и заимели electron и rust

     
     
  • 7.66, n00by (ok), 17:23, 24/01/2024 [^] [^^] [^^^] [ответить]  
  • –2 +/
    Тебе ничего не мешает Я могу это запретить - мне это разрешил стандарт 3 30 ... большой текст свёрнут, показать
     
     
  • 8.68, 12yoexpert (ok), 20:38, 24/01/2024 [^] [^^] [^^^] [ответить]  
  • +1 +/
    ясно, ты тугенький на отсутствующий ум даже не знаю, можно ли такому овощу слив... текст свёрнут, показать
     
     
  • 9.79, n00by (ok), 10:25, 25/01/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Прекрасно вижу, что ты принялся подменять _свой_ тезис, оказавшись в неудобном п... текст свёрнут, показать
     
  • 2.80, anonymous (??), 10:41, 25/01/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Им раньше shared/unique ptr использовать религия не позволяла. Им их совсем недавно разрешили использовать (где-то в конце 2010-х).
     

  • 1.3, Аноним (3), 16:38, 23/01/2024 [ответить] [﹢﹢﹢] [ · · · ]  
  • –2 +/
    Эффективность оценили, а приемлемость? Веб приложения и так работают небыстро.
     
     
  • 2.7, Аноним (-), 16:59, 23/01/2024 [^] [^^] [^^^] [ответить]  
  • +/
    "Просто обновите себе комп", как говорил Тодд-купи-скайрим-Говард)
    С учетом развития железа, просто поставят в новый хромбук процессор на 5% мощнее.
    Ну и скажут 'минимум 8/16 гигов оперативки'.
     
     
  • 3.33, Аноним (33), 22:27, 23/01/2024 [^] [^^] [^^^] [ответить]  
  • +/
    > просто поставят в новый хромбук процессор на 5% мощнее

    На 3%, не более: жирный софт должен тормозить.

     
  • 2.11, Аноним (11), 17:43, 23/01/2024 [^] [^^] [^^^] [ответить]  
  • +/
    > Веб приложения и так работают небыстро.

    Можешь конкретные урлы назвать или так, от пацанов во дворе слышал?

     
  • 2.15, Самый Лучший Гусь (?), 19:06, 23/01/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Веб приложения работают достаточно быстро на современном железе. Я имею в виду железо хотя бы не старше 2014 года (Lenovo ThinkPad T440p)
     

  • 1.8, Mr.Who (?), 17:26, 23/01/2024 Скрыто ботом-модератором [﹢﹢﹢] [ · · · ]     [к модератору]
  • +7 +/
     

     ....ответы скрыты (3)

  • 1.13, ox (?), 18:43, 23/01/2024 [ответить] [﹢﹢﹢] [ · · · ]  
  • +2 +/
    > для защиты от уязвимостей, вызванных обращением к уже освобождённым областям памяти

    Может, учебник по С++ почитать?

     
     
  • 2.14, Аноним (9), 19:01, 23/01/2024 [^] [^^] [^^^] [ответить]  
  • +/
    какой посоветуете?
     
     
  • 3.46, 12yoexpert (ok), 00:44, 24/01/2024 [^] [^^] [^^^] [ответить]  
  • +/
    How to program c++, Харви Дейтел, Пол Дейтел (одно из первых изданий, жёлтая обложка), там хорошо объясняются актуальные до сих основы языка и вообще программирования (у меня до сих пор переводы систем счисления от зубов отскакивают), чего нет в новых изданиях

    Deitel P., Deite H. C++20 for Programmers 3ed 2021

    Худшее, что видел - все книги скотта мейерса, бесполезный набор букв, и все книги от o'really - бесполезный мусор (не только по плюсам)

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

     
  • 2.16, Аноним (16), 19:08, 23/01/2024 [^] [^^] [^^^] [ответить]  
  • +1 +/
    И как это поможет от обычных человеческих ошибок? Или ты из тех самых «настояших сишников», которые ошибок никогда не допускают?
     
     
  • 3.17, Аноним (-), 19:22, 23/01/2024 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Ты сначала научись отличать си плюс-плюсника от чистосишника.
     
     
  • 4.47, 12yoexpert (ok), 00:46, 24/01/2024 [^] [^^] [^^^] [ответить]  
  • +2 +/
    уже лет двадцать народ сначала учит плюсы, потом си
     

  • 1.20, Карлос Сношайтилис (ok), 19:25, 23/01/2024 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    Zero-cost абстракции, говорили они
     
     
  • 2.36, Минона (ok), 22:32, 23/01/2024 [^] [^^] [^^^] [ответить]  
  • –2 +/
    Это в расте говорили.
    В плюсах их нет.
     
     
  • 3.48, 12yoexpert (ok), 00:47, 24/01/2024 [^] [^^] [^^^] [ответить]  
  • +2 +/
    это как бы основная фишка плюсов, есличо
     
     
  • 4.64, Минона (ok), 14:11, 24/01/2024 [^] [^^] [^^^] [ответить]  
  • –2 +/
    > это как бы основная фишка плюсов, есличо

    Основная фишка С/С++ - UB.

     
     
  • 5.65, 12yoexpert (ok), 16:04, 24/01/2024 [^] [^^] [^^^] [ответить]  
  • +1 +/
    кто ж вас, детей, так запугал этим UB? из каждого утюга о нём кукарекаете
     
     
  • 6.67, n00by (ok), 17:36, 24/01/2024 [^] [^^] [^^^] [ответить]  
  • –1 +/
    > кто ж вас, детей, так запугал этим UB?

    Вон в #62 эксперт меня пугал.

     
  • 6.77, Аноним (77), 09:47, 25/01/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Пугает время на поиск и отладку проблемы, потраченные нервы пользователей, не говоря уже возможных финансовых и репутационных потерях. Хеловорды конечно можно абыкак и на абычом писать.
     
  • 6.83, Минона (ok), 15:26, 25/01/2024 [^] [^^] [^^^] [ответить]  
  • +/
    > кто ж вас, детей, так запугал этим UB? из каждого утюга о
    > нём кукарекаете

    Сам создатель.

     
  • 3.86, Карлос Сношайтилис (ok), 21:14, 26/01/2024 [^] [^^] [^^^] [ответить]  
  • +/
    В расте сделали, а в плюсах говорили. Не перепутай
     

  • 1.22, Аноним (22), 19:40, 23/01/2024 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    >так как для указателей требуется хранить дополнительные 4 байта со счётчиком ссылок.

    Чем это отличается от std::shared_ptr?

     
     
  • 2.28, Аноним (26), 20:49, 23/01/2024 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Для shared_ptr хранить нужно больше, да ещё по умолчанию и в отдельном чанке памяти, Садись, два
     
     
  • 3.44, mister_0 (?), 23:53, 23/01/2024 [^] [^^] [^^^] [ответить]  
  • +/
    с shared будет 100% багов пофикшено, а так только 57% остальные для performance review на следующий год
     
     
  • 4.63, Аноним (26), 12:48, 24/01/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Передача указателя по указателю может же быть не просто так. Собственно, вопрос чтобы вытянуть на троекчку: какая новая бага может появиться, если все такие сырые указатели заменить на shared_ptr сссылки?
     
     
  • 5.82, anonymous (??), 11:42, 25/01/2024 [^] [^^] [^^^] [ответить]  
  • +/
    О каких таких сырых указателях идет речь? Гугл использует собственную реализацию shared_ptr, вопрос заключался в том, а почему сразу не использовать их вместо собственной реализации неизвестного радиуса кривизны?
     
     
  • 6.85, Аноним (26), 21:16, 25/01/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Гугл может и использует свою реализацию google::shared_ptr, как и многие другие древние компании, т.к. гугл существует много дольше чем с++11 с std::shared_ptr. Однако научить же читать, выше речь не о shared_ptr.
     
  • 3.84, Аноним (-), 18:07, 25/01/2024 Скрыто ботом-модератором     [к модератору]
  • +/
     

  • 1.29, лютый жабби.... (?), 20:51, 23/01/2024 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    хромоног просто ужасен - запускаю его всегда из консоли, за несколько часов "работы" несколько экранов всяких failed, unable итд.... а периодически закрывается с сегфолтом.

    хромиум что дебианий, что арчевский - один фиг. значит не в сборщиках дело, а в косом гугле

     
     
  • 2.30, Аноним (26), 20:57, 23/01/2024 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Ну запусти теперь так ФФ. У него уже, например, несколько десятков последних релизов табы зависают
     

  • 1.32, Печенька (?), 22:13, 23/01/2024 [ответить] [﹢﹢﹢] [ · · · ]  
  • +2 +/
    > Кроме того, при использовании MiraclePtr зафиксированы отдельные регрессии, приводящие к снижению производительности, но не связанные с ключевыми метриками, такими как время загрузки и отрисовки страницы.

    Я может что не понимаю, но какая метрика ключевая для программы, которая загружает и отрисовывает страницы?

     
     
  • 2.35, Аноним (33), 22:29, 23/01/2024 [^] [^^] [^^^] [ответить]  
  • +/
    А отстукивать в гугло-сервисы кто будет?
     

  • 1.37, Минона (ok), 22:36, 23/01/2024 [ответить] [﹢﹢﹢] [ · · · ]  
  • –2 +/
    Гугель, зачем страдать, переписывайте движок на расте!
     
  • 1.42, Аноним (42), 23:42, 23/01/2024 [ответить] [﹢﹢﹢] [ · · · ]  
  • +2 +/
    Так может тогда просто взять Vala?
     
     
  • 2.51, Аноним (51), 05:46, 24/01/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Не даром же говорят «не е… вола».
     
  • 2.74, Прадед (?), 02:19, 25/01/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Слишком изысканно
     

  • 1.52, Аноним (52), 08:55, 24/01/2024 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    30 придумывают разные виды указателей, и угомониться никак не могут, и даже расширили синтаксис метапрограммирования. Вот уж действительно С++ - это Си на костылях. Вместо того, что бы переложить управление памятью на среду выполнения, они непрерывно создают макросы для реализации очередной разновидности указателей, которые "ни такие как те, что были раньше, а намного лучше и безопаснее".
     
     
  • 2.53, tty0 (?), 09:21, 24/01/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Вместо того, чтобы переложить мыслительный процесс на человека, продолжают говнокодить и терять указатели.
    Ошибки и опечатки случаются, но искать их должен компилятор. И не так как в расте.
     

  • 1.72, Tron is Whistling (?), 23:20, 24/01/2024 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Miracl'ов не бывает. Потеря производительности кстати копеечная.
     
  • 1.75, Аноним (76), 03:20, 25/01/2024 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    >While there are performance costs associated with the implementation of MiraclePtr, our analysis suggests that the benefits in terms of security improvements far outweigh these. We are committed to continually refining and expanding the feature to cover more areas.

    Короче гуглятам понравилось, будут пользоватся. Еще бы, половина проблем с памятью решена почти бесплатно, память сейчас дешевая.

     

     Добавить комментарий
    Имя:
    E-Mail:
    Текст:



    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2024 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру