SlideShare ist ein Scribd-Unternehmen logo
1 von 38
Downloaden Sie, um offline zu lesen
Sicherheit in SPAs
mit
Ausgangssituation
Sicherheitskonzept
Gängige Probleme
Ursache
Auswirkung
Test
Gegenmaßnahme
Philipp Burgmer
Software-Entwickler, Trainer
Fokus: Frontend, Web-Technologien
burgmer@w11k.de
w11k GmbH
Software Design, Entwicklung & Wartung
Consulting, Schulungen & Projekt Kickoff
Web Anwendungen mit AngularJS
Native Rich Clients mit Eclipse RCP
ÜBER MICH
3
HTTP
Frontend Backend
Statische
Dateien
Rohdaten
JSON
Web API (REST)
Business Layer
Datenbank
Framework
HTML + JS + CSS
Browser
Rich Client im Browser
Server liefert statische Dateien für den Client
Server bietet API für Daten (REST, WebSocket) (JSON, XML)
Backend weis nichts über verwendete Technologien im Client
Client weis nichts über verwendete Technologien im Backend
Stateful Client, Stateless Backend
ARCHITEKTUR VON SPAs
4
Datenbanken (SQL | NoSQL) & Backend-Sprache
HTTP
JavaScript & HTML
Historisch betrachten
Vieles gewachsen
Nicht für heute Verwendung gedacht
TECHNOLOGIES
5
Öffentlicher und privater Bereich
Login -> Session
Benutzer-Rollen
Grundgedanke: Jeder sichert sich selbst ab
Client schütz UI
Server schütz Datenzugriffe
Jeder schützt seine verwendeten Technologien
Alle schützen die Übertragung
SICHERHEITSKONZEPT
NAIV
6
Vorgelagert als extra Seite
Anwendung nur mit gültigem Login aufrufbar
Nicht eingeloggt: HTTP-Redirect auf Login
Eingeloggt: HTTP-Redirect auf Anwendung
Weniger Angriffsfläche: Nicht jeder sieht die Anwendung
Schnelles Laden der ersten Seite
Login als Route in Anwendung
Einfacheres Handling
Kein Zusätzlicher Request für Benutzer-Daten notwendig
LOGIN
7
Berechtigungen über Rollen verwalten
Bereiche mit Rollen versehen
Im UI per Directive
An Route / State per resolve
BERECHTIGUNGEN VERWALTEN
<li match-route="/admin.*" user-role-required="'ADMIN'">1
<a href="#!/admin/overview">Admin</a>2
</li>3
module.config(function($stateProvider, ResolveFunctions) {1
$stateProvider.state('admin', {2
url: '/admin', templateUrl: 'route/admin/admin.html', controller: 'AdminCtrl',3
resolve: { authorized: ResolveFunctions.userRolesRequired('ADMIN') }4
});5
});6
8
BERECHTIGUNGEN VERWALTEN
angular.module('app').constant('ResolveFunctions', {1
userRolesRequired: function (roles) {2
return /* @ngInject */ function (UserService) {3
return UserService.hasRoles(roles);4
};5
}6
});7
9
BERECHTIGUNGEN VERWALTEN
angular.module('app').service('UserService', function ($http, $q) {1
return {2
getUser: function () {3
// load user information from server and return promise4
},5
hasRoles: function (roles) {6
// get user then check if user has roles7
// return promise8
}9
};10
})11
10
1. Injection
2. Broken Authentication and Session Management
3. Cross-Site Scripting
4. Insecure Direct Object References
5. Security Misconfiguration
6. Sensitive Data Exposure
7. Missing Function Level Access Control
8. Cross-Site Request Forgery
9. Using Components with Known Vulnerabilities
10. Unvalidated Redirects and Forwards
Quelle: OWASP Top10 2013
TOP 10 SICHERHEITSPROBLEME
11
The Open Web Application Security Project
Non-Profit Organisation
Finanziert über Mitgliedsbeiträge und Spenden
Existiert seit 2001
Stellt Informationen zu Sicherheitsthemen bereit
detaillierte Beschreibungen und Erklärungen
gängige Lösungsansätze
OWASP
12
Benutzereingaben nie trauen
Im Backend nie davon ausgehen, dass Request vom Client kommen
Verwendete Komponenten auf Security-Updates prüfen
Security testen
punkspider.org: Suchmaschine für Sicherheitslücken
BeEF - The Browser Exploitation Framework: Tool für Penetrationstests
OWASP - Vulnerability Scanning Tools
GENERELLE GEGENMASSNAHMEN
13
Code-Minimierung / -Obfuscating
Verwendung von HTTPS
Berechtigungen im Client prüfen
Eingaben im Client validieren
UNZUREICHENDE GEGENMASSNAHMEN
14
CODE INJECTION
Java Code um SQL Abfrage zusammen zu bauen
URL-Aufruf des Angreifers
Ausgeführtes SQL
BEISPIEL: SQL
statement = "SELECT * FROM users WHERE id = " + request.getParameter("id") + ";"1
http://example.com/user?id=42;UPDATE+USER+SET+TYPE="admin"+WHERE+ID=23;--1
SELECT * FROM users WHERE id = 42; UPDATE USER SET TYPE="admin" WHERE ID=23;--;1
16
Daten aus Sprache A werden zu Code in Sprache B
Code wird dynamisch an einen Interpreter übergeben
Code enthält Benutzereingaben (Formular-Daten, URL-Parameter, ...)
Benutzereingaben werden nicht oder unzureichend überprüft
An vielen Stellen möglich
SQL
HTML (z.B. bei Cross-Site-Scripting)
Script-Sprachen mit eval-Funktion (JS, PHP)
Dynamisches Laden von Code aus Dateien
Shell / Command Execution
CODE INJECTION
17
Manuell am Code
Verwendung von Interpretern ausfindig machen
Eingaben von Interpretern auf dynamische Teile untersuchen
Datenfluss zurückverfolgen (Wo kommen dynamische Teile her?)
Automatisiert
Code Analyse Tools um Interpreter zu finden
Peneration-Test-Tools finden häufig gemachte Fehler
SCHWACHSTELLEN FINDEN
18
Möglichst wenig Interpreter verwenden, besser APIs
Prepared-Statements
Stored-Procedures
Benutzereingaben nicht vertrauen
Kontextuelles Escapen (HTML, JS, SQL)
White-Listing
GEGENMASSNAHMEN
19
Sicherer Java Code um SQL Abfrage zusammen zu bauen
BEISPIEL: SQL
PreparedStatement pstmt = connection.prepareStatement("SELECT * FROM users WHERE id = ?");1
pstmt.setInt(1, request.getParameter("id"));2
ResultSet rset = pstmt.executeQuery();3
20
BROKEN AUTHENTICATION AND SESSION
MANAGEMENT
Zugangsdaten oder Session können entwendet werden
Session kann geklaut werden
z.B. Session-ID in der URL, oft bei URL Rewriting
Kein Session-Timeout (öffentlicher PC)
Vorhersagbare Session IDs
Übertragung per unverschlüsselter Kommunikation
Cross-Site-Scripting um Cookie zu entwenden
SESSION MANAGEMENT
22
Passwörter stehen im Klartext in der Datenbank
Datenbank wird entwendet
Angreifer kann sich als jeder User einloggen
Session-ID steht in URL
BEISPIELE
http://example.com/shoppingcart?sessionid=2685445411
23
Login, Logout und Session Managemnt nicht selbst implementieren
Bewährte, gut getestete Biblotheken verwenden (OAuth?)
Verschlüsselte Kommunikation
Keine Passwörte speichern, Hash mit Salt
Cross-Site-Scripting verhindern
GEGENMASSNAHMEN
24
Weniger Zustand im Server -> Bessere Skalierbarkeit
Gut: Session = Mapping Session ID -> User ID
Besser: keine Session im Backend, Session ID enthält allen Zustand
Im Backend benötigter Zustand wird bei jedem Request übertragen
HERAUSFORDERUNG
STATELESS BACKEND
25
Session-ID ist kein Random oder Hash
Session-ID enthält Zustand
User-ID
Login-Timestamp
XSRF-Token?
Base64 encoded
Session-ID wird gegen Manipulation und Nachahmung geschützt
Verschlüsselung
Signierung
Message Authentication Code (z.B. HMAC)
Nur auf dem Server bekannt
STATEFUL SESSION-ID
26
CROSS-SITE SCRIPTING
Ausprobieren ...
BEISPIEL
var source = $('#insecure-input');1
var text = source.val();2
var target = $('#insecure-output');3
target.append(text);4
28
Spezielle Art der HTML Injection
HTML-Injection wird ausgenutzt um anderen Benutzer Code unterzuschieben
Verschiedene Type: Persistent / Non-Persistent, DOM-Based
Benutzereingabe wird in HTML ausgegeben
Ermöglicht Ausführen von Code
Code-Ausführung übermittelt Daten an Angreifen (z.B. Cookies)
Code ruft URL auf um Aktion mit Rechten des Benutzers auszuführen
CROSS-SITE-SCRIPTING
29
Benutzereingaben immer escapen
Daten vom Server escapen
Sanitizer Biblothek verwenden
Kontext beachten in dem Wert verwendet wird
GEGENMASSNAHMEN
30
Angular escapt alle Data-Bindings automatisch
$sanitize Service um sicheres HTML-Subset ausgeben zu können
$sce Service um beliebiges HTML aus vertrauenswürdiger Quelle ausgeben zu können
Detaillierte Erklärung
ANGULARJS
31
ANGULARJS BESPIEL
<input type="text" ng-model="text"/>1
<div ng-bind="text"></div>2
<div ng-bind-html="text"></div>3
32
CROSS-SITE REQUEST FORGERY
Aufruf von Business Logik ohne zusätzlichen Schutz
XSRF Attacke per XSS
BEISPIEL
http://example.com/app/transferFunds?amount=1500&destinationAccount=46732432431
<img src="http://example.com/app/transferFunds?amount=1500&destinationAccount=attackersAcct#" width="0"
height="0" />
1
34
Angreifer ruft URL mit den Rechten des Benutzers auf
Verschiedene Angriffsformen
Cross-Site-Scripting
Social-Engeneering / Unterschieben einer URL
Cookies sind nicht sicher!
Auch nicht mit httpOnly und secure
Cookies können abgegriffen werden bzw. werden automatisch gesendet
CROSS-SITE REQUEST FORGERY
35
Login schickt Session-ID als Cookie mit httpOnly und secure
Login antwortet mit zusätzliches Token im Header ( X-XSRF-Token )
Token kann nur vom eigenen JS Code aus abgegriffen werden, der den Request gestartet hat
Token muss danach vom eigenen Code explizit als Header mitgesendet werden
Server vergleicht mitgesendetes Token mit erwartetem
GEGENMASSNAHMEN
36
HTTP-Interceptor Konzept
Interceptor für X-XSRF-Token
Speichert Token Arbeitsspeicher
Sendet Token bei jedem Request zur gleichen Domain mit
Problem: Öffne Link in neuem Tab
Server vergibt neues Token wenn gleiche IP
ANGULARJS
37
Philipp Burgmer
burgmer@w11k.de
www.w11k.de
www.thecodecampus.de

