146
Booking.com WE ARE HIRING Work @ Booking: http://grnh.se/seomt7

Security Theatre - Benelux

  • Upload
    xsist10

  • View
    500

  • Download
    2

Embed Size (px)

Citation preview

Page 1: Security Theatre - Benelux

Booking.comW

E ARE HIRING

Work @ Booking: http://grnh.se/seomt7

Page 3: Security Theatre - Benelux

Illusion

Page 4: Security Theatre - Benelux

Denial

Page 5: Security Theatre - Benelux

I know about OWASP!

Page 6: Security Theatre - Benelux

If you are hacked via OWASP Top 10, you’re not allowed to call it “advanced” or “sophisticated”

@thegrugq

Reference: https://twitter.com/thegrugq/status/658991205816995840

Page 7: Security Theatre - Benelux

But I use antivirus!

Page 8: Security Theatre - Benelux

Crypting services makes most antivirus techniques useless

Reference: http://krebsonsecurity.com/2014/05/antivirus-is-dead-long-live-antivirus/

Page 9: Security Theatre - Benelux
Page 10: Security Theatre - Benelux

Let us put an unsecured node.js server on your personal

computer

TrendMicro Antivirus on WindowsJan 2016

https://code.google.com/p/google-security-research/issues/detail?id=693

Page 11: Security Theatre - Benelux

Remote code-executions via your mail client downloading an

email

Sophos AntivirusJune 2015

https://lock.cmpxchg8b.com/sophailv2.pdf

Page 12: Security Theatre - Benelux
Page 13: Security Theatre - Benelux

We’re all bad at security

Page 14: Security Theatre - Benelux

Users are bad at security

➢ Weak passwords➢ Password reset questions➢ Human verification sucks➢ Clickbait and phishing➢ Attachments➢ URL mistype➢ Routine and workarounds➢ Convenience trumps security

Page 15: Security Theatre - Benelux

Developers are bad at security

Reference: https://github.com/

Page 16: Security Theatre - Benelux

Hackers are bad at security

Page 17: Security Theatre - Benelux

A study in scarlet

Page 18: Security Theatre - Benelux

43 applications, libraries or frameworksover 4,800 versionsover 10 million files

Page 19: Security Theatre - Benelux

255,000 scansAbout 6k/month from June 2012 till now

Page 20: Security Theatre - Benelux

ResultsJuly 2015

Page 21: Security Theatre - Benelux

Most popular softwareIt’s not what you think

Page 22: Security Theatre - Benelux
Page 23: Security Theatre - Benelux
Page 24: Security Theatre - Benelux
Page 25: Security Theatre - Benelux

How bad is it?

Page 26: Security Theatre - Benelux
Page 27: Security Theatre - Benelux
Page 28: Security Theatre - Benelux
Page 29: Security Theatre - Benelux

Why is it so bad?

Page 30: Security Theatre - Benelux
Page 31: Security Theatre - Benelux
Page 32: Security Theatre - Benelux
Page 33: Security Theatre - Benelux

I have seen thingsPh'nglui mglw'nafh Cthulhu R'lyeh wgah'nagl fhtagn

Page 34: Security Theatre - Benelux
Page 35: Security Theatre - Benelux

Versioning Hell1.3-final-beta6-pre-patch3

Page 36: Security Theatre - Benelux

OpenXBackdoored for almost a year

Page 37: Security Theatre - Benelux
Page 38: Security Theatre - Benelux

Lessons Learnt

Page 39: Security Theatre - Benelux

VersioningProjects with bad versioning also have some

of the worst security issues

Page 40: Security Theatre - Benelux

Automatic PatchingIf your software comes with automatic

upgrading, people will use it

Page 41: Security Theatre - Benelux

Plugins and TemplatesIf an update needs manual changes for

plugins or template, no one updates

Page 42: Security Theatre - Benelux

Patch Fatigue Exists

Image by Aaaron Jacobs released under CC BY-SA 2.0

Page 43: Security Theatre - Benelux

Anger

Image by Josh Janssen released under CC BY-ND 2.0

Page 44: Security Theatre - Benelux

Why doesn’t someone do something about it?

Page 45: Security Theatre - Benelux

Private industry keep threatening security researchers

Page 46: Security Theatre - Benelux

"How many Fortune 500 companies are hacked right now?

Answer, 500."Mikko Hypponen, CRO of F-Secure

Reference: https://twitter.com/mikko/status/184329161257652227

Page 47: Security Theatre - Benelux

