Multi-vendor Game Server (GameSpy) DDoS Attack
w4rl5ck writes "PivX has this security advisory about DDoS attacks using a single modem line and some game servers (i.e. Counter Strike, QuakeX, Battlefield 1942 - in short, those supporting GameSpy). Works via spoofed udp packages querying the server stats, and because udp is connectionless, the server simply answers - to the spoofed address, of course. Funny thing, isn't it? (originally found on heise.de)"
For coming up with a rather ingenious DDOS attack style. Mind you I wonder how many gamers on those servers were complaining about ping times when that was happening.
Way to go GameSpy, yet another ounce of proof of a useless service for idjits.
All in a days work.
*SNIFF* "God I love the smell of napalm^H^H^H^H^H^H severs burning in the morning"
Ignore the "p2p is theft" trolls, they're just uninformed
I think I have seen this happen to me, there have been a few times where my firewall gets SLAMMED with packets from UDP game servers. This is just another reason why I hate UDP...
This sig was generated by a barrel of trained kittens for SeXy_Red (550409).
Good to see that an actual error was found with the program - It might make developers think twice before using their bloated propriatary, closed, middleware that is all but designed to lock out other browsers like all seeing eye.
.. it wouldn't be hard to put in some sort of verification to ensure the packets are getting to an appropriate destination. Witness NFS.
Trolling is a art,
I always knew that the 'D' in D-Day stood for DDoS.
I haven't left playing Doom II. I guess I'm safe.
Saskboy's blog is good. 9 out of 10 dentists agree.
Perhaps someone familiar with the Gnutella protocol can say whether this has been fixed yet.
This appears to be a huge vulnerability in a lot of programs used by a lot of people (including a lot of us) that could allow a couple dozed (or less) script kiddies to take down a lot of game servers. That 1:393 response ratio is awful. Some kid with DSL could take down, what, 20 servers at the same time? What chance is there that EA will release a patch some time soon? They had been notified like 2 months ago, and haven't even responded yet.
I always knew GameSpy was a crappy product, but this just brings it to a whole new level.
Lack of eloquence does not denote lack of intelligence, though they often coincide.
now the whole slashdot community is going to slashdot gamespy to see if they are up. Double whammy.
Comment removed based on user account deletion
Including a posting to bugtraq. The original advisory is on my website. It's dated 13th March 2002.
Assorted stuff I do sometimes: Lemuria.org
Maybe those game servers can be sued for damages because their defective security is what allowed the DDoS attacks.
-- Repeat with me: "There is no right to profits".
Actually, a number of games are useing Gamespy as their in game online game finder... Unreal Tournament 2003, Neverwinter Nights, Battlefield 1942, all have Gamespy packaged within them. Probably plenty of others
If you read through the advisory, you'll probably understand a little more clear that it's not just a gamespy related problem. Games that easily return huge query responses from little data are the problem.. but this isn't limited to games, as it can also be found even from standard open ports on Windows XP, and so on. UDP Spoofing isn't new, this advisory is just highlighting a source that returns a huge amount of data by sending so little.
And if those packets happen to slam into your Linksys BEFSR41 router, it will freeze up, crash, and flop around like a half-dead fish.
Does anybody know how well spoofed packets traverse the internet? I know that "good netizens" drop spoofed packets, and that this really needs to be implmented on edge routers. Do enough service providers do this to have any real effects on these type of attacks?
Part of the problem is all the totally clueless ISPs which don't do proper egress filtering. That is, they don't filter out outgoing packets with falsified sender addresses.
They've had years to do that, and still don't.
Maybe I'm missing something, but since the data volume sepends on the number of people on the server, and gamers are notoriously intolerant of lag, the attack will in effect kill its own datasource as well if it goes on for more than a few minutes. The players will just jump off and look for another server.
There are a hundred other programs that do the same thing as Gamespy, it's not their fault. They work around the protocols that the game uses.
This is something that needs to be addressed by Game Developers (Valve, ID, etc.)
There is a great PDF (HTML version) of a research paper by Jeff Kato and Ryan Zojonc on all the issues of massive multiplayer gaming systems and leagues and why/when/what security breaches have occured and could occur in the future.
Why do people attack games?
- To get private info about others
- They pirate a game and want to play it online
- To get credit card numbers
- To cheat
- To delete others' characters
Reply or e-mail; don't vaguely moderate. Ex-O'Reilly/MIT employee, now a full-time Google employee.
Among the other won.net server trackers, Half-Life.east.won.net, Half-life.west.won.net, and so on, are also able to be exploited in the same manner. They can return thousands of bytes for a 2 byte query. a 3000 byte response would be a 1500x magnification..
If you have followed DoS attacks over the past few years, you will have noticed that the big trends is the decline of UDP based attacks. This is not because attacks like Pepsi and Smurf aren't still out there, it is because ISPs are limiting their use by filtering out spoofed UDP packets on their routers. Comcast, Verizon, AT&T, etc. all have routers that check the IPs of all outgoing UDP packets and replace the spoofed source IP with the true source IP (by checking which MAC address and port on the switch the packets are coming from.
Consequently, these attacks are far less likely to occur because most people's ISPs "fix" their UDP packets to prevent against attacks that work this way. This doesn't mean there isn't a problem. Not every ISP implements it, and it only takes one person to launch a large scale attack. Plus, gamespy will probably be patched to fix this problem.
__________________________________________
Take comfort in your ignorance.
Grandmaster Plague
you may as well throw in all of those pesky UDP services on the list.
Dilute! Dilute! OK!!!
You kind of wonder why programmers wouldn't put some sort of UDP reply limitation in the query system of all these games.
Games can have internal matchmaking screens using Gamespy's own API.
This is hardly a research paper. It is more like a 20-page powerpoint presentation that doesn't really give any new info. Am I missing something here?
I'd beg to differ. The multiplayer expansion for Civ III, Play the World is GameSpy branded for all of the pre game setup (this is when the Civ III application has been launched, not while you're still using GameSpy Arcade).
In addition, there are a number of other games which pretty much exclusively provide match-making through GameSpy like Fallout Tactics.
Certainly you can organize a game separately with a friend, but the developers and GameSpy are supporting one another. It is not simply GameSpy supporting certain interfaces with the game and servers that provide lists of active game hosts.
Games don't support GameSpy, GameSpy supports games.
Not true. Gamespy licences their engine for use in some games. Many games strip down a lot of the features that are available in say, Gamespy 3D, but some games (like BF1942) use a surprising number of options.
Isn't this just a DoS attack rather than a DDoS attack. Seems like it's coming from a single node.
I didn't expect QuakeX to be out for at LEAST another 30 years.
It doesn't matter - as long as it is a GameSpy server, you can use it to attack any remote host whose IP Address you know.
It'll harm performance on the server, but it'll harm the remote host far more.
This is the same technology they are talking about ehre.
In Soviet Russia you dant have to put up with these crappy jokes
A DDOS attack is a distributed denial of service attack, one where many servers all send packets to take down a network. As this article states, it is a dos attack. You hit one server at a time. If you send packets to multiple servers, then it can be a ddos, but not in the sense where there is very little disruption from the source of the attack.
This attack can take down the "source server" as well as the destination.
Comment removed based on user account deletion
This is just an excuse for people to blame on lag.
Goatasaur was killed by Yourname.
"omg someone must be ddosing the server"
~D:
i'm glad to see they had enough responsibility to put a couple "errors" in the proof-of-concept code so script kiddies dont just compile and have fun. i.e. #define DSTPORT 230
It would be possible to send the UDP packets at the game server with the source IP addresses spoofed to be the IP address of the game server itself. Nasty.
This would probably be self limiting since as the server slows down it would reduce the amount of packets it sends to itself, but it would probably be pretty nasty to the server as it sends and recieves flood loads of crap.
Hope a patch comes out soon...
-- Mike
that Gamespy is the biggest pain-in-the-you-know-what anyways. Bioware for some reason chose to use Gamespy for Neverwinter Nights, and it had to re-ping all the servers everytime you tried to connect to a server, but were told the server was full (even if it said the server had 39/40 people when you pinged it earlier). And then there's how the game publishers are too lazy to host their own patches, so they let jerkoffs like Gamespy's FilePlanet host the patches. I think they do it because they know they can get away with it.
No, you're missing nothing at all.
Hardly any usefull, interesting or new information in this "research paper".
Just a couple of action points...
and UDP is the most misused. Or maybe he would hate the other stateless protocols if they were as misused as much as UDP...You should try playing this game sometime.
If you modify your fix a bit more - make the first answer packet small, and require a response before sending the big part, that could do the job. You could either do a table-driven approach, or just have the first exchange of packets be a cookie-like request/response, and require a valid cookie along with the actual query. If you want to get fancy, you can require the requester to do some calculation on the cookie value, e.g. hashcash, that burns a half second of CPU time on an average box, limiting the possible attack rate.
Bill Stewart
New Fast-Compression-only CPR http://preview.tinyurl.com/dy575ks
Their main problem is in *application* protocol (the one on top of the UDP) being stateless. Adding simple state machine implementing client's registration will resolve the problem.
The first client's message says 'hi, i want to talk to you, register me', the server generates an ID for client's IP/port pair and sends ID back to the client. All subsequent packets that client sends include this assigned ID and thus ID serves as a simple 'authentication token' to the server.
It is still possible to spoof an inital message, but the trick is to keep server's registration response to the minimum and rate limit registration requests on the server's firewal.
3.243F6A8885A308D313
Not sure how this wouild work, but require sort of a handshake to get data. I.e. the client sends a request to talk, the server replies with a auth token (some integer), then the client sends the auth token + query. auth tokens would be attached to an ip so it could be chached for faster queries, but required that a connection be authed to get data. Then the server only sends data on about a 1:1 ratio is the client doesn't send a token. Commands w/o a token would be ignored.
At the data level it is, but the whole query includes the UDP and IP headers, which are about 40 bytes, so it's really only ~75:1 magnifaction. (Modem users can do compressed PPP and get somewhat smaller headers for somewhat bigger effect.) Still an attractive nuisance.
Bill Stewart
New Fast-Compression-only CPR http://preview.tinyurl.com/dy575ks
All of this is done (better, IMHO) using ingame server finding/selection. Gamespy is for games what AOL is for the 'internet'.
"During times of universal deceit, telling the truth becomes a revolutionary act." - George Orwell, 1984
A typical query for DNS or daytime or SNMP whatever gets a response that's similar in size to the query; this attack is fun because you can get a 400:1 multiplication.
Bill Stewart
New Fast-Compression-only CPR http://preview.tinyurl.com/dy575ks
That is a nasty attack, but most firewalls of any sort block packets from the outside pretending to be from the inside, since there are _way_ too many Bad Things that can be done otherwise, more of them security breaches than denial of service. Also, it's actually not as nasty an attack as it looks, because the server is probably on an Ethernet behind a router, so the loopback happens on the 100Mbps Ether segment, and doesn't try to go out the T1 Internet pipe.
Bill Stewart
New Fast-Compression-only CPR http://preview.tinyurl.com/dy575ks
I think one would almost be required to be fancy, because this is all UDP. That is, because the connection is stateless, a response might also be spoofed.
Too busy staying alive... ~ R.A.
Stupid. Just about every new vulnerability comes from information in past vulnerabilities.
UDP Message: GIVE ME STATS!
UDP Reply: Challenge #HASHOFCURRENTTIME
UDP Message: VERIFY #HASHOFCURRENTTIME
UDP Reply: DATA
Problem Solved(TM)
Lots of server protocols prevent attacks by requesting a cookie before they do anything difficult or resource-consuming. Besides security, that's useful for basic reliability - it makes sure the IP routes are all working, the client can reach the server, the server's working, and the server can reach the client, before either side does any real work. Most exceptions to this are simple protocols like DNS that don't require any state or much work and would do more work building the connection than sending the real data, and things like NFS which have some reason for the client to trust the server's availability before sending big packets and which make sure that retries with the same data are ok.
Some of the crypto protocols, such as Photuris, do a cookie handshake first, because the first "real" step of the protocol comsumes lots of server CPU, and they'd be vulnerable to denial-of-service attacks otherwise. In this case, the attack is a forged-request attack on an unsuspecting client, but the server is still the only one that can provide any protection. Either way, the client firsts requests a cookie from the server, and the requests for real work need to include the cookie, or the cookie modified in a way that clearly indicates it was received.
A variation on cookies is to make the client perform non-trivial amounts of work using the cookie, which the server can verify quickly - this lets the server limit the rate of requests, and means an successful attacker needs lots more resources than the server. Hashcash is the canonical one - the client has to use brute-force search to find a string containing the cookie that has a hash value starting with a specified N bits, and the server can verify the hash quickly. This defense can be made stronger by including the sender's identification and a timestamp in the cookie string, making it harder to replay. While it's not possible to tune hashcash CPU consumption precisely (since different machines are different speeds, and the attacker may have a Beowulf cluster of Crays or a bunch of zombies to do calculations), the server can adjust the rate of requests by adjusting the hash length as needed. In addition to fullscale cookie-based hashcash, it's sometimes adequate to do a simple userid-and-timestamp version, or userid-and-counter, so the attacker has to do some work, e.g. burn a second of CPU time for every 2KB of response for a modem user, or 10KB for an online user, to prevent swamping.
In this environment, though, anything that requires client upgrades won't fly; you're stuck with upgrades to servers (tough enough) and handshakes that use the existing user interface.
Modifying the server to limit the number of responses per second for a given client (or of big responses) is probably a good start - it doesn't solve all the problems, and the attacker may be able to forge a stream of requests that prevents the victim from doing legitimate queries, but it protects the network connections. Another approach would be to do something password-like - the user queries for a password, or chooses a password, and has to use it to get any big queries, or more than N big queries.
Bill Stewart
New Fast-Compression-only CPR http://preview.tinyurl.com/dy575ks
I am truly sorry you even had to post this message, but someone had to. If you're going to forward packets, you should decide whether, not just whither to retransmit them!
--- Nothing clever here: move along now...
Just because the connection is stateless doesn't mean the protocol has to be; cookies and their relatives are a traditional way to work around that. Have the server generate a random cookie value and store it, and require the client to provide a valid cookie as part of the query. You can either have the cookie contain information about the client (its IP address or whatever), or not bother about that, and trash any cookies older than a few seconds. The only important thing is making sure that cookie values aren't easily predictable, so use a 64-bit random number or something that's not a timestamp.
Bill Stewart
New Fast-Compression-only CPR http://preview.tinyurl.com/dy575ks
Right, fancy.
There is a variable within the main Unreal ini file that lets the server admin determine how many UDP server queries per second to allow. Unfortunately this variable is set to unlimited by default. Can't think of this variable off of the top of my head.
Journal
This vunerability has nothing to do with GameSpy, if it did, we'd be poking a knife into the All Seeing Eye etc as well. GameSpy/ASE simply provide a legitimate mechanism to query servers, using protocols that have become defacto among games and their designers. It's like blaming knife rack makers when people use the knifes to kill.
/. would be above something petty like throwing company names into a topic title, especially when the given company is a big proponent of the use of an open standard, rather than locking out users of other programs.
The protocol normally used is UDP. However, since it's connectionless this protocol is open to abuse by malicious client machines. All that's involved is a standard spoof connection request, which the servers will quickly discard after a timeout. The average game server has connection management that allows for dozens of clients, and since there are tens of thousands of game servers I doubt we'll be seeing a signifigant abuse problem using this mechanism.
I would have thought
Just out of curiosity on the lines of this whole rethinking thing, can someone explain to me what a technology like Apple's rendezvous do for gaming?
Yes it?s time to rethink client/server game querying ...
Out of curiosity, as I don't quite understand the technology behind it, how would something like Rendezvous work for such a purpose? It's open-source, intended for cross-platform use and supposedly automatically can find and query servers, I guess. Is that how this thing works?
The URL should be: http://www.apple.com/macosx/jaguar/rendezvous.html
>Funny thing, isn't it? (originally found on heise.de)"
No, it's not. Sounds like any DDOS attack. most modern firewalls and routers can filter and detect this for you. As soon as it sees something that looks like this it can block and reroute.
Not rocket science.
"I used to have that really cool,funny sig
good point.
First of all, this have nothing to do with game spy, it is related to the servers.
y /0 182.html
/. is doing something weird here.
Secondly, this is old news. I first saw it described in May 1998:
http://lists.insecure.org/lists/bugtraq/1998/Ma
Thats 5 years ago.
Mads Bondo Dydensborg
P.S. There are no spaces in that url, I think
GameSpy supplies the game status code for the majority of on-line game servers. They sell an SDK which you can bake into you game to make it GameSpy compatible. Since many of the game servers are using this SDK, they're all capable of hosting a third-party DOS or DDOS. If they fix their SDK, then many games could release server patches and greatly reduce the problem. (so, this is very much a GameSpy issue, but the biggest game,
Half-Life, does not use GameSpy SDK)
The best fix is a short-lived-cookie based protocol. But this will double the number of packets needed to get game server status information, and require client patches. A server-side throttling fix is best we can really hope for.
An idea is an eye given by God for the seeing of God. Some of these eyes
we cannot bear to look out of, we blind them as quickly as possible.
-- Russell Hoban, "Pilgermann"
- this post brought to you by the Automated Last Post Generator...