Pull to refresh

Как я защищался от фишинга, и написал велосипед, но свой собственный

Reading time4 min
Views22K
imageВо времена “дикого” интернета на почту приходило много спама, среди них было много фишинговых писем. Например: “Вам новое сообщение посмотрите по ссылке на сайте vkontate”; “Добавьте друзей на сайте Одноклассники”. Мама и другие родственники на это велись. Привязки к телефону тогда ещё не было, приходилось все время восстанавливать аккакунты, либо менять пароли. Наступил момент когда мне это надоело и захотелось решить проблему раз и навсегда.
В голову пришла идея плагина типа Web OF Trust, но было какое-то подозрение, что красный индикатор не остановит родных от ввода пароля на левых сайтах. Подумав немного, придумал другую идею, написал скриптик и поставил в хром. Родным сказал пользоваться только хромом, пароли нигде не вводить, если автоматически не входит — значит сайт поддельный, заходить на нужный сайт через закладки. Некоторым не выдал и вовсе их пароли :).

Я написал расширения — Автологин. В состав входит всего 2 файла — manifest.json и content.js.

В manifest требовал доступ к нужным нам сайтам и прописал инжектируемый скрипт content.js, функционал у него простой.
Проверить url по маске, если подходит — то проверить DOM на наличие элементов формы логина по селектору, если нашлись — то заполнить данными и нажать кнопку submit.

Немного времени потратил чтобы прошерстить сайты mail.ru, vk, Одноклассники на наличие форм, затем еще по часу прописать каждому их логины и пароли.
Потом ещё мне подкинули ссылки на формы входа которые я пропустил. Добавил формы, обновил расширения (в то время Хром ещё не блокировал девелоперские расширения и они лежали распакованными в документах у каждого).

Сам тоже стал пользоваться. Добавил выбор аккаунта, если их много — это удобно( у Гугла тогда ещё не было возможности переключаться между аккаунтами). Плюс, дополнительная защита от троянов — если кто и пролезет, то про моё расширение никто не знает, хоть там и пароли открытым текстом лежат. Еще и браузеры могут друг у друга пароли с легкостью импортировать — это немного напрягает.
За время использования расширения ни у кого больше аккаунт не увели. Я обезопасил себя и родственников и вернул свое спокойствие. Сейчас же гугл заблокировал собственные расширения, и у всех оно отключилось. Но и люди стали грамотнее и осторожнее, и к нашему времени фишинг сошел на нет.

Вот вроде и истории конец, но черт меня дернул сделать нормальный пользовательский интерфейс для расширения. А всё потому, что один друг увидел, заинтересовался и попросил себе.
К сожалению так потом и не получилось ему его поставить…
И что там говорят про 20% усилий и 80% функционала? Так вот это все 95 на 5 вышло!

Если уж выпускать расширение в мир, то надо его довести до ума.
Требований выросло сразу куча:
  • Шифрование данных, разные способы: для ленивых и для параноиков;
  • Придумать структуру хранения данных, 1 аккаунт — много сайтов, много форм;
  • Придумать систему обновления базы форм. Сайтов много, за всеми следить самому не получится;
  • Синхронизация между браузерами.

Для шифрования нашел библиотеку github.com/mdp/gibberish-aes.
Для лентяев генерирую ключ, храню его в базе и им шифрую пароли.
Для параноиков шифрую ключ мастер-паролем.
Для умеренных параноиков — храню мастер-пароль в оперативке и больше не спрашиваю.
Кстати, не подскажете, насколько надежно такое шифрование?

Для хранения данных github.com/knadh/localStorageDB — что-то вроде mongoDb, обертка над localstorage, удобно делать импорт экспорт.
Для обновления базы форм использую github, при старте браузера проверяю репозиторий на обновления, таким образом можно будет назначить контрибьюторов, которые будут обновлять базу.

Пользовательский интерфейс написал на JqueryUI с плагинами. Чтобы начать пользоваться, надо зайти на вкладку “Провайдеры” — выбрать провайдера, чей аккаунт Вы хотите сохранить, и заполнить форму.

Уровень шифрования — это настройка для халявщиков и параноиков. Уровень 1 и 2 не доступны пока не включить “Расширенную безопасность”( включить можно на вкладке настроек).

Расширенная безопасность обеспечивает дополнительное шифрование паролей.
Уровень безопасности 0 не обеспечивает безопасность паролей. Данные аккаунтов нельзя посмотреть открытым текстом, но специалист сможет расшифровать их без проблем. Пароли хранятся зашифрованными в базе, ключ шифрования также хранится в базе.
Уровень безопасности 1 обеспечивает безопасность паролей при соблюдении определённых условий: не оставлять открытым браузер после ввода ключа шифрования. Ключ шифрования запрашивается один раз и хранится в оперативной памяти браузера.
Уровень безопасности 2 обеспечивает максимально возможную безопасность паролей. Ключ шифрования запрашивается всегда, нигде не хранится используется только для расшифровки аккаунта и последующей авторизации.

Также здесь есть настройка — “использовать для множества аккаунтов одного провайдера”. Модальный диалог, затеняет всю страницу и показывает список аккаунтов, размер шрифта подстраивается, чтобы показать все аккаунты. Иконка-информер просто появляется в адресной строке, и только при нажатии на ней показывает меню выбора аккаунтов.

Резервное копирование сделано простой сериализацией базы данных в JSON, импорт, Экспорт в файл.

Для меня расширение удобно, постоянно пользуюсь. Исходники лежат на GitHub, может ещё кому-нибудь пригодятся. В webstore выкладывать не решился, вряд ли пропустят с такой функциональностью.
Tags:
Hubs:
+17
Comments14

Articles

Change theme settings