Why don’t we have some form of standard?

Page 48: Security Theatre - Benelux

We have ISO 27001/2, ISO 15408, RFC 2196, PCI DSS, NIST, …

Reference: https://en.wikipedia.org/wiki/Cyber_security_standards

Page 49: Security Theatre - Benelux

Why doesn’t the government do something about it?

Page 50: Security Theatre - Benelux

A Ukrainian power plant was hacked & shutdown because

someone had macros enabled in Excel

Reference: https://t.co/PA7cDQC9EI

Page 51: Security Theatre - Benelux
Page 52: Security Theatre - Benelux

NSA: We’re just upgrading your megaflops, promise.

Page 53: Security Theatre - Benelux

Reference: https://t.co/PA7cDQC9EIImage by Unknown released into the Public Domain

Page 54: Security Theatre - Benelux

Bargaining

Image by Jeroen Moes released under CC BY-SA 2.0

Page 55: Security Theatre - Benelux

But what if we installed advanced IDSs, WAFs and

specialised network hardware

Page 56: Security Theatre - Benelux

We probably only knew about one of the two backdoors in our

system

Juniper NetworksDec 2015

http://www.wired.com/2015/12/juniper-networks-hidden-backdoors-show-the-risk-of-government-backdoors/

Page 57: Security Theatre - Benelux

IDSs produce reports. Managers likes reports: it helps them feel like they can "manage" security

http://security.stackexchange.com/questions/12164/how-effective-is-an-ids-at-catching-targeted-attacks

Page 58: Security Theatre - Benelux

We’ll start following prescribed security standards

Page 59: Security Theatre - Benelux

That’s great for your insurance premiums

Page 60: Security Theatre - Benelux

Depression

Page 61: Security Theatre - Benelux

Ninety percent of everything is crap.

Sturgeon's law

Reference: https://en.wikipedia.org/wiki/Sturgeon%27s_law

Page 62: Security Theatre - Benelux

Acceptance

Image by Stephan Brunet released under CC BY-SA 3.0

Page 63: Security Theatre - Benelux

Effective?

Page 64: Security Theatre - Benelux

Most of our security practices are ineffective

Page 65: Security Theatre - Benelux

We do security in isolation

Page 66: Security Theatre - Benelux

Holistic

Page 67: Security Theatre - Benelux

Hardware

Drivers

Services

Your Dependencies

Operating System

Your Software

Humans

Network / Internet

Area of Influence

Page 68: Security Theatre - Benelux

Hardware

Drivers

Services

Your Dependencies

Operating System

Your Software

Humans

Network / Internet

HR/Training

System Administrators

Downstream Providers

Page 70: Security Theatre - Benelux

Image by Albert Bridge released under CC BY-SA 2.0

Surface Area

Page 72: Security Theatre - Benelux

Mitigation

Image by Pivari.com released under CC BY-SA 3.0

Page 73: Security Theatre - Benelux

Trust

Page 74: Security Theatre - Benelux

Trust?

Page 75: Security Theatre - Benelux

Be aware of what you’re trusting

Page 76: Security Theatre - Benelux

The hardest part of security is not writing

secure code

Page 77: Security Theatre - Benelux

It’s understanding where you misplace

your trust

Page 78: Security Theatre - Benelux

Trust is a chain

Page 79: Security Theatre - Benelux

I trust my computer is not compromised

Up-to-date patches

TRUST

Page 80: Security Theatre - Benelux

I trust that the software is without vulnerability

Vulnerability research and security updates

TRUST

Page 81: Security Theatre - Benelux

I trust that the software is configured properly

Automated provisioning

TRUST

Page 82: Security Theatre - Benelux

I trust that the network is configured properly and secure

Good system administrators

TRUST

Page 83: Security Theatre - Benelux

I trust you are who you say you are

TLS Certificate Peer Verification or Authentication

TRUST

Page 84: Security Theatre - Benelux

I trust you are allowed to talk to me about this topic

Authorization

TRUST

Page 85: Security Theatre - Benelux

I trust that what you send me hasn’t been tampered with

Hashes or signatures

TRUST

Page 86: Security Theatre - Benelux

I trust that what we talk about is just between us

Public and private keys

TRUST

Page 87: Security Theatre - Benelux

I trust your computer is not compromised

????

TRUST

Page 88: Security Theatre - Benelux

I trust that what we talk about won’t be share with others

Contracts, Legalities, Terms of use, ????

TRUST