Weitere ähnliche Inhalte

Andere mochten auch

Andere mochten auch (20)

Disciplinas canónicas del arte
Disciplinas canónicas del arteDisciplinas canónicas del arte
Disciplinas canónicas del arte
 
Recuerdos de otro
Recuerdos de otroRecuerdos de otro
Recuerdos de otro
 
Михаель Хармс
Михаель ХармсМихаель Хармс
Михаель Хармс
 
INFORME DE ENCUESTAS
INFORME DE ENCUESTAS INFORME DE ENCUESTAS
INFORME DE ENCUESTAS
 
Trabajo de Computacion
Trabajo de ComputacionTrabajo de Computacion
Trabajo de Computacion
 
Grupo Aparecer-Ocultar
Grupo Aparecer-OcultarGrupo Aparecer-Ocultar
Grupo Aparecer-Ocultar
 
Nuestra institución
Nuestra instituciónNuestra institución
Nuestra institución
 
Proyecto pis
Proyecto pisProyecto pis
Proyecto pis
 
Revelado en cámara
Revelado en cámaraRevelado en cámara
Revelado en cámara
 
Importacion 2012
Importacion 2012Importacion 2012
Importacion 2012
 
Ana paula hernandez
Ana paula hernandezAna paula hernandez
Ana paula hernandez
 
