<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://homeostasis.scs.carleton.ca/wiki/index.php?action=history&amp;feed=atom&amp;title=Game_Engines_2021W_Lecture_21</id>
	<title>Game Engines 2021W Lecture 21 - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://homeostasis.scs.carleton.ca/wiki/index.php?action=history&amp;feed=atom&amp;title=Game_Engines_2021W_Lecture_21"/>
	<link rel="alternate" type="text/html" href="https://homeostasis.scs.carleton.ca/wiki/index.php?title=Game_Engines_2021W_Lecture_21&amp;action=history"/>
	<updated>2026-04-08T04:54:14Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.42.1</generator>
	<entry>
		<id>https://homeostasis.scs.carleton.ca/wiki/index.php?title=Game_Engines_2021W_Lecture_21&amp;diff=23120&amp;oldid=prev</id>
		<title>Soma: Created page with &quot;&lt;pre&gt; Game Engines &amp; Security -----------------------  Threat modelling is the first task when determining the security of a system  - what attacks actually matter?  - softwar...&quot;</title>
		<link rel="alternate" type="text/html" href="https://homeostasis.scs.carleton.ca/wiki/index.php?title=Game_Engines_2021W_Lecture_21&amp;diff=23120&amp;oldid=prev"/>
		<updated>2021-04-01T15:52:38Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot;&amp;lt;pre&amp;gt; Game Engines &amp;amp; Security -----------------------  Threat modelling is the first task when determining the security of a system  - what attacks actually matter?  - softwar...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
Game Engines &amp;amp; Security&lt;br /&gt;
-----------------------&lt;br /&gt;
&lt;br /&gt;
Threat modelling is the first task when determining the security of a system&lt;br /&gt;
 - what attacks actually matter?&lt;br /&gt;
 - software security doesn&amp;#039;t matter when a baseball bat&lt;br /&gt;
   is the real threat&lt;br /&gt;
&lt;br /&gt;
With games, what are the threats we care about?&lt;br /&gt;
 - &amp;quot;theft&amp;quot;/piracy&lt;br /&gt;
 - cheating&lt;br /&gt;
 - loss of service&lt;br /&gt;
&lt;br /&gt;
Software piracy is something all commercial software developers care about, but games are particularly interested because&lt;br /&gt;
 - customers are price sensitive&lt;br /&gt;
 - typically have lots of time on their hands&lt;br /&gt;
 - and product is &amp;quot;consumable&amp;quot;, can only expect usage&lt;br /&gt;
   for a limited period of time&lt;br /&gt;
 - subject to changes in taste&lt;br /&gt;
   - once interest passes, sales tend to go way down&lt;br /&gt;
&lt;br /&gt;
Copy protection for games is much older than game engines&lt;br /&gt;
 - used to be games were all written from scratch&lt;br /&gt;
 - code reuse was rare&lt;br /&gt;
&lt;br /&gt;
Older forms of copy protection often involved games taking the &amp;quot;from scratch&amp;quot; idea to an extreme&lt;br /&gt;
&lt;br /&gt;
Locksmith for the Apple II was a full reverse engineering suite&lt;br /&gt;
 - needed because game copy protection involved creating&lt;br /&gt;
   non-standard disk operating systems!&lt;br /&gt;
 - had unique ways of encoding data on disk&lt;br /&gt;
 - these formats could not be properly read by&lt;br /&gt;
   standard disk reading software&lt;br /&gt;
 - and even if they could copy the raw data, they&lt;br /&gt;
   couldn&amp;#039;t copy the weird patterns developers put in them&lt;br /&gt;
&lt;br /&gt;
When writing data to a physical medium, you have many restrictions&lt;br /&gt;
 - first, can&amp;#039;t use all bit patterns, as only some bit patterns are allowed (because it is a physical substrate)&lt;br /&gt;
 - must have error correction, because reads won&amp;#039;t be perfect&lt;br /&gt;
 - and, need navigation marks *in the data stream*,&lt;br /&gt;
   because you have to manually find the start,&lt;br /&gt;
   especially when the medium is circular&lt;br /&gt;
     - start of track, end of track, etc&lt;br /&gt;
&lt;br /&gt;
 - game copy protection could mess with all of this&lt;br /&gt;
     - almost impossible to make a &amp;quot;perfect&amp;quot; copy of&lt;br /&gt;
       any disk with regular disk hardware unless&lt;br /&gt;
       you understand the format in some way&lt;br /&gt;
&lt;br /&gt;
Today it is all behind a standard API so regular software can never see it&lt;br /&gt;
 - disk controllers are variable underneath but are&lt;br /&gt;
   proprietary secrets&lt;br /&gt;
&lt;br /&gt;
&amp;quot;cracking&amp;quot;, then and now, means converting a program from a copy protected form to a standard, easily copyable form&lt;br /&gt;
&lt;br /&gt;
A modern game engine typically doesn&amp;#039;t have much of a role in copy protection&lt;br /&gt;
 - now part of the DRM layer baked into the hardware&lt;br /&gt;
 - uses strong cryptography (i.e., digital signatures),&lt;br /&gt;
   code obfuscation, and tamper-resistant hardware&lt;br /&gt;
&lt;br /&gt;
The way you get access to this is by working with a publisher and having them authorize your code by &amp;quot;publishing&amp;quot; it in some way.  Without their authorization,&lt;br /&gt;
your code won&amp;#039;t run.&lt;br /&gt;
&lt;br /&gt;
The game security problem that is more top of mind and in need of engine support is anti-cheating&lt;br /&gt;
 - because, what does it mean to cheat?&lt;br /&gt;
