Хабрахабр

Умеренный Hardening для Firefox

Современные браузеры давно стали самыми сложными приложениями на компе, обогнав по сложности даже ядро ОС (в Firefox в несколько раз больше строк кода, чем в ядре Linux или офисных пакетах). Современный веб состоит из множества разных технологий, которые предоставляют самые разные возможности… но ещё и создают немалое количество угроз. Мы проводим в браузере большую часть своего времени, так что не удивительно, что браузер находится под прицелом: его постоянно пытаются взломать, использовать в ботнете, пытаются украсть из него наши данные, прослушать его трафик, отслеживать посещаемые нами сайты и наши действия на этих сайтах.

Из коробки браузеры уже делают немало: регулярно обновляются, стараются затыкать дыры в безопасности, внедряют новые технологии для защиты, предоставляют возможность расширять их функционал сторонними расширениями. Сейчас самое время сказать, что всё не так уж плохо, и со всеми этими проблемами можно справиться… но это не так. Но самое печальное, что даже такой ценой невозможно полноценно защитить браузер — слишком уж он стал сложным. Но серьёзной защиты из коробки нет, и вряд ли она когда-нибудь появится: она идёт в комплекте с усложнением интерфейса браузера и частичным отключением его функционала, что "ломает" сайты и вряд ли понравится обычным пользователям.

Есть пара хороших (англоязычных) проектов, которые предлагают комплексные подходы к дополнительной защите Firefox: статья Firefox Configuration Guide for Privacy Freaks and Performance Buffs (или её вариант для обычных пользователей The Firefox Privacy Guide For Dummies!) от 12bytes.org и ghacks-user.js от Thorin-Oakenpants, earthlng и claustromaniac. Тем не менее, для усиления защиты браузера можно много чего сделать. На мой взгляд, стоит ограничиться умеренной защитой Firefox, чтобы соблюсти баланс между усилением защиты, сохранением работоспособности нужных нам сайтов, и затрачиваемыми на всё это усилиями. Они делают упор на максимальную защиту, но пользоваться таким браузером для обычных ежедневных задач становится крайне проблематично и неудобно.

Содержание:
Модель угроз
    Безопасность (Security)
    Конфиденциальность (Privacy)
    Отпечатки (Fingerprinting)
    Отслеживание (Tracking)
    Анонимность (Anonymity)
Доступные способы усиления защиты
Расширения
    CanvasBlocker
    CSS Exfil Protection
    Decentraleyes
    ETag Stoppa
    Header Editor
    HTTPS Everywhere
    Neat URL
    uBlock Origin
    uMatrix
ghacks user.js
Мне мало умеренного Hardening, хочу всё по-максимуму!
Сайт не работает — кто виноват, где чинить?
Забавные факты

Модель угроз

Для начала, давайте проанализируем модель угроз, что именно мы защищаем и от чего.

Безопасность (Security)

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

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

Конфиденциальность (Privacy)

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

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

Отпечатки (Fingerprinting)

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

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

