Secure Software Engineering

Magdeburger Developer Days 2018

Hendrik Pilz

Wer bin ich?

Worum geht es?

Quelle: http://www.theregister.co.uk/2017/03/26/miele_joins_internetofst_hall_of_shame/

Developer vs. Security
Data Modeling Threat Modeling
Building Breaking
Logging Monitoring
Fix Restore
Unit Testing Pen Testing

In den nächsten 50 Minuten

  • Secure Development Guidelines
  • Best Practices
  • Security Tools für Entwickler

OWASP

  • Open Web Application Security Project
  • Liste der 10 kritischsten Sicherheitsrisiken für (Web-)Anwendungen
  • OWASP Top 10 für IoT
  • OWASP Top 10 für Mobile Apps
  • Cheat Sheets für Entwickler
  • Creative Commons Lizenz
  • www.owasp.org

Sonstige Guidelines

Daten

Die meisten Schwachstellen basieren auf unzureichender Behandlung von nicht vertrauenswürdigen Daten

vertrauenswürdig vertrauenswürdig
  • lokal deklarierte Variablen
  • Werte aus lokalen Konfigurationsdateien
  • Formular-Daten (GET/POST)
  • Cookie-Daten
  • Request-Header
  • Daten aus Datenbanken / externen Quellen
  • Daten von externen Schnittstellen (z.B. REST-APIs)
  • Sonstige Daten

Best Practices

Prüfung von Daten

  • Whitelisting
  • Blacklisting
  • Daten beim Speichern validieren
  • Daten bei der Ausgabe escapen/encoden
    <script>window.alert('XSS')</script>

    &lt;script&gt;window.alert('XSS')&lt;/script&gt;
When Bypassing JSON Encoding, XSS Filter, WAF, CSP and Auditor turns into Eight Vulnerabilities

Quelle: http://buer.haus/2017/03/08/airbnb-when-bypassing-json-encoding-xss-filter-waf-csp-and-auditor-turns-into-eight-vulnerabilities/

How I found a $5,000 Google Maps XSS (by fiddling with Protobuf)

Quelle: https://medium.com/@marin_m/how-i-found-a-5-000-google-maps-xss-by-fiddling-with-protobuf-963ee0d9caff

Best Practices

Prüfung von Daten

  • Prepared Statements für Datenbankabfragen
    SELECT * FROM users WHERE id=$id

    SELECT * FROM users WHERE id=:id
    bindParam(":id", $id)
  • gilt auch für HQL, DQL, Linq etc.
Linq Injection – From Attacking Filters to Code Execution

Quelle: https://insinuator.net/2016/10/linq-injection-from-attacking-filters-to-code-execution/

Best Practices

Gefährliche Funktionen

  • Dynamische Code-Ausführung
    eval($var)
  • File Inclusion (oder ClassLoading)
    include($var)
  • System-Befehle ausführen
    exec($var)
  • Zugriff auf Dateien und URLs
    fopen($var)
  • ...

Best Practices

Dokumentation

  • Dokumentiere Anwendungs-Architektur
  • Dokumentiere Funktions-Parameter, Rückgabewerte und Datentypen
  • Dokumentiere Default-Parameter
  • Dokumentiere potentielle Schwachstellen

Best Practices

Logging

  • Logge sicherheitsrelevante Vorgänge
    (z.B. Benutzer-Authentifizierung)
  • Logge Änderungen an Daten
    (wer hat welchen Datensatz wann geändert)
  • Logge fehlerhafte Eingabedaten
    (Achtung: Log Injection!)
  • Überwache die Logs (Monitoring)

Best Practices

Keine eigene Kryptographie

Best Practices

Sicherheitsrelevante HTTP-Header

  • Content Security Policy
  • Cross-origin Resource Sharing
  • HTTP Strict Transport Security
  • X-Content-Type-Options
  • X-Frame-Options
  • X-XSS-Protection
  • ...

Best Practices

Sicherheitsrelevante HTTP-Header

Mozilla Observatory Result für hepisec.de

https://observatory.mozilla.org/

Best Practices

Überwache verwendete Bibliotheken

  • Ein Großteil an Sicherheitslücken steckt heutzutage in Bibliotheken
  • Bibliotheken werden gepatcht, Anwendungen jedoch nicht
  • OWASP Dependency Check
Critical PHPMailer Flaw leaves Millions of Websites Vulnerable to Remote Exploit

Quelle: http://thehackernews.com/2016/12/phpmailer-security.html

Google: nodejs dependency vulnerability check

Best Practices

Sichere Konfiguration

  • Kontrolliere die Konfiguration von Webserver, Datenbank und anderen Diensten

Quelle: https://nakedsecurity.sophos.com/2017/01/11/thousands-of-mongodb-databases-compromised-and-held-to-ransom/

Four Million Time Warner Cable Records Left on Misconfigured AWS S3

Quelle: https://threatpost.com/four-million-time-warner-cable-records-left-on-misconfigured-aws-s3/127807/

Best Practices

  • Benenne einen Ansprechpartner für Security
    https://securitytxt.org/
  • Erstelle einen Incident Response Plan

Incident Response Plan

  • Was ist betroffen?
    z.B. Webseite
  • Welcher Fehler tritt auf?
    z.B. Webseite nicht erreichbar, Timeout beim Laden

Fehlersuche

Bin ich online? ping www.google.com
Server erreichbar? ping <Domain>
Hostname auflösbar / richtige IP? nslookup, dig
Provider-Status? Status-Seite des Provider prüfen
System-Login möglich? SSH, RDP
Server-Monitoring prüfen CPU, RAM, Netzwerk, Disk, Logs

Maßnahmen

  1. Software-Bug fixen
    Wo liegt der Code?
  2. Dienst neustarten
    Wie?
  3. Server neustarten
    Wie? Link zum Provider-Backend, Server-/Instanz-Name
  4. Platz auf der Festplatte schaffen
    Daten (z.B. Logs) löschen, Quota erhöhen, Partition / Disk vergrößern
  5. Defekte Hardware tauschen
    Kontaktdaten des Dienstleisters

Best Practices

  • Auch Intranet-Anwendungen müssen sicher sein!
  • Unsichere Intranet-Anwendungen können bei Hacker-Angriffen zur Ausweitung von Rechten benutzt werden.
  • Eine Intranet-Anwendung könnte irgendwann eine Internet-Anwendung werden.

SonarQube

  • Statische Code-Analyse, automatische Suche nach Fehlern im Source-Code
  • SonarLint: Extension für IntelliJ, Eclipse, Visual Studio, Visual Studio Code, Atom
  • Regeln: https://rules.sonarsource.com/

Vielen Dank!

@HendrikPilz

www.hepisec.de

Diese Präsentation ist hier verfügbar
www.hepisec.de/devdays-2018/