developer of game 'Rust' talks about anticheat on linux
developer of game 'Rust' talks about anticheat on linux
Not a chance.
Overhaul your entire game stack || Blame Linux for being too small
When I say they’re gamestack, I’m talking about their client and their backend services and their associated middleware.
Moving a game that is mostly client authoritative to server authoritative is a hell of a lot of work and requires serious rewrites to both the client and the server.
It also requires a lot more compute to handle the back end.
When you go from calculating everything on the front end and just sending the data back to the back end to sending actual controls to the back end and doing simulations, you need to rewrite a significant portion of everything.
It’s way cheaper and way faster just to write it in the client, and require the kernel/secured OS to police risky actions to the application.
The last couple of projects I looked at were probably 50% more man hours to make it server authoritative out of the box. Trying to come back and do it after the fact, It’s much, much higher.
See, the wild thing is that I used to run with some actual hackers in GMod… and… I learned from the exploits that they did, how you actually design at least a game mode script that can’t be fucked, can’t be poked proded or queried directly.
Of course, if the actual exploit is lower level than what I’m writing at, well then I’m still fucked…
I can remember at least one GMod originated, lower level exploit, caused by Garry leaving some direct, unsanitized interface to Steam itself directly exposed via lua… which caused Steam/Valve themselves to step in and rewrite a part of all of Steam, because Garry is s fucking moron, and more or less allowed a virus/malware to propogate through Steam itself, independent of Garry’s Mod…
Never did figure out if any of the goobers I knew had any direct ties to that or not.
But anyway, fucking yes, literally never trust the client with anything beyond their own GUI, and barely trust them with that, don’t just let them click on anything in their screen space to see if its an item they can put in their inventory, do an actual server side vector ray trace, from the item to the playet, make sure the thing they clicked on is actually near them, put that all into a buffer that locks up if they’re calling it at inhuman rates…
It was so easy to item dupe and stat boost and even hijack other players accounts in so many gamemodes I saw.
Fucking one of them had the user set and enter a login password to ‘access’ their various characters, pick one to spawn as.
Problem?
… That gamemode was actually doing the id check via SteamID, duh.
The username/password thing was a fucking phishing scam, that game mode had a forum, everyone used the same user names, a bunch of people got their hotmails or whatever fucked, by the dev of that gamemode.
… Anyway… yeah, I learned all this infosec type shit first hand, in an earlier ‘FacePunch Studios’ production.
Fuck Garry, fuck FacePunch, these people are idiot clowns.
Roblox exists now, the GMod roleplay communities independently invented their own ways of monetizing their gamemodes via syncing to their sites and forums with payoal widgets, ya’ll missed the boat on that one, no one is going to play S&ndbox in anything close to GMod in its heyday numbers.
Fuck you, take my order, stupid hallucinating AI drive thru working off an 18 year old microphone!
Oh Wait!
You’re closing half your locations after trying to push realtime adjusting prices.
Nah I’m good, I’m gonna be posted up at the abandoned Wendy’s, screaming at it all day long.
Garry leaving some direct, unsanitized interface to Steam itself directly exposed via lua… which caused Steam/Valve themselves to step in and rewrite a part of all of Steam, because Garry is s fucking moron, and more or less allowed a virus/malware to propogate through Steam itself, independent of Garry’s Mod…
That sounds entirely on Steam. The game is the client in this context, and Steam as the server shouldn’t be trusting anything from the client.
This was like, over a decade back, I don’t remember it in accurate detail, and also, Garry deleted all the old Facepunch forums, which I do remember having a lot of discussion about this…
But, best I can recall, it was something like a buffer overflow/memory space exploit, because Garry exposed a core Steam function, that normally is only called by other Steam functions, in c++…
Well, Garry decided to give basically a lua api / reference method of accessing it directly, allowing doing arbitrary code injection into it.
So I mean yeah, you can say Valve should not have trusted Garry with low level access to Source and Steam, that that’s their bad, they should have expected he would create a serious security exploit out of naivette/hubris, like the proverbial junior sql db admin who just does ‘DROP ALL’ on prod, as an ‘experiment’.
Uh yep, I would agree with that.
They’re totally different scenarios. How is the server supposed to know if a player has (e.g.) walls disabled and knows where the enemies are?
Because the client has to know where the enemies are while still hiding it from the player.
People who have no idea how things work and go off on quotes they see online is why these discussions are useless.
So the server has to compute whether a single pixel of the enemy’s body or shadow is visible to every client? How does the client play spatialised audio for enemy footsteps if it doesn’t know where they are - does the server calculate that as well?
I mean, if the client is thin, with everything computed server-side, this works, but that’s not what games are.
Finally someone who seems to have some sense of how things actually work and if course they get down voted…
Sure I get why people don’t like kernel anti cheat but they should at least understand the difficulties from not having it.
There’s been an increase in games that don’t give the client full knowledge of enemies. That data doesn’t actually need to be sent to the client if you can do checks on the server to know if they’re visible. Yeah, it needs to be simplified from a full raytraced solution from the camera, but it can be good enough that it isn’t much of a issue, depending on the game.
IIRC, some game (it may be Counter Strike, but idk) only gives your client player data for the “room” you’re in, and adjacent ones, or something like that. You can still see through walls near you, but you can’t see people on the other side of the map.
Yes, there’s always going to be a point where there’s nothing more you can do and you just have to hope for the best, and mitigate what you can on the client. Still, the naive “the client has to know where the enemies are” isn’t accurate. A well designed anti-cheat solution will try to come up with a solution for this. Sometimes it isn’t possible, but often there’s some amount of information that doesn’t need to be sent to players that can be hidden.
Because the client has to know where the enemies are while still hiding it from the player.
Why? :3 If a player shouldn’t be able to see someone, just don’t send their location.
But if they’re not rendered, what about their sound effects like walking, or something like their bullets?
This is actually an issue in War Thunder, where if the server thinks you shouldn’t be able to see a tank, it won’t render it, but this also causes it fairly frequently to not play noises from the tank like the engine or shots, and to not render projectiles from them either. So a teammate can die right next to you and you won’t know how because the shot wasn’t rendered on your screen even though you were looking in the direction of the enemy when they fired it. Or a tank with an engine louder than a semi truck will sneak up and kill you because the game simply decided that you shouldn’t be able to hear them.
The Problem is that that would increase the load on the server as well as make latency-mitigation much harder.
As with everything, it‘s always a tradeoff.
If your objection to client-side anti-cheat is that it “doesn’t work” what till you see what server-side anti-cheat fails to accomplish!
There’s no way with a pure server-side implementation to even try to work out whether the client is using an aimbot or wallhack. No solution is perfect, which is why the best solutions try to combine methods.
It’s a very hard thing to check for though especially with how complex the world can be in games today. Even if it was feasible you don’t know where a client will be in a few frames so you basically need to do a “what players can be seen from this general location” check. The higher movement speed the bigger of a volume is your possible viewpoint.
This is also ignoring all the things you need replicated even when you can’t see the player such as footsteps or them shooting or interacting with something.
Visibility check of what?
* The player and their shadow and all visible effects on the game world -> congratulations, now the server needs a GPU per player.
* The player’s geometry? -> shadows pop into existence when the player’s arm appears around the corner, and the server is still way more expensive than it would be
* A volume around the player? -> Still allows a significant advantage, still requires significantly more horsepower, and the client still can’t do spatial audio
This amounts to making players use thin clients and putting all visual and audio rendering on the server if you want it to work and not suck. Will you be happy to save £1000 on your PC at the cost of having games cost £150 a pop? Thought not. Or did you think the “extra CPU cycles” were just free?
@FishFace @x00z my small thought -> i think today no solution can prevent "cheaters" because you can't differ "cheaters" from users anymore if they want to.
Here is why ->
One PC is running the game -> a second PC emulates Keyboard and mouse inputs using a CAM (Capture Card) / Sound (microphon / digital capture) and an on the Game trained AI.
So what does any "cheat protection" offer if they don't protect against serious cheating ?
PS: "The only still working protection is lan play with control over hardware / software and players like done on real events"
@FishFace I am just saying that the barrier to a working cheating is just a second PC ( and if you don't use AI, you can also use "normal" other algorithms). So imho the discussion who has more potential to be used for cheating is unimportant cause it alwas implies that there are "save" games on windows ;)
I think the discussion should rather be how to create "trusted" environments (which we had in the 90's) for players who want that and the players who doesn't care can have a normal game based match making system.
So moving the money from cheat protection to user available servers / client infrastructure would make much more sense imho.
Cheating is more an issue for the publishers cause they can't sell you micro transactions if you are not within their environment but on your own server ;) But of course we can keep going on with this phantom discussions user vs user and ignore the people who really need this to work;)
PS: I guess most PC's at home nowadays have enough cores to "host" a game for friends
Many of the cheater ridden games don’t even do a simple CPU based PVS check on the server side. You don’t need a GPU for this because it’s super fast.
An example of strictness in protection using PVS: www.youtube.com/watch?v=8w1ICIBO3D4
Tarkov for example doesn’t even do a super simple check.
I don’t think it’s cognitive dissonance driving them, I think it’s hatred of rootkit anti-cheat that bleeds into other client-side anti-cheat.
People aren’t very good at separating different but related things, it seems.
You use both server and client side anti cheat.
Using only one will not work the way it should.
That, or cloud gaming needs to replace it.
It will ruin the experience for anyone playing competitively in a ranked mode, which means invalidating that mode entirely. This drives players away from competitive games like CS, Valorant, etc. which is why those games all use anti-cheats.
Similarly if there is a persistent world or some state that the game relies on to make the game fun for everyone, e.g. extraction shooter, MMORPG, etc then if the game state’s integrity is compromised it loses meaning entirely. Imagine playing chess but your opponent can move the pieces any way they like; it stops being a game.
I do agree that games where everyone agrees on cheating should allow it.
Hundreds of hours in Marvel Rivals and I’ve also never encountered anyone I was sure was a cheater. Nor have any of the friends I play with, and I’ve never had anyone on voice tell me about encountering a cheater.
I’ve definitely had a handful of matches cancel with an alert that a cheater was detected though.
Maybe I’m lucky. Maybe kernel-level anti-cheat is a farce.
I've come across many, is it annoying? Sure. Is it the end of the world? No. You just leave the lobby/server and go in a fresh one.
No cheating is bad enough to justify a rootkit.
I've also been called a cheater a lot and they always sound very convinced even though they have no idea at all. I imagine these are the same people constantly complaining about cheating.
Get your anticheat code off my fucking cpu and onto your servers where it belongs.
Garbage games do this, simple as.