&lt;br /&gt;
Mainly a concern in multiplayer, distributed games&lt;br /&gt;
 - which are incredibly common&lt;br /&gt;
&lt;br /&gt;
Copy protection is often part of anti-cheat software, but&lt;br /&gt;
it isn&amp;#039;t enough&lt;br /&gt;
&lt;br /&gt;
Anti cheat software has to make sure the program runs securely&lt;br /&gt;
 - have to make runtime state is confidential and integrity protected&lt;br /&gt;
 - have to make sure service remains available&lt;br /&gt;
&lt;br /&gt;
Security is confidentiality, integrity, and availability (basically)&lt;br /&gt;
&lt;br /&gt;
Want to stop&lt;br /&gt;
 - one player impersonating another&lt;br /&gt;
 - &amp;quot;spying&amp;quot; on other players, getting unfair advantages in the world&lt;br /&gt;
&lt;br /&gt;
In an FPS, a cheater may want to&lt;br /&gt;
 - look through walls&lt;br /&gt;
 - have computer-enhanced aim, firing, movement&lt;br /&gt;
&lt;br /&gt;
Note these all invole unauthorized viewing or modifying of game state&lt;br /&gt;
 - viewing unauthorized parts of the world model&lt;br /&gt;
 - unauthorized controller input (i.e., from a bot)&lt;br /&gt;
&lt;br /&gt;
Unauthorized input can be managed by locking down the hardware&lt;br /&gt;
&lt;br /&gt;
World model confidentiality is hard because it directly&lt;br /&gt;
contradicts performance requirements&lt;br /&gt;
 - want to maintain local copies of the entire world with every game client to maximize performance&lt;br /&gt;
    - need to send less data around as the player moves&lt;br /&gt;
 - but those copies threaten the confidentiality of game state&lt;br /&gt;
&lt;br /&gt;
Ideally a game engine would allow you to easily manage&lt;br /&gt;
distribution of game state&lt;br /&gt;
 - could mark parts of it secret so it would be shared less&lt;br /&gt;
 - support in-engine state obfuscation&lt;br /&gt;
&lt;br /&gt;
Denial of service is a harder problem&lt;br /&gt;
 - generally just means contracting with an anti-DDoS service&lt;br /&gt;
 - but this isn&amp;#039;t enough, because you have to figure out what to do when there are failures&lt;br /&gt;
&lt;br /&gt;
For example, you could make it so that on network failure&lt;br /&gt;
a player&amp;#039;s character become temporarily invulnerable&lt;br /&gt;
 - can&amp;#039;t be killed when not actively playing&lt;br /&gt;
 - but now have you given players an incentive to DoS themselves?&lt;br /&gt;
&lt;br /&gt;
Multiplayer games become bigger than the game you create&lt;br /&gt;
 - they develop a culture&lt;br /&gt;
 - part of that culture may be to make use of mechanisms that you didn&amp;#039;t build, i.e., cheats&lt;br /&gt;
 - but you as a developer can influence how that culture develops&lt;br /&gt;
&lt;br /&gt;
This is particularly true with in-game economies&lt;br /&gt;
 - if players perceive unfairness, they&lt;br /&gt;
   will either leave or will try to even the odds&lt;br /&gt;
   by any means necessary, i.e. cheating&lt;br /&gt;
&lt;br /&gt;
Modding is really a strategy for managing the meta game&lt;br /&gt;
 - many of the same techniques of crackers&lt;br /&gt;
 - but here, used in a creative context&lt;br /&gt;
&lt;br /&gt;
People respond to incentives, and not all incentives are financial&lt;br /&gt;
 - huge drive to &amp;quot;have fun&amp;quot;&lt;br /&gt;
 - part of having fun is figuring out puzzles,&lt;br /&gt;
   gaining a competitive advantage, &amp;quot;playing the game&amp;quot;&lt;br /&gt;
 - for many in the game community, cheats and software&lt;br /&gt;
   piracy are more fun than playing the games themselves&lt;br /&gt;
&lt;br /&gt;
Computer security itself is really a game between attackers and defenders&lt;br /&gt;
 - this game can work in your interests or against your interests&lt;br /&gt;
&lt;br /&gt;
My research is really about how to make the game of security less fun&lt;br /&gt;
 - particularly for the attackers&lt;br /&gt;
But to be fair, some of my work may make it more fun&lt;br /&gt;
&lt;br /&gt;
Examples&lt;br /&gt;
 - if you figure out how to copy one game, it won&amp;#039;t&lt;br /&gt;
   help you copy the next (diversity)&lt;br /&gt;
 - but maybe I&amp;#039;ve just increased replayability?&lt;br /&gt;
&lt;br /&gt;
Anomaly detection&lt;br /&gt;
 - detect when things are &amp;quot;weird&amp;quot; at some level, e.g.&lt;br /&gt;
   how the program runs&lt;br /&gt;
 - but then this became a game of attackers trying to make their attacks look &amp;quot;normal&amp;quot; (mimicry attacks)&lt;br /&gt;
&lt;br /&gt;
Games have (a bit) trained some people to enjoy cracking systems, developing exploits&lt;br /&gt;
 - huge incentives, not many downsides&lt;br /&gt;
&lt;br /&gt;
When you present, please have your cameras on&lt;br /&gt;
 - public speaking goes better when people can see you&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Soma</name></author>
	</entry>
</feed>