Lontahv wrote:I think there's one reason why Cyan didn't do what you suggest:
Plasma's concept: Client is god
So... the reason that cyan made the client god is because the client is god? That doesn't really answer my question.
Lontahv wrote:But say they did want to add some filters, there's another problem (this would be faced by us if we try to add filters to what can be done):
How do you tell the difference between a cone-kick and a cone being warped around by a player using Plasma's physics (without adding huge load on the network and server)?
D'Lanor wrote:Lontahv is right. There is no way to differentiate between "good" and "bad" game messages. They are identical. If you go blocking specific types of message you most likely end up with a crippled game.
This isn't really as impossible as you guys are making it. Every other multiplayer game out there has the server filter out bad client behavior. Half-life 2 even has a full-blown server-side physics simulation in multiplayer games and it generally runs a lot smoother than uru.
There are three levels of filtering you could accomplish, depending on how much development effort you wanted to put in:
- Basic permissions. A client should only be able to affect itself, and the state of client-manipulable objects. It shouldn't be able to move other clients around, or things like kerath's arch. This would also apply to the vault at large -- the variables that the client can affect should only be those that it would need to affect given the age it's currently in. If the server saw a message that affected anything else it would drop it.
- Area of influence. A client shouldn't be able to move objects or manipulate switches and such further away than a certain distance from the current position of the client. This will avoid warping cones around that are too far away, messing with distant puzzle state, etc. This may require putting new information into uru levels (or devising a method to automatically extract them), such as "area of influence" for state variables, and so on.
- Server-side simulation. Try to re-create the client's movements on the server and if they aren't possible (going through walls, flying, moving faster than the maximum running speed, setting nonsensical states in the vault), then drop the messages. This is what games like Half-life 2 do.
I'm not saying there's not a lot of work to be done to get these things working right, but it's also not impossible. Yes, it will probably increase server memory and processor requirements, because you have to load and process more information about the levels, but from what i've heard, the server isn't a bottleneck at the moment.
There is one architectural problem though: keeping client-server sync. If the server can "reject" client messages, you probably want the client to know so it can adjust and show the player what's really happening. Most online games accomplish this through server-is-god with client prediction (ie, the client approximates its position, but when the server sends an update, it "snaps" back to that state). Given the complex state system of Uru, and the "client-is-god" design methodology, this may not be possible. So the server filtering system needs to be loose enough such that all legitimate clients will never run up against the filter, and it will only impede obvious hack attempts.
Chacal wrote:By writing an application firewall that runs on a different server and filters traffic in real-time.
If it can keep up with the traffic then it won't be a bottleneck.
You train it in two ways:
- analyze normal traffic and set it as baseline;
- analyze abnormal traffic and store a signature of such events.
You then add rules for processing traffic accordingly.
This isn't different from current NIDS we use in IT security.
I don't think an IDS system like you describe will work properly for this application. You need to know a lot about the internal setup and state of the game in order to filter messages with any accuracy. A pattern/traffic analysis system will not be sufficient for something this complex.
D'Lanor wrote:Another question is, how does security fit into open source? How do other open source projects cope with that when any security implementation can be grabbed from the source by those seeking to circumvent it?
The mantra in computer security is "security through obscurity isn't security at all." This means if the only reason you're secure is because they don't see your source code, then it's only a matter of time before someone figures it out and hacks you anyway. The solution is to use algorithms and techniques that are guaranteed to be secure even if someone knows exactly what you're doing. These are usually more difficult to implement, but they're worth it.
Anyway, when uru was closed source, it definitely was a "security through obscurity" situation. Now that it's going to be opened, that's why this is going to be a much more important issue. We don't want the many internet griefers out there disrupting our experiences because of a weak client-server model.
I feel like this whole thing is a topic that needs its own thread.