Download - Wieso Informatiker bei der Informationssicherheit scheitern

Transcript
Page 1: Wieso Informatiker bei der Informationssicherheit scheitern

Wieso Informatiker bei der Informationssicherheit scheitern

Page 2: Wieso Informatiker bei der Informationssicherheit scheitern

Ein Erklärungsversuch für die Realität

• Bitte keine Gegenstände werfen

Page 3: Wieso Informatiker bei der Informationssicherheit scheitern

RAHMENBEDINGUNGEN

Page 4: Wieso Informatiker bei der Informationssicherheit scheitern

Management

• Geld / Zeit

• Sicherheitsschulungen

• Zu viele/wenige/generelle Sicherheitsrichtlinien

• Outsourcing

Page 5: Wieso Informatiker bei der Informationssicherheit scheitern

Programmierung

UnsichererCode

Fehler

Nichtfunktionsfähiger

Code

Page 6: Wieso Informatiker bei der Informationssicherheit scheitern

„Hacking ist nicht real“

• Hacking-Agnostiker gibt es tatsächlich noch

• Statistiken

• Medien

– Jailbreak

– Anonymous

• Verborgenheit

– Argument der Eintretenswahrscheinlichkeit

– Dunkelziffer

Page 7: Wieso Informatiker bei der Informationssicherheit scheitern

Komplexität

• Abstraktion ist König

• Fehler: Erwarten valide Inputs

Page 8: Wieso Informatiker bei der Informationssicherheit scheitern

ONLINEInformationsquelle

Page 9: Wieso Informatiker bei der Informationssicherheit scheitern

Why it’s easy being a hacker [1]

Page 10: Wieso Informatiker bei der Informationssicherheit scheitern

Why it’s easy being a hacker [1]

• Google „How to use PHP with MySQL“

• Min. 5 von 10 SQL Injection

Page 11: Wieso Informatiker bei der Informationssicherheit scheitern

Datei-Upload

• Google „How to do a file upload in PHP“

• Min. Sicherheitskriterien

– Dateiendung überprüfen

– MIME-type überprüfen

– Nicht in Web Root ablegen

– Keine Manipulation des Speicherorts

• 6 von 10 unsicher

Page 12: Wieso Informatiker bei der Informationssicherheit scheitern

Datei-Upload

• Web Root, keine Checks (Security Warnung)

• Web Root, keine Checks• Web Root, keine Checks, chmod 777, XSS• Web Root, kein MIME-Check, XSS• Irrelevant• Video• Keine Checks, XSS• Web Root, keine Checks, SQL Injection,

Manipulation Speicherort• Web Root, keine Checks, chmod 777,

Manipulation Speicherort• Web Root, keine Checks, Manipulation

Speicherort

Page 13: Wieso Informatiker bei der Informationssicherheit scheitern

Wikipedia

Page 14: Wieso Informatiker bei der Informationssicherheit scheitern

BÜCHERDann eben doch die Informationsquelle

Page 15: Wieso Informatiker bei der Informationssicherheit scheitern

Why it’s easy being a hacker [1]

• 3 von 6 SQL Injection

Page 16: Wieso Informatiker bei der Informationssicherheit scheitern

Programming Python S. 18

• "[…] eval call […] is potentially unsafe; youshouldn't use eval if you can't be sure [...] won't contain malicious code […]"

• Ähnlich auf Seite 49

Page 17: Wieso Informatiker bei der Informationssicherheit scheitern

Programming Python S. 38/39

• eval(benutzereingabe)

• Demo 1

Page 18: Wieso Informatiker bei der Informationssicherheit scheitern

Programming Python Autor

• "eval() reflects a classic tradeoff betweensecurity and power. In an early book example, security seems a minor topic, and perhaps lessimportant to illustrate than language power."

Page 19: Wieso Informatiker bei der Informationssicherheit scheitern

Die Suche nach dem sicheren eval

• Google „python safe eval“

– eval(benutzereingabe,{"__builtins__":None},{})

– Demo 2

Page 20: Wieso Informatiker bei der Informationssicherheit scheitern

