Random User-Agent — версія друга

Минуло два роки з того моменту, як вийшла перша версія цього розширення Chromium-based браузерів (працює в Google Chrome, Yandex.Browser і т. д.), завдання якого проста і зрозуміла — приховувати справжній User-Agent. На даний момент це розширення працює у +6.000 користувачів (дуже скромно), і кілька днів тому отримав на пошту лист з проханням його трохи доопрацювати. Оцінивши стан коду, до якого два роки ніхто не торкався, було вирішено — переписувати його з нуля. Чотири дні роботи, і вуаля — зустрічаємо свіжу мажорну версію, значно поліпшену і з новим функціоналом.
image
Під катом будуть деякі думки як щодо трохи більше анонімного веб-серфінгу, настроювання браузера Google Chrome, і чому це розширення може бути корисно. Трохи досвідчені анонімуси не знайдуть в пості для себе чого-небудь цікавого, тому для них, як і для самих нетерплячих, традиційно — исходники на GitHub розширення Google Webstore.
Про анонімності
Не буду говорити про те, що є сенс пускати весь зовнішній мережевий трафік через VPN/OpenVPN/Tor та інші зашифровані тунелі; не буду говорити і про те, що якщо компетентним особам, що володіють достатніми ресурсами знадобитися схопити тебе за дупу, швидше за все — вони схоплять (ти ж не користуєшся тільки мобільним інтернетом у країнах третього світу з анонімним сім-картками, постійно переміщаючись, і дивлячись в мережу тільки з допомогою telnet-а через Tor?).
Анонімність та зручність веб-серфінгу, все частіше — речі взаємовиключні. 3rd party cookies — це дуже зручно (не треба авторизовуватись на ресурсах, що використовують єдину авторизацію), але вони ж дозволяють успішно відстежувати ваші переміщення по інших ресурсів. Використання proxy/socks дають додаткові кошти приховування реального IP адреси, але вони часом успішно визначаються багатьма ресурсами (авіто, пикабу — приміром), і з-за їх використання — доступ до ресурсу для тебе закривають. Використання агресивних AD-блокерів визначаються сайтами, і вони дбайливо просять вимкнути їх. Тому і доводиться балансувати на межі — зручність, безпека.
Так, для мене безпеку є синонімом до слова анонімність. "Ні, мені нема чого приховувати, але це зовсім не ваша справа" © хабражитель.
Я користуюся різними браузерами. Водночас досить часто запущені і FireFox, і TorBrowser, і Google Chrome (його використовую найчастіше). В різних браузерах різні набори плагінів/проксі, і відповідно різні налаштування. Кожен з них заслуговує окремої розмови, але зараз я б хотів знову поговорити саме про Google Chrome. Нижче я перерахую налаштування браузера за замовчуванням які, можливо, слід змінити:
  • Налаштування синхронізації надлишкові;
    • "Налаштування" > "Додаткові налаштування синхронізації" > Відзначаємо лише "Сервіси", "Розширення", "Налаштування" і "Закладки" (цей список можна скоротити до "Розширення", "Налаштування");

    • Там ж включаємо шифрування з допомогою кодової фрази;
    • Переходимо за адресою і вимикаємо все;
  • Популярні пошукові системи відстежують ваші дії;
    • Ставимо в якості пошукової системи (ніби як анонімний)
      https://duckduckgo.com?q=%s
      ;
  • Зберігання файлів cookies дозволено для всіх;
    • "Налаштування" > "Налаштування вмісту" > "Файли cookie" > "Не дозволяти сайтів зберігати дані" + "Блокувати дані і файли cookie сторонніх сайтів";
    • При відвідуванні ресурсів, де підтримка cookies необхідна для функціонування, натискаємо на "печеньку" у рядку браузера > "Показати cookies та інші дані..." > "Заблоковано" > Ті, які необхідно зберігати після закриття браузера — відзначаємо як "Дозволити", інакше — "Вилучати при виході";

    • Час від часу перевіряти списки винятків, видаляючи з дозволених все зайве;
  • Максимальний термін зберігання файлів cookies неможливо обмежити;
    • Ставимо Limit Cookie Lifetime, виставляємо ліміт на 7 днів, до прикладу. Так, раз на тиждень доведеться автоматично повертатись на свої ресурси, але і треки більше тижня не будуть актуальні (якщо тільки аналізатор треків не має добротної логікою);
  • Запуск контент-плагінів (і flash-решето входить до їх числа) дозволений за замовчуванням;
    • "Налаштування" > "Налаштування вмісту" > "Плагіни" > "Заправити дозвіл на запуск контенту плагінів";
    • Відкриваємо посилання і вимикаємо "Adobe Flash Player" (при необхідності подивитися онлайн-кіно доведеться ручками тимчасово включити назад, але зате HTML5 плеєри будуть відразу розуміти що флеша немає і коректно запускатися);
  • Доступ камери, мікрофона та ін. краще заборонити за замовчуванням;
    • Всі ті ж "Налаштування" > "Налаштування вмісту" — самостійно забороняємо доступ до всього, що не критично прямо зараз;
    • Обов'язково заборони "Доступ до плагінів поза тестового середовища" і визначення місця розташування;

  • Відправка "Do Not Track" відключена;
    • Дуже, дуже сумніваюся, що хто-небудь слід правилом не відстежувати тих, хто відправляє даний заголовок, тому вирішуй самостійно ставити його в "Налаштування" > "Особисті дані", або ж немає;
  • Паролі і форми зберігаються;
    • "Налаштування" > "Паролі і форми" — обов'язково вимикаємо обидва чекбокса. Пояснювати причину, думаю, сенсу немає;
  • Браузер схильний витоку IP адреси за коштами WebRTC;
    • Ставимо плагін WebRTC Leak Prevent, дозволяємо йому працювати в режимі "Інкогніто", в налаштуваннях його вказуємо "Disable non-proxied UDP";

    • Перевірки, приміром, на цій сторінці;
  • Referer відправляється безконтрольно, що дозволяє всім ресурсів визначати звідки ви до них прийшли;
    • Ставимо Referer Control, в налаштуваннях вказуємо "Referer Control status" — "Active", а "Default referer for all other sites" — "Block";

    • Деякі сайти (наприклад — Habrastorage) використовують провекру referer-а, тому робота плагіна може трохи "діставати", але це треба пересилити, і навчитися писати регулярки винятків;
  • Відсутній контроль запуску JS-скриптів, які займаються трекінгом і аналітикою;
    • Ставимо всім добре відомий Ghostery, налаштовуємо на блокування можливого;

  • Улюблені плагіни для блокування реклами детектятся відвідуваними ресурсами і закривають доступ до контенту;
    • Спробуй використовувати менш популярні, але не менш ефективні. uBlock до недавнього часу входив в цей список, але крайнє час використовую Adguard AdBlocker, так як він поки ще мало ким детектив і пам'яті споживає в рази менше ніж побратими.