Неполный список того, что о вашей системе могут узнать веб-сайты:

  • На сервере:
    • Детали сетевого подключения (IP, MTU).
    • SSL Session ID. Обычно изменяется раз в сутки. А это значит, что, например, если вы сегодня уже заходили на https://gmail.com под одним аккаунтом, а потом почистили куки etc. и сменили VPN чтобы зайти на https://gmail.com с другого IP — гугл всё-равно сможет определить, что оба посещения сделали из одного браузера.
    • Всё, что разглашают HTTP-заголовки: версию браузера, ОС, язык.
  • Через CSS:
    • Размеры окна браузера. Причём это одна из самых уникальных характеристик браузера.
    • DPI/масштаб.
    • Установленные шрифты. Через CSS можно проверить наличие только заранее известных шрифтов (JS позволяет получить все шрифты), но и этого более чем достаточно — в конце концов, список всех существующих шрифтов конечен и общеизвестен.
    • OS (по типичным для неё шрифтам).
  • Через JS:
    • Железо:
      • Количество параллельных процессов браузера (concurrency).
      • Производитель и модель видеокарты (через WebGL).
    • Браузер:
      • Название и версия.
      • ОС.
      • Локаль.
      • Язык.
      • Таймзона.
      • Настройки прав доступа (доступ к местоположению, микрофону, etc.) — какие разрешены, какие запрещены, какие спросят пользователя (что тоже формирует довольно уникальный набор в соответствии с настройками пользователя).
      • Используется ли режим приватного просмотра.
    • Экран:
      • Размеры (разрешение) экрана, доступное, внешнего окна, внутреннего окна, viewport.
      • Включен ли полноэкранный режим.
      • Ориентация экрана.
      • Глубина цвета.
      • DPI.
      • Используется ли HiDPI.
      • Текущий масштаб (zoom) страницы.
      • devicePixelRatio.
    • Хранилища данных (способы запомнить идентификатор пользователя):
      • Куки.
      • localStorage.
      • sessionStorage.
      • indexedDB.
      • appCache.
      • Web Worker.
      • Shared Worker.
      • Service Worker.
      • Кэш Service Worker.
      • Уведомления (notifications).
      • Обычный кэш (включая фокусы с ETag, etc.).
    • Fonts (ещё один из самых уникальных факторов).
    • Canvas (можно получить уникальный отпечаток чтением результата отрисовки браузером).
    • DOMRect.
    • Intersection Observer API.
    • WebGL (помимо прочего можно узнать название видеокарты).
    • Audio API.
    • Список разрешённых алгоритмов шифрования и версий TLS.

После взгляда на этот список требуемое законом от веб-сайтов уведомление пользователей об использовании кук выглядит форменным издевательством.

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

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

Отслеживание (Tracking)

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

Казалось бы, использование расширений для блокирования трекеров и рекламы должно решить эту проблему… но, увы, это не так. Обычно отслеживание осуществляется через подключение ресурсов (JS/CSS/image) одного и того же стороннего сайта на множестве других сайтов. Да, это помогает, но суровая правда в том, что сайты торгуют этими данными, так что даже если вы посетили два сайта на которых заблокированы все сторонние ресурсы, то эти сайты всё-равно могут продать данные о ваших посещениях одной и той же рекламной сети, что позволит ей связать эти посещения между собой (учитывая вышеупомянутые возможности получения уникального отпечатка пользователя — это не составит проблемы).

Тем не менее, блокировать сторонние ресурсы всё-равно стоит — это ускоряет загрузку сайтов, избавляет от рекламы, затрудняет и удорожает отслеживание, а так же сокращает источники атак на браузер.

Анонимность (Anonymity)

Не должно быть возможности связать просмотр веб-сайта с реальной личностью пользователя, если он не регистрировался на этом сайте под своим настоящим именем и не заходил на него с IP-адреса, зарегистрированного на него провайдером.

Учитывая возможности получения отпечатков и отслеживания — анонимность пользователя, который хоть одному из посещённых сайтов позволил узнать его реальную личность, превращается в фикцию.

Вкратце, имейте в виду: никакой анонимности при использовании вашего основного браузера нет, и никогда не будет. Усиление анонимности выходит за рамки нашей задачи. Нужна анонимность — смотрите в сторону специализированных виртуалок (с настройками по умолчанию и без сохранения результатов на диске после выключения виртуалки), VPN+Tor и Tor-браузера вместо обычного Firefox.

Доступные способы усиления защиты

В порядке возрастания сложности использования: Итак, что же мы можем предпринять?

  • Можно использовать встроенные возможности браузера по контролю и изоляции веб-сайтов на индивидуальной основе:
    • Контейнеры.
    • Приватное окно.
    • Управление правами доступа для веб-сайтов.
    • Блокирование сторонних кук и известных трекеров.
    • Удаление сохранённых веб-сайтами данных/кэша.
  • Можно установить разнообразные расширения.
  • Можно поковыряться среди нескольких тысяч доступных настроек браузера в about:config и изменить некоторые из них.

Это относительно новая фича Firefox, которая позволяет изолировать группу сайтов в одном контейнере от группы сайтов в другом. С первым пунктом всё тривиально, но хотелось бы особо отметить контейнеры. Изоляция контейнеров всё-таки немного слабее, чем при использовании разных браузеров, но она достаточно хороша и контейнерами вполне можно пользоваться. По сути, использование разных контейнеров в одном браузере должно работать так же, как одновременное использование нескольких разных браузеров — но сделать это более удобным для пользователя. Тем не менее, контейнеры сами по себе не усиливают защиту ни одного из пунктов, рассмотренных в нашей модели угроз — максимум, они незначительно препятствуют получению отпечатка пользователя за счёт изоляции хранилищ данных (куки, кэш, etc.).

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

