Пользователь
192,0
рейтинг
24 июля 2015 в 19:15

Разработка → Определяем пользователей VPN (и их настройки!) и прокси со стороны сайта

W.I.T.C.H.
We can save the day from dark, from bad
There's no one we need


Многие из вас используют VPN или прокси в повседневной жизни. Кто-то использует его постоянно, получая доступ к заблокированным на государственном или корпоративном уровне ресурсам, многие используют его изредка, для обхода ограничений по географическому положению. Как вы можете знать, крупные интернет-игроки в сфере стриминга видео, музыки и продажи игр никогда не любили пользователей, которые легко обходят географические ограничения, разблокируя недоступный в их стране контент, или совершая покупки заметно дешевле. За примерами не нужно далеко ходить: Netflix изменил свое соглашение об использовании, добавив пункт о блокировке VPN, всего 2 месяца назад; Hulu тоже грешил блокировкой пользователей, а Steam вообще подозрительно смотрит на не-русскоязычных пользователей из России. В последнее время, компании пытаются блокировать уже не конкретных пользователей, а сами IP-адреса VPN-сервисов, создавая определенные неудобства уже самому VPN-сервису и его пользователям. Похоже, они не используют никаких спецсредств, а блокируют выборочно и вручную. Хоть я и не поддерживаю какие-либо блокировки вообще, меня заинтересовала техническая часть вопроса: можно ли как-то определить использование прокси-серверов и VPN со стороны сервера, не прикладывая особых усилий?
Можно, при определенных условиях. И достаточно точно.

MSS и MTU

MTU, или Maximum Transmission Unit — максимальное количество данных, которые могут быть переданы в одном пакете. MTU установлен у каждого сетевого адаптера, даже у тех маршрутизаторов, через которые трафик от вас до удаленного сервера идет транзитом. В подавляющем большинстве случаев, в интернете используют MTU 1500, однако бывают заметные исключения, которые, к слову, зачастую подчиняются некоторым правилам.

Когда ваш браузер или любое другое ПО, работающее с сетью, создает TCP-соединение к удаленному серверу, в заголовки пакета помещается значение Maximum Segment Size (MSS), которое сообщает серверу, какого максимального размера сегменты он может передавать в одном пакете. Это значение очень близко́ к MTU, оно сразу дает понять серверу о возможностях вашего интернет-соединения, исключая излишнюю фрагментацию и позволяя утилизировать ваш канал по полной.
Когда вы отправляете пакет, будучи подключенным к VPN по какому-то протоколу (PPTP, L2TP(±IPsec), IPsec IKE), он помещается (инкапсулируется) в еще один пакет, что вносит свои накладные расходы, и большие пакеты, которые были бы отправлены без фрагментации без VPN, теперь придется фрагментировать. Чтобы избежать такой фрагментации, ОС устанавливает на сетевом интерфейсе MTU меньше, чем MTU реального сетевого интерфейса, из-за чего ОС не пытается создавать большие пакеты, которые требовали бы фрагментации.
В случае с PPTP, L2TP(±IPsec), IPsec, как я понимаю, нет каких-то стандартов на MTU туннеля, все устанавливают такие значения, чтобы работало в большинстве случаев, и устанавливаются они на глаз. Как правило, это 1400, что позволяет использовать, скажем, PPTP на каналах с MTU до 1440 без фрагментации (например, когда для доступа в интернет требуется еще один туннель, как часто бывает у российских провайдеров). OpenVPN — пожалуй, самый популярный вариант VPN — напротив, пошел другим путем.

OpenVPN