Presentación scopus
Presentación scopusPresentación scopus
Presentación scopus
 
CONSTRUCCIONES ECOLÓGICAS
CONSTRUCCIONES ECOLÓGICAS CONSTRUCCIONES ECOLÓGICAS
CONSTRUCCIONES ECOLÓGICAS
 
Manual de-reciclaje las ceibas
Manual de-reciclaje las ceibasManual de-reciclaje las ceibas
Manual de-reciclaje las ceibas
 
"Respetando ando" grupo 2 86
"Respetando ando" grupo 2   86"Respetando ando" grupo 2   86
"Respetando ando" grupo 2 86
 
Códigos QR
Códigos QRCódigos QR
Códigos QR
 
Multimedia
MultimediaMultimedia
Multimedia
 
Planificador 13 noviembre del 2015
Planificador 13 noviembre del 2015Planificador 13 noviembre del 2015
Planificador 13 noviembre del 2015
 
Axel Wolpert: Computergestütztes Lernen - Was geht heute? Ein Überblick
Axel Wolpert: Computergestütztes Lernen - Was geht heute? Ein ÜberblickAxel Wolpert: Computergestütztes Lernen - Was geht heute? Ein Überblick
Axel Wolpert: Computergestütztes Lernen - Was geht heute? Ein Überblick
 
lol
lollol
lol
 

Ähnlich wie Sicherheit in Single-Page-Web-Anwendungen

Webinar: Online Security
Webinar: Online SecurityWebinar: Online Security
Webinar: Online Securitykuehlhaus AG
 
