Ник Пост Дата
ValdikSS

Just discovered that Rutracker opens without any circumvention methods on Edge and Firefox, and that turns out to be thanks to ECH, it’s hosted behind Cloudflare.

Note: most browsers require DNS-over-HTTPS to be configured to receive DNS HTTPS type record which contain ECH configuration, however in Firefox 130, it works even with the regular unprotected DNS.

As far as I could find, it haven’t been announced anywhere, except in their documentation:

Caution

ECH is disabled globally, and cannot currently be enabled in the Cloudflare Dashboard.

Starting in August, 2024, ECH will be gradually released on free zones. It will not be possible to disable it. A toggle will be added to the Cloudflare Dashboard at a later point before ECH is made available for other zone plans.

Cloudflare uses a single ECH key & configuration for all the domains

$ dig +short rutracker.org HTTPS
1 . alpn="h3,h2" ipv4hint=104.21.32.39,172.67.182.196 ech=AEX+DQBBYQAgACB/ZNpruUIOMT7U9iv5DLgTo+oHQ7RI7GeHwd0tbccrCAAEAAEAAQASY2xvdWRmbGFyZS1lY2guY29tAAA= ipv6hint=2606:4700:3031::6815:2027,2606:4700:3034::a
c43:b6c4

$ dig +short crypto.cloudflare.com HTTPS
1 . alpn="http/1.1,h2" ipv4hint=162.159.137.85,162.159.138.85 ech=AEX+DQBBYQAgACB/ZNpruUIOMT7U9iv5DLgTo+oHQ7RI7GeHwd0tbccrCAAEAAEAAQASY2xvdWRmbGFyZS1lY2guY29tAAA= ipv6hint=2606:4700:7::a29f:8955,2606:4700:7:
:a29f:8a55
SvcParam: ech
    SvcParamKey: ech (5)
    SvcParamValue length: 71
    ECHConfigList length: 69
    ECHConfig: id=97 cloudflare-ech.com
        Version: 0xfe0d
        Length: 65
        HKPE Key Config
            Config Id: 97
            KEM Id: DHKEM(X25519, HKDF-SHA256) (32)
            Public Key length: 32
            Public Key: 7f64da6bb9420e313ed4f62bf90cb813a3ea0743b448ec6787c1dd2d6dc72b08
            Cipher Suites length: 4
            Cipher Suites (1 suite)
        Maximum Name Length: 0
        Public Name length: 18
        Public Name: cloudflare-ech.com
        Extensions length: 0

cloudflare-ech.com is used as a canary domain (SNI) for TLS requests

Transport Layer Security
    TLSv1.3 Record Layer: Handshake Protocol: Client Hello
        Content Type: Handshake (22)
        Version: TLS 1.0 (0x0301)
        Length: 587
        Handshake Protocol: Client Hello
            Handshake Type: Client Hello (1)
            Length: 583
            Version: TLS 1.2 (0x0303)
            Random: cb6244609a92947f8ccf9c7e731dc013cf00f739468bad266be3e9d4b40dfea4
            Session ID Length: 32
            Session ID: 2587cb2bc557eb6af6c561df526f2f42111108418712bfe550331cf0a4b1af53
            Cipher Suites Length: 34
            Cipher Suites (17 suites)
            Compression Methods Length: 1
            Compression Methods (1 method)
            Extensions Length: 476
            Extension: server_name (len=23) name=cloudflare-ech.com
            Extension: extended_master_secret (len=0)
            Extension: renegotiation_info (len=1)
            Extension: supported_groups (len=14)
            Extension: ec_point_formats (len=2)
            Extension: application_layer_protocol_negotiation (len=14)
            Extension: status_request (len=5)
            Extension: delegated_credentials (len=10)
            Extension: key_share (len=107) x25519, secp256r1
            Extension: supported_versions (len=5) TLS 1.3, TLS 1.2
            Extension: signature_algorithms (len=24)
            Extension: record_size_limit (len=2)
            Extension: encrypted_client_hello (len=217)
                Type: encrypted_client_hello (65037)
                Length: 217
                Client Hello type: Outer Client Hello (0)
                Cipher Suite: HKDF-SHA256/AES-128-GCM
                    KDF Id: HKDF-SHA256 (1)
                    AEAD Id: AES-128-GCM (1)
                Config Id: 97
                Enc length: 32
                Enc: 08181d7e3ce624682fe03c8c31698f5a6c198aff850bccfedf6780e8dea6267e
                Payload length: 175
                Payload [truncated]: 20d54aebde0806f5ea62f287b713d9dba7e93636885160b2588633befe1e986046991c997bf9bd3e96927d99a3a3c0075870644ed6b9d0cd25e8da2ca197ee00907eef3955a5507b83bddecff3a720ad62ff577ac2b685ede87ae196c75e5f4c5ed02566350834bbc945b5f380
            [JA4: t13d1713h2_5b57614c22b0_748f4c70de1c]
            [JA4_r: t13d1713h2_002f,0035,009c,009d,1301,1302,1303,c009,c00a,c013,c014,c02b,c02c,c02f,c030,cca8,cca9_0005,000a,000b,000d,0017,001c,0022,002b,0033,fe0d,ff01_0403,0503,0603,0804,0805,0806,0401,0501,0601,0203,0201]
            [JA3 Fullstring: 771,4865-4867-4866-49195-49199-52393-52392-49196-49200-49162-49161-49171-49172-156-157-47-53,0-23-65281-10-11-16-5-34-51-43-13-28-65037,29-23-24-25-256-257,0]
            [JA3: ed3d2cb3d86125377f5a4d48e431af48]
