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


А, да? Такое уже есть и называется автозаполнение? Что ж, читатель, ты прав — но лишь в том, что такое действительно есть. А вот в том, что ты активно этой штукой пользуешься (если пользуешься) — ты лев. Ведь только лев настолько смелый, чтобы буквально раздаривать свои конфиденциальные данные каждому встречному.
О том, как так получается, что люди «автозаполняют» email, а у них угоняют номера карт, читайте ниже.
Что такое автозаполнение?
Нет, мы не будем рассказывать о том, какая это удобная штука, что она позволяет заполнять формы автоматически. Речь о том, что такое автозаполнение с технической точки зрения: как оно реализовано, какие там есть типы информации, чем они отличаются и как именно подставляются. Если душно — пролистайте ниже.
Но советуем все же ознакомиться с этой информацией, чтобы лучше понимать сабж и то, как угоняют данные карт, хотя, казалось бы, подставляется email. Так вот, технически все реализовано либо через формы и поля (они есть в любом случае, но не суть), либо через исторические подсказки, либо через autocomplete.
Формы и поля
Начнем с автозаполнения через формы и поля. А точнее — с автозаполнения через типы полей формы. Например:
UNKNOWN_TYPE — тип данных не определился.
NAME_FIRST— Евгений.
NAME_MIDDLE — Юрьевич.
NAME_LAST— Иванов.
NAME_FULL — Иванов Евгений Юрьевич.
EMAIL_ADDRESS — [email protected].
ADDRESS_HOME_LINE1 — Лубянка, 1.
ADDRESS_HOME_CITY — Москва.
ADDRESS_HOME_STA — 107031.
ADDRESS_HOME_COUNTRY — Российская Федерация.
CREDIT_CARD_NAME_FULL — Ivanov Evgeniy.
CREDIT_CARD_NUMBER — 0228 0228 0228 0228.
CREDIT_CARD_VERIFICATION_CODE — 123 (CVV2).
USERNAME — yatoptiloh228.
Список не является исчерпывающим, но суть должна быть понятна. В данном случае каждый тип информации привязан к конкретному полю. Что в теории гарантирует правильную подстановку (на практике — нет).
Исторические подсказки
Если же автозаполнение реализовано через исторические подсказки, то жесткой привязки «Тип поля → Тип данных» нет. В этом случае все работает примерно следующим образом:
- Юзер вводит какую-то информацию в какое-то поле.
- Браузер это запоминает.
- При вводе в поле, которое, по его мнению, подходит данной информации по контексту, браузер подставляет ранее запомненное значение.
При этом названия полей (технические названия — не путать с надписью рядом с полем) могут не соответствовать общепринятой стандартизации HTML. Проще говоря, вы можете ввести свой номер карты в поле card_number кастомной формы на каком-то одном сайте, а на другом он подставится в поле number_of_promo_code другой кастомной формы. Это само по себе создает уязвимости, если пользователь невнимателен. Ну да ладно — идем дальше.
Autocomplete
Если вкратце — эта штука просто вытягивает из вашего браузера инфу для соответствующих полей. Если, конечно, эта инфа ранее была где-то введена. И да — далеко не всегда вам для этого нужно даже начинать что-либо вводить в форму. Часто все происходит еще во время загрузки страницы.
Все это, опять же, уже небезопасно само по себе. Но пока еще не так страшно — ведь контрится внимательностью при заполнении форм на других сайтах (на практике не контрится, так как 99,9% юзеров невнимательные и вообще нормальные люди, а значит — об этом всем в принципе не думают).
Как угоняют данные автозаполнения
А теперь добавьте ко всему описанному выше следующие возможности:
Тупую замену имени поля — ничто не мешает админу сайта написать около «Поля для ввода пароля» или «Номера карты» слово «email». В этом случае, если, допустим, над ним будет «Поле для ввода логина», введя информацию в него, вы автоматически передадите соответствующий этому логину пароль или номер карты. И, если поторопитесь нажать Enter или «Отправить» — подарите его кибергопникам.
Тупую замену имени поля с маскировкой — аналогично, только поверх вашего пароля или номера карты вы будете видеть псевдо-email, сгенерированный на основе введенного вами логина. Ну или еще что-то — тут уже ситуативно. И с 99,9% вероятностью это приведет к тому, что вы не заметите подвоха и абсолютно спокойно нажмете Enter или «Отправить».
Игры с именами полей — используя ранее упомянутое автозаполнение через метод Исторические подсказки, злоумышленник может выудить из вашего браузера инфу путем «обзывания поля» именами, которые браузер с большой долей вероятности интерпретирует неправильно. Это тот самый пример с кастомными формами и передачей инфы из условного card_number в number_of_promo_code. Опять же — поверх данной инфы может быть накинута маскировка, что приведет к подтверждению отправки формы с конфиденциальными данными.
С конца в начало — а еще хацкер может сделать финт ушами и создать длиннющую форму, например, какой-то опросник или психологический тест. Вы будете заполнять его минут 5 ручками, попутно пролистывая страницу все ниже. Ближе к концу, когда часть формы уже будет скрыта «за границами экрана», вам подкинут поле с автозаполнением. Например, email для отправки результата психологического теста. Вы, устав от и без того длительного заполнения полей, радостно на это поле кликнете. В скрытые «за границами экрана» поля подтянется инфа, которую даже не нужно маскировать — ведь вы все равно ее не видите перед собой. А листать страницу вверх вам вряд ли захочется. Ну и дальше — подтверждение отправки своих данных хацкеру, без какой-либо задней мысли.
Невидимые поля — ах, ну и да, еще можно просто сделать часть полей невидимыми, и вообще не заморачиваться с извращениями, описанными выше. Часто ли вы смотрите исходный код каждой открываемой в браузере страницы? Скорее всего, нет. Дальше по стандарту — скрытое подтягивание конфиденциальной инфы и ее отправка на сервер кибергопника.
И, возможно, кто-то для себя сделал вывод, что пока он не нажмет Enter или «Отправить» — все будет хорошо. А вот и нет :D
Все дело в том, что помимо POST-запросов (формы обычно отправляются с их помощью), есть еще такие приколы, как:
Капча. Да-да, капча. Никто не мешает замаскировать под интерфейс капчи любые «подтверждения» пользователем.
AJAX-запросы. Они позволяют считывать, что пользователь вводит в поле формы обратной связи в режиме реального времени. То есть вам даже не нужно будет нажимать «Отправить», чтобы передать инфу. Пример того, как они работают — автоподсказка свободных логинов, если вводимый вами уже занят, выводимая в реальном времени.
JavaScript. С их помощью можно творить вообще все что угодно, если есть фантазия и прямые руки.
Чем еще опасно автозаполнение
Казалось бы, идеальное решение напрашивается само собой — просто не вводить никуда критически важную инфу вроде номеров карт или паролей. Так можно будет и сохранить некоторую степень удобства — ведь автозаполнение все еще будет нам доступно, и конфиденциальные данные защитить. Вот только это «идеальное» решение на деле далеко не идеальное. Почему? Объясняем ниже.
Неконфиденциальная информация важна
Весь прикол в том, что не только ваши пароли и номера карт представляют ценность. Даже ваш логин может быть использован злоумышленником — хотя казалось бы. Здесь возникает иллюзия безопасности из-за того, что слыша «логин», большинство людей воспринимает его как непосредственно логин — и да, сам по себе он мало чем интересен (хотя тоже интересен). Но вот в совокупности с другими данными, которые можно получить в том числе и благодаря автозаполнению — даже такая мелочь как логин обретает куда большее влияние.
Так, например, получив в свое распоряжение ваш логин и дату рождения, хацкер может попробовать сгенерировать другие варианты вашего логина. Либо найти по нему в слитых базах данных (а сегодня их сливают чуть ли не ежедневно) какие-то варианты ваших старых паролей. Все это можно между собой комбинировать и получить в результате уже реальные реквизиты. Причем происходит это не вручную, а автоматически. А теперь представьте, что в одном из ваших паролей содержится фрагмент, который явно является распространенным вариантом ответа на секретный вопрос — так и до авторизации в приле вашего банка недалеко.
А ведь сегодня есть еще и нейросети…
Прилы
Это вообще отдельная тема, но все же уделим ей немного внимания. Дело в том, что любая прила сама по себе может наворотить таких дел, что вам будет проще сжечь свой смартфон, чем пытаться полностью вычистить вредоносный код — вплоть до заражения на уровне «до ядра ОС», когда не поможет даже перепрошивка. Но так могут не все, а те, кто могут, вряд ли интересуются вами и вашими скромными криптомиллионами.
Совсем другое дело — перехват данных автозаполнения или буфера обмена. Вот такое сможет уже каждый второй разработчик прил, если захочет. А теперь вспоминаем о том, что автозаполнение есть не только в браузере, но и в самих ОС смартфонов. И вспоминаем, сколько всего там уже содержится — не очень «надежно», не так ли? Зачем разработчики ОС для смартфонов оставляют такие дыры? Чтобы им было проще переводить стрелки на мифических злоумышленников в случае слива инфы, которую о вас собирают они сами.
Как-то так ¯\_(ツ)_/¯
Как защититься от угона инфы через автозаполнение
Единственный надежный способ защититься — бескомпромиссно и фанатично отключать автозаполнение. Всегда и везде. И да — это неудобно, в особенности когда привык к автозаполнению. Но других способов реальной защиты нет.
В качестве компромисса можно:
Не вводить чувствительную информацию — в большинстве современных браузеров чувствительную инфу вроде реквизитов банковских карт или паролей можно выборочно отключить из списка доступной для автозаполнения информации. Но, как мы уже выяснили — неконфиденциальные данные тоже представляют ценность.
Отключить предиктивный ввод текста — да-да, еще одно кощунство :D Мы предлагаем вам отключить Т9 и прочие «ускорители кнопанья». Зачем? Чтобы очередной JavaScript или AJAX-запрос не инициировал с их помощью автонабор часто вводимых вами данных.
Регулярно очищать данные автозаполнения — пожалуй, самый действенный способ без отключения фичи. Вот только какой тогда смысл в автозаполнении?
Регулярно очищать буфер обмена — это актуально для работы со смартфонов, где буфер обмена обычно многослойный и содержит не только последнюю скопированную инфу, а несколько десятков копирований.
Рандомизировать данные — метод для извращенцев. Зачем это нормальному человеку, который считает удобство автозаполнения более ценным, чем баланс на своей карте, мы не знаем. Но если вы из таких и хотите потроллить кибергопов — развлекайтесь :D
Однако все это полумеры. Или скорее даже «четвертьмеры»… Реально более или менее защитить ваши данные может лишь полное отключение автозаполнения. Причем везде.
Подводя итоги
Автозаполнение — удобная, но крайне опасная фича. В идеале ее следует отключить. Но если для вас это ту мач — отключите хотя бы использование чувствительной инфы вроде паролей и реквизитов банковских карт. Ну и всегда думайте, что и куда вы вводите. Помните — способов использовать очередную удобную фичу против вас куда больше, чем вы сможете представить. Даже если вы эксперт по кибербезу. А уж если вы обычный юзер…