See common anti-patterns for securing web applications and how to correct them. Learn how to differentiate between authentication, authorization, secrecy, integrity, non-repudiation, and other security goals.
Examples include how:
* a theoretical "secret" banking request is corrupted to pad an attacker's bank account,
* an insecure "session" authentication token is attacked, and
* a "random" XSRF value gives a false sense of security.
Correct principles and patterns are analyzed and compared with common incorrect ones.
4. Cargo Cult Programming
Ritualistic inclusion of code or patterns that are
unnecessary for the task at hand.
• Design patterns
• Factory
• Wrapper
• Dependency injection
• Cryptography
• Encryption
• Hashing
6. Crypto Primitives & Goals
Hash
Data Integrity
Data
Authentication
Non-repudiation
Confidentiality
Trust
MAC
HMAC
Symmetric
Key Crypto
Asymmetric
Key Crypto
Digital
Signature
Digital
Certificates
10. Crypto Primitives & Goals
Hash
Data Integrity
Data
Authentication
Non-repudiation
Confidentiality
Trust
MAC
HMAC
Symmetric
Key Crypto
Asymmetric
Key Crypto
Digital
Signature
Digital
Certificates
12. Crypto Primitives & Goals
Hash
Data Integrity
Data
Authentication
Non-repudiation
Confidentiality
Trust
MAC
HMAC
Symmetric
Key Crypto
Asymmetric
Key Crypto
Digital
Signature
Digital
Certificates
14. Crypto Primitives & Goals
Hash
Data Integrity
Data
Authentication
Non-repudiation
Confidentiality
Trust
MAC
HMAC
Symmetric
Key Crypto
Asymmetric
Key Crypto
Digital
Signature
Digital
Certificates
21. Modes and IVs
• Cipher-block chaining prevents patterns within
messages
• Correct IV prevents patterns across messages
22. Generating Keys &
Initialization Vectors
$key = “koicy37m8ao2nl07";
$iv = rand();
$cypherText = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $key,
$plainText, MCRYPT_MODE_CBC, $iv);
• How many bits of key entropy can be contained in 16 alphanumeric characters?
• 96 bits!
• ~0.00000002% of possible search space
• What initialization vector is really used here?
• “0000000000000000”!
• PHP Warning: mcrypt_decrypt(): The IV parameter must be as long as the
blocksize in /home/derrick/…/CBC.php on line 27
• Use
• $size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128,
MCRYPT_MODE_CBC);
• mcrypt_create_iv($size);
24. Finding Linear Congruential
Seed
Random random = new Random();
long v1 = random.nextInt();
long v2 = random.nextInt();
for (int i = 0; i < 65536; i++) {
long seed = v1 * 65536 + i;
if (((seed * multiplier + addend) & mask) >>> 16) == v2) {
System.out.println("Seed found: " + seed);
break;
}
}
25. Anti-pattern: Psuedo-random
Session IDs
<?php
$uid = "12345678";
$sessionId = md5($uid . rand() . microtime());
setCookie(“session_id", $sessionId);
?>
Really only ~20 bits of entropy.
A modern GPU can calculate that in a second!9,12
26. HMACs and Secure Random
<form action="">
<label>Donation amount</label>
<input type="text" value="10.00">
<?php
$csrfToken = openssl_random_pseudo_bytes(32);
setCookie("csrfToken", bin2hex($csrfToken));
echo "<input type="hidden" value="$csrfToken">“;
?>
<input type="submit" value="Submit">
</form>
Do not use sessions! Use HMACs!
Seriously.
27. No Cargo Cult Security!
1.
2.
3.
4.
Identify true security goal.
Find correct crypto primitive.
Spend some time to learn about it.
Write as little of your own crypto code as
possible.
28. Crypto Primitives & Goals
Hash
MAC
HMAC
Symmetric
Key Crypto
Asymmetric
Key Crypto
Digital
Signature
Digital
Certificates
Data Integrity
Data
Authentication
Non-repudiation
Confidentiality
Trust
https://oracleus.activeevents.com/2013/connect/sessionDetail.ww?SESSION_ID=6325
29. Crypto Primitives & Goals
Hash
Data Integrity
Data
Authentication
Non-repudiation
Confidentiality
Trust
MAC
HMAC
Symmetric
Key Crypto
Asymmetric
Key Crypto
Digital
Signature
Digital
Certificates
“The term "cargo cult" has been used metaphorically to describe an attempt to recreate successful outcomes by replicating circumstances associated with those outcomes, although those circumstances are either unrelated to the causes of outcomes or insufficient to produce them by themselves.”http://en.wikipedia.org/wiki/Cargo_cult
Use CBC (cipher-block chaining) mode instead of ECB (electronic codebook) mode to hide patterns.