2024-09-12T22:45:22.118Z
artenox

Да, у меня под йотой rutracker открывается в Brave 1.59.117/Chromium 118.0.5993.70 (sni cloudflare-ech.com) с включенным #encrypted-client-hello (я слышал, что в новых версиях флаг исчез, значит что этот параметр стал по умолчанию и не отключить?)
Напомню, что у меня есть сборка curl для линукса с поддержкой ECH (а также QUIC Quiche). Она тоже работает:
curl --http3-only --ech hard --tlsv1.3 --doh-url https://cloudflare-dns.com/dns-query -v https://rutracker.org/
Что интересно, под warp vpn не хочет: weird server reply.

2024-09-13T00:35:30.349Z
anon9001(anon)

So cloudflare finally did something good for once? Instead of giving constant 403s to users or thinking you’re bot in neverending verification loop

2024-09-13T05:56:05.907Z
MasterYoba

Видимо cloudflare-ech.com в скором времени окажется в блоке у ркн. Что плохо, потому что тогда может накрыться vless-over-cdn, вырубить-то эту штуку в панели CF пока нельзя.

2024-09-13T05:59:22.064Z
0ka(0ka)

С ним то что будет? ECH в xray поддержки нет, в sing-box вручную включать надо

2024-09-13T06:24:40.098Z
meeeeeh

С одной стороны, давно этого ждал, особенно в контексте рутрекера.

С другой - риск блокировки Cloudflare или их ECH канарейки очень вырос. Что хуже, на бесплатных тарифах ECH сейчас нельзя отключить - так что если вдруг РКН начнёт фильтровать этот конкретный вариант SNI, заблокироваными окажутся все кто не находится на платном тире, неважно, есть ли они в банлисте\на ТСПУ или нет.

2024-09-13T07:06:38.260Z
anon9001(anon)

У ркн давно был план по этого поводу. НСДИ и серты минцифры вшитые в новое железо которые нельзя удалить

2024-09-13T07:09:36.322Z
meeeeeh

Я про яблоко, вы мне про макароны.

НСДИ и сертификаты Минцифры тут вообще никаким боком, это отдельная история - та, в которой интернета в РФ не осталось, а остался только интранет с тонким ручейком наружу а-ля ДНРК.

2024-09-13T07:12:19.701Z
roman_sv