Про те, яке розширення використовувати для проксі серверів і де брати проксі-листи — відповісти тобі доведеться самому. Скажу лише те, що краще всього використовувати ланцюжка проксі, але від цього в 9 з 10 випадків швидкість серфінгу просто здихає. Публічні проксі-листи не живучі зовсім. Ті, що купувалися за гроші — трохи більш живучі, але не значно. Халяви тут взагалі не багато, та для комфорту краще всього придбати власний проксі-сервер (так, такі послуги надають, і досить багато хто; при оплаті не використовуй реальні карти, імена, ip-адреси — зрозуміло). Про те що попередньо весь зовнішній трафік слід пускати через тунелі — я не нагадую, ти і так все знаєш.
Основні методи ідентифікації
Заздалегідь прошу вибачення за використану нижче термінологію. Вона не зовсім коректна, але, як мені здається, більш проста для розуміння
Ідентифікація користувача, що ці визначення N запитів виконав саме він, а не хтось інший — є головним ворогом анонімізації. Методи ідентифікації діляться на як мінімум два великих класи — використовують боку клієнта і сервера відповідно. На стороні клієнта в класичному підході вона може виглядати наступним чином:
  • Сторінка ресурсу містить у своєму тілі посилання на JS-скрипт, наприклад, google.analytics;
  • Браузер відправляє на сервер, який зберігає цей самий JS-скрипт GET запит;
  • Сервер відповідає контентом скрипта;
  • Браузер виконує отриманий скрипт (завантажуючи додаткові "модулі" при необхідності), отримує від браузера інформацію про його версією, ОС, встановлених плагінах, встановлених шрифтів, дозволу екрану, локалях, системному часу, та іншої смачної інформації;
  • Скрипт перевіряє наявність унікальної плюшки, або встановлює її для відстеження ваших подальших переміщень в мережі;
  • Скрипт відправляє дані, зібрані + ім'я плюшки собі для зберігання;
