Bezpieczeństwo nowoczesnych aplikacji internetowych

Transkrypt

Bezpieczeństwo nowoczesnych aplikacji internetowych
Bezpieczeństwo
Gospodarka, finanse, administracja, wojsko, rozrywka:
nowoczesnych aplikacji
BitLock, BitCoins, Smile-to-Pay
Cloud, Internet of Things
internetowych
Augmented Reality
pojazdy autonomiczne
inteligentne tworzywa
dr inż. Michał Szychowiak
http://www.cs.put.poznan.pl/mszychowiak
© dr inż. Michał Szychowiak
Web
Bezpieczeństwo nowoczesnych aplikacji internetowych
2
Bezpieczeństwo nowoczesnych aplikacji internetowych
4
Web jako platforma operacyjna
Content providers, social networks, game platforms
Cloud
Facebook
CloudOS
Google+
Joli OS
MySpace
ZeroPC
Instagram
xOS
Netvibes
mobile: Chrome OS, Firefox OS
YouTube
in browser: ZimDesk, iSpaces, SilveOS
Digg
Steam
© dr inż. Michał Szychowiak
Bezpieczeństwo nowoczesnych aplikacji internetowych
3
© dr inż. Michał Szychowiak
Technologie
HTML, XML, XHTML, FBML, JavaScript, JSON, JSONP, E4X
ŚRODOWISKO WYKONAWCZE
HTTP, HTTPS, SOAP, XML-RPC
RIA (Rich Internet Applications): Ajax, Flash
frameworks: jQuery, Dojo, MooTools, WebGL, GWT, Adobe Flex, ....
SOA (Service-Oriented Architecture)
Web Services
REST
Bezpieczeństwo nowoczesnych aplikacji internetowych
© dr inż. Michał Szychowiak
5
Technologia stara i dobrze znana?
<img
src=obrazek.png
© dr inż. Michał Szychowiak
© dr inż. Michał Szychowiak
Bezpieczeństwo nowoczesnych aplikacji internetowych
6
Technologia stara i dobrze znana?
title="Game on"
class=gui_img>
Bezpieczeństwo nowoczesnych aplikacji internetowych
<img
7
src=obrazek.png?parametr=">Game on">
© dr inż. Michał Szychowiak
Bezpieczeństwo nowoczesnych aplikacji internetowych
8
Encje
Nowe encje nazwane
nazwane: np. &gt;
definiowane dyrektywą <!ENTITY>
kod ASCII (lub UTF): np. &#62; &#x3E;
parsowane w kodzie strony
oraz w adresach URL !
– co skutkuje możliwością ataku XXE (External XML Entity)
<img src="http&#x3A;//serwer.org/obrazek.png">
<a href="javascript&#x3A;alert(1)">
<?xml version="1.0"?>
<!DOCTYPE test [
<!ENTITY xxe SYSTEM "file:///etc/passwd">
]>
<atack>&xxe;</atack>
© dr inż. Michał Szychowiak
Bezpieczeństwo nowoczesnych aplikacji internetowych
9
Encje nie są parsowane w bloku <script>
Bezpieczeństwo nowoczesnych aplikacji internetowych 10
© dr inż. Michał Szychowiak
Ale w XHTML <script> nie zmienia trybu parsowania
<script>
<script>
parametr='Tekst &#x27;+alert(1);';
parametr='Tekst &#x27;+alert(1);';
...
...
</script>
</script>
apostrof !
© dr inż. Michał Szychowiak
Bezpieczeństwo nowoczesnych aplikacji internetowych 11
© dr inż. Michał Szychowiak
Bezpieczeństwo nowoczesnych aplikacji internetowych 12
All input is evil!
Niejednorodność zachowania przeglądarek
zakoduj / podmień wszelkie potencjalnie niebezpieczne znaki
(np. ' " , ; / 0x00–0x1F) zanim je wykorzystasz (prześlesz dalej)
niestandardowe zachowanie utrudnia kontrolę
Content-Disposition: attachment; filename="evil_file.exe;.txt"
w nazwach plików (polu Content-Disposition) zamień na np. : _
narzędzia kontroli pobierania uznają to za plik .txt,
ale np. IE przytnie nazwę do ‘;’
pola Location, Redirect – niebezpieczny jest ;
znaki niełacińkie (diakrytyzowane) koduj % lub wg. RFC 2047, RFC 2231
w ciasteczkach wszystkie w/w znaki są niebezpieczne – najlepiej kodować
base64
również popularne dokładanie „bezpiecznego” rozszerzenia do
pobrań nic tu nie da
filtruj adresy URL i najlepiej dopuszczaj tylko (zamieniaj na) bezwzględne
nigdy nie zakładaj, że coś zostanie zakodowane bo tak nakazuje standard
Bezpieczeństwo nowoczesnych aplikacji internetowych 13
© dr inż. Michał Szychowiak
© dr inż. Michał Szychowiak
Bezpieczeństwo nowoczesnych aplikacji internetowych 14
Ogromne możliwości
Problemy z kodowaniem adresu
pełny dostęp do DOM (z uwzględnieniem SOP)
http://wp.pl&p=123@167772161/
=
?
http://[email protected]@o2.pl/
=
?
document.body.children[4].children[0].style.color = "red";
document.images[7].src = "picture.jpg";
document.getElementsByTagName("input")[2].value = "Hello";
http://wp.pl / evil.org/
=
?
document.getElementById("output").innerHTML = "Hello<br>";
frames[2].document.forms[1].pole1.value= "Hello";
top.location.path = "/new/page2.html";
\338
var window_handle = window.open("", "window_name");
© dr inż. Michał Szychowiak
Bezpieczeństwo nowoczesnych aplikacji internetowych 15
© dr inż. Michał Szychowiak
Bezpieczeństwo nowoczesnych aplikacji internetowych 16
Ogromne możliwości
Sposoby dołączania kodu
przesłonięcia nazw
<script> ... </script>
<script scr=... >
<script>
eval = alert;
...
eval("Hello World!");
</script>
javascript:
onLoad=...
onClick=...
onError=...
eval(...)
setTimeout(...) setInterval(...)
expression(...)
© dr inż. Michał Szychowiak
Bezpieczeństwo nowoczesnych aplikacji internetowych 17
© dr inż. Michał Szychowiak
Bezpieczeństwo nowoczesnych aplikacji internetowych 18
Sposoby dołączania kodu
wieloetapowe parsowanie kodu
Analiza kodu
<div onClick="setTimeout('fun(\'" + dane + "\')', 1000)">
© dr inż. Michał Szychowiak
Bezpieczeństwo nowoczesnych aplikacji internetowych 19
obfuscation, np. JScript.Encode
© dr inż. Michał Szychowiak
Bezpieczeństwo nowoczesnych aplikacji internetowych 20
Wykrywanie zagrożeń
Wykrywanie zagrożeń
automatyczne
samodzielne
Cross-Site Scripting (XSS) / Remote File Inclusion (RFI)
do parsowania JSON lepiej używać JSON.parse() zamiast eval()
Cross-Site Cooking (XSC)
przy dynamicznym tworzeniu kodu wystrzegać się danych pozyskanych
z zewnątrz
szczególnie funkcja eval()
oczywiście równie niebezpieczna jest setTimeout()
...
np. w przyp. HTML używać tylko bezpiecznych właściwości
(innerText, textContent) i metod (createTextNode(),
createElement(), appendChild())
unikać innerHTML czy document.write()
© dr inż. Michał Szychowiak
Bezpieczeństwo nowoczesnych aplikacji internetowych 21
© dr inż. Michał Szychowiak
Bezpieczeństwo nowoczesnych aplikacji internetowych 22
Same-Origin Policy
Caja/Cajita
narzędzie Google do „przepisywania” kodu JavaScript
Dokument źródłowy
Docelowy zasób
IE
inne
w celu zautomatyzowanego usunięcia niektórych podatności
i zamknięcia aplikacji w wirtualnej piaskownicy (iFrame)
http://foo.bar.com/a
http://foo.bar.com/b


Google Sites, Google Apps Script
http://foo.bar.com/...
http://www.foo.bar.com/...


http://foo.bar.com/...
https://foo.bar.com/...


http://foo.bar.com:8080/...
http://foo.bar.com/...


wcześniej też MySpace i Yahoo!
podobny projekt dla języka Java: Joe-E
© dr inż. Michał Szychowiak
Bezpieczeństwo nowoczesnych aplikacji internetowych 23
© dr inż. Michał Szychowiak
Bezpieczeństwo nowoczesnych aplikacji internetowych 24
SOP i postMessage()
rozluźnienie SOP
postMessage(...) wysyła komunikat tekstowy do innego okna
przy czym pozwala zdefiniować listę dozwolonych odbiorców
document.domain
document.domain = "bar.com"
Dokument źródłowy
http://foo.bar.com/...
Docelowy zasób
IE
inne
http://login.bar.com/...


uwaga: otwiera SOP na wszystkie ∗.bar.com !
w szczególności katastrofalne będzie document.domain=".com"
© dr inż. Michał Szychowiak
Bezpieczeństwo nowoczesnych aplikacji internetowych 25
SOP i postMessage()
parent.postMessage("game=3", "https://foo.bar.com");
addEventListener("message", game_level, false);
...
function game_level(msg) {
if (msg.origin == "https://login.bar.com") {
...
}
}
© dr inż. Michał Szychowiak
Bezpieczeństwo nowoczesnych aplikacji internetowych 26
SOP i XMLHttpRequest
rozluźnienie SOP
postMessage(...) wysyła komunikat tekstowy do innego okna
przy czym pozwala zdefiniować listę dozwolonych odbiorców
document.domain ignorowane
var req = new XMLHttpRequest();
req.open('GET', 'http://foo.bar.com/foo.php?x=1', false);
req.send(null);
parent.postMessage("game=3", "https://foo.bar.com");
addEventListener("message", game_level, false);
...
function game_level(msg) {
if (msg.origin.indexOf(".bar.com") != -1 {
...
}
}
© dr inż. Michał Szychowiak
Bezpieczeństwo nowoczesnych aplikacji internetowych 27
GET /foo.php?x=1 HTTP/1.0
Host: foo.bar.com
Origin: http://funnygames.com
żądanie jest wysyłane, ale SOP nie pozwoli przeczytać odpowiedzi
chyba że serwer skorzysta z CORS
© dr inż. Michał Szychowiak
Bezpieczeństwo nowoczesnych aplikacji internetowych 28
Cross-Origin Resource Sharing
SOP i XMLHttpRequest
dopuszczalne nagłówki:
HTTP/1.0 200 OK
...
Access-Control-Allow-Origin: http://funnygames.com
Access-Control-Allow-Methods: POST, GET
...
Content-Type
Content-Language
Last-Modified
Expires
Cache-Control
Pragma
...
uwaga na samobójcze Access-Control-Allow-Origin: ∗
stąd popularna stała się metoda weryfikacji pochodzenia:
X-Custom
© dr inż. Michał Szychowiak
Bezpieczeństwo nowoczesnych aplikacji internetowych 29
Podstawowe zagrożenie – DNS rebinding
Bezpieczeństwo nowoczesnych aplikacji internetowych 30
iFrames
atakujący kontroluje serwer DNS swojej domeny, np. gamecrack.com
strona / aplikacja nawiguje do witryny gamecrack.com
i dostaje adres IP z krótkim czasem TTL
z witryny pobiera złośliwy skrypt, który chce zaatakować inną
lokalizację, np. funnygames.com
oczywiście SOP zabroni ...
chyba że skrypt odwoła się do gamecrack.com, a kontrolowany serwer
DNS zwróci tym razem adres IP celu (funnygames.com lub np. adres z sieci
wewnętrznej ofiary)
© dr inż. Michał Szychowiak
© dr inż. Michał Szychowiak
Bezpieczeństwo nowoczesnych aplikacji internetowych 31
domyślna reguła ramek potomnych:
ramki mogą nawigować między sobą tylko jeśli „pochodzą” (SOP) od
wspólnego przodka
nie wyklucza to wszystkich „międzyramkowych” zagrożeń
(m.in. overlay iFrames, opaque iFrames, clickjacking, UI redressing)
dodatkowe nagłówki HTTP:
X_Frame-Options: same-origin
X_Frame-Options: deny
ramki w piaskownicy:
<iframe src="..." sandbox="allow-same-origin"></iframe>;
© dr inż. Michał Szychowiak
Bezpieczeństwo nowoczesnych aplikacji internetowych 32
Przydatne nagłówki HTTP
WTYCZKI
X-XSS-Protection: 1; mode=block
X-Frame-Options: deny
X-Frame-Options: allow-from: foo.bar.com
Adobe / Shockwave Flash
Microsoft Silverlight
Content-Security-Policy: default-src 'self';
script-src https://∗.bar.com https://mi6.mil.uk;
font-src https://fonts.bar.com;
frame-src https://login.bar.com;
img-src ...; media-src ...; object-src ...; ...
© dr inż. Michał Szychowiak
Bezpieczeństwo nowoczesnych aplikacji internetowych 33
Java
© dr inż. Michał Szychowiak
Bezpieczeństwo nowoczesnych aplikacji internetowych 34
Wtyczki
wywołania
Flash i Action Script
<object data= ...>
ActionScript wywodzi się z JavaScript
<embed src= ...>
stąd duże podobieństwo pw. bezpieczeństwa
np.:
dodatkowa funkcjonalność = dodatkowe zagrożenia, np. full screen
<object data="game.swf"
type="application/x-shockwave-flash">
<param name="param1" value="value1">
<param name="param2" value="value2">
...
</object>
Content-Type: ignorowane, choć nie zawsze, co rodzi problemy
© dr inż. Michał Szychowiak
Bezpieczeństwo nowoczesnych aplikacji internetowych 35
możliwość nawigacji w oknach przeglądarki
(getURL(), navigateToURL())
wewnętrzny uproszczony parser HTML – możliwe przypisanie kodu
(TextField.htmlText, TextArea.htmlText)
– nie filtrowane daje potencjalną szansę na wstrzyknięcie
np. złośliwych łączy
© dr inż. Michał Szychowiak
Bezpieczeństwo nowoczesnych aplikacji internetowych 36
Flash i Action Script
Flash i Action Script
własny model polityki SOP
własny model polityki SOP
aplikacje Flash pobrane z funnygames.com otrzymują uprawnienia
(w tym ciasteczka) do funnygames.com
nawet gdy są osadzone na stronie gamecrack.com
metoda Security.allowDomain("funnygames.com")
uwaga na Security.allowDomain("∗") !
parametry znacznika <object> i <embed>
a to strona osadzenia kontroluje sposób wykorzystania aplikacji
<object ... AllowScriptAccess="sameorigin">
<object data="http://funnygames.com/img/avatar.png"
type="application/x-shockwave-flash">
<object ... AllowScriptAccess="never">
<object ... AllowScriptAccess="full">
© dr inż. Michał Szychowiak
Bezpieczeństwo nowoczesnych aplikacji internetowych 37
Flash i Action Script
© dr inż. Michał Szychowiak
Bezpieczeństwo nowoczesnych aplikacji internetowych 38
Flash i Action Script
własny model polityki SOP
własny model polityki SOP
parametry znacznika <object> i <embed>
parametry znacznika <object> i <embed>
<object ... AllowFullScreen="false">
<object ... AllowNetworking="all">
<object ... AllowFullScreen ="true">
<object ... AllowNetworking="internal">
<object ... AllowNetworking="none">
© dr inż. Michał Szychowiak
Bezpieczeństwo nowoczesnych aplikacji internetowych 39
© dr inż. Michał Szychowiak
Bezpieczeństwo nowoczesnych aplikacji internetowych 40
Flash i Action Script
Silverlight
własny model polityki SOP
łudzące podobieństwo do Flash
loadPolicyFile("crossdomain.xml")
crossdomain.xml → clientaccesspolicy.xml
<cross-domain-policy>
<allow-access-from domain="foo.bar.com"/>
<allow-http-request-headers-from domain=" ∗.bar.com"
headers="X-Game-Header,..." />
</cross-domain-policy>
pozbawione wielu problematycznych elementów, np. parsera HTML
brak Security.allowDomain, więc i Security.allowDomain("∗")
za to jest RegisterScriptableObject(...)
dodatkowe metareguły kontroli ładowania polityki
ograniczenie ścieżki do /crossdomain.xml
ograniczenie Content-Type: text/x-cross-domain-policy
© dr inż. Michał Szychowiak
Bezpieczeństwo nowoczesnych aplikacji internetowych 41
Web Services
© dr inż. Michał Szychowiak
Bezpieczeństwo nowoczesnych aplikacji internetowych 42
WEB SERVICES
WebSphere
SOA Suite
Windows Communication Foundation
© dr inż. Michał Szychowiak
Bezpieczeństwo nowoczesnych aplikacji internetowych 43
© dr inż. Michał Szychowiak
Bezpieczeństwo nowoczesnych aplikacji internetowych 44
Architektura SOA
Uwierzytelnianie bezpośrednie
S
C
C
S
HTTP: Basic, Digest, kryptograficzne (np. OAuth, Amazon AWS)
SSL/TLS: X.509
REST-WS:
S
C
Uwierzytelnianie pośrednie
C
HTTP: ciasteczka
SOAP-WS: SAML
S
C
C
Bezpieczeństwo nowoczesnych aplikacji internetowych 45
© dr inż. Michał Szychowiak
Bezpieczeństwo nowoczesnych aplikacji internetowych 46
© dr inż. Michał Szychowiak
PDP
SOAP WS-Security
C
© dr inż. Michał Szychowiak
SOAP
S
Bezpieczeństwo nowoczesnych aplikacji internetowych 47
C
© dr inż. Michał Szychowiak
PEP
SOAP
PEP
S
Bezpieczeństwo nowoczesnych aplikacji internetowych 48

Podobne dokumenty