Окно с порносайтом случайно появляется при загрузке игры


Современные браузеры снабжены приватным режимом работы. Переключение в него означает открытие нового окна браузера, которое обладает рядом особенностей. Записанные браузере куки не будут учитываться при сёрфинге, а установленные нигде не останутся. Открытые в приватном окне страницы не попадут в историю. Не будут записываться введённые в формы данные, чтобы они не появились позже в автодополнении набора.

По окончании работы в режиме инкогнито пользователь может закрыть окно, будто ничего и не было. Но это «что-то» было, и есть множество способов выяснить, что. Эван Андерсон обратил внимание на ещё один: видеопамять графического ускорителя не обнуляет данные кадровых буферов.

Приватный режим имеет много сценариев использования: это просмотр порносайтов, необходимость дать другому человеку возможность быстро посмотреть почту или проверка неких технических моментов при веб-разработке. Во многих примерах использования важна приватность данных, то есть никто другой не должен узнать, куда заходил пользователь.

Хотя какие-то проблемы решаются, режим инкогнито не является панацеей. Многое могут знать те, кто обеспечивает доступ к информации: владельцы посещённых сайтов, провайдеры услуг связи. Что-то знают компании интернет-статистики. Совокупность установленных расширений в браузере составляет уникальный слепок, отслеживаемость которого можно проверить инструментом Panopticlick «Фонда электронных рубежей». Что-то остаётся в кэше запросов службы доменных имён.

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

Андерсон посетил порноресурс в Google Chrome. Прошло несколько часов. Затем на том же компьютере была запущена игра Diablo III. Несколько секунд при загрузке главного меню на экране отображалось приватное окно браузера, вернее, его графическая составляющая. Член семьи Эвана даже успел сделать скриншот. Содержимое закрытого часы назад окна идеально сохранилось.


Контент был зацензурен.

Подобная утечка стала возможной благодаря тому, как работают драйверы видеоускорителя Nvidia. После передачи доступа к памяти от одного приложения другому драйвер не очищает память. После закрытия приватного окна фреймбуфер браузера Chrome попал в пул свободной памяти, но его содержимое не было удалено. Когда игра Diablo III запросила свой кадровый буфер, видеокарта дала доступ к тому, что раньше использовался браузером. Игра тоже не почистила содержимое буфера, поэтому на экране появился порносайт.

Другой бы быстро забыл этот казус с демонстрацией порнопристрастий членам семьи. Но Андерсон написал простое приложение, которое сканирует память на ненулевые пиксели. Так удалось идеально воссоздать окно браузера с открытым «Реддитом».



Как указывает Эван, баг удаётся воспроизвести на видеокартах AMD и Nvidia, но не встроенной графике Intel. Андерсон использовал Mac OS X. Подобное не всегда работает. Иногда получается каша с фрагментами окна.



Такая особенность работы драйверов не только допускает возможность подсматривания, но и означает случайные неприятные неожиданности при работе обычных приложений. Есть несколько решений. На стороне драйвера достаточно очищать фреймбуфер так, как операционная система очищает память при передаче доступа от одного приложения к другому. Браузер в свою очередь может обнулять буфер при выходе. В апреле Андерсон направил свои предложения как Nvidia (наверное, стоило бы также известить Apple), так и разработчикам Google Chrome.

На январь 2016 года Nvidia пока не внесла необходимые изменения. Разработчики Google Chrome отказались вносить изменения, странно аргументируя своё решение. Как они заявили, режим инкогнито не гарантирует сокрытие посещённых страниц от других пользователей компьютера.

Код приложения Андерсона для сканирования памяти приложен к баг-репорту в виде архива.