Page 89: Security Theatre - Benelux

I trust that the user won’t be the weak link

Training and procedures

TRUST

Page 90: Security Theatre - Benelux

Turn your chain into a mesh

Image by ineverfinishanyth released under CC BY-NC-SA 2.5

Page 91: Security Theatre - Benelux

Common Mistakes

Page 92: Security Theatre - Benelux

WeakeningCompromising encryption or hashing is

about reducing time to crack

Page 93: Security Theatre - Benelux

ImplementationA bad implementation helps reduce the time

to crack

Page 94: Security Theatre - Benelux

Authentication

Page 95: Security Theatre - Benelux

2 Factor Authenticationcomposer require pragmarx/google2fa

Page 96: Security Theatre - Benelux

OAuth2composer require league/oauth2-client

Page 97: Security Theatre - Benelux

Sessions

Page 99: Security Theatre - Benelux

if (strstr($_SERVER['QUERY_STRING'],'session_to_unset') != false){ parse_str($_SERVER['QUERY_STRING']); session_write_close(); session_id($session_to_unset); session_start(); $_SESSION = array(); session_write_close(); session_destroy(); exit;}

MistakesDeep understanding of the language

CODE SAMPLE

Reference: http://www.cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2011-2505

Page 100: Security Theatre - Benelux

Encryption

Page 101: Security Theatre - Benelux

Image by Wouter van Emmerik released under CC BY-SA 3.0

Never roll your own

Page 102: Security Theatre - Benelux
Page 103: Security Theatre - Benelux

Avoid old tutorials on encryption

https://gist.github.com/paragonie-scott/e9319254c8ecbad4f227

Page 104: Security Theatre - Benelux

Failed: Error Number: 60. Reason: SSL certificate problem, verify that the CA cert is OK. Details: error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed

// Many old tutorials and posts suggest disabling peer verificationscurl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);

// Thankfully PHP 5.6+ handles CA certificate location automatically// now thanks to https://wiki.php.net/rfc/improved-tls-defaults and// Daniel Lowrey

Avoid advice like thisWeakening security for convenience

CODE SAMPLE

Page 105: Security Theatre - Benelux

Hashing

Page 106: Security Theatre - Benelux

Image by Wouter van Emmerik released under CC BY-SA 3.0

Never roll your own

Page 107: Security Theatre - Benelux

One way encodingComparisons / Integrity Checks

Page 108: Security Theatre - Benelux

278,362,281Number of accounts publicly leaked

Reference: https://haveibeenpwned.com/

Page 109: Security Theatre - Benelux

Weak hash functions+/- 690GB rainbow tables

Page 110: Security Theatre - Benelux

$password = 'rasmuslerdorf';$hash = '$2y$10$.vGA1O9wmRjrwAVXD98HNOgsNpDczlqm3Jq7KnEd1rVAGv3Fykk1a';

// Is this call safe?if (crypt($password, $hash) === $hash) { echo 'Password is correct';}// What about this one?if (password_verify($password, $hash)) { echo 'Password is correct';}

Bad implementationWhere is the weakness?

CODE SAMPLE

Page 111: Security Theatre - Benelux

Timing AttacksBrute forcing cryptographic functions via

time taken to execute

Page 112: Security Theatre - Benelux

$string1 = 'abcd';$string2 = 'abce';$string3 = 'acde';

for ($i=0; $i<10000; $i++) { ($string1 === $string2); }// Time taken: 0.006923

for ($i=0; $i<10000; $i++) { ($string1 === $string3); }// Time taken: 0.008344

Timing AttacksHow it works

CODE SAMPLE

Page 113: Security Theatre - Benelux

Timing attacks can be used to work out if an account exists, even if the UI doesn't say so.

@troyhunt, haveibeenpwned.com

Reference: https://t.co/5WkQ48suj7

Page 114: Security Theatre - Benelux

Well actuallyAmount of randomness matters

Reference: http://blog.ircmaxell.com/2012/12/seven-ways-to-screw-up-bcrypt.html

Page 115: Security Theatre - Benelux

$password = 'rasmuslerdorf';$hash = '$2y$10$.vGA1O9wmRjrwAVXD98HNOgsNpDczlqm3Jq7KnEd1rVAGv3Fykk1a';

// Check the passwordif (password_verify($password, $hash)) { echo 'Password is correct'; if (password_needs_rehash($hash, PASSWORD_DEFAULT)) { // Rehash and store in database $newPassword = password_hash($password, PASSWORD_DEFAULT); }}