Плохая новость…
Значит в ближайщее время начнут гасить DOH. А у меня провайдер подменят ответы от DNS по udp. Например ссылки youtu.be не открываются. Всё на уровне OS резолвит через dnscrypt-proxy по DOH. Ибо так, и безопаснее, и нет подмены, и даже быстрее ,чем у провайдера по днс бенчмарку. Сейчас они мне сломаются всё. И что тогда делать-то, в прокси резолв всей системы пускать? Это в свою очередь сломает доступ к некоторым сервисам, которые для разных регионов отдают разные IP. Т.е. я буду получать IP для нидерландов через проксю, а соединяться буду из РФ. И сервер будет не отвечать.

Ну а про блокировку ресурсов на CF уже выше написали.

2024-09-13T07:14:10.624Z
anon9001(anon)

Для ech нужен doh, а если позированые сертификаты будут вшиваться на роутерах у абонентов, то ркн не нужно будет пытаться плясать вокруг collateral damage с блокировками клаудфлер. В этом и была вся суть национального mitm

2024-09-13T07:15:03.433Z
anon9001(anon)

В хостс записывать. Сейчас неплохо посмотреть как китай это будет делать и как ситуация будет развиваться. Тут могут вполне реально начаться блоки по ип, в том чисте и в китае

2024-09-13T07:20:23.425Z
meeeeeh

Для ECH DoH в случае с Firefox необязателен - см. первый пост в нитке. Персонально я так и пользуюсь им, кстати - у меня есть полностью доверенный DNS в моём интранете, ходящий в DoH\DoT апстримы не принадлежащие Google, Cloudflare и другим бигтехам.

У хромого всё немного хуже, но судя по багтрекеру того же Cromite (форк умершего пару лет Bromite, который был Android-only; Cromite доступен на почти всех платформах) там тоже думают о том чтоб доверять резолвам локального plaintext DNS, если он сообщает в ответ корректные HTTPS-записи.

Завалить DoH не завалив HTTPS в целом тоже будет крайне проблемно. Да, можно будет прибить резолверы Google, Cloudflare, Quad9 и кого-то ещё - однако существует ещё туева хуча других, менее попсово-ширпотребных сервисов, который держат мелкие конторы, шифропанк-коллективы и просто отдельно взятые люди.

2024-09-13T07:20:35.951Z
ani917(ani)

вы уверены что ртрекер заблокирован? тот которая 1 ссылка в поисковике открывается, edge
я проверял на их сайте, Cloudflare Browser Check
Secure SNI показывает не включен

2024-09-15T04:15:17.912Z
Ori

Да, заблокирован

2024-09-15T05:10:10.622Z
bolvan

На linux - да, на винде - нет.
chrome (srware iron) последние с каких-то версий и на винде, и на linux
На виндовом фоксе четкая зависимость от about:config trr. 0 - нет, 3 - да

Проверял по https://tls-ech.dev/

Клоудфларе запускаются и без обхода блокировок

2024-09-22T07:55:19.985Z
meeeeeh

Да, включили всем на free tier. Обещали вернуть тоггл после того, как выкатят всё в прод для платных пользователей.

Там есть два флага, network.dns.native_https_query и network.dns.native_https_query_win10. Начиная со 130-го фокса оба должны быть по умолчанию включены - тогда работает без DoH с любым DNS, который умеет в HTTPS-записи.

2024-09-22T08:40:49.849Z
ValdikSS

Все тесты я делал на Windows.

2024-09-22T11:34:12.145Z
Datura_metel(Datura metel)

Starting in August, 2024, ECH will be gradually released on free zones.

It seems that paid zones can use ECHConfig of free zones.

printf 'GET / HTTP/1.1\r\nHost: readthedocs.org\r\n\r\n' | openssl s_client -tls1_3 -ech_config_list xxxx -alpn 'http/1.1' -connect readthedocs.org:443 -quiet

2024-09-30T18:36:41.178Z
bolvan

выяснено, что на виндовс fox использует DNS API, чтобы понять прописан ли в системе DoH
и работает это из коробки только на win11
на win10 - нет

если fox не детектит или не хочет детектить DoH в системе, он требует локальный DoH от себя.
если DoH нет нигде - он отказывается от ECH

пишут, что на win10 детект отключен из-за какого-то бага в винде

на linux нет возможности обнаружить прослойку DoH универсальным образом, потому ECH включают всегда

