Много анонимности не бывает — скрываем User-Agent

Очередной приступ паранойи был вполне обоснован — он наступил после прочтения статьи о методах анонимности в сети, где автор на примере браузера FireFox рассказывал о потенциальных утечках идентификационной информации. И стало интересно —, а на сколько озвученные решения применимы, скажем, к браузеру Google Chrome? Скрыть реальный IP — используем разные VPN сервера, отключить львиную долю отслеживающих скриптов — Adblock Plus и Ghostery, убрать Referer — не вопрос, что то ещё забыли… Ах да — User-Agent — своеобразный «отпечаток», по которому (в связке, скажем, с IP) легко идентифицировать пользователя. И с этим надо было что-то делать. Найденные решения лишь статично изменяли значение User-Agent, чего было явно недостаточно. Тогда и было решено написать плагин для скрытия реального User-Agent’a, а если быть точнее — подменять его на рандомный. Или почти рандомный.Для нетерпеливых сразу: исходники на GitHub и расширение в Google Webstore.

d5c233524d930bf127311ca724afb1cf.pngНемного теории Вообще, User-Agent (далее по тексту — UA) — штука нужная. Нужная в первую очередь для корректного отображения страниц, ведь нам всем известно — разные версии разных браузеров по разному рендерят странички, и заботливые web-программисты учитывают этот факт, выдавая разным браузерам разные скрипты и стили. Разные версии «движков» поддерживают разные технологии. Отсюда вытекает первое требование к итогу — нужно иметь возможность «имитировать» различные браузеры, и что самое важное — иметь возможность выбора между ними.UA — это в первую очередь набор. Набор различных идентификаторов, по которым и происходит определение — какой браузер, какая операционная система, какой версии, и какое специфичное ПО (привет, IE) стоит у пользователя.Почему именно IP и UA надо скрывать в первую очередь? А давайте посмотрим на лог пустого сайта-заглушки, на котором вообще ничего нет: [meow@hosting /var/log]$ cat somesite.org.access_log | tail -3 10.12.11.254 — — [25/Jul/2014:15:51:16 +0700] «GET / HTTP/1.0» 200 5768 »-» «Mozilla/5.0 (compatible; MJ12bot/v1.4.5; http://www.majestic12.co.uk/bot.php?+)» 10.12.11.254 — — [25/Jul/2014:15:57:38 +0700] «GET / HTTP/1.0» 200 5768 »-» «Mozilla/5.0 (compatible; YandexBot/3.0; +http://yandex.com/bots)» 10.12.11.254 — — [25/Jul/2014:19:19:25 +0700] «GET / HTTP/1.0» 200 5768 »-» «Mozilla/5.0 (Windows NT 6.1; WOW64; rv:30.0) Gecko/20100101 Firefox/30.0» На сайте ничего нет, а у меня есть о посетителе более чем достаточно. Всё потому что «логи знают всё» ©.

Немного практики Итак, решено — подставляем фейковый UA. Но как его сформировать? Я пошел по пути собирания с десятка UA каждого интересующего браузера, и написания регулярки для каждого, которая будет генерировать максимально правдоподобный и в то же время, а какой-то мере уникальный отпечаток. Хотите пример? Вот вам 10 UA браузера «IE 9», и среди них пять настоящих. Сможете отличить? Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0; chromeframe/12.0.742.112) Mozilla/5.0 (Windows; U; MSIE 9.0; Windows NT 6.0; Win64; x64; Trident/5.0; .NET CLR 3.8.50799; Media Center PC 6.0; .NET4.0E) Mozilla/5.0 (Windows; U; MSIE 9.0; Windows NT 8.1; Trident/5.0; .NET4.0E; en-AU) Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET CLR 2.0.50727; Media Center PC 6.0) Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 8.0; WOW64; Trident/5.0; .NET CLR 2.7.40781; .NET4.0E; en-SG) Mozilla/5.0 (Windows; U; MSIE 9.0; Windows NT 8.0; Win64; x64; Trident/5.0; .NET4.0E; en) Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET CLR 2.0.50727; Media Center PC 6.0) Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0; .NET CLR 2.0.50727; SLCC2; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; Zune 4.0; Tablet PC 2.0; InfoPath.3; .NET4.0C; .NET4.0E) Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 7.0; Trident/5.0; .NET CLR 2.2.50767; Zune 4.2; .NET4.0E) Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0 Да, это возможно, но для это нужно анализировать. Анализировать, например, какие .net могут стоять на каких ОС, анализировать версии и сочетания, нюансы. Когда они теряются в куче — задача становиться мало тривиальной. Кому интересно как выглядят регулярки — добро пожаловать по этой ссылке. Дня генерации использовал randexp.js (за подсказку спасибо хабрачуваку под ником barkalov).Вообще расширение успешно выдает себя за следующие браузеры:

IE с 6 по 10; Chrome (Win / Mac / Linux); Firefox (Win / Mac / Linux); Safari (Win / Mac / Linux); Opera (Win / Mac / Linux); iPad и iPhone. Что ещё интересного? Автоматизация. Отмечаешь галочками какие браузеры мы имитируем, ставишь галочку «Обновлять автоматически», указываешь интервал времени, и забываешь. Ничего лишнего. Для любопытных — посмотрите в консоли «фоновую страницу» — там всё не плохо залогировано.Открытые исходники. Если есть желание допилить под себя, всё что необходимо, это:

Открыть ссылку расширения на гитхабе; Нажать «Download Zip» или склонировать; На странице расширений поставить чекбокс «Режим разработчика»; Нажать «Загрузить распакованное расширение…» и указать путь к распакованному архиву или клону; Буду очень признателен конструктивной критике и предложениям.Лучше один раз увидеть: Google Webstore

Хорошие ссылки:

© Habrahabr.ru