Слишком уж много этих настроек, слишком мало информации о том, что может сломаться при изменении каждой настройки, слишком не очевидный эффект у большинства из них, плюс каждая новая версия Firefox приносит с собой кучу новых настроек и удаляет часть старых. Что касается изменения настроек about:config — это самый сложный способ усиления защиты.

Расширения

Есть множество причин, почему его стоит отключить (но обновлять их всё-равно необходимо, просто вручную и внимательно отслеживая изменения, в т.ч. Подумайте, стоит ли использовать автоматическое обновление расширений (его можно выключить на about:addons). политики приватности):

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

К сожалению, в данный момент архитектура Firefox такова, что модифицировать CSP при загрузке веб-сайта сможет только одно из расширений — и вы не можете заранее быть уверены, которое из них. Некоторые расширения используют CSP для реализации отдельных фич. Поскольку очень критично гарантировать корректную работу uMatrix, то необходимо внимательно проконтролировать настройки других расширений, чтобы убедиться что в них отключены все фичи, которые используют CSP:

  • uBlock Origin: Выключить Панель управления → Настройки → Поведение по умолчанию → [ ] Блокировать сторонние шрифты (точно не уверен, но логично предположить что для индивидуальных сайтов это тоже лучше не включать).
  • HTTPS Everywhere: Выключить Иконка → [ ] Шифровать все подходящие сайты (EASE).
  • CanvasBlocker: Выключить Настройки → Прочие → [ ] Block data URL pages (чтобы этот пункт увидеть необходимо включить Настройки → [✓] Экспертный режим).

Если вы решите не ограничиваться установкой расширений, и поставите описанный ниже user.js, то учтите дополнительные нюансы:

  • Рекомендуемый вариант настроек user.js требует использования расширения uMatrix.
  • Некоторые настройки в user-overrides.js нужны для того, чтобы не сломать работу некоторых расширений — подкорректируйте их в соответствии с тем, какие расширения установлены у вас.

CanvasBlocker

CSS Exfil Protection

  • Ссылка: https://addons.mozilla.org/ru/firefox/addon/css-exfil-protection/
  • Защищает: Конфиденциальность.
  • Описание: Блокирует атаки типа CSS data exfiltration (кража данных со страницы через использование специфических CSS-селекторов).
  • Использование: Работает автоматически, внимания не требует.
  • Иконка: Можно скрыть в расширенное меню.
  • Настройка: Не требуется.

Decentraleyes

  • Ссылка: https://addons.mozilla.org/ru/firefox/addon/decentraleyes/
  • Защищает: Отслеживание.
  • Описание: Защищает от отслеживания «бесплатными» CDN. Содержит популярные файлы, которые обычно запрашиваются через CDN, и отдаёт их браузеру без выполнения реального сетевого запроса на CDN. Побочный эффект — немного ускоряет загрузку сайтов.
  • Использование: Работает автоматически, внимания не требует.
  • Иконка: Можно скрыть в расширенное меню.
  • Настройка: Не требуется.

К сожалению, у меня он подвешивает интерфейс Firefox пока в фоне грузятся некоторые сайты, так что пришлось его пока выключить.

ETag Stoppa

  • Ссылка: https://addons.mozilla.org/ru/firefox/addon/etag-stoppa/
  • Защищает: Отпечатки.
  • Описание: Удаляет заголовок ETag: из ответа сервера.
  • Использование: Работает автоматически, внимания не требует.
  • Иконка: Отсутствует.
  • Настройка: Не требуется.

Вместо использования этого расширения можно добавить правило в Header Editor (имеет смысл если он используется и для других правил):

  • Ссылка: https://addons.mozilla.org/ru/firefox/addon/header-editor/
  • Защищает: Зависит от того, как им пользоваться.
  • Описание: Позволяет задать собственные правила для блокирования или перенаправления запросов, а так же изменения заголовков запроса или ответа.
  • Использование: Работает автоматически, внимания не требует.
  • Иконка: Можно скрыть в расширенное меню.
  • Настройка: Сам по себе он не делает вообще ничего — вы должны сами определить для него правила.

