kelmenhorst / quic-censorship

Documentation of observed QUIC censorship methods and circumvention approaches.
47 stars 3 forks source link

Blocking of HTTP/3 hosts in Uganda (AS20294, AS37075) #3

Open kelmenhorst opened 2 years ago

kelmenhorst commented 2 years ago

In March 2021 we have collected HTTP/3 censorship measurements in Uganda. The tests were run from mobile devices in two different networks: Airtel Uganda (AS37075, 10 repetitions) and MTN (AS20294, 4 repetitions). The test list had 16 hosts.


abbreviation failure type
TCP-hs-to TCP handshake timeout
QUIC-hs-to QUIC handshake timeout
conn-reset connection reset: TCP RST terminated connection during TLS handshake
conn-refused connection refused: TCP RST terminated connection after first TCP SYN
conn-to connection timeout (after handshake)
TLS-hs-err server-side failure during TLS handshake
ping-to quicping timed out, i.e. there was no server response to the ping request

In both networks, HTTP/3 endpoints are targeted by censorship. The blocks in AS20294 and AS37075 have a lot of the same characteristics:

Separate HTTPS and HTTP/3 blocking

Both for HTTPS and HTTP/3 the censors seem to apply multiple different blocking techniques which cause a variety of different failure types when trying to connect to blocked hosts.

Overall, it is very likely that HTTPS and HTTP/3 traffic are handled differently by the censorship system (in contrast to IP endpoint blocking which treats all IP-based traffic the same). A strong indication for this are the conn-refused and conn-reset failures that happen during HTTPS requests: These error types suggest the injection of TCP RST packets which, of course, is only applicable to TCP. Still, these same websites are blocked over QUIC. Since QUIC connections cannot be terminated by TCP RSTs, there needs to be a different mechanism in place to block QUIC.

                        HTTPS                                 HTTP/3                                             HTTPS                                 HTTP/3 Figure 1: Failure rates of hosts tried over HTTPS vs. HTTP/3. Left: AS37075, right: AS2029 (details below).

QUIC connection timeouts

On some days, QUIC connections did not timeout during the handshake but on the working connection. I can think of 2 explanations for this:
a) The censorship system of the ISPs is too slow to interfere immediately during the handshake. This seems unlikely because on other days and. Moreover, such an efficiency issue would be sensitive to different times of day (peak and off-peak traffic volumes) but this sensitivity is not visible in the data.
b) The filter is intentionally only applied to application data. Such an interference could be implemented by keeping state about connections or by applying the filter only to smaller data packets (handshake packets are at least 1200 Bytes).

QUIC Ping

When HTTP/3 transactions time out during the QUIC handshake, these HTTP/3 hosts did also not respond to quicping. This observation indicates that the blocking already happens during the first roundtrip. There is probably no DPI of the payload of the QUIC Initial packet since the blocking also happens with the random payload generated by quicping. On the other hand, when the blocking only happens after a few roundtrips (conn-to), quicping works (quicping only elicits 1 roundtrip).

                        HTTP/3                                 quicping                                         HTTP/3                                 quicping Figure 2: Failure rates of hosts tried over HTTP/3 vs. pinged with quicping. Left: AS37075, right: AS2029.


No SNI blocking

When changing the SNI to an allowed domain name, the corresponding websites remain blocked.

                        HTTP/3                           w/ SNI spoof                                       HTTP/3                             w/ SNI spoof Figure 3: Failure rates of hosts tried over HTTP/3 vs. HTTP/3 with spoofed SNI. Left: AS37075, right: AS2029.

Temporal variance

There is a rather strong temporal variance of failure types when running HTTPS and HTTP/3 requests in the network of Airtel Uganda (AS37075). The result consistency is low for all measured protocols (HTTPS over TCP, HTTP/3 over QUIC and quicping): Around 50\% of hosts have the same test result in only 80\% or less of measurements. It's unclear to me why the censorship is this inconsistent. It will take further continuous measurements to find out more about what is going on here.

Figure 4: Cumulative distributions of result consistency, calculated for each host as: no. of measurements with most frequent result / no. of all measurements. Left: AS37075, right: AS20294.

Airtel Uganda, AS37075

                                      HTTPS                                                   HTTP/3 tcp_quic_sankey Figure 5: Failure rates of hosts tried over HTTPS vs. HTTP/3. AS37075.

To each protocol, multiple different blocking methods are applied which cause multiple different error types:

conn-refused and TCP-hs-to indicate that the blocking happened during the TCP handshake (likely no DPI on TLS). These HTTPS error types correspond to QUIC-hs-to failures which also indicate that the blocking happened early on, during the QUIC handshake. While TCP-hs-to and QUIC-hs-to could be caused by the same IP blocking method, this is not true for conn-refused which is caused by an injected TCP RST.

The above described variance of censorship is very striking in AS37075, especially when comparing the measurements from individual, even consecutive, days: Screenshot from 2022-03-29 17-44-45 Figure 6: Temporal variance of blocking is the network of Airtel Uganda during March, 3 and March, 15 2022.

MTN Uganda, AS20294

                                      HTTPS                                                   HTTP/3 tcp_quic_sankey Figure 7: Failure rates of hosts tried over HTTPS vs. HTTP/3. AS20294.

For each HTTPS error type, there is a corresponding HTTP/3 error type, i.e. if an HTTPS request failed with the error type A, the corresponding HTTP/3 request to the same URL caused error type B. Websites that failed over HTTPS with a conn-refused message, where unavailable over HTTP/3 due to a QUIC handshake timeout (QUIC-hs-to). Both error types occur during the first roundtrip. HTTPS conn-reset failures corresponded to HTTP/3 conn-to failures which both indicate that the blocking happened after a few roundtrips.