Cyber Security / OWASP Juice Shop
Cyber Security / OWASP Juice ShopCyber Security / OWASP Juice Shop
Cyber Security / OWASP Juice ShopMartin Abraham
 
Sicherheitsprüfung für HP NonStop Systeme
Sicherheitsprüfung für HP NonStop SystemeSicherheitsprüfung für HP NonStop Systeme
Sicherheitsprüfung für HP NonStop SystemePeter Haase
 
Web APIs auf dem Prüfstand - Volle Kontrolle oder fertig mit den Azure Mobile...
Web APIs auf dem Prüfstand - Volle Kontrolle oder fertig mit den Azure Mobile...Web APIs auf dem Prüfstand - Volle Kontrolle oder fertig mit den Azure Mobile...
Web APIs auf dem Prüfstand - Volle Kontrolle oder fertig mit den Azure Mobile...Peter Kirchner
 
Continuous deployment in LeanIX @ Bonn Agile
Continuous deployment in LeanIX @ Bonn AgileContinuous deployment in LeanIX @ Bonn Agile
Continuous deployment in LeanIX @ Bonn AgileLeanIX GmbH
 
dotnet Cologne 2013 - Windows Azure Mobile Services
dotnet Cologne 2013 - Windows Azure Mobile Servicesdotnet Cologne 2013 - Windows Azure Mobile Services
dotnet Cologne 2013 - Windows Azure Mobile ServicesSascha Dittmann
 
DWX 2016 - Monitoring 2.0 - Monitoring 2.0: Alles im Lot?
DWX 2016 - Monitoring 2.0 - Monitoring 2.0: Alles im Lot?DWX 2016 - Monitoring 2.0 - Monitoring 2.0: Alles im Lot?
DWX 2016 - Monitoring 2.0 - Monitoring 2.0: Alles im Lot?Marc Müller
 
Das kleine Einmaleins der sicheren Architektur
Das kleine Einmaleins der sicheren ArchitekturDas kleine Einmaleins der sicheren Architektur
Das kleine Einmaleins der sicheren ArchitekturQAware GmbH
 
2009 03 17 Spring101
2009 03 17 Spring1012009 03 17 Spring101
2009 03 17 Spring101gueste4be40
 
IT-Sicherheit und agile Entwicklung? Geht das? Sicher!
IT-Sicherheit und agile Entwicklung? Geht das? Sicher!IT-Sicherheit und agile Entwicklung? Geht das? Sicher!
IT-Sicherheit und agile Entwicklung? Geht das? Sicher!Carsten Cordes
 
Karlsruher Entwicklertag 2016 - Monitoring 2.0: Alles im Lot?
Karlsruher Entwicklertag 2016 - Monitoring 2.0: Alles im Lot?Karlsruher Entwicklertag 2016 - Monitoring 2.0: Alles im Lot?
Karlsruher Entwicklertag 2016 - Monitoring 2.0: Alles im Lot?Marc Müller
 
High Security PHP Applications
High Security PHP ApplicationsHigh Security PHP Applications
High Security PHP Applicationsguest0e6d5e
 
Security Scanner Design am Beispiel von httprecon
Security Scanner Design am Beispiel von httpreconSecurity Scanner Design am Beispiel von httprecon
Security Scanner Design am Beispiel von httpreconMarc Ruef
 
Continuous Lifecycle 2013: Testgetriebenes Arbeiten im Betrieb
Continuous Lifecycle 2013: Testgetriebenes Arbeiten im BetriebContinuous Lifecycle 2013: Testgetriebenes Arbeiten im Betrieb
Continuous Lifecycle 2013: Testgetriebenes Arbeiten im BetriebAndreas Schmidt
 
Integration von Security-Checks in die CI-Pipeline
Integration von Security-Checks in die CI-PipelineIntegration von Security-Checks in die CI-Pipeline
Integration von Security-Checks in die CI-PipelineOPEN KNOWLEDGE GmbH
 
DevOpsCon 2016 - Continuous Security Testing - Stephan Kaps
DevOpsCon 2016 - Continuous Security Testing - Stephan KapsDevOpsCon 2016 - Continuous Security Testing - Stephan Kaps
DevOpsCon 2016 - Continuous Security Testing - Stephan KapsStephan Kaps
 

Ähnlich wie Sicherheit in Single-Page-Web-Anwendungen (20)

Webinar: Online Security
Webinar: Online SecurityWebinar: Online Security
Webinar: Online Security
 
Sichere Webanwendungen
Sichere WebanwendungenSichere Webanwendungen
Sichere Webanwendungen
 
Cyber Security / OWASP Juice Shop
Cyber Security / OWASP Juice ShopCyber Security / OWASP Juice Shop
Cyber Security / OWASP Juice Shop
 