В целях совместимости со старым или просто кривым софтом, OpenVPN по умолчанию не устанавливает меньшее значение MTU на VPN-интерфейсе, а изменяет значение MSS внутри инкапсулированного TCP-пакета. За это отвечает параметр mssfix, установленный по умолчанию в значение 1450. Он изменяет MSS таким образом, чтобы он полностью утилизировал канал с MTU 1450, т.е. высчитывает свои накладные расходы таким образом, чтобы они проходили через канал с MTU 1450 и более без фрагментации. Вследствие этого, у нас появляется возможность не просто определить пользователей OpenVPN со стандартным mssfix 1450, но и определить их протокол подключения (IPv4, IPv6), протокол транспортного уровня (TCP, UDP), параметры шифрования, сжатия и MAC, т.к. они вносят свои уникальные накладные расходы и отражаются в MSS.
Давайте посмотрим на типичные значения MSS:
Протокол Размер блока MAC Сжатие MSS
UDP 64 SHA1 - 1369
UDP 64 SHA1 + 1368
TCP 64 SHA1 - 1367
TCP 64 SHA1 + 1366
UDP 128 SHA1 - 1353
UDP 128 SHA1 + 1352
TCP 128 SHA1 - 1351
TCP 128 SHA1 + 1350
UDP 128 SHA256 - 1341
UDP 128 SHA256 + 1340
TCP 128 SHA256 - 1339
TCP 128 SHA256 + 1338
Если используется шифр с размером блока в 64 бита, это, вероятно, Blowfish, если 128 — вероятно, AES.

Для пущей проверки теории было протестировано 2 VPN-сервиса: VyprVPN и ibVPN. Оба сервиса подвержены определению настроек описанным методом.
Если вы не хотите, чтобы вас обнаруживали таким способом, вы можете либо отключить mssfix, установив его в 0 и на сервере, и на клиентах, получив таким образом MSS 1460 (в случае с IPv4), что соответствует MTU 1500 — типичному MTU для обычного проводного соединения, которое есть у подавляющего большинства пользователей. Однако, в этом случае вы получите излишнюю фрагментацию, что ведет к повышению задержек и уменьшению пропускной способности, поэтому может иметь смысл установить MTU в 1400, 1380 или похожее (должно быть кратно 2, а лучше 10), т.к. такие значения часто используются провайдерами, например, мобильного интернета.

Прокси

Способов определения прокси-сервера, если он не добавляет никаких заголовков (вроде X-Forwarded-For), не так-то много. Чем же технически отличается прокси от VPN? В случае с VPN, удаленный сервер получает от вас пакет, которая создала ваша ОС, в неизменном (зачастую) виде. Прокси же, напротив, получает только всю информацию об удаленном сервере (IP, порт, прочие параметры) и данные, создавая пакет на стороне самого прокси, и отправляет его. Разные ОС по-разному создают пакеты, различия можно встретить даже от версии к версии. Мы с большой точностью можем определить ОС создателя пакета, версия нас не слишком интересует.
Как мне кажется, прокси чаще всего запускают на Linux и BSD, а используют чаще под Windows. Пользователи часто не думают о смене User-Agent, который включает используемую ОС, в браузере, а это нам на руку.

p0f

Существует замечательный проект p0f, который отлично впишется под наши нужды. Пассивно прослушивая трафик, он может определить ОС, MTU и браузер, оповестить о несовпадении ОС создателя пакетов и ОС в User-Agent. К тому же, он имеет API. Немного модифицировав его, добавив экспорт MTU через API и обновив сигнатуры, мы можем с определенной точностью детектировать пользователей популярных VPN-протоколов, пользователей прокси и тех пользователей, которые подделывают User-Agent.

WITCH?

Немного подумав, я решил сделать небольшой веб-сервис для реализации своих идей, т.к., по какой-то причине, я не смог найти ничего похожего.
Из этого получился WITCH?, который с легкостью расскажет вам о настройках вашего OpenVPN-соединения (если вы не трогали mssfix, конечно же), попытается определить вашу ОС и сравнить ее с ОС в User-Agent, получит PTR-запись для вашего IP и сравнит ее с набором правил, определяя, используете ли вы интернет-канал, рассчитанный на домашних или серверных пользователей.
First seen    = 2015/07/24 17:19:29
Last update   = 2015/07/24 18:39:37
Total flows   = 7
Detected OS   = Linux 3.11 and newer
HTTP software = Firefox 10.x or newer (ID seems legit)
MTU           = 1409
Network link  = OpenVPN UDP bs64 SHA1
Language      = Russian
Distance      = 15
Uptime        = 1 days 19 hrs 39 min (modulo 165 days)

PTR test      = Probably home user
Fingerprint and OS match. No proxy detected.
OpenVPN detected. Block size is 64 bytes long (probably Blowfish), MAC is SHA1.

WITCH? также без проблем определяет пользователей Tor Browser, т.к. он использует одинаковый статичный User-Agent (с Windows) на всех ОС, а exit nodes запущены под Linux и FreeBSD.
Tor Browser with WITCH? opened