2024-10-10T07:16:05.760Z
Fixator10

На 10ой майки на релизную сборку так и не завезли DoH попросту

2024-10-10T08:37:41.693Z
bolvan

вроде завезли, но неполностью

на windows server 2022 настройки уже есть в settings, но он на более новом билде, чем последняя 10

2024-10-10T15:49:18.928Z
bunkerfox(bunkerfox)

и не будет, и никто не обещал, это уже мертвая ось

2024-10-10T23:56:50.136Z
bunkerfox(bunkerfox)

эта статья ошибочная, нет и не будет в 10, там за пример взято было построение переходное до анонса 11

2024-10-10T23:59:09.412Z
Dhowti(Eugene)

Возможно, немного оффтопик, но совсем немного. Может кто пояснить, вот если сайт открывается через ECH, и я хочу внести его в исключения своего VPN, ну просто чтобы быстрее работало, какой домен надо внести в исключения, самого сайта или cloudflare-ech.com? Читал-читал про ECH, но так и не понял. Ведь если SNI зашифровано ещё в браузере, мой VPN же не сможет его распознать и пустить напрямую? Простите, если глупый вопрос.

Написал и догадался как проверить, поэкспериментировал на https://encryptedsni.com/cdn-cgi/trace, результат - исключение целевого домена не влияет, а какой там фронт-домен я не понял…

2024-10-11T00:08:34.518Z
ValdikSS

The flag in the control panel just controls the DNS record. Since the ECH key is the same for all the domains, you can still connect to any (?) domain even if it has ECH disabled.

$ dig +short HTTPS gdeposylka.ru
1 . alpn="h3,h2" ipv4hint=104.25.106.6,104.25.107.6,172.67.80.113 ipv6hint=2606:4700:20::6819:6a06,2606:4700:20::6819:6b06,2606:4700:20::ac43:5071

$ (echo -e "GET / HTTP/1.0\r\nHost: gdeposylka.ru\r\n\r\n"; sleep 10) | ./openssl s_client -CApath /etc/ssl/certs/ -no_ssl3 -no_tls1 -no_tls1_1 -no_tls1_2 -connect gdeposylka.ru:443 -servername gdeposylka.ru -ech_config_list 'AEX+DQBBVgAgACC91NEyBX4eLKQ/XSZk9DabQ/MbtpGNoDC3hOhS7QPtNQAEAAEAAQASY2xvdWRmbGFyZS1lY2guY29tAAA=' -ech_alpn_outer outer,public,h2 -alpn inner,secret,http/1.1

Setting new_session_cb
Connecting to 2606:4700:20::6819:6a06
CONNECTED(00000003)
ECH client callback printing: 
SSL_ech_print
s=0x560765ac9410
ech_attempted=1
ech_attempted_type=0xfe0d
ech_atttempted_cid=0x56
ech_done=1
ech_grease=0
HRR=0
ech_returned=0x0
ech_returned_len=0
ech_backend=0
ech_success=1
1 ECHConfig value loaded
cfg(0): [fe0d,56,cloudflare-ech.com,0020,[0001,0001],bdd4d132057e1e2ca43f5d2664f4369b43f31bb6918da030b784e852ed03ed35,00,00]

depth=2 C=US, O=Google Trust Services LLC, CN=GTS Root R4
verify return:1
depth=1 C=US, O=Google Trust Services, CN=WE1
verify return:1
depth=0 CN=gdeposylka.ru
verify return:1
…
2024-10-11T16:46:14.629Z
tango

Just linking a related bug report I happened to find today. It says that Cloudflare servers detect the use of Warp, and for some reason refuse to serve ECH to Warp clients.

I downloaded and tested with WARP running in regular (non-socks) mode. Cloudflare’s output indicates no use of ECH but they detect use of WARP. Testing with a different ECH site (https://defo.ie/ech-check.php) indicates ECH succeeds. Testing with Chrome confirms the same behaviour as Firefox with Cloudflare disabling ECH when WARP is used but ECH with other sites working through WARP.

This looks like a deliberate policy decision by Cloudflare, everything is working correctly in Firefox and Chrome.

2024-11-07T20:09:17.107Z