Sicherheitsprüfung für HP NonStop Systeme
Sicherheitsprüfung für HP NonStop SystemeSicherheitsprüfung für HP NonStop Systeme
Sicherheitsprüfung für HP NonStop Systeme
 
Web APIs auf dem Prüfstand - Volle Kontrolle oder fertig mit den Azure Mobile...
Web APIs auf dem Prüfstand - Volle Kontrolle oder fertig mit den Azure Mobile...Web APIs auf dem Prüfstand - Volle Kontrolle oder fertig mit den Azure Mobile...
Web APIs auf dem Prüfstand - Volle Kontrolle oder fertig mit den Azure Mobile...
 
Continuous deployment in LeanIX @ Bonn Agile
Continuous deployment in LeanIX @ Bonn AgileContinuous deployment in LeanIX @ Bonn Agile
Continuous deployment in LeanIX @ Bonn Agile
 
dotnet Cologne 2013 - Windows Azure Mobile Services
dotnet Cologne 2013 - Windows Azure Mobile Servicesdotnet Cologne 2013 - Windows Azure Mobile Services
dotnet Cologne 2013 - Windows Azure Mobile Services
 
DWX 2016 - Monitoring 2.0 - Monitoring 2.0: Alles im Lot?
DWX 2016 - Monitoring 2.0 - Monitoring 2.0: Alles im Lot?DWX 2016 - Monitoring 2.0 - Monitoring 2.0: Alles im Lot?
DWX 2016 - Monitoring 2.0 - Monitoring 2.0: Alles im Lot?
 
Das kleine Einmaleins der sicheren Architektur
Das kleine Einmaleins der sicheren ArchitekturDas kleine Einmaleins der sicheren Architektur
Das kleine Einmaleins der sicheren Architektur
 
2009 03 17 Spring101
2009 03 17 Spring1012009 03 17 Spring101
2009 03 17 Spring101
 
IT-Sicherheit und agile Entwicklung? Geht das? Sicher!
IT-Sicherheit und agile Entwicklung? Geht das? Sicher!IT-Sicherheit und agile Entwicklung? Geht das? Sicher!
IT-Sicherheit und agile Entwicklung? Geht das? Sicher!
 
Wie gewährleisten Sie die Einhaltung von Sicherheitsanforderungen an Ihre Mes...
Wie gewährleisten Sie die Einhaltung von Sicherheitsanforderungen an Ihre Mes...Wie gewährleisten Sie die Einhaltung von Sicherheitsanforderungen an Ihre Mes...
Wie gewährleisten Sie die Einhaltung von Sicherheitsanforderungen an Ihre Mes...
 
Karlsruher Entwicklertag 2016 - Monitoring 2.0: Alles im Lot?
Karlsruher Entwicklertag 2016 - Monitoring 2.0: Alles im Lot?Karlsruher Entwicklertag 2016 - Monitoring 2.0: Alles im Lot?
Karlsruher Entwicklertag 2016 - Monitoring 2.0: Alles im Lot?
 
Ajax, Comet & Co.
Ajax, Comet & Co.Ajax, Comet & Co.
Ajax, Comet & Co.
 
High Security PHP Applications
High Security PHP ApplicationsHigh Security PHP Applications
High Security PHP Applications
 
Security Scanner Design am Beispiel von httprecon
Security Scanner Design am Beispiel von httpreconSecurity Scanner Design am Beispiel von httprecon
Security Scanner Design am Beispiel von httprecon
 
Continuous Lifecycle 2013: Testgetriebenes Arbeiten im Betrieb
Continuous Lifecycle 2013: Testgetriebenes Arbeiten im BetriebContinuous Lifecycle 2013: Testgetriebenes Arbeiten im Betrieb
Continuous Lifecycle 2013: Testgetriebenes Arbeiten im Betrieb
 
Integration von Security-Checks in die CI-Pipeline
Integration von Security-Checks in die CI-PipelineIntegration von Security-Checks in die CI-Pipeline
Integration von Security-Checks in die CI-Pipeline
 
GWT
GWTGWT
GWT
 
DevOpsCon 2016 - Continuous Security Testing - Stephan Kaps
DevOpsCon 2016 - Continuous Security Testing - Stephan KapsDevOpsCon 2016 - Continuous Security Testing - Stephan Kaps
DevOpsCon 2016 - Continuous Security Testing - Stephan Kaps
 

Mehr von Philipp Burgmer

EnterJS 2015 - JavaScript von Morgen schon heute
EnterJS 2015 - JavaScript von Morgen schon heuteEnterJS 2015 - JavaScript von Morgen schon heute
EnterJS 2015 - JavaScript von Morgen schon heutePhilipp Burgmer
 
Tutorial: Develop Mobile Applications with AngularJS
Tutorial: Develop Mobile Applications with AngularJSTutorial: Develop Mobile Applications with AngularJS
Tutorial: Develop Mobile Applications with AngularJSPhilipp Burgmer
 