RehashBuild it into your flow

CODE SAMPLE

Page 116: Security Theatre - Benelux

Randomness

Page 117: Security Theatre - Benelux

Image by Wouter van Emmerik released under CC BY-SA 3.0

Never roll your own

Page 118: Security Theatre - Benelux

Non-deterministic randomness is critical in encryption

Used for key generation and nonces

Page 119: Security Theatre - Benelux

Non-deterministic randomness is hard

Dual_EC_DRBG was in use for 7 years

Page 120: Security Theatre - Benelux

// NOT cryptographically securerand();

// Cryptographically secure (uses OS-specific source)random_int();

// Cryptographically secure (uses OS-specific source)random_bytes();

// Cryptographically secure (uses OpenSSL library)openssl_random_pseudo_bytes();

Random in codeKnow the source

CODE SAMPLE

Page 121: Security Theatre - Benelux

Information Disclosure

Page 122: Security Theatre - Benelux

HEAD http://example.com/index.php200 OKConnection: closeDate: Sat, 26 Dec 2015 13:52:01 GMTServer: ApacheContent-Type: text/html; charset=UTF-8Client-Date: Sat, 26 Dec 2015 13:52:01 GMTClient-Peer: 192.168.0.101:80Client-Response-Num: 1X-Powered-By: PHP/5.5.11

Information DisclosureEvery piece of information can be leveraged

LOG SAMPLE

Page 123: Security Theatre - Benelux

HEAD http://example.com/index.php200 OKConnection: closeDate: Sat, 26 Dec 2015 13:52:01 GMTServer: ApacheContent-Type: text/html; charset=UTF-8Client-Date: Sat, 26 Dec 2015 13:52:01 GMTClient-Peer: 192.168.0.101:80Client-Response-Num: 1X-Powered-By: PHP/5.5.11

Information DisclosureEvery piece of information can be leveraged

LOG SAMPLE

Page 124: Security Theatre - Benelux

Warning: require(assets/includes/footer.php) [function.require]: failed to open stream: No such file or directory in /home/user/path/to/assets/includes/operations.php on line 38

Fatal error: require() [function.require]: Failed opening required 'assets/includes/footer.php' (include_path='.:/usr/lib/php:/usr/local/lib/php') in /home/user/path/to/assets/includes/operations.php on line 38

Information DisclosureEvery piece of information can be leveraged

LOG SAMPLE

Page 125: Security Theatre - Benelux

Social Engineering

Page 126: Security Theatre - Benelux

Weak password reset processes

Can you Google the answer?How do you handle customer support reset?

Page 127: Security Theatre - Benelux

Customer support training

Convenience vs Security

Page 128: Security Theatre - Benelux

@N’s (Naoki Hiroshima) Story

How do you mitigate against this?

Page 129: Security Theatre - Benelux

Hope

Image by Jenny released under CC BY-NC-ND 2.0

Page 130: Security Theatre - Benelux

Holistic

Page 131: Security Theatre - Benelux

ReadKnow about new threats and best practice

changes

Page 132: Security Theatre - Benelux

InformationOnly store what you really need

Page 133: Security Theatre - Benelux

Patching StrategyIf a dependency prevents updating, resolve it

now

Page 134: Security Theatre - Benelux

Don’t become comfortable

Comfort breeds contempt

Page 135: Security Theatre - Benelux

Training StrategyHave a process for dealing with account

locks and resets

Page 136: Security Theatre - Benelux

Compromise StrategyHave a plan before you need it

Page 137: Security Theatre - Benelux

Mistakes will be madeLearn from them

Page 138: Security Theatre - Benelux

Rate limitBuilt it now, or you’ll have to build it while an

incident is underway

Page 139: Security Theatre - Benelux

Monitor everythingYou’re more likely to be alerted by a graph

spiking than your IDS

Page 140: Security Theatre - Benelux

Decouple rolesDatabases, servers, domains, roles, ...

Page 141: Security Theatre - Benelux

Version properlyMajor.Minor.Patch. How hard is that?

Page 142: Security Theatre - Benelux

Composer everythingThere is no excuse anymore

Page 143: Security Theatre - Benelux

Decouple plugins/templates

Updates should be simple

Page 144: Security Theatre - Benelux

Get behind PSR-9 & 10http://www.php-fig.org/psr/

Page 146: Security Theatre - Benelux

Thank youhttps://joind.in/talk/7c669

@thomas_shone