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., и, не обнаружив нормального релиза, скупил все скупаемое, скачал все скачиваемое и сделал релиз с английским, французским, испанским, нидерландским, итальянским, немецким, русским, норвежским, датским, шведским, финским, чешским, турецким, польским и венгерским языками.

Первый и второй сезоны.
Такие дела.

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


  1. datacompboy
    24.07.2015 19:47
    +2

    А почему хром оперой детектится?!


    1. ValdikSS Автор
      24.07.2015 20:15

      Такие сигнатуры у p0f. Сделаю нормальную, как вернусь домой.


  1. passerby
    24.07.2015 19:51

    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.


    1. ValdikSS Автор
      24.07.2015 20:18

      У вас не определился браузер. Какой у вас User-Agent?


      1. passerby
        24.07.2015 20:24

        Обычный Firefox последней версии.
        Mozilla/5.0 (Windows NT 6.3; WOW64; rv:39.0) Gecko/20100101 Firefox/39.0


  1. xvilka
    24.07.2015 20:26

    Не знает такого UA «Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:42.0) Gecko/20100101 Firefox/42.0»

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


  1. XaosSintez
    24.07.2015 20:27

    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.


    1. ValdikSS Автор
      24.07.2015 20:44

      Ваш VPN-сервис, вероятно, использует mssfix 1350, а не 1450.


    1. ValdikSS Автор
      24.07.2015 23:53

      Добавил определение настроек с mssfix 1400 и 1350.


  1. BigD
    24.07.2015 20:31

    Сижу за корпоративным прокси. Не распознал.

    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.


  1. J_o_k_e_R
    24.07.2015 20:36

    Когда я проектировал свой первый коммерческий vpn сервис, взял за привычку в openvpn клиентам ставить link-mtu 1200, чтоб не было проблем у пользователей за pppoe и прочими l2tp. Вот и сейчас мой openvpn не определился.


    1. ValdikSS Автор
      24.07.2015 20:50

      Слишком низкий MTU — не очень хорошо. У вас, например, будут проблемы с IPv6 внутри туннеля, т.к. по стандарту минимум 1280 должно быть.

      Ну и такой MTU явно говорит о туннеле, таких низких значений не бывает в реальной жизни.


      1. J_o_k_e_R
        24.07.2015 21:01

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

        А то что у меня туннель значит то, что у меня билайн, инфолайн или любой из сотен других провайдеров, использующих pppoe или l2tp. Это если не смотреть на адрес точки выхода. Но если на него смотреть, то пользователя vpn проще спалить, сделав whois по его ипу.


        1. ufm
          24.07.2015 21:56
          +4

          www.ietf.org/rfc/rfc2460.txt
          23 страница
          параграф 5.


        1. ValdikSS Автор
          24.07.2015 21:57
          +1

          А то что у меня туннель значит то, что у меня билайн, инфолайн или любой из сотен других провайдеров, использующих pppoe или l2tp.
          Ну не делают таких низких MTU, это подозрительно. У билайна в L2TP 1456, с PPPoE у вас будет, вероятно, 1492. А у вас получается где-то около 1155.

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


  1. 7313
    24.07.2015 20:37

    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.


  1. abrwalk
    24.07.2015 20:45

    Я так понял ваш форк на гитхабе отличается от оригинального 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. ValdikSS Автор
      24.07.2015 22:25
      +1

      Да, в форке только добавлено запоминание MTU и его экспорт в API (mtu branch), и обновлены сигнатуры. PTR test и разъяснениями занимается скрипт.


  1. frol
    24.07.2015 21:00
    +2

    Интересненько! Спасибо за статью!

    Проверил несколько вариантов с Linux хоста через:

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

    Итого — 1 из 3 (ну, или 2 из 4), но на Windows хосте, наверно всё-таки 3 из 3 было бы.


  1. madflux
    24.07.2015 21:00
    +3

    Оставлю ссылку на сервис, который недавно пилили, 2ip.ru/privacy. Обратите внимание на двусторонний пинг, по диффам пинга из браузера и наоборот можно тоже детектить VPN.


    1. savostin
      24.07.2015 22:24

      VPN под прокси не определил, только прокси.


    1. kacang
      25.07.2015 14:52
      +1

      понравилась проверка времени в браузере против айпи. Как с этим бороться?


      1. madflux
        25.07.2015 20:46

        Чуть позже напишу заметку по всем методам определения, и как от этого защищаться.


      1. zhovner
        25.07.2015 20:51
        +2

        Тут еще интереснее whoer.net/extended


        1. motienko
          26.07.2015 22:04

          Действительно, интереснее, как минимум WebRTC отдаёт инфу по локальным адресам (и сразу видно всякие VirtualBox, LXC, Docker и т.п., запущенные на ноуте). Топикстартеру добавить бы такую штуку в свой сервис.


      1. IRainman
        26.07.2015 19:59

        Очевидно же: ставить на хосте тот же часовой пояс, что стоит у сервера.


    1. IRainman
      25.07.2015 19:06

      Забавно, сижу просто из дома без каких либо прокси или тоннелей, а результат:

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

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

      Ещё более забавно то, что перенаправив весь трафик хоста в домашней локалке через один из своих серверов за границей результат не изменился, изменился лишь отдектированный IP поменявшись с домашнего на адрес сервера.


    1. IRainman
      25.07.2015 19:11

      P.S. забыл написать, что перенаправил трафик через OpenVPN.


  1. grumbler66rus
    24.07.2015 21:14

    Вы можете отключить mssfix, установив его в 0 и на сервере, и на клиентах. В этом случае, ваш MSS будет 1460 (в случае IPv4), что соответствует MTU 1500.

    При этом, очевидно, получаем повышенный owerhead
    Разумнее задать MSS немного меньше, причём это достаточно сделать на клиенте.


  1. Lovesuper
    24.07.2015 23:04

    Короче, сидим на линухе через линуховый VPN ровно.


  1. Hungry_Hunter
    25.07.2015 00:22
    -2

    Сделайте API, полезный сервис будет!


  1. ArjLover
    25.07.2015 01:41

    Для детектирования прокси еще можно использовать разницу во временных зонах.


  1. KorDen32
    25.07.2015 01:56

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


    1. khim
      25.07.2015 15:39

      Uptime определяется так же, как у всех — по меткам в заголовках. А 497 дней — это примерно 2?? tick'ов (один tick в Linux'е по историческим причинам — это ???? секунды). Там счётчик переполняется :-)


      1. icCE
        26.07.2015 00:27

        Ну у меня вообще ничего из этого не определилось правильно.


  1. FreeLSD
    25.07.2015 05:12

    А определит ли скрипт наличие socks прокси?


  1. lost55
    25.07.2015 07:47

    нет прокси? ооокей

    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. ValdikSS Автор
      25.07.2015 11:11
      -1

      В p0f сигнатуры для Chrome устаревшие, а ваш прокси еще и немного заголовки модифицирует. Добавил generic-сигнатуры, попробуйте еще раз.


      1. lost55
        25.07.2015 11:16
        +1

        изменений ноль, за исключением счетчиков времени.
        вот сижу, пытаюсь понять зачем всё это мне…


  1. VokaMut
    25.07.2015 08:27

    Пользователям Хрома думаю знакомо расширение «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.


  1. vikarti
    25.07.2015 09:58

    при отключенном прокси
    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. ValdikSS Автор
      25.07.2015 11:12
      -1

      Я не думал, что так много людей пользуются Chrome. Попробуйте еще раз, или попробуйте с Firefox.


      1. vikarti
        25.07.2015 13:55

        через 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.


      1. khim
        25.07.2015 15:42
        +4

        Вы не думали что много людей пользуется самым популярным браузером??? А как он тогда стал самым популярным, если им никто не пользуется?


        1. ValdikSS Автор
          25.07.2015 17:16
          +2

          Я просто забыл про него, честно говоря. Тестировалось все на десктопном Firefox и мобильных браузерах.
          Я что-то внезапно заболел и могу только спать, мне жутко неловко, но пока добавить нормальные сигнатуры не могу.


  1. kvaki
    25.07.2015 11:08
    -5

    Спасибо за статью, много подчеркнул для себя.


  1. max_rip
    25.07.2015 11:29

    Через Опен ВПН

    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.


  1. random1st
    25.07.2015 12:35

    За 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.


  1. alexxxst
    25.07.2015 12:54

    Сижу за 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.


    1. ValdikSS Автор
      25.07.2015 14:49

      У вас, наверное, какая-то старая версия OpenVPN? Я встречал расхождение на 2 значения для старых версий, но только однажды это видел.


      1. alexxxst
        25.07.2015 20:00

        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


  1. deus
    25.07.2015 14:21
    +5

    Есть рекомендации как обойти такой детект?


    1. ValdikSS Автор
      25.07.2015 14:50
      +3

      Устанавливать MSS, кратный 10, средствами iptables. 1400 или 1380, например. Либо вовсе его не исправлять, т.е. установить mssfix 0. Это вызовет излишнюю фрагментацию, зато у вас будет MTU 1500.


      1. kacang
        27.07.2015 06:16
        -1

        пробовал играть с MSS но ничего не получилось. Пробовал через iptables и через openvpn client-side settings. Гугление показало что MSS через iptables только для TCP — это так?


        1. ValdikSS Автор
          27.07.2015 11:56

          Да, верно, MSS это параметр заголовка TCP, но он изменяется (если вы про mssfix OpenVPN'а) и при UDP-подключении тоже. А что конкретно у вас не получается, значение вообще не меняется, или вы не можете конкретное установить?


          1. kacang
            27.07.2015 12:46

            Я имел в виду MSS в iptables, но цель — конечно же mssfix в ОpenVPN. Чтобы ваша детектилка меня так смачно не определяла :)

            Когда задавал значение MSS в iptables, в детектилке значение не менялось. Когда добавлял mssfix в клиентсий openvpn конфиг, значение в детектилке менялось, но опознование всё равно было правильное.


            1. ValdikSS Автор
              27.07.2015 12:53
              -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, например, то нужно уменьшить еще сильнее.


    1. icCE
      26.07.2015 00:23

      еще как вариант использовать obfsproxy, но и его можно при очень большом желании обноружить.
      Тогда использовать обычный stunnel. Правда тут уже возникает потеря скорости из-за дополнительного слоя шифрования.

      Ну это помимо игр с MTU.


  1. Pavlusha
    25.07.2015 15:16
    -2

    посмотрим что из этого выйдет


  1. youROCK
    25.07.2015 16:48
    -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, кстати, тоже неправильно определил.


  1. powerman
    25.07.2015 17:48
    +4

    Думаю, раз уж Вы заморочились сделать такой вредный сервис, то в статью не помешает добавить совет как что настроить чтобы осложнить для конечных сайтов определение использования пользователем proxy/vpn. Например, во что всё-же лучше выставлять mssfix чтобы это было наиболее похоже на обычных провайдеров (пусть даже мобильных) и менее вероятно детектилось как openvpn.


    1. ValdikSS Автор
      25.07.2015 19:50
      +1

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


  1. catharsis
    26.07.2015 12:08

    В Android Chrome показывает то
    Detected OS = Linux 3.1-3.10
    HTTP software = Chrome 27.x or newer (ID is fake)
    то
    HTTP software = Android
    Странно немного.
    Есть описание, как работает p0f, или только исходники?


    1. ValdikSS Автор
      26.07.2015 14:09

      Проверьте еще раз, пожалуйста, не должно быть ID is fake.

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


  1. aram_pakhchanian
    26.07.2015 14:33

    Соединение через 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.


    1. ValdikSS Автор
      26.07.2015 14:37

      Это просто концепт, чтобы напомнить об MSS и показать, что он тоже имеет значение.
      У вас стандартные настройки OpenVPN? Версия, может, старая (<2.3.1)?


  1. JetP1L0t
    28.07.2015 01:19

    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.