16:00:45 <cohosh> #startmeeting tor anti-censorship meeting
16:00:45 <MeetBot> Meeting started Thu Dec  9 16:00:45 2021 UTC.  The chair is cohosh. Information about MeetBot at http://wiki.debian.org/MeetBot.
16:00:45 <MeetBot> Useful Commands: #action #agreed #help #info #idea #link #topic.
16:00:57 <cohosh> welcome!
16:01:14 <cohosh> here is our meeting pad: https://pad.riseup.net/p/tor-anti-censorship-keep
16:01:27 <cohosh> feel free to add items to the agend and update us on what you've been working on
16:01:34 * cohosh does this
16:01:36 <meskio> hello
16:03:07 <shelikhoo> hi~
16:03:41 <dcf1> meskio, I'm curious about your impression of BridgeDB scraping (e.g. https://gitlab.torproject.org/tpo/community/support/-/issues/40050#note_2765440 "meskio and i picked out a moat bridge yesterday ... and it works")
16:04:05 <dcf1> doesn't have to be now, I just think it would be interesting to hear from someone who has worked closely with BridgeDB.
16:04:30 <meskio> bridgedb is a black box to me in some sense
16:04:40 <meskio> but yes, I'm not sure how they do the scrapping
16:04:55 <meskio> I'll expect them to do it ince in a while, so newer bridges takes some time to be blocked
16:04:59 <cohosh> dcf1: there's some backlog in #tor-dev about this
16:05:06 <dcf1> For the sake of the record, I will post some links related to censorship in Russia for the first discussion item
16:05:32 <dcf1> https://gitlab.torproject.org/tpo/community/support/-/issues/40050#note_2764320 <- about the general phenomenon, testing results, link to NTC where there is testing by Russian residents
16:05:55 <cohosh> dcf1: when i looked into scraping for the belarus enumeration attempts, i found it hard to find any info from the metrics: https://gitlab.torproject.org/tpo/anti-censorship/censorship-analysis/-/issues/40002#note_2728643
16:06:03 <dcf1> https://gitlab.torproject.org/tpo/anti-censorship/pluggable-transports/snowflake/-/issues/40014 <- changes in the DTLS fingerprint of snowflake-client, as that would found to be a distinguisher currently being used
16:07:10 <dcf1> I want to take a moment to say
16:07:34 <dcf1> how proud I am to work with a team like this one during moments like this
16:08:02 <dcf1> It was a sudden change, to be sure, but it's not a crisis, everyone is doing their part with a cool head
16:08:27 <dcf1> we have sufficient backup plans and mitigations readied, we were not caught sleeping
16:09:04 <dcf1> the strength of the team made what might have been a crisis into a manageable set of circumstances
16:09:27 <dcf1> good work, all
16:09:57 <meskio> thanks for the words, it is intense, but is nice to be involved in such a good team :)
16:10:24 <dcf1> The situation in Russia is i nteresting because it's a new and changing situation, let's keep in view that even more severe censorship is already business as usual in other places
16:10:38 <shelikhoo> I am really glad to work in this team~
16:10:50 <anadahz>16:11:09 <cohosh> <3
16:11:22 <cohosh> yeah this week was a lot of really amazing work
16:12:39 <cohosh> should we proceed by taking stock of what we have?
16:12:46 <cohosh> meskio: maybe you want to talk about the telegram bot?
16:13:00 <meskio> sure
16:13:36 <meskio> seeing that moat is blocked in russia, and other distribution mechanisms are hard to reach, ggus thought that using telegram to distribute bridges might be a good idea
16:13:47 <meskio> telegram has a lot of users in russia (and other places)
16:13:50 <dcf1> https://gitlab.torproject.org/meskio/telegram-bridge-bot
16:13:59 <meskio> I hack together a simple bot -^
16:14:14 <dcf1> https://forum.torproject.net/t/tor-blocked-in-russia-how-to-circumvent-censorship/982
16:14:14 <meskio> and is reachable over @GetBridgesBot
16:14:23 <meskio> you get bridges by sending the command /bridges to it
16:14:34 <meskio> it looks like is pretty much in use
16:14:45 * meskio goes to look to the usage picture
16:15:13 <meskio> https://gitlab.torproject.org/tpo/anti-censorship/team/uploads/8db01ff2c4523388b2632f5673b5034e/telegram_bot.png
16:15:24 <meskio> ^- this is one day old, few hours after launching it
16:15:30 <arma2> one thing that makes me nervous about telegram is that it's famous for having no barrier to making accounts. so i assume our attacker has many many accounts already. i wonder if there's a way to learn how old the account is, or really anything to distinguish them
16:16:12 <dcf1> The Telegram bot is posted at https://github.com/net4people/bbs/issues/97#issuecomment-988401477, but not at NTC yet, I'll make a note to make a post there
16:16:51 <meskio> arma2: yes, I expect telegram bridges to be blocked fast, we'll see
16:17:19 <meskio> I don't think we can know how old an account is, let me investigate
16:18:12 <arma2> (i got that trick from the salmon people, who said they wanted to demand a facebook account created before 2018 or the like)
16:18:56 <arma2> (but i fear it is just a great sentence to write in a paper, and not actually practical to do)
16:19:33 <meskio> I could check how many profile photos they have, old users usually have changed their profile photo at least once (I havent myself, so...)
16:19:44 <meskio> I don't see any dates in user info
16:20:21 <shelikhoo> Or we can just make dynamic address bridge happen, so blocking a bridge won't matter so long as it takes more times than changing bridge's address
16:20:27 <dcf1> download profile photo, check last-modified idk
16:20:28 <arma2> huh. there is definitely an arms race to play there, then. ("must have n profile photos", "must have a profile photo we haven't seen before", ...) not sure we want to play it though.
16:21:48 <meskio> not sure if I can see the date of modification of the profile photo
16:22:06 <ahf> been really impressive in the last week or so to see how you all work together on this big thing - also together with comms/community team <3 you all rock!
16:22:44 <dcf1> I see the bot as an acute workaround for an unexpected failure in another system, namely BridgeDB's anti-enumeration defenses. Maybe telegram will also turn out to be viable long-term, if we can figure out how to apply anti-enumeration there.
16:23:27 <anadahz> There are some Telegram bots that taking care of users that are not so old, like kicking them out of the channel. Not sure if its useful in this case though but there may bot that check user's account creation.
16:23:33 <meskio> the idea of serving different bridges each 24h might help here, as censors will need to keep requesting bridges
16:23:56 <cohosh> meskio: can you see when the accounts were created?
16:24:08 <meskio> anadahz: interesting, I don't see that info in the bot API, can you point me to any bot that does that?
16:24:33 <meskio> cohosh: no, this is what I get: https://core.telegram.org/bots/api#user
16:24:40 <anadahz> https://www.reddit.com/r/TelegramBots/comments/aw9e0m/bot_that_gives_approximate_creation_dates_for/
16:24:59 <meskio> anadahz: thanks, I'll look into it
16:25:16 <dcf1> what else is there to say about the current situation? cohosh, DTLS fingerprinting?
16:26:17 <cohosh> yeah, thanks for your help with that dcf1
16:26:33 <cohosh> we have some fingerprinting defences in snowflake now
16:26:45 <cohosh> it's tricky because the fixes are in a library dependency and not snowflake proper
16:27:08 <cohosh> so you have to build snowflake outside of the module system with the patched library
16:27:15 <anadahz> (direct link to Telegram bot: https://t.me/creationdatebot)
16:27:32 <cohosh> the easiest way to do it is through tor browser builds: https://gitlab.torproject.org/tpo/anti-censorship/pluggable-transports/snowflake/-/issues/40014#note_2765254
16:27:33 <shelikhoo> I wonder how long will it takes before some other difference in implementation will be used to block snowflake again
16:27:58 <cohosh> shelikhoo: good point, we've opened some issues in pion/dtls for other differences identified in that ticket
16:28:05 <dcf1> shelikhoo: yes, it's an interesting question
16:28:14 <cohosh> https://github.com/pion/dtls/issues/408
16:28:20 <cohosh> https://github.com/pion/dtls/issues/398
16:28:32 <cohosh> these are two other fingerprinting differences ^
16:28:46 <cohosh> i suppose what we'd like it something like uTLS but for DTLS
16:29:18 <cohosh> i also doubt pion/dtls is willing to implement DTLSv1.0
16:29:46 <shelikhoo> valdikss have pointed out that the self-signed certificate generated is different from browser too
16:29:47 <dcf1> personally I don't think DTLS 1.0 matters, browsers will get to 1.2 eventually
16:30:00 <dcf1> we were only really looking at one browser fingerprint, maybe they are already there, I don't know
16:30:10 <cohosh> in terms of deployment, you can get working compiled biaries of snowflake here: https://people.torproject.org/~cohosh/ru_snowflake_fix/
16:30:30 <dcf1> instructions here: https://ntc.party/t/ooni-reports-of-tor-blocking-in-certain-isps-since-2021-12-01/1477/55
16:30:47 <cohosh> and we have the fix merged into tor-browser-build so should be slotted for the next release: https://gitlab.torproject.org/tpo/applications/tor-browser-build/-/merge_requests/375
16:31:11 <arma2> for those wanting to dig deep into snowflake distinguishers, also be sure you know about prateek's paper there: https://arxiv.org/abs/2008.03254
16:31:38 <cohosh> oh wow thanks for that writeup dcf!!
16:32:14 <dcf1> cohosh: there is a trick for replacing one go module with another, or with a local directory: https://go.dev/doc/modules/gomod-ref#replace
16:32:24 <arma2> it would be interesting, in a "retrospective" kind of way, to see if prateek predicted the ones they picked or no
16:32:38 <dcf1> arma2: no, not in this case
16:32:39 <cohosh> dcf1: oh! should we merge that into snowflake?
16:32:51 <arma2> i see in his recommendations, "Do not offer ‘supported_groups’ as an extension in theserver hello"
16:33:11 <dcf1> arma2: oh, sorry, you're right, I was thinking of something else
16:33:30 <arma2> ok. and he's got two others besides that one. in case we want to think ahead to next week :)
16:33:46 <arma2> (wonder if our censors read this paper too)
16:33:49 <shelikhoo> To make snowflake work for peoples influenced by this DTLS block, we might need to encourage standalone proxy operators to update software version
16:34:12 <cohosh> yes good point shelikhoo
16:34:22 <cohosh> we can use this module replacement trick and update the docker container
16:34:31 <cohosh> this makes that process easier than i thought
16:34:43 <dcf1> with respect arma2, these and other features, and a link to Prateek's paper, are currently present in our ongoing issue of Snowflake fingerprinting
16:35:33 <dcf1> yes, on the point of standalone proxies, we need to encourage people to upgrade, or if we need to, we can potentially exclude proxies that have not upgraded, at the broker
16:35:59 <arma2> yep. i'm not saying they're surprises to us. but i am saying that what censors do in practice is often not what our roadmap predicts.
16:36:21 <shelikhoo> or make sure updated client only match with updated standalone proxy
16:36:35 <shelikhoo> (but that will be a little complex)
16:37:10 <cohosh> the less complexity we add in the broker matching, probably the better
16:37:25 <cohosh> it is nice that if the client fails to connect it will keep trying
16:37:51 <arma2> shelikhoo: right, cohosh and i discussed that last night, and the direction we were heading is: try to get headless snowflakes to upgrade, and eventually stop handling the old ones, and then the broker matching algorithm can stay simple
16:38:46 <shelikhoo> Yes, so we wants to send proxy version in the broker request
16:38:58 <arma2> yep. and apparently we already do.
16:39:03 <shelikhoo> Yes
16:39:15 <cohosh> we used this to exclude old proxies before
16:40:11 <arma2> (i also started out with the idea "if the client is in russia and the snowflake is running this version then" and she talked me out of it)
16:40:40 <dcf1> the other state of things is that meek-azure is blocked in some places, by blocking of the front domain
16:41:05 <dcf1> we don't have a workaround for that, but it seems that the meek-azure block has effect in fewer networks than the larger Tor relay+bridge block
16:41:10 <arma2> should we try to change meek-azure's front domain? or leave it in place and leave russia suffering for having blocked it?
16:41:30 <dcf1> so it's possible that some people for whom Tor is blocked as still able to circumvent using meek in the normal way
16:41:53 <anadahz> is it possible to use multiple front domains?
16:42:11 <shelikhoo> we can add more fronted domain, so keep tor inaccessible more and more normal website will be impacted
16:42:29 <arma2> i like it
16:42:58 <anadahz> also the option to use a custom fronted domain?
16:43:25 <cohosh> you can already do that by altering the Bridge line
16:44:08 <arma2> cohosh: the bridge line for meek?
16:44:37 <anadahz> Did anyone tested this during the blocking in Russia?
16:44:37 <arma2> ah ha yes there it is in about:config
16:44:52 <cohosh> Bridge meek url=https://meek.azureedge.net/ front=ajax.aspnetcdn.com
16:45:17 <dcf1> It's also the case that Tor relays+bridges are blocked on fewer networks than *.torproject.org is blocked (which appears to be much more total, using the usual "decentralized control" ISP-specific blocking)
16:45:33 <dcf1> https://explorer.ooni.org/search?since=2021-11-09&until=2021-12-10&failure=false&probe_cc=RU&test_name=web_connectivity&domain=www.torproject.org
16:45:56 <arma2> anadahz: if you give me an alternate domain front that azure will handle, i'll test now
16:46:07 <ggus> hello o/
16:46:15 <shelikhoo> Hi~
16:47:00 <anadahz> arma2: I don't have one, but I can try to setup one
16:48:05 <shelikhoo> maybe we could produce a list of fronting domain and put this in the guide
16:48:19 <dcf1> I am not sure, but I wonder if the Tor + meek blocking is tied to the TSPU (centralized GFW-like filtering), rather than being left to ISPs. That could explain why it has effect in fewer places.
16:49:06 <dcf1> https://gitlab.torproject.org/legacy/trac/-/wikis/doc/meek#microsoft-azure
16:49:10 <dcf1> ^ lists of domains there
16:50:16 <dcf1> Try *.cdn.office.net
16:50:31 <dcf1> https://theobsidiantower.com/assets/known-good.txt (list from 2017)
16:51:01 <arma2> ok. am slowly trying to get the original meek to test. i'll have results post-meeting. :)
16:51:36 <arma2> i have another category of fix we should consider: rotating fresh things (bridges, fallbackdirs, etc) into each new tor browser release
16:51:47 <arma2> 11.0.2 has a new obfs4 bridge, and it works currently behind the censorship
16:52:10 <arma2> if we shipped a fallbackdir list with some fresh relays in it, vanilla tor might even work. apparently the relay block list hasn't been updated in many days.
16:52:33 <arma2> it's not a good strategy against a later phase of the arms race, but, maybe we're not in that later phase yet.
16:52:36 <ggus> wooo!
16:52:46 <cohosh> :D
16:54:46 <cohosh> anything else we should do/try in the next few days?
16:55:13 <cohosh> i did realize when testing the DPI fixes that the TB version of snowflake doesn't have the latest cleint features
16:55:18 <cohosh> including AMP cache
16:55:34 <cohosh> a version bump just got merged
16:55:37 <dcf1> yes, we can talk about that another time if necessary
16:55:58 <cohosh> https://gitlab.torproject.org/tpo/applications/tor-browser-build/-/merge_requests/376
16:56:05 <arma2> i think another trick we should consider in the short term is: stop giving out old moat bridges via moat. they don't work for people in russia, but the new ones do, and if we give out new ones, moat users will be able to use them.
16:56:18 <dcf1> it turns out that it's not relevant for the current situation, but if it had been, it would have been nice to allow people to test it by changing a configuration file, rather than downloading a new binary
16:56:44 <cohosh> yeah fair, i think this is slated for alpha anyway
16:56:44 <arma2> we were talking about this idea in #tor-dev earlier. it could be as simple as: "if moat request is coming from ru, return this string" and then go change the string once a day, like we change the telegram answer.
16:56:52 <dcf1> cohosh: oh, ok :) all done then
16:57:31 <meskio> arma2: I'm affraid of adding a lot of things that depend on us doing things manually
16:57:42 <cohosh> arma2: i really dislike these spaghetti hacks, i think we have an existing feature one sec
16:57:53 <arma2> i am cool with doing it in a smarter way too :)
16:58:12 <arma2> but the goal would be: users in ru get a fresh moat bridge not an old one
16:58:19 <cohosh> # Filename that contains blocked bridges list. Comment out to disable.
16:58:19 <cohosh> #COUNTRY_BLOCK_FILE = "blocked-bridges"
16:58:38 <arma2> ok. so we could make a big list of all the moat bridges older than december n, and put them in the list
16:58:55 <cohosh> i think that'll work, not sure if it's used in production
16:59:02 <cohosh> but this would be a good opportunity to try it out
16:59:10 <arma2> yep
16:59:28 <meskio> is not used in production, I mean that config flag is not in polyanthum's config
16:59:38 <meskio> I hope this feature works
16:59:44 <cohosh> :)
16:59:47 <arma2> anyway, the general theme of the idea is: since they're not refreshing their blocks, let's take advantage of that fact for now, in all ways.
17:00:34 <arma2> and the reason for the theme is: many hundreds of thousands of people in russia are judging tor this week, and whether they perceive that we're taking action will stick with them
17:01:23 <meskio> I'm not sure I'll be able to do it today, but if no one does it before I could try to produce that blocking list tomorrow
17:02:20 <cohosh> meskio: thanks! we can create an issue to track progress and then people can pitch in if they have time
17:03:26 <meskio> sure
17:03:38 <meskio> I can create the issue
17:04:00 <cohosh> ok we're at the hour mark, anything else we should discuss for today?
17:04:16 <meskio> I'm good
17:05:01 <cohosh> i guess also shoutout to shelikhoo for their work on helping verify and test things in russia
17:05:16 <shelikhoo> Thanks~ No problem~
17:05:30 <cohosh> shelikhoo: it sounds like you are continuing this work, thank you for doing that!
17:05:34 <meskio> https://gitlab.torproject.org/tpo/anti-censorship/team/-/issues/47
17:06:33 <shelikhoo> Yes.... I think I can keep tracking this task.
17:06:36 <ggus> btw, since the blog post about russia, we got new +200 bridges https://metrics.torproject.org/rs.html#search/type:bridge%20running:true%20first_seen_days:0-2%20
17:06:52 <dcf1> in 2 days?!
17:07:14 <arma2> yes
17:07:28 <cohosh> \o/
17:07:33 <arma2> dcf1: can you give me a concrete azure front? i am getting confused by the "*." notation
17:07:38 <anadahz> community power!
17:07:51 <dcf1> ok, I guess in the 2 days preceding the post there were 74, still it's more than I would have thought
17:07:54 <dcf1> https://metrics.torproject.org/rs.html#search/type:bridge%20running:true%20first_seen_days:2-4
17:08:26 <meskio> nice
17:08:42 <ggus> dcf1: that's right! :)
17:08:52 <shelikhoo> maybe try outlook-1.cdn.office.net ?
17:09:24 <dcf1> arma2: try binaries.templates.cdn.office.net too
17:09:44 <arma2> ok. trying to get them working from nyc first before trying in ru :)
17:11:05 <cohosh> alright, i think we can end the meeting here?
17:11:07 <arma2> (got it working in nyc with the original ajax.aspnetcdn.com front, but not with either of the next two suggestions yet)
17:11:17 <cohosh> and continue discussion in #tor-dev
17:11:38 * cohosh is again super impressed with all this good work <3
17:12:09 <shelikhoo> ajax.aspnetcdn.com is on cs22.wpc.v0cdn.net.
17:12:22 <shelikhoo> these two is on a1847.dscg2.akamai.net.
17:12:32 <arma2> yeah, akamai won't domain front to azure
17:12:48 <shelikhoo> we need to run some full scale probe to refresh that fronting list
17:12:50 <arma2> ok that makes sense for why those both fail
17:12:57 <ggus> amazing work ac team!!!
17:13:12 <cohosh> ok i'm gonna end the meeting now xD
17:13:15 <cohosh> #endmeeting