"Ну і чого такого?" — запитаєш ти, і будеш чертовски прав. "Нехай збирають ці дані — мені не шкода!" — так-так, друже! А поки ти так думаєш, давай трохи займемося аналізом. Для відвідин сайтів ти використовував Google Chrome версії 52.0.2743.116 (актуальна версія — у тебе включено автооновлення) під управлінням Windows 10 (мінорна версія підказує що, можливо, у тебе не встановлені крайні оновлення і, як наслідок, відключений Windows Update) перебуваючи в Росії і, ймовірно, в місті Москва (і часовий пояс відповідає), з IP провайдера "MTC", в якого цей пул прив'язаний до Люблінському району, швидше за все використовуючи ноутбук (судячи з дозволом екрану), і напевно, що цікавиться покупкою нового автомобіля (тому як до цього на сайті drom ти шукав стару Мазді, і саме в Москві; на сайті drom, приміром, стоїть та ж аналітика). Судячи по часу відвідувань — ти це робив з робочого місця і, напевно, в цьому чи сусідньому районі і працюєш. Якщо твоя соц. мережа використовує аналогічний сервіс аналітики, то… то ти зрозумів (приклад вигаданий, але не позбавлений зерна здорового глузду).
Розумієш, чому досить важливо стежити за тим, які запускає скрипти твій браузер? "Та я взагалі вимикаю JS за замовчуванням!" — вигукне хтось в коментарях, і буде правий — так правильніше. Саме правильніше, а не зручніше. Тут треба тобі все-таки вибирати, що для тебе важливіше — безпека, або комфорт. Зараз 7 з 10 сайтів просто не запрацюють як треба без JS, і тільки тобі вирішувати коли переходити на telnet і переїжджати в країну третього світу, попутна скуповуючи анонімні сім-карти. Ghostery хороший, але навіть якщо він би давав 99% гарантію блокування всіх коштів аналітики — 1% все одно має місце бути. Тут не може бути універсального правила, треба просто бути пильним і трохи думати своєю головою.
Як відбувається ідентифікація на стороні сервера? Давай згадаємо як виглядають access-логи http демонів:
[meow@hosting /var/log]$ cat somesite.org.access_log | tail -3
10.12.11.254 - - [25/Jul/2016: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/2016: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/2016: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"

Примітивніше. За замовчуванням сервер зберігає про тебе 4 речі:
  • IP адреса, з якого прийшов запит;
  • Час, коли він прийшов;
  • Яку сторінку ти запросив;
  • Який у тебе User-Agent.
Грепнув логи по IP ми отримаємо всіх, хто міг прийти з твого IP (якщо це IP на якому NAT — ми дізнається хто з твоїх сусідів-абонентів ще був). Грепнув ж за User-Agent — ми отримаємо майже напевно саме конкретного користувача. Плюс зможемо подивитися на які сторінки він ходив, в який час і послідовності, а якщо є дебаг-лог — то можливо і які дані вводив на формах сайту, і які плюшки у нього в браузері.
Шеф, що робити?
Уникнути витоків інформації на 99.8% можливо — але це дуже незручно в плані юзабіліті. Якщо узагальнити, то до самої критичної інформації можна віднести твій IP (провайдер і місцезнаходження) і User-Agent (використовуване ПЗ, ОЗ і їх версії), так як вони найбільш інформативні і унікальні. Як приховати реальний IP — ми вже говорили. Як приховати User-Agent? Є різні способи, і описаний нижче — просто один із багатьох. Можливо, саме він тобі здасться трохи зручніше.
З твого дозволу основні його "фішки" будуть викладені у вигляді простого списку:
  • Відкриті вихідні коди, доступні на GitHub (приймаю Pull-реквесты і включені Issues);
  • Замінює поле User-Agent в HTTP заголовках всіх запитів;
  • Компактне (менше 190 Кб, третина з яких займають два шрифту);
  • Використовуваний User-Agent генерується випадковим чином, подібний певних типів браузерів і ОС (настроюється; можна було б використовувати і один якийсь певний, але цей підхід працював би лише якщо дуже багато хто користувався цим розширенням — так би користувач "губився" в купі);
  • Автоматично підміняє User-Agent на випадковий через заданий проміжок часу, по натисненню на кнопку, або при старті браузера;
  • Вміє використовувати заданий ручками User-Agent, а не використовувати генерується;
  • Налаштування синхронізуються між браузерами (настроюється);
  • Включає в себе підтримку захисту від визначення User-Agent засобами JavaScript (експериментально) — те, про що так довго просили (mock запускається асинхронно, тому не у всіх випадках успішно приховує; на скільки мені відомо, такого більше не вміє ні одне розширення — поправте мене, якщо не правий);
  • Підтримує список винятків (можливе використання масок в адресах);
  • На даний момент російська та англійська локалізації;
  • Безкоштовно і без реклами;
  • Ліцензія WTFPL ;)
Як виглядає?

Скріншот сторінки налаштувань
Якщо у вас є питання, пропозиції або багрепорт, але ви не можете про нього написати ні в WebStore, ні в коментарях на хабре — ось вам чарівна посилання. Хотів би ще написати і про те, як писав сам розширення; як створив об'єкт, який підтримує події onGet і onSet довільних властивостей і сам зберігає свої дані в сховищі; як прийшов до рішення реалізовувати роботу всіх компонентів розширення з допомогою свого внутрішнього API — але це зовсім інша історія, і исходники, можливо, розкажуть її краще. Користуючись нагодою скажу що був би страшенно вдячний допомоги перекладу розширення мови, відмінні від російської та англійської. Якщо таке бажання має місце бути — просто створіть Issue в репозиторії з темою "Допоможу з перекладом %имя_локали%", або бабахните Pull-Request.
Перевірити роботу плагіна, так і свою анонімність ти можеш, наприклад, ось цим посилання. Але не варто до результатів цих тестів ставитися надто серйозно.
І, з вашого дозволу, продублюю посилання на розширення Random User-Agent в WebStore.
Якщо зустрінете очепятки, орфографічні чи пунктуаційні помилки в тексті — пишіть про них в приват, будь ласка.
Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.