Но если других правил нет, то проще использовать ETag Stoppa вместо этого расширения. Один из примеров правил упомянут выше, в описании ETag Stoppa.

Может это просто баг, но мне не нравится, что он сообщает всем сайтам, что я использую это расширение. Другой пример: я обнаружил, что расширение ImTranslator зачем-то отправляет на все сайты две куки: BL_D_PROV=undefined; BL_T_PROV=undefined. Проблема решается вот таким правилом:

HTTPS Everywhere

  • Ссылка: https://addons.mozilla.org/ru/firefox/addon/https-everywhere/
  • Защищает: Конфиденциальность.
  • Описание: Автоматически переключает на https там, где возможно.
  • Использование: Работает автоматически, внимания почти не требует (последний раз у меня ломался какой-то сайт из-за этого расширения года полтора назад).
  • Иконка: Используется для индивидуальной настройки сайтов.
  • Настройка: Не требуется.

Neat URL

  • Ссылка: https://addons.mozilla.org/ru/firefox/addon/neat-url/
  • Защищает: Отслеживание.
  • Описание: Удаляет мусорные параметры из URL.
  • Использование: Работает автоматически, внимания не требует.
  • Иконка: Можно скрыть в расширенное меню.
  • Настройка: Не требуется.

uBlock Origin

  • Ссылка: https://addons.mozilla.org/ru/firefox/addon/ublock-origin/
  • Защищает: Безопасность, Отпечатки, Отслеживание.
  • Описание: Автоматический блокировщик (на базе сторонних списков) всякого мусора по типу и/или url, а так же отдельных элементов страницы: от рекламы и уведомлений об использовании сайтом кук до трекеров и малвари.
  • Использование: Изредка необходимо настраивать новый сайт.
  • Иконка: Необходима для настройки текущего сайта, включая ручную блокировку отдельных элементов страницы.
  • Настройка: (списки фильтров — вопрос личных предпочтений)

    Настройки [✓] Я опытный пользователь
    Настройки → Приватность [✓] Предотвратить утечку локального IP-адреса через WebRTC [✓] Блокировать CSP-отчёты
    Списки фильтров → Встроенные [✓] uBlock filters – Annoyances
    Списки фильтров → Реклама [✓] Adblock Warning Removal List
    Списки фильтров → Приватность [✓] Fanboy’s Enhanced Tracking List
    Списки фильтров → Вредоносные домены [✓] Malvertising filter list by Disconnect [✓] Spam404
    Списки фильтров → Раздражающие элементы [✓] AdGuard Annoyances filter [✓] Fanboy's Cookie List [✓] Fanboy’s Annoyance List
    Списки фильтров → Многоцелевые [✓] Dan Pollock’s hosts file [✓] hpHosts’ Ad and tracking servers
    Списки фильтров → Регионы, языки [✓] RUS: RU AdList

uMatrix

  • Ссылка: https://addons.mozilla.org/ru/firefox/addon/umatrix/
  • Защищает: Безопасность, Отпечатки, Отслеживание.
  • Описание: Ручной блокировщик отдельных ресурсов по типу и домену.
  • Использование: Регулярно необходимо настраивать новый сайт.
  • Иконка: Необходима для настройки текущего сайта.
  • Настройка:

    Настройки → Удобство [✓] Скрывать заполнитель заблокированных элементов
    Настройки → Приватность [✓] Удалять незаблокированные сессионные куки через [1440] минут после последнего использования [✓] Удалять содержимое локального хранилища заблокированных сайтов [✓] Очищать кэш браузера каждые [1440] минут # Стоит отключить referer если uMatrix используется совместно с user.js: [ ] Подменять строку HTTP referrer в запросах к сторонним источникам [✓] Только HTTPS: запретить смешанное содержимое
    # Отредактируйте "Временные правила", а потом нажмите "Сохранить" и "Утвердить":
    Настройки → Мои правила * * script block