Grunt, Gulp & fabs: Build Systems and Development-Workflow for Modern Web-App...
Grunt, Gulp & fabs: Build Systems and Development-Workflow for Modern Web-App...Grunt, Gulp & fabs: Build Systems and Development-Workflow for Modern Web-App...
Grunt, Gulp & fabs: Build Systems and Development-Workflow for Modern Web-App...Philipp Burgmer
 
Legacy WebApps mit AngularJS pimpen
Legacy WebApps mit AngularJS pimpenLegacy WebApps mit AngularJS pimpen
Legacy WebApps mit AngularJS pimpenPhilipp Burgmer
 
WJAX 2012 - Web Apps With AngularJS
WJAX 2012 - Web Apps With AngularJSWJAX 2012 - Web Apps With AngularJS
WJAX 2012 - Web Apps With AngularJSPhilipp Burgmer
 
Karlsruher Entwicklertag 2013 - Webanwendungen mit AngularJS
Karlsruher Entwicklertag 2013 - Webanwendungen mit AngularJSKarlsruher Entwicklertag 2013 - Webanwendungen mit AngularJS
Karlsruher Entwicklertag 2013 - Webanwendungen mit AngularJSPhilipp Burgmer
 
Web Applications with AngularJS
Web Applications with AngularJSWeb Applications with AngularJS
Web Applications with AngularJSPhilipp Burgmer
 

Mehr von Philipp Burgmer (8)

EnterJS 2015 - JavaScript von Morgen schon heute
EnterJS 2015 - JavaScript von Morgen schon heuteEnterJS 2015 - JavaScript von Morgen schon heute
EnterJS 2015 - JavaScript von Morgen schon heute
 
Tutorial: Develop Mobile Applications with AngularJS
Tutorial: Develop Mobile Applications with AngularJSTutorial: Develop Mobile Applications with AngularJS
Tutorial: Develop Mobile Applications with AngularJS
 
Grunt, Gulp & fabs: Build Systems and Development-Workflow for Modern Web-App...
Grunt, Gulp & fabs: Build Systems and Development-Workflow for Modern Web-App...Grunt, Gulp & fabs: Build Systems and Development-Workflow for Modern Web-App...
Grunt, Gulp & fabs: Build Systems and Development-Workflow for Modern Web-App...
 
Legacy WebApps mit AngularJS pimpen
Legacy WebApps mit AngularJS pimpenLegacy WebApps mit AngularJS pimpen
Legacy WebApps mit AngularJS pimpen
 
WJAX 2012 - Web Apps With AngularJS
WJAX 2012 - Web Apps With AngularJSWJAX 2012 - Web Apps With AngularJS
WJAX 2012 - Web Apps With AngularJS
 
JavaMagazin - AngularJS
JavaMagazin - AngularJSJavaMagazin - AngularJS
JavaMagazin - AngularJS
 
Karlsruher Entwicklertag 2013 - Webanwendungen mit AngularJS
Karlsruher Entwicklertag 2013 - Webanwendungen mit AngularJSKarlsruher Entwicklertag 2013 - Webanwendungen mit AngularJS
Karlsruher Entwicklertag 2013 - Webanwendungen mit AngularJS
 
Web Applications with AngularJS
Web Applications with AngularJSWeb Applications with AngularJS
Web Applications with AngularJS
 