Комментарии (35)


  1. msuhanov
    11.01.2016 17:03
    +7

    1. atomlib
      11.01.2016 17:12

      Отсутствие сброса видеопамяти при перезагрузке всей машины — это тоже интересный вопрос. Эту проблему тоже до сих пор не исправили?


  1. Aingis
    11.01.2016 18:20
    +7

    Как они заявили, режим инкогнито не ставит целью сокрытие посещённых страниц от других пользователей компьютера.
    Интересно и давно это? А то в комиксе про Хром они нарисовали пример с подарком, который могут спалить родные.


    1. atomlib
      11.01.2016 18:27

      Исправил, спасибо.


  1. AllexIn
    11.01.2016 18:30
    +8

    Инкогнито это не аномность в интернете.
    Теперь еще и «не ставит целью сокрытие посещённых страниц от других пользователей компьютера».
    А что это тогда такое и зачем нужно???


    1. Goodkat
      11.01.2016 18:39

      Чтобы потестить веб-приложение под другим юзером.

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


      1. AllexIn
        11.01.2016 18:40
        +3

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


      1. DnV
        11.01.2016 23:16

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


        1. Goodkat
          12.01.2016 00:19
          +1

          Не баг — это когда показывает последнее состояние приложения.

          Я специально указал, что сафари нередко показывает очень старые скриншоты, картинки страниц, которые я не посещал пару недель, или которые уже давно изменились.
          Гугл полон отзывов на эту тему: m.reddit.com/r/ipad/comments/32b4ea/old_screenshots_for_open_apps
          discussions.apple.com/thread/5413121?start=45&tstart=0


      1. batyrmastyr
        13.01.2016 11:36

        Вроде бы только в 9-й появился и в последней бетке поправлен, т.е. где-то полгода багу. Тоже ничего хорошего, конечно.


        1. Goodkat
          13.01.2016 11:42

          У меня он точно был на i6+, а значит на iOS 8. Думаю, появился в iOS 7 ещё.
          На i6s в последнее время не замечаю, может быть пофиксили, а может быть просто 2 ГБ оперативки достаточно, чтобы не выгружать приложения из памяти, а значит и скриншоты не нужны.
          С 2 ГБ оперативки многое стало работать лучше, например, можно писать комментарий на Хабре и не боясь потерять написанное переключаться в другие приложения или даже в другие окна в Safari.


          1. batyrmastyr
            13.01.2016 12:03

            Возможно в iOS 7 и 8 на 5s он достаточно редко вылезал, раз я его только на 9-й замечать начал.
            Что-то вспомнилось, что в настольном Хроме 3,5 — 4 года назад (ещё на вебките) был похожий баг, он тогда доставал из кеша стили и картинки несколько дней как обновлённые, в том числе и в памяти самого браузера. Возможно это он и есть.


    1. atomlib
      11.01.2016 18:46
      +2

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


      1. AlexanderG
        11.01.2016 21:37
        +2

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

        Или слить дамп ОЗУ — там еще больше интересного. Насколько я понимаю, неиспользуемые страницы системой не очищаются, а выборочного рефреша ячеек на чипе уж точно не бывает.


        1. a5b
          12.01.2016 00:22
          +2

          > Насколько я понимаю, неиспользуемые страницы системой не очищаются
          Да, но были патчи, Linux, 2005 —
          www.kernel.org/pub/linux/kernel/people/christoph/prezero/posts/3.0 «Adds management of ZEROED and NOT_ZEROED pages and a background daemon called scrubd.»
          lwn.net/Articles/117881 lwn.net/Articles/122444
          www.linuxjournal.com/article/8181 "… zeroing pages of memory before they are needed, rather than at the time they are requested."
          Негативная реакция Линуса на сходные предложения, 2000 — yarchive.net/comp/linux/page_zeroing_strategy.html «It's not just about polluting the caches. ...It's also about polluting a shared bus… An idle thread should NOT use resources that may be useful for other threads that are doing real work.»
          FreeBSD: www.freebsd.org/doc/en/articles/vm-design/prefault-optimizations.html «To optimize the zeroing operation the VM system has the ability to pre-zero pages and mark them as such, and to request pre-zeroed pages when zero-fill faults occur. The pre-zeroing occurs whenever the CPU is idle»


          1. a5b
            12.01.2016 13:56
            +1

            Ошибся, в Windows есть фоновое обнуление: blogs.msdn.com/b/tims/archive/2010/10/29/pdc10-mysteries-of-windows-memory-management-revealed-part-two.aspx
            «Firstly, the zero page thread runs at the lowest priority and is responsible for zeroing out free pages»
            https://msdn.microsoft.com/en-us/library/windows/desktop/ms685100(v=vs.85).aspx «The zero-page thread is a system thread responsible for zeroing any free pages when there are no other threads that need to run.»


            1. anger32
              12.01.2016 19:13
              +1

              Не совсем. Условие отсутствия более приоритетных потоков ставит крест на гарантиях обеспечения безопасности. На бытовом уровне это не спасет незадачливого любителя порнографии. Кроме того, есть такая штука, как РД АС НСД, которая для ряда видов АС не допускает подобных вольностей.


        1. KivApple
          12.01.2016 09:00

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


        1. RPG
          12.01.2016 19:50
          +1

          Разве непривилегированное приложение может слить дамп ОЗУ на современных ОС? Тут же речь о том, что любой Вася может даже под другим юзером запустить эту программу и увидеть содержимое вкладок браузера другого пользователя или ещё чего интересное. Вот здесь более развёрнуто.


    1. NightGhost
      12.01.2016 01:23

      Собственно я его использую только в двух случаях:
      1) быстро потестить приложение под двумя и более пользователями
      2) дать приходящим в гости людям включать музыку (или любое другое действие) из вк, не разлогиниваясь из своего акка

      Хотя согласен, я думал, что приведенный тезис как раз и является основным предназначением режима.


  1. valis
    11.01.2016 19:01
    +1

    Хм, в таком случае утечка скриншотов из окон режима «инкогнито» не самое интересное применение данного бага.


  1. Houston
    11.01.2016 21:35
    +3

    Подтверждаю, у меня на iMac с видеокартой NVidia абсолютно такое же поведение. При запуске игры «Insurgency» несколько секунд видно содержимое видеобуфера, в том числе последнее открытое окно браузера.


  1. AlexanderG
    11.01.2016 21:40
    +1

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


  1. zim32
    11.01.2016 22:49

    А webgl может прочитать кадровый буфер напрямую?


    1. tbl
      12.01.2016 12:16
      +2

  1. KivApple
    12.01.2016 09:03
    +2

    У меня насчёт разработчиков хрома только один вопрос — «им жалко что ли?». Изменение банальное (скорее всего пара строчек в нужном месте), никаких характеристики браузера не ухудшает (ага, окно инкогнито будет закрываться на микросекунду дольше), а некоторым пользователям (что-то мне подсказывает, что большинство всё же не ожидает такого поведения от режима инкогнито) будет лучше. Объективных причин отказывать нет, только личная упоротость разработчика.


    1. FoxF
      12.01.2016 14:49

      «Отсутствие сброса видеопамяти при перезагрузке всей машины — это тоже интересный вопрос.»
      Если верить этому, то им эту память придется чистить постоянно, так как в случае перебоя с питанием кадры останутся в видеопамяти.


      1. FoxF
        12.01.2016 16:44

        *Если верить этому, то им эту память придется чистить постоянно, и то не спасет, так как в случае перебоя с питанием кадры останутся в видеопамяти.


  1. Valdei
    12.01.2016 13:03
    +1

    Windows + AMD — аналогично воспроизводится. например, при запуске в полноэкранном режиме Guild Wars 2 секунду виден скриншот экрана скольки-то минутной давности.

    У других не замечал, что интересно. Закрашивается чем-то другим? Или в GW2 и других тут упомянутых как-то по-особенному реализован запуск приложения?


  1. il--ya
    13.01.2016 16:33

    У меня языковедческий вопрос. Если задуматься, как бы вы написали множественное число слова «драйвер» — «драйверА» или «дрАйверы»? В статье вы написали «драйвера», мне интересно, это беглое письмо или для вас это норма?


    1. atomlib
      13.01.2016 17:59

      Да, это оговорка. Исправил, спасибо.


      1. il--ya
        13.01.2016 18:16

        Это не замечание было, мне просто интересно. «Директора» вот уже стало словарной нормой, «отпуска» — давно. «Договора» — пока разговорный. ДрайверА вполне укладываются в тенденцию. Устно я иногда говорю драйверА, но на письме нет, и в глаза бросается.


        1. Aclz
          13.01.2016 18:35

          Самое банальное «СерверА»


  1. redmanmale
    19.01.2016 00:40

    Что с файерфоксом?


    1. RPG
      19.01.2016 11:35
      +1

      Всё в порядке, уязвимость присутствует. Вообще баг не относится к какому-то конкретному браузеру — утекают изображения из офиса, просмотрщиков изображений и прочее, прочее.