Например, только что добавленное правило "* * script block" отключило выполнение JS на всех сайтах — что, разумеется, многие из них сломало. Это расширение обеспечивает самую серьёзную защиту, но у этого есть цена: многие сайты будут сломаны, и их потребуется чинить вручную. загрузка многих типов ресурсов включая JS со сторонних сайтов всё-равно отключена (что так же ломает многие сайты); а во-вторых подход "белый список: запрещено всё, что не было явно разрешено" в современном вебе единственно приемлемый, раз уж вы хотите усилить защиту Firefox. Но не торопитесь удалять это правило: во-первых, это не сильно поможет, т.к.

Главное, не забывать в той же матрице сохранять изменения, после того, как вы почините сайт. Хорошая новость в том, что чинить сайты не сложно — обычно достаточно двух-трёх кликов в матрице, которую показывает иконка расширения, и последующего перечитывания текущей страницы.

Потерпите первые дни, потом станет намного легче, честно! И готовьтесь морально, что первое время придётся чинить почти каждый сайт из тех, которые вы часто посещаете — это связано с тем, что на активно используемых сайтах вам, почти наверняка, понадобится как минимум включить JS самого сайта, плюс, возможно, некоторые ресурсы со сторонних сайтов. 🙂

Иными словами, интуитивно понятным его назвать нельзя. Надо отметить, что интерфейс uMatrix очень ясный и удобный — после того, как вы с ним разберётесь. Как минимум — раздел uMatrix basic usage (с картинками) из вышеупомянутой статьи Firefox Configuration Guide for Privacy Freaks and Performance Buffs. Поэтому крайне желательно почитать документацию! А вообще я очень рекомендую почитать wiki uMatrix — там много всего, но информация очень нужная и полезная.

Если вы установили uMatrix достаточно давно, то сначала нужно удалить правило "matrix-off: localhost true" (новые версии uMatrix его не устанавливают). Есть ещё один дополнительный набор правил, которые может иметь смысл добавить в Настройки → Мои правила — он поможет заблокировать доступ сайтам из интернета к ресурсам в локальной сети (это не защита от атаки DNS rebinding).

Добавьте вот эти правила:

* localhost * block
* 127 * block
* 10 * block
* 192.168 * block
* 169.254 * block
* 172.16 * block
* 172.17 * block
* 172.18 * block
* 172.19 * block
* 172.20 * block
* 172.21 * block
* 172.22 * block
* 172.23 * block
* 172.24 * block
* 172.25 * block
* 172.26 * block
* 172.27 * block
* 172.28 * block
* 172.29 * block
* 172.30 * block
* 172.31 * block
* [::1] * block
* [fc00::] * block
* [fd00::] * block
* [fe80::] * block
* [fe80::1%lo0] * block
* [ff02::1] * block
* [ff02::2] * block
localhost localhost * allow
127 127 * allow
10 10 * allow
192.168 192.168 * allow
169.254 169.254 * allow
172.16 172.16 * allow
172.17 172.17 * allow
172.18 172.18 * allow
172.19 172.19 * allow
172.20 172.20 * allow
172.21 172.21 * allow
172.22 172.22 * allow
172.23 172.23 * allow
172.24 172.24 * allow
172.25 172.25 * allow
172.26 172.26 * allow
172.27 172.27 * allow
172.28 172.28 * allow
172.29 172.29 * allow
172.30 172.30 * allow
172.31 172.31 * allow
[::1] [::1] * allow
[fc00::] [fc00::] * allow
[fd00::] [fd00::] * allow
[fe80::] [fe80::] * allow
[fe80::1%lo0] [fe80::1%lo0] * allow
[ff02::1] [ff02::1] * allow
[ff02::2] [ff02::2] * allow

ghacks user.js

С расширениями было всё просто (да, и даже с uMatrix — он хоть и усложняет использование браузера, но и основную защиту даёт тоже он), а сейчас мы добрались до сложной части.

Данный файл содержит (на данный момент) изменение 488 настроек в about:config! Проект ghacks user.js предоставляет нам базовый файл user.js, плюс скрипты для его обновления и сброса удалённых настроек. И его считают базовым не без причины: использование его as is, без внесения нужных вам изменений — практически гарантированно приведёт к катастрофе (например, его настройки по умолчанию регулярно удаляют всю историю браузера, блокируют русификацию Firefox, ломают множество сайтов и расширений).

