Wieso Informatiker bei der Informationssicherheit scheitern

39
Wieso Informatiker bei der Informationssicherheit scheitern

description

Sicherheitsprobleme verfolgen uns bereits seit vielen Jahren. Warum existieren immer noch unsichere Programme? Wieso scheitern Informatiker an der korrekten Programmierung? Warum passieren immer wieder dieselben Fehler? Der Vortrag dreht sich insbesondere um verschiedene Informationsquellen, deren Problematik und konkrete, technische Beispiele. Referent: Tobias Ospelt

Transcript of Wieso Informatiker bei der Informationssicherheit scheitern

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