Nice the padding option for all the connectionless packets looks indeed interesting.
Will defeat the amplification abuse and will allow inspecting/filtering at network level without having to worry about the magic packets tracking, either pass or not pass :) On Tue, 17 Nov 2020 at 18:59, Fletcher Dunn - fletcherd at valvesoftware.com (via csgo_servers list) <csgo_servers@list.valvesoftware.com> wrote: > John! Good to hear from all old folks from years ago! > > > > TL/DR: New proposal: the server requires *all* 3 connectionless packets > from clients to be at least 1200 bytes. > > > > I’ve gotten similar feedback from a few people now. The only reason to > consider allowing a smaller packet with a challenge is to give the client a > way to reduce the bandwidth sent when pinging a ton of servers. But doing > this would impair the ability to filter out these packets further out, and > it is also more complicated to implement. (I wasn’t planning on changing > the server browser in steamclient.dll to do it, I was just going to do the > simple thing of padding the packet.) Given that it is 2020 The Year of Our > Lord Gaben, probably the extra bandwidth needed to ping a bunch of servers > is just not significant. > > > > Regarding 1200: although this technically maybe not OK according to RFCs > from the mid 90’s, being larger than the absurdly small minimum IPv4 MTU, I > believe it is OK in practice in 2020 TYOOLG, especially since the minimum > MTU for IPv6 is 1280. In the SDR protocol used by CSGO and Dota, clients > always initiate their communication with a 1200 byte packet, and that has > not caused any problems. > > > > To Kyle Sanderson’s point: I realize that this is not the most pressing > issue facing the Internet today. However, I am currently working on > integrating SDR functionality with the server browser, and so while I am > touching this code, it seemed like the right time to address this > longstanding issue. However, Valve is very sensitive to breaking old > games. It’s my understanding that this plan allows old games to continue > to operate, even if the code cannot be updated. If I’m mistaken, let me > know. > > > > *From:* John <lists.va...@nuclearfallout.net> > *Sent:* Tuesday, November 17, 2020 9:38 AM > *To:* csgo_servers@list.valvesoftware.com > *Cc:* Fletcher Dunn <fletch...@valvesoftware.com> > *Subject:* Re: [Csgo_servers] RFC: Changes to the A2S_INFO protocol > > > > Fletcher, > > This sounds like a reasonable idea. > > Of the two, requiring a large request (#1) might be best. Both #1 and #2 > help with reflection attacks, but #1 also helps to mitigate directly > spoofed query attacks on game servers. There is less overhead involved on > the server side with rejecting an improperly sized packet than in > generating a randomized challenge response and having to locally store that > state; and, should the spoofer generate *properly*-sized packets, they > would be limited to a lower overall packet rate (which also drastically > reduces overhead on the server side). Further, an external firewall could > easily drop improperly-formatted packets based on size, cutting out many > attacks. > > (By the same token, connection and all other unsolicited packets should > probably also be required to be large.) > > The only real downside would be that tools would need to be updated. I > don't see a blocker there. > > The specific size of the packets isn't too important as long as it beats > lowest-common-denominator MTUs. 800-1200 should be fine. > > One other consideration here is whether this can be coupled with changes > designed to mitigate the negatives of proxied responses (some hosts have > taken to advertising their prefixes from multiple PoPs and proxying query > responses in order to fake lower latencies, which degrades the player > experience). I can't immediately think of a good mechanism for that in the > query protocol itself; the primary way to deal with it would seem to be at > the global level, by penalizing servers whose latencies are measured to be > low from multiple locations in an impossible way. > > -John > > On 11/16/2020 5:21 PM, Fletcher Dunn - fletcherd at valvesoftware.com > (via csgo_servers list) wrote: > > Hello! > > > > Over the next couple of months we will be releasing some changes to how > servers and clients using steamclent.so/dll handle the venerable Source > engine A2S_INFO message used by the server browser. This includes the > Steam client server browser, all Source engine games, and all Steam games > using the ISteamMatchmaking API. The purpose of these changes is a long > overdue fix for a reflection attack vulnerability. > > > > This email is to let you know what those plans are and to solicit your > feedback. Fixing the vulnerability requires changing the protocol and will > necessarily break existing third party utilities that speak the protocol. > > > > Currently, the A2S_INFO packet looks like this: > > 4 bytes: 0xFFFFFFFF > > 1 byte: 0x54 (A2S_INFO packet type identifier) > > 20 bytes: "Source Engine Query\0" > > > > The proposal is for clients to modify the A2S_INFO packet they send in > one of two ways: > > > > Option 1: Pad the message with zeros, so that the request is larger than > the reply. The passes size is TBD, but it will probably be at least 800 > bytes, and perhaps as high as 1200. Feedback is requested concerning this > size. > > > > Option 2: Append a 4-byte anti-spoofing challenge obtained using the > existing A2S_PLAYER or A2S_RULES messages. > > > > Note that both options produce a packet that is acceptable to the current > code in steamclient.so/dll. However, any custom handlers might have > stricter behavior, and will need to be updated to be aware than “extra” > data might appear after the end of the magic string in packets from > legitimate clients. > > > > Once all clients are using one of these two options, a server wishing to > avoid being vulnerable to reflection attacks could drop any A2S_INFO > packets below a minimum size without a challenge. > > > > The changes would be deployed as follows: > > > > 1. First, we will release a new Steam client that sends A2S_INFO > messages padding to a minimum size. (Option #1 above.) Since it takes > time for Steam client updates to roll out to all Steam users, and for third > parties to change their code to make queries in the new format, we will not > change the server to require the new format by default. However, the > server code will be updated to look for an environment variable that can be > used to opt into the new, stricter behavior. This is so that third parties > can test their clients to make sure they are compliant with the new server > code. > > 2. As more clients upgrade to the new code and third party tools > are updated to send queries in the new format, server operators may elect > to opt into the new behavior at their discretion using the environment > variable. > > 3. After some time has passed (and we have posted several warnings > on this mailing list), we will ship a new steamclient.so/.dll that has > the strict behavior enabled by default. A different environment variable > can be used to use the older, more permissive behaviour. > > > > If you have any concerns or feedback about this change, please reply to > this steam post: > > https://steamcommunity.com/discussions/forum/14/2989789048633291344/ > > > > After feedback has been collected and details finalized, I’ll post again > with more technical details about the changes that are going to be made. > > _______________________________________________ > To unsubscribe, edit your list preferences, or view the list archives, > please visit: > https://list.valvesoftware.com/ > > > > _______________________________________________ > To unsubscribe, edit your list preferences, or view the list archives, > please visit: > https://list.valvesoftware.com/ > _______________________________________________ To unsubscribe, edit your list preferences, or view the list archives, please visit: https://list.valvesoftware.com/