И при этом всё-равно заметно проигрывает в защите Tor-браузеру в виртуалке. Этот проект предпринимает очень серьёзные усилия для защиты Отпечатков и Отслеживания… настолько серьёзные, что пользоваться браузером становится до такой степени неудобно, что честнее сказать "невозможно". Это никоим образом не означает, что проект бесполезен для пользователей — просто, чтобы им пользоваться, необходимо потратить немало времени на создание собственного user-overrides.js.

По этой причине перед его использованием необходимо:

  • Внимательно прочитать сам user.js (порядка 2300 строк).
  • Внимательно прочитать все страницы wiki проекта.
  • Создать собственный файл user-overrides.js со всеми изменениями относительно user.js, которые нужны лично вам.
  • Сделать бэкап своего профайла Firefox!!!
  • И только потом активировать user.js.

Стоит ли оно того? Это требует времени, и немало. Сложный вопрос.

Чтобы на него ответить я составил (неполный) список того, что он улучшает помимо Отпечатков и Отслеживания — посмотрите, и сами решайте:

  • Безопасность:
    • Отключает cross-origin HTTP Auth (фишинг учётных записей).
    • Усиливает защиту при использовании запомненных паролей.
    • Усиливает защиту при использовании TLS и сертификатов.
    • Ограничивает поддержку шрифтов (высокая вероятность уязвимостей).
    • Отключает DRM-плагины.
    • Отключает WebGL (высокая вероятность уязвимостей).
    • Ограничивает фичи WebGL если его включить (высокая вероятность уязвимостей).
    • Отключает всяческие варианты workers (майнеры, Meltdown/Spectre).
    • Отключает asm.js (высокая вероятность уязвимостей).
    • Отключает WebAssembly.
    • Отключает Shared Memory (Spectre).
    • Добавляет rel=noopener для ссылок с target=_blank (безопасность).
    • Усиливает защиту при взаимодействии со сторонними локальными приложениями.
    • Отключает MathML (уменьшение поверхности атаки).
    • Форсирует Punycode для IDN (анти-спуфинг).
    • Активирует экспериментальную поддержку CSP 1.1.
    • Включает first party isolation.
  • Утечки, управляемость:
    • Отключает телеметрию Firefox и завязанные на неё фичи (рекомендации, etc.).
    • Отключает сторонние сервисы вроде Pocket.
    • Блокирует выкачивание ссылок, на которых не нажимали (ping, pre-fetch, etc.).
    • Отключает сетевые фичи, через которые можно обойти прокси/VPN и узнать IP (включая IPv6 и WebRTC).
    • Ограничивает утечку истории предыдущих страниц в текущей вкладке.
    • Отключает :visited (утечка истории).
    • Блокирует утечку в процессе набора в строке адреса/поиска текста через подсказки поисковика.
    • Отключает screen sharing.
    • Запрещает доступ к clipboard.
    • Отключает Intersection Observer API (стабильность, определение блокировщика рекламы).

Мне он категорически не подошёл, потому что мне нужна умеренная защита, при которой сохраняется удобство использования браузера, пусть даже ценой ослабления защиты от Отпечатков и Отслеживания. Чтобы упростить подготовку своего user-overrides.js автор вышеупомянутых статей на 12bytes.org выложил собственный user-overrides.js.

Я так же выложил свой user-overrides.js, возможно он упростит вам использование ghacks user.js.

Итак, чтобы начать использовать ghacks user.js нужно сделать следующее:

  • ОБЯЗАТЕЛЬНО! Сделайте бэкап своего текущего профайла Firefox.
  • Скачайте в каталог своего текущего профайла следующие файлы из проекта ghacks user.js:
    • user.js
    • updater.sh (и сделайте его выполнимым) или updater.bat
    • prefsCleaner.sh (и сделайте его выполнимым) или prefsCleaner.bat
  • Создайте в каталоге своего текущего профайла файл user-overrides.js.
    • Можете просто скачать мой user-overrides.js, после чего вписать в него своё текущее значение dom.push.userAgentID и внести нужные вам изменения.
  • Запустите ./updater.sh или updater.bat. Он обновит user.js и допишет ему в конец содержимое user-overrides.js.
  • Выйдите из Firefox и запустите ./prefsCleaner.sh или prefsCleaner.bat. Он удалит из файла prefs.js (содержащего ваши текущие настройки about:config) все настройки, которые упоминаются в user.js (включая закомментированные).
  • Запустите Firefox. Нажмите Ctrl-Shift-Del и удалите (за всё время):
    • Куки.
    • Кэш.
    • Данные автономных веб-сайтов.
  • Загляните в about:config, параметр _user.js.parrot должен иметь значение "SUCCESS" — иначе где-то в вашем user.js синтаксическая ошибка.