В ходе тестов выяснилось много интересных подробностей:
  • Мобильный интернет от Beeline пропускает все соединения через прокси под Linux. Обнаружилось это, когда человек с Beeline зашел с iPhone на WITCH?, и ОС определилась как Linux. Вероятно, именно через него они меняют HTML-теги, добавляют тулбар с поиском mail.ru и изменяют дизайн сайтов.
  • MTU у мобильных устройств может быть буквально какой угодно, но, как правило, заканчивается на 0. Исключение — Yota с 1358. От чего это зависит — непонятно, подозреваю, что и от настроек на стороне оператора, и от телефонного модуля. Одна и та же SIM в разных телефонах использует разные MTU.
  • Код, который отвечает за mssfix в OpenVPN, очень медленный. Если у вас есть знания в сетях, C, желание и время, пожалуйста, посмотрите, можно ли его оптимизировать.

Скрытый текст
Не знаю, что на меня нашло полгода назад, но я решил пересмотреть мультсериал W.I.T.C.H., и, не обнаружив нормального релиза, скупил все скупаемое, скачал все скачиваемое и сделал релиз с английским, французским, испанским, нидерландским, итальянским, немецким, русским, норвежским, датским, шведским, финским, чешским, турецким, польским и венгерским языками.

Первый и второй сезоны.
Такие дела.
Влад @ValdikSS
карма
620,0
рейтинг 192,0
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Реклама

Самое читаемое Разработка

