2015-04-07 5 views
5

Я занимаюсь разработкой приложения с использованием встроенной электронной почты Chrome, которая начинается через расширение Chrome.Защита хост-сервера Native Message

Мой вопрос: Как я могу гарантировать, что хост-приложение действительно одинаково поставлено мной?

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

ответ

2

Это отличный вопрос, и я думаю, что ответ «к сожалению, вы не можете».

Было бы интересно реализовать какой-то криптографический хэш, как те, которые использует Chrome для проверки файлов расширений, но это не очень сильная гарантия.

Рассмотрим (все это гипотетический):

  • Вы можете обеспечить запись реестра/манифеста довольно легко этот путь, но как насчет самого файла?
  • Предположим, что вы привязываете хэш исполняемого файла, тогда становится больно его обновлять (вам также придется обновлять расширение тоже в синхронизации). Может быть разрешено с помощью какой-либо публичной подписью, но вместо хэша.
  • Предположим, вы подключили исполняемый файл в манифесте. Как его файлы данных? Что еще более важно, как насчет библиотек использует собственное приложение?

Обеспечение расширения/приложения Chrome легко, поскольку единственная «библиотека»/время выполнения, на которое вы полагаетесь, - это сам Chrome (и вы доверяете этому). Собственное приложение может зависеть от многих и многих вещей в системе (например, уже упомянутых библиотек), как вы отслеживаете?

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

+0

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

+0

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

+0

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

0

Если я правильно понял вопрос, решение может быть

  1. Зарегистрируйте свой исполняемый файл с сервера при установке вместе с подписанием исполняемого файла и сохранить свой номер регистра внутри исполняемого файла и сервера
  2. в каждом запросе (postMessage) с расширением, отправьте дополнительный токен, который был предоставлен вашим сервером
  3. Запросить сервер для следующего токена, чтобы отправить ответ на добавочный номер, передав токен из расширения вместе с вашим регистрационным номером
  4. сервер ответит с жетоном, если вы являетесь зарегистрированным пользователем
  5. зашифровать его с номером реестра и отправить его на расширение вместе с маркером с расширением
  6. внутренний держатель браузер спросит серверу свой хороший ответ
  7. С помощью токена расширения сервер будет идентифицировать исполняемый номер реестра и дешифровать исполняемый токен и проверить, что было создано нами (сервером) для токена расширения.
  8. После подтверждения сервера браузер будет рассматривать его как ответ

Чтобы быть важным, ваш номер реестра должен быть безопасным, и клиентская машина не сможет извлечь его из исполняемого файла (использование надлежащей подписи может быть достижимо)

Поскольку хром остановил поддержку апплета, я реализовал то же самое для считывателя смарт-карт в хроме

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

Если вы в состоянии сделать свою исполняемую связь с сервером будет безопасным использование некоторые httpOnly Cookie (клиентская машина не может читать), или же механизм пароля. Скорее всего, это безопасное решение, которое вы можете достичь

0

Я понимаю, что это старая запись, но я думал, что это стоило бы делиться официальный ответ хромом команды от жука я поданном: https://bugs.chromium.org/p/chromium/issues/detail?id=514936

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