Так что если вы измените какие-то из них через about:config, и захотите сохранить эти изменения при перезапуске Firefox, то их необходимо продублировать в user-overrides.js, после чего запустить ./updater.sh или updater.bat. Имейте в виду, что все настройки, указанные в user.js, будут применяться при каждом запуске Firefox.

Более детально процесс обновления описан в wiki проекта. Не забывайте периодически запускать ./updater.sh или updater.bat для обновления user.js (хотя бы после выхода новой версии Firefox).

Мне мало умеренного Hardening, хочу всё по-максимуму!

Ну, в этом случае вот, что стоит делать дальше:

  • Отменить ослабляющие защиту изменения в user-overrides.js.
    • Вместо отмены блокировки Workers заблокировать их глобально в uMatrix.
  • Скрыть IP через Tor и/или публичный VPN сервис.
  • Поставить расширение Privacy-Oriented Origin Policy.
  • Поставить расширение Skip Redirect.
  • Поставить расширение Temporary Containers.
  • Почитать Firefox Search Engine Cautions, Recommendations и подчистить настройки поисковых систем в Firefox.
  • Удалить встроенные расширения из /usr/lib/firefox/browser/features/.
  • Включить глобальную подмену Referer для сторонних сайтов в uMatrix.

Сайт не работает — кто виноват, где чинить?