Sicherheit in Single-Page-Web-Anwendungen

  • 3. Philipp Burgmer Software-Entwickler, Trainer Fokus: Frontend, Web-Technologien burgmer@w11k.de w11k GmbH Software Design, Entwicklung & Wartung Consulting, Schulungen & Projekt Kickoff Web Anwendungen mit AngularJS Native Rich Clients mit Eclipse RCP ÜBER MICH 3
  • 4. HTTP Frontend Backend Statische Dateien Rohdaten JSON Web API (REST) Business Layer Datenbank Framework HTML + JS + CSS Browser Rich Client im Browser Server liefert statische Dateien für den Client Server bietet API für Daten (REST, WebSocket) (JSON, XML) Backend weis nichts über verwendete Technologien im Client Client weis nichts über verwendete Technologien im Backend Stateful Client, Stateless Backend ARCHITEKTUR VON SPAs 4
  • 5. Datenbanken (SQL | NoSQL) & Backend-Sprache HTTP JavaScript & HTML Historisch betrachten Vieles gewachsen Nicht für heute Verwendung gedacht TECHNOLOGIES 5
  • 6. Öffentlicher und privater Bereich Login -> Session Benutzer-Rollen Grundgedanke: Jeder sichert sich selbst ab Client schütz UI Server schütz Datenzugriffe Jeder schützt seine verwendeten Technologien Alle schützen die Übertragung SICHERHEITSKONZEPT NAIV 6
  • 7. Vorgelagert als extra Seite Anwendung nur mit gültigem Login aufrufbar Nicht eingeloggt: HTTP-Redirect auf Login Eingeloggt: HTTP-Redirect auf Anwendung Weniger Angriffsfläche: Nicht jeder sieht die Anwendung Schnelles Laden der ersten Seite Login als Route in Anwendung Einfacheres Handling Kein Zusätzlicher Request für Benutzer-Daten notwendig LOGIN 7
  • 8. Berechtigungen über Rollen verwalten Bereiche mit Rollen versehen Im UI per Directive An Route / State per resolve BERECHTIGUNGEN VERWALTEN <li match-route="/admin.*" user-role-required="'ADMIN'">1 <a href="#!/admin/overview">Admin</a>2 </li>3 module.config(function($stateProvider, ResolveFunctions) {1 $stateProvider.state('admin', {2 url: '/admin', templateUrl: 'route/admin/admin.html', controller: 'AdminCtrl',3 resolve: { authorized: ResolveFunctions.userRolesRequired('ADMIN') }4 });5 });6 8
  • 9. BERECHTIGUNGEN VERWALTEN angular.module('app').constant('ResolveFunctions', {1 userRolesRequired: function (roles) {2 return /* @ngInject */ function (UserService) {3 return UserService.hasRoles(roles);4 };5 }6 });7 9
  • 10. BERECHTIGUNGEN VERWALTEN angular.module('app').service('UserService', function ($http, $q) {1 return {2 getUser: function () {3 // load user information from server and return promise4 },5 hasRoles: function (roles) {6 // get user then check if user has roles7 // return promise8 }9 };10 })11 10
  • 11. 1. Injection 2. Broken Authentication and Session Management 3. Cross-Site Scripting 4. Insecure Direct Object References 5. Security Misconfiguration 6. Sensitive Data Exposure 7. Missing Function Level Access Control 8. Cross-Site Request Forgery 9. Using Components with Known Vulnerabilities 10. Unvalidated Redirects and Forwards Quelle: OWASP Top10 2013 TOP 10 SICHERHEITSPROBLEME 11
  • 12. The Open Web Application Security Project Non-Profit Organisation Finanziert über Mitgliedsbeiträge und Spenden Existiert seit 2001 Stellt Informationen zu Sicherheitsthemen bereit detaillierte Beschreibungen und Erklärungen gängige Lösungsansätze OWASP 12
  • 13. Benutzereingaben nie trauen Im Backend nie davon ausgehen, dass Request vom Client kommen Verwendete Komponenten auf Security-Updates prüfen Security testen punkspider.org: Suchmaschine für Sicherheitslücken BeEF - The Browser Exploitation Framework: Tool für Penetrationstests OWASP - Vulnerability Scanning Tools GENERELLE GEGENMASSNAHMEN 13
  • 14. Code-Minimierung / -Obfuscating Verwendung von HTTPS Berechtigungen im Client prüfen Eingaben im Client validieren UNZUREICHENDE GEGENMASSNAHMEN 14
  • 16. Java Code um SQL Abfrage zusammen zu bauen URL-Aufruf des Angreifers Ausgeführtes SQL BEISPIEL: SQL statement = "SELECT * FROM users WHERE id = " + request.getParameter("id") + ";"1 http://example.com/user?id=42;UPDATE+USER+SET+TYPE="admin"+WHERE+ID=23;--1 SELECT * FROM users WHERE id = 42; UPDATE USER SET TYPE="admin" WHERE ID=23;--;1 16
  • 17. Daten aus Sprache A werden zu Code in Sprache B Code wird dynamisch an einen Interpreter übergeben Code enthält Benutzereingaben (Formular-Daten, URL-Parameter, ...) Benutzereingaben werden nicht oder unzureichend überprüft An vielen Stellen möglich SQL HTML (z.B. bei Cross-Site-Scripting) Script-Sprachen mit eval-Funktion (JS, PHP) Dynamisches Laden von Code aus Dateien Shell / Command Execution CODE INJECTION 17
  • 18. Manuell am Code Verwendung von Interpretern ausfindig machen Eingaben von Interpretern auf dynamische Teile untersuchen Datenfluss zurückverfolgen (Wo kommen dynamische Teile her?) Automatisiert Code Analyse Tools um Interpreter zu finden Peneration-Test-Tools finden häufig gemachte Fehler SCHWACHSTELLEN FINDEN 18
  • 19. Möglichst wenig Interpreter verwenden, besser APIs Prepared-Statements Stored-Procedures Benutzereingaben nicht vertrauen Kontextuelles Escapen (HTML, JS, SQL) White-Listing GEGENMASSNAHMEN 19
  • 20. Sicherer Java Code um SQL Abfrage zusammen zu bauen BEISPIEL: SQL PreparedStatement pstmt = connection.prepareStatement("SELECT * FROM users WHERE id = ?");1 pstmt.setInt(1, request.getParameter("id"));2 ResultSet rset = pstmt.executeQuery();3 20
  • 21. BROKEN AUTHENTICATION AND SESSION MANAGEMENT
  • 22. Zugangsdaten oder Session können entwendet werden Session kann geklaut werden z.B. Session-ID in der URL, oft bei URL Rewriting Kein Session-Timeout (öffentlicher PC) Vorhersagbare Session IDs Übertragung per unverschlüsselter Kommunikation Cross-Site-Scripting um Cookie zu entwenden SESSION MANAGEMENT 22
  • 23. Passwörter stehen im Klartext in der Datenbank Datenbank wird entwendet Angreifer kann sich als jeder User einloggen Session-ID steht in URL BEISPIELE http://example.com/shoppingcart?sessionid=2685445411 23
  • 24. Login, Logout und Session Managemnt nicht selbst implementieren Bewährte, gut getestete Biblotheken verwenden (OAuth?) Verschlüsselte Kommunikation Keine Passwörte speichern, Hash mit Salt Cross-Site-Scripting verhindern GEGENMASSNAHMEN 24
  • 25. Weniger Zustand im Server -> Bessere Skalierbarkeit Gut: Session = Mapping Session ID -> User ID Besser: keine Session im Backend, Session ID enthält allen Zustand Im Backend benötigter Zustand wird bei jedem Request übertragen HERAUSFORDERUNG STATELESS BACKEND 25
  • 26. Session-ID ist kein Random oder Hash Session-ID enthält Zustand User-ID Login-Timestamp XSRF-Token? Base64 encoded Session-ID wird gegen Manipulation und Nachahmung geschützt Verschlüsselung Signierung Message Authentication Code (z.B. HMAC) Nur auf dem Server bekannt STATEFUL SESSION-ID 26
  • 28. Ausprobieren ... BEISPIEL var source = $('#insecure-input');1 var text = source.val();2 var target = $('#insecure-output');3 target.append(text);4 28
  • 29. Spezielle Art der HTML Injection HTML-Injection wird ausgenutzt um anderen Benutzer Code unterzuschieben Verschiedene Type: Persistent / Non-Persistent, DOM-Based Benutzereingabe wird in HTML ausgegeben Ermöglicht Ausführen von Code Code-Ausführung übermittelt Daten an Angreifen (z.B. Cookies) Code ruft URL auf um Aktion mit Rechten des Benutzers auszuführen CROSS-SITE-SCRIPTING 29
  • 30. Benutzereingaben immer escapen Daten vom Server escapen Sanitizer Biblothek verwenden Kontext beachten in dem Wert verwendet wird GEGENMASSNAHMEN 30
  • 31. Angular escapt alle Data-Bindings automatisch $sanitize Service um sicheres HTML-Subset ausgeben zu können $sce Service um beliebiges HTML aus vertrauenswürdiger Quelle ausgeben zu können Detaillierte Erklärung ANGULARJS 31
  • 32. ANGULARJS BESPIEL <input type="text" ng-model="text"/>1 <div ng-bind="text"></div>2 <div ng-bind-html="text"></div>3 32
  • 34. Aufruf von Business Logik ohne zusätzlichen Schutz XSRF Attacke per XSS BEISPIEL http://example.com/app/transferFunds?amount=1500&destinationAccount=46732432431 <img src="http://example.com/app/transferFunds?amount=1500&destinationAccount=attackersAcct#" width="0" height="0" /> 1 34
  • 35. Angreifer ruft URL mit den Rechten des Benutzers auf Verschiedene Angriffsformen Cross-Site-Scripting Social-Engeneering / Unterschieben einer URL Cookies sind nicht sicher! Auch nicht mit httpOnly und secure Cookies können abgegriffen werden bzw. werden automatisch gesendet CROSS-SITE REQUEST FORGERY 35
  • 36. Login schickt Session-ID als Cookie mit httpOnly und secure Login antwortet mit zusätzliches Token im Header ( X-XSRF-Token ) Token kann nur vom eigenen JS Code aus abgegriffen werden, der den Request gestartet hat Token muss danach vom eigenen Code explizit als Header mitgesendet werden Server vergleicht mitgesendetes Token mit erwartetem GEGENMASSNAHMEN 36
  • 37. HTTP-Interceptor Konzept Interceptor für X-XSRF-Token Speichert Token Arbeitsspeicher Sendet Token bei jedem Request zur gleichen Domain mit Problem: Öffne Link in neuem Tab Server vergibt neues Token wenn gleiche IP ANGULARJS 37