Комментарии (67)

  • +2
    А почему хром оперой детектится?!
    • 0
      Такие сигнатуры у p0f. Сделаю нормальную, как вернусь домой.
  • 0
    Windows, два ssh-тоннеля, на конце прокси.

    First seen = 2015/07/24 19:45:36
    Last update = 2015/07/24 19:45:36
    Total flows = 1
    Detected OS = Linux 3.x [generic]
    HTTP software = ???
    MTU = 1500
    Network link = Ethernet or modem
    Language = Russian
    Distance = 15
    Sys change = 2015/07/24 19:45:37
    Uptime = 56 days 15 hrs 4 min (modulo 497 days)
    PTR = xxx-xx-xx-xx.dyn.estpak.ee

    PTR test = Probably home user
    Fingerprint and OS match. No proxy detected.
    No OpenVPN detected.
    • 0
      У вас не определился браузер. Какой у вас User-Agent?
      • 0
        Обычный Firefox последней версии.
        Mozilla/5.0 (Windows NT 6.3; WOW64; rv:39.0) Gecko/20100101 Firefox/39.0
  • 0
    Не знает такого UA «Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:42.0) Gecko/20100101 Firefox/42.0»

    И еще не определил Microsoft TMG HTTP/HTTPS прокси сервер.
  • 0
    OpenVPN Connect

    First seen = 2015/07/24 20:24:22
    Last update = 2015/07/24 20:26:31
    Total flows = 5
    Detected OS = Windows 7 or 8
    HTTP software = Firefox 10.x or newer (ID seems legit)
    MTU = 1308
    Network link = ???
    Language = Russian
    Distance = 14

    PTR test = Probably home user
    Fingerprint and OS match. No proxy detected.
    No OpenVPN detected.
    • 0
      Ваш VPN-сервис, вероятно, использует mssfix 1350, а не 1450.
    • 0
      Добавил определение настроек с mssfix 1400 и 1350.
  • 0
    Сижу за корпоративным прокси. Не распознал.

    First seen = 2015/07/24 20:29:45
    Last update = 2015/07/24 20:29:45
    Total flows = 1
    Detected OS = ???
    HTTP software = ???
    MTU = 1500
    Network link = Ethernet or modem
    Language = English
    Distance = 13

    PTR test = Probably home user
    Fingerprint and OS match. No proxy detected.
    No OpenVPN detected.
  • 0
    Когда я проектировал свой первый коммерческий vpn сервис, взял за привычку в openvpn клиентам ставить link-mtu 1200, чтоб не было проблем у пользователей за pppoe и прочими l2tp. Вот и сейчас мой openvpn не определился.
    • 0
      Слишком низкий MTU — не очень хорошо. У вас, например, будут проблемы с IPv6 внутри туннеля, т.к. по стандарту минимум 1280 должно быть.

      Ну и такой MTU явно говорит о туннеле, таких низких значений не бывает в реальной жизни.
      • 0
        Мой личный vpn-сервер является так же моим личным ip6-брокером. И вся инфраструктура у меня давно уже на ип6, так что везде, где есть возможность, я подключаюсь по ип6 через свой vpn с mtu 1200. Проблем не было. Можно ссылку на кусок стандарта, их мне обещающий?

        А то что у меня туннель значит то, что у меня билайн, инфолайн или любой из сотен других провайдеров, использующих pppoe или l2tp. Это если не смотреть на адрес точки выхода. Но если на него смотреть, то пользователя vpn проще спалить, сделав whois по его ипу.
        • +4
          www.ietf.org/rfc/rfc2460.txt
          23 страница
          параграф 5.
        • +1
          А то что у меня туннель значит то, что у меня билайн, инфолайн или любой из сотен других провайдеров, использующих pppoe или l2tp.
          Ну не делают таких низких MTU, это подозрительно. У билайна в L2TP 1456, с PPPoE у вас будет, вероятно, 1492. А у вас получается где-то около 1155.

          Проблем не было. Можно ссылку на кусок стандарта, их мне обещающий?
          Ваша ОС отправляет, скорее всего, так называемые atomic fragments, т.е. фрагментированные пакеты с флагом, что фрагментированных пакетов больше не будет. Такие пакеты обрабатываются в отдельной очереди, независимо от «нормальных» пакетов.
          tools.ietf.org/html/rfc6145#section-6
  • 0
    ssh2 тоннель

    First seen = 2015/07/24 20:34:33
    Last update = 2015/07/24 20:34:33
    Total flows = 1
    Detected OS = Linux 3.1-3.10
    HTTP software = Firefox 10.x or newer (ID OS mismatch)
    MTU = 1500
    Network link = Ethernet or modem
    Language = Russian
    Distance = 12
    Sys change = 2015/07/24 20:34:33
    Uptime = 41 days 2 hrs 31 min (modulo 49 days)

    PTR test = Probably home user
    Fingerprint and User-Agent mismatch. Either proxy or User-Agent spoofing.
    No OpenVPN detected.
  • 0
    Я так понял ваш форк на гитхабе отличается от оригинального p0f только тем что позволяет получать MTU через апи:
    (что насколько я помню умел p0f v2 но еще не прикрутили к v3)
    (upd:https://github.com/skord/p0f/blob/master/mtu.h)

    # ./p0f-client /var/run/p0f.sock 192.168.128.1

    First seen = 2015/07/24 20:31:44
    Last update = 2015/07/24 20:31:44
    Total flows = 1
    Detected OS = Windows 7 or 8
    HTTP software = Opera 15.x-18.x (ID is fake)
    MTU = 1500
    Network link = Ethernet or modem
    Language = English
    Distance = 0

    а вот это только у вас на сайтике?:

    PTR test = Probably home user
    Fingerprint and OS match. No proxy detected.
    No OpenVPN detected.
    • +1
      Да, в форке только добавлено запоминание MTU и его экспорт в API (mtu branch), и обновлены сигнатуры. PTR test и разъяснениями занимается скрипт.
  • +2
    Интересненько! Спасибо за статью!

    Проверил несколько вариантов с Linux хоста через:
    1. прямое соединение — всё правильно
    2. ssh-туннель — говорит, что я без прокси (ну, исходя из предложения в статье, которое используется для детектирования прокси, не мудрено, так как хост и прокси оба на Linux)
    3. OpenVPN — таки определило меня
    4. OpenVPN + Squid на том конце — не поймало, тоже по понятным причинам

    Итого — 1 из 3 (ну, или 2 из 4), но на Windows хосте, наверно всё-таки 3 из 3 было бы.
  • +3
    Оставлю ссылку на сервис, который недавно пилили, 2ip.ru/privacy. Обратите внимание на двусторонний пинг, по диффам пинга из браузера и наоборот можно тоже детектить VPN.
    • 0
      VPN под прокси не определил, только прокси.
    • +1
      понравилась проверка времени в браузере против айпи. Как с этим бороться?
      • 0
        Чуть позже напишу заметку по всем методам определения, и как от этого защищаться.
      • +2
        Тут еще интереснее whoer.net/extended
        • 0
          Действительно, интереснее, как минимум WebRTC отдаёт инфу по локальным адресам (и сразу видно всякие VirtualBox, LXC, Docker и т.п., запущенные на ноуте). Топикстартеру добавить бы такую штуку в свой сервис.
      • 0
        Очевидно же: ставить на хосте тот же часовой пояс, что стоит у сервера.
    • 0
      Забавно, сижу просто из дома без каких либо прокси или тоннелей, а результат:

      Вы используете средства анонимизации, однако нам не удалось узнать ваш реальный IP адрес.

      Вероятность анонимизации:
      99%

      Ещё более забавно то, что перенаправив весь трафик хоста в домашней локалке через один из своих серверов за границей результат не изменился, изменился лишь отдектированный IP поменявшись с домашнего на адрес сервера.
    • 0
      P.S. забыл написать, что перенаправил трафик через OpenVPN.
  • 0
    Вы можете отключить mssfix, установив его в 0 и на сервере, и на клиентах. В этом случае, ваш MSS будет 1460 (в случае IPv4), что соответствует MTU 1500.

    При этом, очевидно, получаем повышенный owerhead
    Разумнее задать MSS немного меньше, причём это достаточно сделать на клиенте.
  • 0
    Короче, сидим на линухе через линуховый VPN ровно.
  • –2
    Сделайте API, полезный сервис будет!
  • 0
    Для детектирования прокси еще можно использовать разницу во временных зонах.
  • 0
    [Teach2BWitch]
    Угадай автора по КПДВ… (Спасибо за пополнение коллекции качественными версиями!)
    Пожалуй, текст лучше We can become more than you know… Рандомная идея — менять картинку в зависимости от результатов тестирования… Ну или добавлять элементы, прокси — портал, опенвпн — складка («портал» после снятия завесы), etc… [остановите меня, после пересмотра на английском я все никак не могу закончить бесконечно перечитывать все выпуски комиксов]


    HTTP software = Opera 11.x-14.x (ID seems legit)#

    14x?! Я конечно понимаю, что новая опера пошла с 15 версии вроде, но что за звери 13.x и 14.x?

    PTR test = Probably server user
    Не зря несколько лет назад попросил админов провайдера прописать себе PTR :)

    Uptime = 1 days 11 hrs 29 min (modulo 497 days)
    Это как вообще аптайм моего роутера определился, и что за 497 дней? Добавил IP в список маршрутов на OpenVPN, все равно аптайм роутера…
    • 0
      Uptime определяется так же, как у всех — по меткам в заголовках. А 497 дней — это примерно 2³² tick'ов (один tick в Linux'е по историческим причинам — это ⅟₁₀₀ секунды). Там счётчик переполняется :-)
      • 0
        Ну у меня вообще ничего из этого не определилось правильно.
  • 0
    А определит ли скрипт наличие socks прокси?
  • 0
    нет прокси? ооокей
    First seen    = 2015/07/25 07:43:32
    Last update   = 2015/07/25 07:43:32
    Total flows   = 1
    Detected OS   = Linux 3.x [generic]
    HTTP software = ???
    MTU           = 1500
    Network link  = Ethernet or modem
    Language      = ???
    Distance      = 11
    Sys change    = 2015/07/25 07:43:32
    Uptime        = 81 days 4 hrs 52 min (modulo 198 days)
    PTR           = de31.friproxy0.biz
    PTR test      = Probably server user
    Fingerprint and OS match. No proxy detected (this test does not include headers detection).
    No OpenVPN detected.
    
    • –1
      В p0f сигнатуры для Chrome устаревшие, а ваш прокси еще и немного заголовки модифицирует. Добавил generic-сигнатуры, попробуйте еще раз.
      • +1
        изменений ноль, за исключением счетчиков времени.
        вот сижу, пытаюсь понять зачем всё это мне…
  • 0
    Пользователям Хрома думаю знакомо расширение «ZenMate», выключив показывает следующее:

    First seen = 2015/07/25 08:26:58
    Last update = 2015/07/25 08:26:58
    Total flows = 1
    Detected OS = Linux 2.2.x-3.x [generic]
    HTTP software = ???
    MTU = 1500
    Network link = Ethernet or modem
    Language = Russian
    Distance = 13
    Uptime = 126 days 10 hrs 32 min (modulo 198 days)

    PTR test = Probably home user
    Fingerprint and OS match. No proxy detected (this test does not include headers detection).
    No OpenVPN detected.
  • 0
    при отключенном прокси
    WITCH?

    First seen = 2015/07/25 09:51:16
    Last update = 2015/07/25 09:51:16
    Total flows = 4
    Detected OS = Mac OS X [generic]
    HTTP software = Chrome 27.x or newer (ID is fake)
    MTU = 1400
    Network link = Probably IPsec or other VPN
    Language = Russian
    Distance = 16
    Uptime = 7 days 12 hrs 53 min (modulo 49 days)
    PTR = xxx.yyy

    PTR test = Probably server user
    Your fingerprint is fake. This is probably a false positive.
    No OpenVPN detected.
    (у ДомРу можно реверс зону прописать через ЛК)

    а через squid-proxy на digital ocean

    First seen = 2015/07/25 09:48:45
    Last update = 2015/07/25 09:55:22
    Total flows = 2
    Detected OS = Linux 3.x [generic]
    HTTP software = ???
    MTU = 1500
    Network link = Ethernet or modem
    Language = Russian
    Distance = 11
    Sys change = 2015/07/25 09:55:22
    Uptime = 13 days 4 hrs 45 min (modulo 198 days)

    PTR test = Probably home user
    Fingerprint and OS match. No proxy detected (this test does not include headers detection).
    No OpenVPN detected.
    • –1
      Я не думал, что так много людей пользуются Chrome. Попробуйте еще раз, или попробуйте с Firefox.
      • 0
        через squid прокси
        WITCH?

        First seen = 2015/07/25 13:48:43
        Last update = 2015/07/25 13:48:43
        Total flows = 1
        Detected OS = Linux 3.x [generic]
        HTTP software = ???
        MTU = 1500
        Network link = Ethernet or modem
        Language = Russian
        Distance = 12
        Sys change = 2015/07/25 13:48:43
        Uptime = 13 days 8 hrs 38 min (modulo 198 days)

        PTR test = Probably home user
        Fingerprint and OS match. No proxy detected (this test does not include headers detection).
        No OpenVPN detected.

        напрямую
        WITCH?

        First seen = 2015/07/25 13:49:59
        Last update = 2015/07/25 13:49:59
        Total flows = 3
        Detected OS = Mac OS X [generic]
        HTTP software = Chrome 27.x or newer (ID is fake)
        MTU = 1400
        Network link = Probably IPsec or other VPN
        Language = Russian
        Distance = 16
        Uptime = 7 days 16 hrs 46 min (modulo 49 days)
        PTR = xxx.yyy

        PTR test = Probably server user
        Your fingerprint is fake. This is probably a false positive.
        No OpenVPN detected.

        Firefox с proxy:

        First seen = 2015/07/25 13:48:43
        Last update = 2015/07/25 13:53:42
        Total flows = 2
        Detected OS = Linux 3.x [generic]
        HTTP software = Firefox 10.x or newer (ID OS mismatch)
        MTU = 1500
        Network link = Ethernet or modem
        Language = Russian
        Distance = 12
        Sys change = 2015/07/25 13:53:43
        Uptime = 13 days 8 hrs 43 min (modulo 198 days)

        PTR test = Probably home user
        Fingerprint and User-Agent mismatch. Either proxy or User-Agent spoofing.
        No OpenVPN detected.

        Firefox без proxy:

        First seen = 2015/07/25 13:49:59
        Last update = 2015/07/25 13:54:09
        Total flows = 6
        Detected OS = Mac OS X [generic]
        HTTP software = Firefox 10.x or newer (ID seems legit)
        MTU = 1400
        Network link = Probably IPsec or other VPN
        Language = Russian
        Distance = 16
        Uptime = 9 days 15 hrs 3 min (modulo 62 days)
        PTR = xxx.yyy

        PTR test = Probably server user
        Fingerprint and OS match. No proxy detected (this test does not include headers detection).
        No OpenVPN detected.

        Tor Browser
        First seen = 2015/07/25 13:51:10
        Last update = 2015/07/25 13:51:10
        Total flows = 1
        Detected OS = Linux 3.1-3.10
        HTTP software = Firefox 10.x or newer (ID OS mismatch)
        MTU = 1500
        Network link = Ethernet or modem
        Language = English
        Distance = 11
        Sys change = 2015/07/25 13:51:10
        Uptime = 44 days 6 hrs 48 min (modulo 49 days)
        PTR = 62-210-105-116.rev.poneytelecom.eu

        PTR test = Probably home user
        Fingerprint and User-Agent mismatch. Either proxy or User-Agent spoofing.
        No OpenVPN detected.

      • +4
        Вы не думали что много людей пользуется самым популярным браузером??? А как он тогда стал самым популярным, если им никто не пользуется?
        • +2
          Я просто забыл про него, честно говоря. Тестировалось все на десктопном Firefox и мобильных браузерах.
          Я что-то внезапно заболел и могу только спать, мне жутко неловко, но пока добавить нормальные сигнатуры не могу.
  • –5
    Спасибо за статью, много подчеркнул для себя.
  • 0
    Через Опен ВПН

    First seen = 2015/07/25 11:23:39
    Last update = 2015/07/25 11:23:39
    Total flows = 4
    Detected OS = Windows 7 or 8
    HTTP software = Chrome 27.x or newer (ID is fake)
    MTU = 1300
    Network link = generic tunnel or VPN
    Language = Russian
    Distance = 12
    PTR = ХХХ.ABC-ASD.com

    PTR test = Probably server user
    Your fingerprint is fake. This is probably a false positive.
    No OpenVPN detected.
  • 0
    За tor в режиме socks прокси:
    First seen = 2015/07/25 12:33:00
    Last update = 2015/07/25 12:33:00
    Total flows = 2
    Detected OS = Linux 3.1-3.10
    HTTP software = Firefox 10.x or newer (ID seems legit)
    MTU = 1500
    Network link = Ethernet or modem
    Language = Russian
    Distance = 9
    Uptime = 31 days 8 hrs 43 min (modulo 49 days)

    PTR test = Probably home user
    Fingerprint and OS match. No proxy detected (this test does not include headers detection).
    No OpenVPN detected.
  • 0
    Сижу за OpenVPN (аптайм неправильный, кстати?):

    First seen = 2015/07/25 12:52:32
    Last update = 2015/07/25 12:52:32
    Total flows = 1
    Detected OS = Mac OS X [generic]
    HTTP software = ???
    MTU = 1410
    Network link = ???
    Language = Russian
    Distance = 12
    Uptime = 17 days 19 hrs 28 min (modulo 49 days)
    PTR = ***.ru

    PTR test = Probably server user
    Fingerprint and OS match. No proxy detected (this test does not include headers detection).
    No OpenVPN detected.
    • 0
      У вас, наверное, какая-то старая версия OpenVPN? Я встречал расхождение на 2 значения для старых версий, но только однажды это видел.
      • 0
        openvpn --version
        OpenVPN 2.2.1 x86_64-linux-gnu [SSL] [LZO2] [EPOLL] [PKCS11] [eurephia] [MH] [PF_INET6] [IPv6 payload 20110424-2 (2.2RC2)] built on Dec 1 2014
  • +5
    Есть рекомендации как обойти такой детект?
    • +3
      Устанавливать MSS, кратный 10, средствами iptables. 1400 или 1380, например. Либо вовсе его не исправлять, т.е. установить mssfix 0. Это вызовет излишнюю фрагментацию, зато у вас будет MTU 1500.
      • –1
        пробовал играть с MSS но ничего не получилось. Пробовал через iptables и через openvpn client-side settings. Гугление показало что MSS через iptables только для TCP — это так?
        • 0
          Да, верно, MSS это параметр заголовка TCP, но он изменяется (если вы про mssfix OpenVPN'а) и при UDP-подключении тоже. А что конкретно у вас не получается, значение вообще не меняется, или вы не можете конкретное установить?
          • 0
            Я имел в виду MSS в iptables, но цель — конечно же mssfix в ОpenVPN. Чтобы ваша детектилка меня так смачно не определяла :)

            Когда задавал значение MSS в iptables, в детектилке значение не менялось. Когда добавлял mssfix в клиентсий openvpn конфиг, значение в детектилке менялось, но опознование всё равно было правильное.
            • –1
              У вас, вероятно, неправильное правило в iptables. Нужно что-то вроде такого:
              iptables -t mangle -A FORWARD -i tun0 -p tcp --tcp-flags SYN,RST SYN -m tcpmss --mss 1361:1536 -j TCPMSS --set-mss 1360
              mssfix должен быть установлен в 0 на клиенте и сервере. Если используете AES, например, то нужно уменьшить еще сильнее.
    • 0
      еще как вариант использовать obfsproxy, но и его можно при очень большом желании обноружить.
      Тогда использовать обычный stunnel. Правда тут уже возникает потеря скорости из-за дополнительного слоя шифрования.

      Ну это помимо игр с MTU.
  • –2
    посмотрим что из этого выйдет
  • –1
    Включил свой рабочий VPN через IPSec:

    First seen    = 2015/07/25 16:45:53
    Last update   = 2015/07/25 16:45:53
    Total flows   = 1
    Detected OS   = Mac OS X  [generic]
    HTTP software = ???
    MTU           = 1500
    Network link  = Ethernet or modem
    Language      = English
    Distance      = 17
    Uptime        = 1 days 9 hrs 33 min (modulo 49 days)
    PTR           = ...
    
    PTR test      = Probably home user
    Fingerprint and OS match. No proxy detected (this test does not include headers detection).
    No OpenVPN detected
    


    Я уж не знаю, как он работает, но ваша детектилка ничего не задетектила, хотя должна была бы :). Uptime, кстати, тоже неправильно определил.
  • +4
    Думаю, раз уж Вы заморочились сделать такой вредный сервис, то в статью не помешает добавить совет как что настроить чтобы осложнить для конечных сайтов определение использования пользователем proxy/vpn. Например, во что всё-же лучше выставлять mssfix чтобы это было наиболее похоже на обычных провайдеров (пусть даже мобильных) и менее вероятно детектилось как openvpn.
    • +1
      Там и так было написано, но не совсем уж прямо. Изменил текст, должно быть понятней.
  • 0
    В Android Chrome показывает то
    Detected OS = Linux 3.1-3.10
    HTTP software = Chrome 27.x or newer (ID is fake)
    то
    HTTP software = Android
    Странно немного.
    Есть описание, как работает p0f, или только исходники?
    • 0
      Проверьте еще раз, пожалуйста, не должно быть ID is fake.

      В p0f есть список сигнатур для разных браузеров, где указан порядок заголовков, которые отправляет браузер, и какие-то специфичные для браузера вещи. Android — generic-сигнатура, которая только и делает, что ищет слово Android в User-Agent.
  • 0
    Соединение через OpenVPN c MacOS, браузер – Safari.

    Но вообще все это странно: множество любителей посмотреть днем сериалы сидят внутри корпоративных сетей. Если обрубать их потому, что соединение идет через опосредованный сервер, индустрия развлечений может сильно пострадать.

    First seen = 2015/07/26 14:25:54
    Last update = 2015/07/26 14:25:54
    Total flows = 1
    Detected OS = Mac OS X [generic] [fuzzy]
    HTTP software = ???
    MTU = 1376
    Network link = ???
    Language = Armenian
    Distance = 14
    Uptime = 11 days 12 hrs 16 min (modulo 49 days)
    PTR =…

    PTR test = Probably server user
    Fingerprint and OS match. No proxy detected (this test does not include headers detection).
    No OpenVPN detected.
    • 0
      Это просто концепт, чтобы напомнить об MSS и показать, что он тоже имеет значение.
      У вас стандартные настройки OpenVPN? Версия, может, старая (<2.3.1)?
  • 0
    SoftEther настроенный визардом по дефолту в л2тп+ипсек, открывал сафарей с макоси, получил это:

    First seen = 2015/07/28 01:08:14
    Last update = 2015/07/28 01:08:14
    Total flows = 2
    Detected OS = Linux 2.2.x-3.x [generic]
    HTTP software = Chrome 27.x or newer (ID OS mismatch)
    MTU = 1500
    Network link = Ethernet or modem
    Language = Russian
    Distance = 10
    Sys change = 2015/07/28 01:08:17
    Uptime = 35 days 8 hrs 30 min (modulo 198 days) < — аптайм сервера с впн
    PTR = localhost.local

    PTR test = Probably server user
    Fingerprint and User-Agent mismatch. Either proxy or User-Agent spoofing.
    No OpenVPN detected.


Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.