Exploit[x for x in (1).__class__.__base__.__subclasses__() if

x.__name__ ==

'Pattern'][0].__init__.__globals__['__builtins__']['__impo

rt__']('os').system('cd /; python -m SimpleHTTPServer')

Page 21: Wieso Informatiker bei der Informationssicherheit scheitern

PROGRAMMIER-BIBLIOTHEKENOder Hilfsmittel

Page 22: Wieso Informatiker bei der Informationssicherheit scheitern

OpenSSL [2]

• Rückgabewert von SSL_connect

– Kann OK (1) zurückgeben

• Setzt intern aber "verify result" flags

• SSL_get_ verify_result nötig

• Opfer

– Trillian

Page 23: Wieso Informatiker bei der Informationssicherheit scheitern

GnuTLS [2]

• Rückgabewert von gnutls_certificate_verify_peers2(tls_status)

– Kann OK (0) zurückgeben

• tls_status enthält jedoch Fehler Code

• Opfer

– Lynx Browser

Page 24: Wieso Informatiker bei der Informationssicherheit scheitern

cURL [2]

• CURLOPT_SSL_VERIFYPEER– Richtig: True

• CURLOPT_SSL_VERIFYHOST – Richtig: 2

• Opfer– Amazon Flexible Payments Service SDK für PHP

– PayPal Payments Standard

– PayPal Invoicing für PHP

– PayPal IPN in ZenCart

Page 25: Wieso Informatiker bei der Informationssicherheit scheitern

Java Secure Socket Extension (JSSE) [2]

• Grundsätzlich keine Hostnamenüberprüfung für SSLSocketFactory– Java 6 Exception wenn Protokoll unklar (HTTPS/LDAPS)– Java 7 Keine Exception

• Opfer– Apache HttpClient Version 3

• Weberknecht• Apache Axis

– PayPal’s Java SDKs

• Apache Axis 2 • Codehaus XFire <= 1.2.6

– Amazon EC2 API Tools– Amazon Flexible Payments Service

• ...

Page 26: Wieso Informatiker bei der Informationssicherheit scheitern

SAML-Frameworks [3]

• 11 von 14 enthielten Schwachstellen

• Beispiel Opfer:

– OpenSAML

• Shibboleth– SuisseID

Page 27: Wieso Informatiker bei der Informationssicherheit scheitern

HERSTELLERDOKUMENTATIONENAber wenigstens

Page 28: Wieso Informatiker bei der Informationssicherheit scheitern

Nochmal SSL [2]

• Apache XFire Apache CXF

Page 29: Wieso Informatiker bei der Informationssicherheit scheitern

Apple Idiotenvektor [4]

• InitialisierungsVektor (IV)

• 1 von 2 Programmierbüchern

Page 30: Wieso Informatiker bei der Informationssicherheit scheitern

Letzthin im #python IRC-Chat

• Unterschied von input() in Python2 und Python3

• "the fact that we didn't remove input() frompython2 a long time ago is crazy.“

Page 31: Wieso Informatiker bei der Informationssicherheit scheitern

DEP, ASLR und Konsorten

• Müssen aktiviert werden

• 2 unabhängige Buffer Overflows

– Auf 3 von 4 Plattformen à la 1995

Page 32: Wieso Informatiker bei der Informationssicherheit scheitern

PROGRAMMIERUNG GEHT AUCH OHNE SECURITY

Leider,

Page 33: Wieso Informatiker bei der Informationssicherheit scheitern

Referent – meine erste Homepage

• Passwörter im Klartext

<form name="gbook" method="post" action="<?php echo

$_SERVER['PHP_SELF']; ?>">

Page 34: Wieso Informatiker bei der Informationssicherheit scheitern

Kryptografischer Horror

Passwort MD5 Resultat: MD5 HASH von Passwort

CRC32 Resultat: CRC32 vom MD5 Hash

SHA1 Resultat: SHA1 Hash von CRC32

substr($input, 0, 3) substr($input, 4)

$cryptedpw = $part2 + $part1 + $part2

Beispiel:

"00FE" + "12AB" = "12"

Richtig wäre:

"00FE" . "12AB" = "00FE12AB"

CRC32 Resultat: CRC32

Page 35: Wieso Informatiker bei der Informationssicherheit scheitern

Web Server Horror#!/usr/bin/perl -w

use strict 'vars'; use strict 'subs'; use CGI ':standard’;

use CGI::Carp qw(fatalsToBrowser);

use constant DOWNLOAD_DIR => q{/tmp/path/};

my $B = param('B');

$B =~ s/^\/+//g;

my $filen = DOWNLOAD_DIR . "/" . $B;

my $basename = `basename $B`;

my $size = (stat($filen))[7];

open(DLFILE, "<$filen") or Error("Kann $B nicht

oeffnen.");

if($B =~ /\.sik$/o) {} else { unlink($filen);}

my $filedata = do { local $/; <DLFILE> };

print "Content-Length: $size\n";

print $filedata;

exit 0;

Page 36: Wieso Informatiker bei der Informationssicherheit scheitern

FAZITUnd jetzt?

Page 37: Wieso Informatiker bei der Informationssicherheit scheitern

Gegenmassnahmen

• KISS• Kein blindes kopieren unabhängig von Quelle

– Verstand/Sicherheitssicht/Kollegen nutzen

• Sicherheitsmechanismen an lassen• Sicherheitsmechanismen an machen• Sicherheitsthemen zur Arbeit suchen• Schulungen

– Awareness– Eigene Security-Tests, richtige Hilfsmittel– Secure Development

• Penetration Testing

Page 38: Wieso Informatiker bei der Informationssicherheit scheitern

int 3

• Twitter: @floyd_ch

[email protected]

• Twitter: @mod0

• http://www.modzero.ch

Page 39: Wieso Informatiker bei der Informationssicherheit scheitern

Quellen

• [Pointing finger picture] http://www.workingkansans.com/2012/03/house-republicans-pointing-fingers-after-failing-to-read-2-page-bill/

• [bobby tables] http://xkcd.com/327/• [APT1] http://intelreport.mandiant.com/Mandiant_APT1_Report.pdf• [Suspicious owl] http://www.troll.me/2012/03/01/a-suspicious-owl/everythings-

just-fine-thats-suspicious/• [Skimasken-Hacker] http://best9.wordpress.com/2011/01/16/top-10-hackers/• [Not funny when you‘re next] http://thepowerofapostrophe.blogspot.no/• [Executing 41414141] http://nickfnord.wordpress.com/2008/10/17/buffer-

overflow-basics-part-1/• [1] http://www.securesolutions.no/why-its-easy-being-a-hacker/• [2] https://crypto.stanford.edu/~dabo/pubs/abstracts/ssl-client-bugs.html• [3] http://www.nds.rub.de/research/publications/BreakingSAML/• [4]

http://www.modzero.ch/modlog/archives/2011/11/04/the_apple_idioten_vektor_iv/index.html

• [5] http://www.opensource.apple.com/source/CommonCrypto/CommonCrypto-36064/CommonCrypto/CommonCryptor.h