kleine, feine helferlein: http header und security_feine_helferlein_http_header...–...

23
Dirk Wetter Kleine, feine Helferlein: HTTP Header und Security Dirk Wetter Kleine, feine Helferlein: HTTP Header und Security Folien- Lizenz:

Upload: others

Post on 02-Feb-2020

5 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Kleine, feine Helferlein: HTTP Header und Security_feine_Helferlein_HTTP_Header...– ZertifikatPinning, HPKP – Weist den Browser an, im Zeitraum maxage (Sekunden) sich das/die Zertifikate

Dirk Wetter

Kleine, feine Helferlein: HTTP Header und Security

Dirk Wetter

Kleine, feine Helferlein: HTTP Header und Security

Folien­Lizenz:

Page 2: Kleine, feine Helferlein: HTTP Header und Security_feine_Helferlein_HTTP_Header...– ZertifikatPinning, HPKP – Weist den Browser an, im Zeitraum maxage (Sekunden) sich das/die Zertifikate

About Me

• Einzelunternehmer– Beratung Web­/Sicherheit (http://drwetter.eu/neu/)

• Überprüfen / Absichern / Beraten+Schulen

• Ehrenamt, zuviel ;­)– OWASP AppSec Research 2013– German OWASP Day 2012, 2014– OWASP­u.a. Programmkomitees– GUUG (ggw. Interimsvorstandsvorsitzender)

Page 3: Kleine, feine Helferlein: HTTP Header und Security_feine_Helferlein_HTTP_Header...– ZertifikatPinning, HPKP – Weist den Browser an, im Zeitraum maxage (Sekunden) sich das/die Zertifikate

Kleine, feine Helferlein: HTTP Header und Security

Agenda

• Was ist das?• Sicherheitsrelevanz?• Welche

– Theorie– Praxis

Page 4: Kleine, feine Helferlein: HTTP Header und Security_feine_Helferlein_HTTP_Header...– ZertifikatPinning, HPKP – Weist den Browser an, im Zeitraum maxage (Sekunden) sich das/die Zertifikate

Was ist das?

• Anweisung: Browser– Direkt was zu tun (30x, Keep­Alive)– Indirekt was zu tun oder zu lassen

• Seite framen/nicht, Cookie, Caching etc

– Darstellungsebene• Content­Type/Encoding, Compression, ...• Skripte

• Redundante Informationen– Server, weitere Komponenten– Applikation / Framework

• Nicht redundante Informationen– Serverzeit

Page 5: Kleine, feine Helferlein: HTTP Header und Security_feine_Helferlein_HTTP_Header...– ZertifikatPinning, HPKP – Weist den Browser an, im Zeitraum maxage (Sekunden) sich das/die Zertifikate

Was ist das? / Beispiele

myprompt |0% curl ­Lis php.net | head ­20                                                                                                                            HTTP/1.1 200 OKServer: nginx/1.6.2Date: Mon, 27 Oct 2014 11:08:44 GMTContent­Type: text/html; charset=utf­8Transfer­Encoding: chunkedConnection: keep­aliveX­Powered­By: PHP/5.5.11­2Last­Modified: Mon, 27 Oct 2014 18:01:40 GMTContent­language: enX­Frame­Options: SAMEORIGINSet­Cookie: COUNTRY=NA%2C2001%7A6f8%3A1d37%3A10%3A%312; expires=Mon, 03­Nov­2014 11:08:44 GMT; Max­Age=604800; path=/; domain=.php.netSet­Cookie: LAST_NEWS=1414408124; expires=Tue, 27­Oct­2015 11:08:44 GMT; Max­Age=31536000; path=/; domain=.php.netLink: <http://php.net/index>; rel=shorturlVary: Accept­Encoding

Page 6: Kleine, feine Helferlein: HTTP Header und Security_feine_Helferlein_HTTP_Header...– ZertifikatPinning, HPKP – Weist den Browser an, im Zeitraum maxage (Sekunden) sich das/die Zertifikate

Sicherheitsrelevanz

• Banner – Server, Applikation, Framework

• Software selber und Versionsnummer– Manchmal interne Infos (z.B. IP­Adressen)

• F5 BigIP­Cookie, Netweaver­Cluster, andere Cluster• Vorsicht: Notwendigkeit!

– Disclaimer: Obscurity & Security• Anekdote

• Cookie– Pfad, Domain, Gültigkeit, Secure, HTTPOnly

• Caching

Page 7: Kleine, feine Helferlein: HTTP Header und Security_feine_Helferlein_HTTP_Header...– ZertifikatPinning, HPKP – Weist den Browser an, im Zeitraum maxage (Sekunden) sich das/die Zertifikate

  Java

• Cookie.setHttpOnly(); • Cookie.setSecure(boolean); • HttpServletResponse.setHeader• ..

 PHP• Header();• HttpResponse::setHeader()• ...

...

• Prinzipiell 4 Stellen: 

– Applikation     

– Application Server{server,web}.xml, web.config, php.ini etc.