Пометка "(Перекрыто)" означает, что данное изменение есть в оригинальном user.js, но оно отключено моим user-overrides.js. Я составил список изменений, которые могут нарушить работу сайта, чтобы можно было быстрее найти виноватого.

  • Расширение: CanvasBlocker
    • Может подделывать чтение Canvas 2D.
    • Может подделывать чтение WebGL.
    • Может подделывать чтение Audio API.
    • Может подделывать чтение history.length.
    • Может защищать window.name и window.opener.
    • Может подделывать чтение DOMRect API.
    • Может блокировать data://.
  • Расширение: CSS Exfil Protection
    • Чистит/блокирует опасные правила CSS.
  • Расширение: ETag Stoppa
    • Удаляет из ответа сервера заголовок ETag:.
  • Расширение: Firefox Multi-Account Containers
    • Изолирует вкладки (куки, localStorage, etc.) относящиеся к разным контейнерам.
  • Расширение: HTTPS Everywhere
    • Подменяет http:// запросы на https:// на известных ему сайтах.
  • Расширение: Neat URL
    • Удаляет из url необязательные параметры.
  • Расширение: uBlock Origin
    • Удаляет со страниц отдельные элементы DOM.
    • Блокирует загрузку отдельных ресурсов по типу и/или url.
    • Может блокировать все popup на сайте.
    • Может блокировать нестандартные шрифты на сайте.
    • Может блокировать pre-fetching.
    • Может блокировать <a ping> и sendBeacon.
    • Может блокировать отчёты CSP.
  • Расширение: uMatrix
    • Блокирует загрузку отдельных ресурсов по типу и домену.
    • Может блокировать mixed content по домену.
    • Может блокировать workers по домену.
    • Может подменять Referer: по домену.
    • Может подменять <noscript> по домену.
    • Может блокировать <a ping> и sendBeacon.
  • ghacks user.js
    • (Перекрыто) Установка локали в en-US.
    • Отключает pre-fetching всего (ссылок, DNS, onMouseOver, etc.).
    • Отключает <a ping>.
    • Отключает IPv6 (утечка MAC, в т.ч. через некоторые VPN).
    • (Перекрыто) Отключает HTTP/2 и Alt-Svc: (fingerprinting).
    • (Перекрыто) Отключает /etc/hosts и локальный DNS при использовании SOCKS.
    • (Перекрыто) Отключает :visited (утечка истории).
    • (Перекрыто) Отключает date/time picker (утечка локали).
    • Отключает cross-origin HTTP Auth (фишинг учётных записей).
    • (Перекрыто) Делает обязательной проверку https-сертификата через OCSP.
    • Запрещает SHA1 https-сертификаты (может ломать локальный антивирус/MITM).
    • Ужесточает Public Key Pinning (может ломать локальный антивирус/MITM).
    • (Перекрыто) Блокирует пассивный mixed content.
    • Блокирует mixed content запросы из Flash.
    • (Перекрыто) Отключает нестандартные шрифты (fingerprinting).
    • Ограничивает поддержку шрифтов (высокая вероятность уязвимостей).
    • Отключает cross-origin Referer: если не совпадает базовый домен.
    • Отключает DRM-плагины.
    • (Перекрыто) Отключает OpenH264 Video Codec для видео-чата WebRTC.
    • (Перекрыто) Отключает WebRTC (утечка IP, в т.ч. через VPN).
    • Отключает WebGL (высокая вероятность уязвимостей).
    • (Перекрыто) Ограничивает фичи WebGL если его включить (высокая вероятность уязвимостей).
    • Отключает screen sharing.
    • Отключает чтение из canvas (fingerprinting).
    • (Перекрыто) Отключает авто-проигрывание HTML5 media.
    • Запрещает блокировать новые фичи window.open.
    • Запрещает контроль положения и размера при открытии нового окна.
    • Ограничивает возможность открыть popup событиями click и dblclick.
    • (Перекрыто) Отключает workers (майнеры, Meltdown/Spectre).
    • Запрещает доступ к clipboard.
    • Блокирует событие beforeunload.
    • Отключает asm.js (высокая вероятность уязвимостей).
    • Отключает WebAssembly.
    • Отключает Intersection Observer API (стабильность, определение блокировщика рекламы).
    • Отключает Shared Memory (Spectre).
    • Добавляет rel=noopener для ссылок с target=_blank (безопасность).
    • Отключает hardware acceleration (fingerprinting).
    • Отключает Web Audio API (fingerprinting).
    • Отключает sendBeacon.
    • Блокирует встроенное веб-содержимое на страницах file://.
    • Отключает MathML (уменьшение поверхности атаки).
    • (Перекрыто) Блокирует сторонние куки.
    • Отключает offline cache.
    • (Перекрыто) Включает first party isolation (может сломать кросс-доменный логин).
    • (Перекрыто) Включает resist fingerprinting (подделывает размеры/ориентацию экрана, таймзону, данные о сети, железе, версии и настройках браузера; огрубляет точность времени; блокирует доступ к сенсорам, геолокации; скрывает нажатия Shift и Alt; etc.).
  • Мой user-overrides.js
    • Блокирует сторонние куки известных трекеров.
    • Отключает TLS 1.0, 1.1.
    • Отключает слабые алгоритмы TLS.

Забавные факты

Например, отказ от ALSA в пользу PulseAudio они объяснили тем фактом, что по данным телеметрии практически все пользователи используют PulseAudio. Отключение телеметрии Firefox, которое делает большинство продвинутых пользователей, внезапно, имеет неприятный побочный эффект: наше мнение перестаёт интересовать разработчиков Mozilla. Аргумент "продвинутые пользователи, избегающие PulseAudio, обычно отключают телеметрию" ими не принимался, не смотря на то, что на этом настаивало много разных людей (я, кстати, тоже так работаю — ни PulseAudio, ни телеметрии).

На данный момент какой-то толк в этом смысле от контейнеров можно получить только при использовании расширения Temporary Containers (упомянутого выше, в разделе "Мне мало умеренного Hardening") — но я слабо представляю себе юзабилити браузера, который притворяется что каждая новая вкладка открывается в отдельном браузере. В Firefox есть три большие фичи, которые должны усиливать безопасность: контейнеры, FPI (first party isolation) и RFP (resist fingerprinting). Получается, что фичи вроде бы есть, а толку от них пока что нет. Остальные две фичи всё ещё ломают множество сайтов и важные расширения, поэтому использовать их нельзя.

Согласно https://html5test.com после реализации описанного в этой статье поддержка фич HTML5 уменьшается с 508 из 555 (только расширения, без user.js) до 493 (с user.js и моим user-overrides.js).

Теги
Показать больше

Похожие статьи

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Кнопка «Наверх»
Закрыть