1 Bezpieczeństwo aplikacji .NETMichał Poliszkiewicz Microsoft Professional Developer Days 2004
2 Bezpieczeństwo Bezpieczeństwo jest terminem złożonymProjektowanie, programowanie, wdrażanie Zabezpieczenia sieci, serwerów, bezpieczne aplikacje Konsekwencje złych zabezpieczeń Kradzieże informacji poufnych Kradzież własności intelektualnej „downtime” systemów Strata reputacji firmy / twórców systemów Straty finansowe – reputacja, usuwanie szkód
3 Bezpieczeństwo – punkty atakuSecure by Default Błędna konfiguracja systemów Wady systemów Złe zarządzanie pamięcią Błędy arytmetyczne „cross-site scripting” XSS „SQL injection” Błędy w walidacji Słabości kryptografii … Brak polityki unowocześniania systemów Secure by Design Secure in Deployment
4 .NET Framework Kod zarządzany – CLR nasz Wielki BratZarządzanie pamięcią Walidacja assembly Weryfikacja „type safe” Zarządzanie wykonaniem Gotowa infrastruktura Nowe modele zabezpieczeń Gotowe klasy PKI, szyfrowanie Walidacja System.Security ASP.NET Windows Authentication Forms Authentication Passport
5 Bezpieczeństwo tematyKryptografia Bezpieczna komunikacja Autentykacja Autoryzacja Walidacja Obsługa błędów Zapory Firewall Audyt kodu Monitorowanie działania aplikacji Poprawki Service Packs, fixes … ….
6 Bezpieczeństwo – tematy na dzisiajCAS – Code Access Security Idea Policy Sprawdzanie uprawnień ASP.NET 1.1 Kryptografia Powtórka z kryptografii Niebezpieczeństwa Przechowywanie informacji sekretnych Ukrywanie kodu
7 AGENDA CAS – Code Access Security Kryptografia Ukrywanie kodu IdeaPolicy Sprawdzanie uprawnień ASP.NET 1.1 Kryptografia Powtórka z kryptografii Niebezpieczeństwa Przechowywanie informacji sekretnych Ukrywanie kodu
8 Bezpieczeństwo – CAS, RBSDwa nowe mechanizmy zabezpieczeń - Code Access Security - Role Based Security Dwa sposoby konfiguracji - Deklaratywny (atrybuty) - Programowy CAS Policy Grupowanie uprawnień „Permission Sets” Grupowanie assemblies „Code Groups” Warunek członkowstwa Referencja do PermissionSet 1 3 System.Security.Permissions Przydzielane do assembly podczas jego wgrywania Określają m.in. uprawnienia do: - Dostępu do systemu plików - Dostępu do zmiennych systemowych - Wywoływania kodu natywnego - Dostępu do Isolated Storage - Dostępu do zasobów sieciowych - … Wypadkowy zbiór uprawnień jest sumą wszystkich uprawnień wynikających z członkostwa w poszczególnych grupach 2 4
9 Policy – definiowanie zasadAll Code Nothing PermissionSets Zone: My Computer Nothing Full Trust SN: e1334ad4bd3rc113 Intranet Full Trust Zone: Intranet Same Site Access Intranet Full Trust All Code Same Site Access Evidence URL: //search Full Trust Nothing SN: b2690aecbd60c3ac StrongName: b2690aecbd60c3ac FullTrust
10 Konfiguracja CAS – definiowanie Policy
11 Sprawdzanie przydzielonych uprawnieńCall Stack Demand Mechanizm wymagania uprawnień do wykonania kodu Stack Walk Sprawdzanie łańcucha odwołań Assert Zapewnienie dostępu do zasobów dla funkcji wołającej Jakieś Assembly Grant: ReadFile Call CzytajPlik() Moje Assembly Grant: ReadFile Call ReadFile() ReadFile Demand .NET Framework Assembly Unmanaged Asset Win32 API Grant: Unmanaged
12 Wymaganie uprawnień - programowoFileIOPermission filePerm = new FileIOPermission( FileIOPermissionAccess.Read, "C:\\temp.txt"); try { filePerm.Demand(); // Code to access file goes here } Catch (SecurityException e) // if demand fails, this code is executed Wymaganie uprawnia czytania z pliku C:\\temp.txt „Stack walk” – jeżeli uprawnienia zabraknie, zostanie wyrzucony wyjątek
13 Wymaganie uprawnień - deklaratywnieUżycie atrybutów Informacja zawarta w metadata Jak łapać wyjątek SecurityException Tylko poziom metody i całego assembly [FileIOPermission(SecurityAction.Demand, Read= "C:\\temp.txt")] public string ReadTempFile() { // Code to read file goes here }
14 ASP.NET 1.1 nie musi równać się FullTrust
15 Sandboxing w aplikacjach ASP.NETUprzywilejowany kod opakowany w „Wrapper Assemble” Assert na wybranych uprawnieniach „Wrapper assembly” umieszczone w GACu Atrybut AllowPartiallyTrustedCallersAttribute
16 AGENDA CAS – Code Access Security Kryptografia Ukrywanie kodu IdeaPolicy Sprawdzanie uprawnień ASP.NET 1.1 Kryptografia Powtórka z kryptografii Niebezpieczeństwa Przechowywanie informacji sekretnych Ukrywanie kodu
17 Powtórka z kryptografiiKryptografia – dziedzina wiedzy Cele: Poufność: Ochrona przed dostępem do danych przez osoby / procesy nieupoważnione. Integralność danych: Ochrona przed zmianą danych przez osoby /procesy nieupoważnione. Uwierzytelnienie: Weryfikacja pochodzenia danych
18 Powtórka z kryptografiiZadania Opis Szyfrowanie Symetryczne Szyfrowanie kluczem symetrycznym Szyfrowanie asymetryczne Szyfrowanie kluczem publicznym / prywatnym „Hashing” Kodowanie mieszające Mapowanie długich łańcuchów danych na krótkie łańcuchy, o ustalonej długości – tzw. „hash’e” Podpis cyfrowy „Hashing” danych i szyfrowanie kluczem prywatnym .NET Framework - System.Security.Cryptography
19 Szyfrowanie symetryczneSzybkie i wydajne średnio ~1000x w porównaniu do asymetrycznego Problem z bezpieczną wymianą kluczy DES, Triple DES, AES (Rijndael), IDEA, RC2, RC4 Dane Szyfrowanie Deszyfrowanie Klucz prywatny jest znany nadawcy i odbiorcy
20 Algorytm symetryczny Generacja klucza SaltGeneracja losowego łańcucha szumu – „Salt” Stworzenie klucza na podstawie wygenerowanego łańcucha i hasła dostarczonego przez użytkownika Szyfrowanie algorytmem symetrycznym przy wykorzystaniu wygenerowanego klucza Niezaszyfrowany łańcuch „salt” i IV w wyjściowym strumieniu danych Odszyfrowywanie algorytmem symetrycznym przy wykorzystaniu tego samego klucza Regeneracja klucza na podstawie łańcucha „salt” Wykorzystanie wektora IV Salt Initialization Vector Encrypted Data
21 DEMO Szyfrowanie symetryczne - Rijndael
22 Szyfrowanie asymetryczneSzyf. – kl. publiczny Szyf. – kl. prywatny Bezpieczne, ale wolne RSA, Diffie-Helman, DSA Deszyfr. – kl prywatny Deszyfr. – kl publiczny Szyfrowanie przez B – poufność informacji B Użytkownik B Użytkownik A Klucz prywatny Klucz publiczny Klucz publiczny Szyfrowanie przez A – potwierdzenie tożsamości A
23 Algorytm asymetrycznyKlasy implementujące algorytmy: RSACryptoServiceProvider DSACryptoServiceProvider RSACryptoServiceProvider rsaAlgorithm = new RSACryptoServiceProvider(); Dostarczenie parametrów RSAParameters rsaKeyInfo = new RSAParameters(); rsaKeyInfo.Modulus = PublicKey; rsaKeyInfo.Exponent = Exponent; rsaAlgorithm.ImportParameters(rsaKeyInfo); Szyfrowanie / Deszyfrowanie
24 Niebezpieczeństwa Słabe punkty kryptografiiImplementacja własny algorytm - nie! Implementacja znanego algorytmu – nie! Klucze Problem ograniczenia dostępności Czas życia Procedury awaryjne – klucz staje się dostępny Długie klucze – TAK TAK TAK! Nie wywarzajmy otwartych drzwi!!! CryptoAPI, CAPICOM, i System.Security.Cryptography - tak DPAPI do przechowywania wiadomości poufnych - tak SSL/TLS - tak
25 Zarządzanie informacjami poufnymi3 drogi Ukrywanie Prawa dostępu Szyfrowanie Łączmy rozwiązania ACL na zaszyfrowanych danych Ukryty klucz - OS LSA – nie LSAStorePrivateData, LSARetrievePrivateData DPAPI – tak CryptProtectData CryptUnprotectData .NET - P/Invoke 1 3 Unikajmy problemu Hashing WIS Smart card 2
26 AGENDA CAS – Code Access Security Kryptografia Ukrywanie kodu IdeaPolicy Sprawdzanie uprawnień ASP.NET 1.1 Kryptografia Powtórka z kryptografii Niebezpieczeństwa Przechowywanie informacji sekretnych Ukrywanie kodu
27 Ukrywanie kodu Dekompilacja /.NET i JavaNiebezpieczeństwa dekompilacji Łatwe wyszukiwanie dziur w oprogramowaniu Wykradanie pomysłów i algorytmów Łamanie zabezpieczeń Obfuskowanie Zmiany nazw klas, metod i obiektów „overload induction” Usuwanie nieistotnych metadanych Szyfrowanie łańcuchów Zaciemnianie przebiegu programu Zmniejszanie wielkości programów
28 DEMO Ukrywanie kodu – VS NET 2003 i Dotfuscator
29 Więcej informacji Strony internetowe Patterns and Practices Guides Patterns and Practices Guides Building Secure ASP.NET Applications Improving Web Application Security: Threats and Countermeasures Książki Bezpieczny kod Michael Howard and David LeBlanc, published by Microsoft Press Tworzenie Bezpiecznych Aplikacji Microsoft ASP.NET J.D. Meier, Alex Mackman, Michael Dunner, and Srinath Vasireddy Grupy dyskusujne microsoft.public.dotnet.security microsoft.public.sqlserver.security
30