– Webserver        Praxisteil

– Reverse Proxy, WAF 

Wo setzen/entfernen?

Page 8: Kleine, feine Helferlein: HTTP Header und Security_feine_Helferlein_HTTP_Header...– ZertifikatPinning, HPKP – Weist den Browser an, im Zeitraum maxage (Sekunden) sich das/die Zertifikate

• Wo soll man setzen?– Je nach Kontext

– Applikationsspezifische Einstellungen  möglichst nahe Applikation (Cookie+Caching)

– Je weiter Richtung Webserver / Reverse­Proxy: Härtungen

Wo setzen/entfernen?

Page 9: Kleine, feine Helferlein: HTTP Header und Security_feine_Helferlein_HTTP_Header...– ZertifikatPinning, HPKP – Weist den Browser an, im Zeitraum maxage (Sekunden) sich das/die Zertifikate

• Cookie­Attribute/Flags– HttpOnly

• Zugriff(JavaScript­Methoden)  Keks – Secure

• Keine Übertragung via HTTP• SOP?!• cookie clobbering, mixed content

Theorie

Page 10: Kleine, feine Helferlein: HTTP Header und Security_feine_Helferlein_HTTP_Header...– ZertifikatPinning, HPKP – Weist den Browser an, im Zeitraum maxage (Sekunden) sich das/die Zertifikate

• Transportverschlüsselung: HSTS– Gegen SSL stripping– Strict­Transport­Security

Weist den Browser an, im Zeitraum max­age   niemals diese Seite (ggf. inkl. Subdomains: includeSubDomains) unverschlüsselt zu besuchen

– Zeit in Sekunden• Mindestens halbes Jahr: 3600 • 24 •183

– TOFU / preload: http://hstspreload.appspot.com/

 Demo: https://testssl.sh

Theorie

Page 11: Kleine, feine Helferlein: HTTP Header und Security_feine_Helferlein_HTTP_Header...– ZertifikatPinning, HPKP – Weist den Browser an, im Zeitraum maxage (Sekunden) sich das/die Zertifikate

• Neuer Draft:  Public­Key­Pins(­Report­Only)– Zertifikat­Pinning, HPKP– Weist den Browser an, im Zeitraum max­age (Sekunden) sich das/die Zertifikate zu 

merken und derweil kein anderes zu akzeptieren – IncludeSubDomains

– Report­uri

– pin­sha1=, pin­sha256= ; (mehrere)

– Goodbye (un)lawful interception  ;­)• Ok, mit Einschränkungen....• TOFU

– Verfügbarkeitsproblem? • Remember: Heartbleed?

 https://slo­tech.com/

Theorie

Page 12: Kleine, feine Helferlein: HTTP Header und Security_feine_Helferlein_HTTP_Header...– ZertifikatPinning, HPKP – Weist den Browser an, im Zeitraum maxage (Sekunden) sich das/die Zertifikate

Alles, was nun kommt: per „Seite“

Theorie

Page 13: Kleine, feine Helferlein: HTTP Header und Security_feine_Helferlein_HTTP_Header...– ZertifikatPinning, HPKP – Weist den Browser an, im Zeitraum maxage (Sekunden) sich das/die Zertifikate

• X­Content­Type­Options– Ursprünglich zur Absicherung alter IE (<8)

• Misstrauten Content­Type Header komplett• Alle anderen Browser sind strikter

– Grenzfälle, wo andere Browser trotzdem klüger sein wollen• Unterschieben von Script­Code 

– Bild­XSS etc– Zuvor hochgeladene Dateien (HTML) 

• Mime­Sniffing: Ähnlich Unix Command: file (oder diverse MIME­Bibliotheken mit Magic)

• Option: nosniff• Nur Chrome/Webkit und IE >=9

