Steam installieren
Anmelden
|
Sprache
简体中文 (Vereinfachtes Chinesisch)
繁體中文 (Traditionelles Chinesisch)
日本語 (Japanisch)
한국어 (Koreanisch)
ไทย (Thai)
Български (Bulgarisch)
Čeština (Tschechisch)
Dansk (Dänisch)
English (Englisch)
Español – España (Spanisch – Spanien)
Español – Latinoamérica (Lateinamerikanisches Spanisch)
Ελληνικά (Griechisch)
Français (Französisch)
Italiano (Italienisch)
Bahasa Indonesia (Indonesisch)
Magyar (Ungarisch)
Nederlands (Niederländisch)
Norsk (Norwegisch)
Polski (Polnisch)
Português – Portugal (Portugiesisch – Portugal)
Português – Brasil (Portugiesisch – Brasilien)
Română (Rumänisch)
Русский (Russisch)
Suomi (Finnisch)
Svenska (Schwedisch)
Türkçe (Türkisch)
Tiếng Việt (Vietnamesisch)
Українська (Ukrainisch)
Ein Übersetzungsproblem melden
Does it also include GoldSrc games such as Counter-Strike 1.6?
The more, the better. QUIC uses 1200 bytes for that purpose
Would it be also possible to extend other connectionless packets with padding, for example: "qconnect" in CS:GO and A2S_PLAYER, A2S_RULES? It could help with DoS attacks against the gameservers.
Imagine a CS:GO server that receives 200 thousand "qconnect" spoofed packets per second, from random addresses - it's almost impossible to distinguish these from legit users that want to connect to the gameserver. Blocking or rate-limiting these will just make it unplayable so we implemented our own logic to filter these packets, however, it's still very cheap for attackers to send thousands of such packets because of small payload, by padding them it would require a lot more bandwidth to achieve the same results.
(BTW: Since CS:GO uses GameNetworkingSockets, maybe you could make use of its own challenge system for establishing connections: https://github.com/ValveSoftware/GameNetworkingSockets/blob/56092ec7e73acb32ed18ca99505fb8f3cd160da3/src/steamnetworkingsockets/clientlib/steamnetworkingsockets_udp.cpp#L1308 )
Yes.
These packets are already protected by an anti-spoofing challenge. Do you think more is needed? I desire to make as few changes as possible, although if there is significant benefit, since we will be forcing all clients to touch code already, requiring a minimum size for these packets would be relatively easy.
Eventually we may change the networking code on CSGO so that direct UDP connectivity (not relayed through SDR) goes through GameNetworkingSockets. Right now, we have decided not to do this work.
https://steamcommunity.com/groups/SteamClientBeta/announcements/detail/2896339990496271925
Not mentioned in those patch notes (because it is only relevant for a small set of people, reading this thread) is that you can activate the new, stricter message handling on the gameserver by setting the environment variable STEAM_GAMESERVER_MIN_CONNECTIONLESS_PACKET_SIZE=1200
The change with this will force the client to only send greater than 1200 byte requests (eventually); this is an effective patch, as the spoofed requests rely on sending short form vector attacks to the server to overload it, say, 30 byte or lower requests, and multiple requests stacking on top of each other. This is because servers often times do not have a minimum validation packet floor for various reasons, making them vulnerable to attack. The attack also goes by another name: RangeAmp.
This client change will default to sending >1200 bytes, however as noted in the main post, will still allow for sending <1200 byte requests. Once the release goes to the public branch, and has been mass adopted, it will then eventually be forced by the server to only accept >1200 byte packets, rejecting all byte requests under this threshold. This won't be forced till sometime next year, to allow servers to adjust to the change. I would expect this applies to all packet requests, as exceptions allow a route for exploitation.
Yes, I have confirmed by looking at the code (and also actually, you know, *testing* against live servers) that servers accept packets with "extra" data that they do not understand.
If there are middleboxes proxying these requests, or any other custom code, they may be applying more strict rules and could be broken. But the code in steamclient.dll ignores extra data, as far as I can tell.
This should read A2S_INFO, A2S_PLAYER and A2S_RULES, right?
If it's a reflection, it's not the server that gets overloaded - it's the reflected target that is being spoofed who will be overloaded.. the attacker sends small packets spoofed as the target, and the server sends a much larger 'response' to the target - so the attacker both remains anonymous and does not require as much bandwidth.
Having a minimum packet size will prevent / reduce the amplification by the server and render the exploit pretty much useless.