Решил не создавать новую ветку и написать сюда.
Целью данного сообщения является демонстрация способа определения поддержки протокола QUIC браузером со стороны антифрод систем очень незаметно для пользователя. Так как факт проверки не будет виден в developer tools Chrome, потому что сайт не доступен по протоколу QUIC.
Множество подробностей реализации я опускаю ради упрощения. Описываю ниже возможную(я ее протестировал) логику реализации такой проверки.
Подготовка на стороне сервера:
- Веб-сервер (в моем случае nginx, но можно использовать любой).
- Инструмент для мониторинга и захвата UDP-пакетов с признаками QUIC (в моем случае, собственное решение на базе eBPF/pcap). Альтернативы: стандартный tcpdump или Wireshark.
Основная логика:
- При первом запросе страницы отправлять специальные заголовки Alt-Svc и Critical-CH.
- В ответ на это, браузер (Chrome) попытается установить QUIC-соединение перед повторным запросом страницы. Повторный запрос страницы Chrome делает потому что получил заголовок Critical-CH.
- К моменту повторного запроса на сервере уже известно, был ли отправлен UDP-пакет с QUIC-признаками.
Последовательность работы Chrome:
- Исходный запрос страницы.
- Попытка установления QUIC-соединения.
- Повторный запрос страницы.
Теоретически, существует вероятность, что QUIC-пакет не успеет дойти до сервера до повторного запроса, но это маловероятно и решаемо.
Дополнительно для браузеров без поддержки Critical-CH или для надежности можно использовать внутренние редиректы, чтобы браузер успел отправить QUIC пакет к моменту анализа на сервере.
В качестве побочного эффекта можно также относительно незаметно получить реальный ip пользователя, если он использует прокси, не отключил QUIC, и устанавливает прокси в браузер стандартным способом. BAS этому не подвержен.
Выводы:
Всем капец 😁
P.S.
Стал собирать статистику по поддержке протокола QUIC в живой природе. Предварительные результаты не утешительные. Я давал выше ссылку на анализ Cloudflare. Cloudflare мягко говоря немного манипулирует статистикой, так как не дает данных в разрезе операционных систем и версий браузеров. Если выкинуть старые версии браузеров и операционных систем, то будет совсем другая история.
P.P.S
Может быть добавлю позже статистику, что сейчас собирается на трафике у меня.