– BTW  falls runterladen besser (@Developer_:• Content­Disposition: attachment   

Theorie

Page 14: Kleine, feine Helferlein: HTTP Header und Security_feine_Helferlein_HTTP_Header...– ZertifikatPinning, HPKP – Weist den Browser an, im Zeitraum maxage (Sekunden) sich das/die Zertifikate

• Clickjacking und Freunde– Schutz gegen Seite framen 

• kein Schutz allerdings gegen div­overlays aka stallowned attacks (Rsnake)

– X­FRAME­OPTIONS• DENY | SAMEORIGIN | ALLOW­FROM uri

– Vorsicht:• Businessgründe fürs Framen• Applikationen (z.B. Typo3­Backend)• Chrome/(Webkit?) pfeift auf ALLOW­FROM

 appsec.eu

Theorie

Page 15: Kleine, feine Helferlein: HTTP Header und Security_feine_Helferlein_HTTP_Header...– ZertifikatPinning, HPKP – Weist den Browser an, im Zeitraum maxage (Sekunden) sich das/die Zertifikate

• XSS, reloaded– X­XSS­Protection

• 0    Aus, i.d.R. Sinnlos  https://www.facebook.com/

• 1    An,  Browser­Engine reinigt ggf.–mode=block 

Besser: Browser­Engine rendert Seite ggf. nicht–report=http://site.com/report

 schön zu wissen: https://www.xing.com/

– Haken: Chrome/Webkit, IE, kein Firefox

Theorie

Page 16: Kleine, feine Helferlein: HTTP Header und Security_feine_Helferlein_HTTP_Header...– ZertifikatPinning, HPKP – Weist den Browser an, im Zeitraum maxage (Sekunden) sich das/die Zertifikate

• XSS, reloaded^2– Content­Security­Policy (+ Artverwandte)

(Content­Security­Policy­Report­Only)• Nicht trivial

– Zusammenspiel Entwicklung, JS­Frameworks, Tracker, Templates, ...

• ~Zwei Teile1. Policy­Direktive (*­src)2. Source List(en)

»Beliebig hintereinander hängen–Direktive+Source Liste: 

» trennen durch Semikolon, falls mehrere

X­Content­Security­Policy (FF < 23)X­WebKit­CSP (Chrome < 25)

Theorie

Page 17: Kleine, feine Helferlein: HTTP Header und Security_feine_Helferlein_HTTP_Header...– ZertifikatPinning, HPKP – Weist den Browser an, im Zeitraum maxage (Sekunden) sich das/die Zertifikate

• XSS, reloaded^2– Content­Security­Policy 

• Policy­Direktive = Browser: Welchen Content darfst du beziehen?

»script­src»img­src»style­src (CSS)»frame­src (umgekehrt zu X­FRAME­OPTIONS)»font­src»media­src (video, audio)»default­src» ...

Theorie

Page 18: Kleine, feine Helferlein: HTTP Header und Security_feine_Helferlein_HTTP_Header...– ZertifikatPinning, HPKP – Weist den Browser an, im Zeitraum maxage (Sekunden) sich das/die Zertifikate

• XSS, reloaded^2– Content­Security­Policy 

• Teil 2: Source­List=Browser: Was darfst du mit dem Content machen

–'none'–'self'–'unsafe­inline'   VORSICHT: Standard gegen XSS –'unsafe­eval'    VORSICHT! –uri

» „Trick“ nur  https:»* VORSICHT

• Teil 3: report­uri 

 https://www.github.com

• Support: Gut, IE 10 und 11 allenfalls lückenhaft• Shameless plug: OWASP TT 2013

Theorie

Page 19: Kleine, feine Helferlein: HTTP Header und Security_feine_Helferlein_HTTP_Header...– ZertifikatPinning, HPKP – Weist den Browser an, im Zeitraum maxage (Sekunden) sich das/die Zertifikate

• CSP v2 – Whitelist scripts (Hash support)

• Inline Code: <script>             notevilstuff         </script>

• Content­Security­Policy: script­src 'sha256­<base64 encoded hash(“notevilstuff“))>';

– Nonce • Inline Code: <script nonce='n0n53'>               notevilstuff          </script>

• Content­Security­Policy: script­src 'nonce­n0n53';

Theorie

Page 20: Kleine, feine Helferlein: HTTP Header und Security_feine_Helferlein_HTTP_Header...– ZertifikatPinning, HPKP – Weist den Browser an, im Zeitraum maxage (Sekunden) sich das/die Zertifikate

Praxis

• Nur Webserver / Reverse proxy– Apache + nginx– ohne mod_security– Banner im Header

– Zwei Aufgaben1. Informationsminimierung

– X­Powered­By: – Server: SAP NetWeaver Application Server 7.10 / ICM 7.10

2. Zusätzliche Absicherung– Siehe Theorie

Page 21: Kleine, feine Helferlein: HTTP Header und Security_feine_Helferlein_HTTP_Header...– ZertifikatPinning, HPKP – Weist den Browser an, im Zeitraum maxage (Sekunden) sich das/die Zertifikate

• Apache– Basiskonfiguration 

• Banner weg (Fehler und HTTP)– ServerTokens Prod– ServerSignature Off

• php.ini: expose_php=off 

– Sonst / zusätzlich• prompt% a2enmod headers

prompt%

Demo: (Grenzen von mod_headers)

Praxis

Page 22: Kleine, feine Helferlein: HTTP Header und Security_feine_Helferlein_HTTP_Header...– ZertifikatPinning, HPKP – Weist den Browser an, im Zeitraum maxage (Sekunden) sich das/die Zertifikate

• nginx– Basiskonfiguration 

• Banner weg (Fehler und HTTP)– server_tokens off– Php.ini: expose_php=off

– Zusätzlich: Module • ngx_http_headers_module

– add_header• ngx_headers_more

– more_set_headers – more_clear_headers

Demo

Praxis

Page 23: Kleine, feine Helferlein: HTTP Header und Security_feine_Helferlein_HTTP_Header...– ZertifikatPinning, HPKP – Weist den Browser an, im Zeitraum maxage (Sekunden) sich das/die Zertifikate

Pics here CCSA from mysid